]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java
whitespace
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / activity / MainActivity.java
index e43970d229594a7a3377fd25b8ca6f14f6305219..12957e97e9e7c8e02c14e37ba674f40456433a8f 100644 (file)
@@ -18,6 +18,7 @@
 package net.ktnx.mobileledger.ui.activity;
 
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.content.pm.PackageInfo;
 import android.content.pm.ShortcutInfo;
 import android.content.pm.ShortcutManager;
@@ -31,7 +32,6 @@ import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewPropertyAnimator;
-import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
 import android.widget.LinearLayout;
 import android.widget.ProgressBar;
@@ -66,7 +66,6 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
-import java.util.Observer;
 
 import androidx.appcompat.app.ActionBarDrawerToggle;
 import androidx.appcompat.widget.Toolbar;
@@ -85,10 +84,10 @@ public class MainActivity extends ProfileThemedActivity {
     public static final String STATE_CURRENT_PAGE = "current_page";
     public static final String BUNDLE_SAVED_STATE = "bundle_savedState";
     public static final String STATE_ACC_FILTER = "account_filter";
+    private static final String PREF_THEME_ID = "themeId";
     public AccountSummaryFragment mAccountSummaryFragment;
     DrawerLayout drawer;
-    private LinearLayout profileListContainer;
-    private View profileListHeadArrow, profileListHeadMore, profileListHeadCancel;
+    private View profileListHeadMore, profileListHeadCancel, profileListHeadAddProfile;
     private FragmentManager fragmentManager;
     private View bTransactionListCancelDownload;
     private ProgressBar progressBar;
@@ -96,7 +95,6 @@ public class MainActivity extends ProfileThemedActivity {
     private SectionsPagerAdapter mSectionsPagerAdapter;
     private ViewPager mViewPager;
     private FloatingActionButton fab;
-    private boolean profileListExpanded = false;
     private ProfilesRecyclerViewAdapter mProfileListAdapter;
     private int mCurrentPage;
     private String mAccountFilter;
@@ -105,7 +103,6 @@ public class MainActivity extends ProfileThemedActivity {
     private DrawerLayout.SimpleDrawerListener drawerListener;
     private ActionBarDrawerToggle barDrawerToggle;
     private ViewPager.SimpleOnPageChangeListener pageChangeListener;
-    private Observer editingProfilesObserver;
     private MobileLedgerProfile profile;
     @Override
     protected void onStart() {
@@ -134,16 +131,16 @@ public class MainActivity extends ProfileThemedActivity {
         barDrawerToggle = null;
         if (mViewPager != null) mViewPager.removeOnPageChangeListener(pageChangeListener);
         pageChangeListener = null;
-        if (mProfileListAdapter != null)
-            mProfileListAdapter.deleteEditingProfilesObserver(editingProfilesObserver);
-        editingProfilesObserver = null;
         super.onDestroy();
     }
     @Override
     protected void setupProfileColors() {
-        int profileColor = Data.retrieveCurrentThemeIdFromDb();
+        SharedPreferences prefs = getPreferences(MODE_PRIVATE);
+        int profileColor = prefs.getInt(PREF_THEME_ID, -2);
+        if (profileColor == -2) profileColor = Data.retrieveCurrentThemeIdFromDb();
         Colors.setupTheme(this, profileColor);
         Colors.profileThemeId = profileColor;
+        storeThemeIdInPrefs(profileColor);
     }
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -152,12 +149,11 @@ public class MainActivity extends ProfileThemedActivity {
         setContentView(R.layout.activity_main);
 
         fab = findViewById(R.id.btn_add_transaction);
-        profileListContainer = findViewById(R.id.nav_profile_list_container);
-        profileListHeadArrow = findViewById(R.id.nav_profiles_arrow);
         profileListHeadMore = findViewById(R.id.nav_profiles_start_edit);
         profileListHeadCancel = findViewById(R.id.nav_profiles_cancel_edit);
         LinearLayout profileListHeadMoreAndCancel =
                 findViewById(R.id.nav_profile_list_head_buttons);
+        profileListHeadAddProfile = findViewById(R.id.nav_new_profile_button);
         drawer = findViewById(R.id.drawer_layout);
         bTransactionListCancelDownload = findViewById(R.id.transaction_list_cancel_download);
         progressBar = findViewById(R.id.transaction_list_progress_bar);
@@ -253,31 +249,36 @@ public class MainActivity extends ProfileThemedActivity {
         if (mProfileListAdapter == null) mProfileListAdapter = new ProfilesRecyclerViewAdapter();
         root.setAdapter(mProfileListAdapter);
 
-        if (editingProfilesObserver == null) {
-            editingProfilesObserver = (o, arg) -> {
-                if (mProfileListAdapter.isEditingProfiles()) {
-                    profileListHeadMore.setVisibility(View.GONE);
-                    profileListHeadMore
-                            .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_out));
-                    profileListHeadCancel.setVisibility(View.VISIBLE);
-                    profileListHeadCancel
-                            .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in));
+        mProfileListAdapter.editingProfiles.observe(this, newValue -> {
+            if (newValue) {
+                profileListHeadMore.setVisibility(View.GONE);
+                profileListHeadCancel.setVisibility(View.VISIBLE);
+                profileListHeadAddProfile.setVisibility(View.VISIBLE);
+                if (drawer.isDrawerOpen(GravityCompat.START)) {
+                    profileListHeadMore.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_out));
+                    profileListHeadCancel.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_in));
+                    profileListHeadAddProfile.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_in));
                 }
-                else {
-                    profileListHeadCancel.setVisibility(View.GONE);
-                    profileListHeadCancel
-                            .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_out));
-                    profileListHeadMore.setVisibility(View.GONE);
-                    if (profileListExpanded) {
-                        profileListHeadMore.setVisibility(View.VISIBLE);
-                        profileListHeadMore
-                                .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in));
-                    }
-                    else profileListHeadMore.setVisibility(View.GONE);
+            }
+            else {
+                profileListHeadCancel.setVisibility(View.GONE);
+                profileListHeadMore.setVisibility(View.VISIBLE);
+                profileListHeadAddProfile.setVisibility(View.GONE);
+                if (drawer.isDrawerOpen(GravityCompat.START)) {
+                    profileListHeadCancel.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_out));
+                    profileListHeadMore.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_in));
+                    profileListHeadAddProfile.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_out));
                 }
-            };
-            mProfileListAdapter.addEditingProfilesObserver(editingProfilesObserver);
-        }
+            }
+
+            mProfileListAdapter.notifyDataSetChanged();
+        });
 
         LinearLayoutManager llm = new LinearLayoutManager(this);
 
@@ -288,21 +289,22 @@ public class MainActivity extends ProfileThemedActivity {
         profileListHeadCancel.setOnClickListener((v) -> mProfileListAdapter.flipEditingProfiles());
         profileListHeadMoreAndCancel
                 .setOnClickListener((v) -> mProfileListAdapter.flipEditingProfiles());
-
         if (drawerListener == null) {
             drawerListener = new DrawerLayout.SimpleDrawerListener() {
                 @Override
                 public void onDrawerClosed(View drawerView) {
                     super.onDrawerClosed(drawerView);
-                    collapseProfileList();
+                    mProfileListAdapter.setAnimationsEnabled(false);
+                    mProfileListAdapter.editingProfiles.setValue(false);
+                }
+                @Override
+                public void onDrawerOpened(View drawerView) {
+                    super.onDrawerOpened(drawerView);
+                    mProfileListAdapter.setAnimationsEnabled(true);
                 }
             };
             drawer.addDrawerListener(drawerListener);
         }
-
-        findViewById(R.id.nav_profile_list_head_layout)
-                .setOnClickListener(this::navProfilesHeadClicked);
-        findViewById(R.id.nav_profiles_label).setOnClickListener(this::navProfilesHeadClicked);
         setupProfile();
     }
     private void scheduleDataRetrievalIfStale(Date lastUpdate) {
@@ -337,6 +339,14 @@ public class MainActivity extends ProfileThemedActivity {
         sm.setDynamicShortcuts(shortcuts);
     }
     private void onProfileListChanged(List<MobileLedgerProfile> newList) {
+        if (newList == null) {
+            // profiles not yet loaded from DB
+            findViewById(R.id.loading_layout).setVisibility(View.VISIBLE);
+            findViewById(R.id.no_profiles_layout).setVisibility(View.GONE);
+            findViewById(R.id.pager_layout).setVisibility(View.GONE);
+            return;
+        }
+
         if (newList.isEmpty()) {
             findViewById(R.id.no_profiles_layout).setVisibility(View.VISIBLE);
             findViewById(R.id.pager_layout).setVisibility(View.GONE);
@@ -356,7 +366,9 @@ public class MainActivity extends ProfileThemedActivity {
 
         createShortcuts(newList);
     }
-    /** called when the current profile has changed */
+    /**
+     * called when the current profile has changed
+     */
     private void onProfileChanged(MobileLedgerProfile profile) {
         boolean haveProfile = profile != null;
         findViewById(R.id.no_profiles_layout).setVisibility(haveProfile ? View.GONE : View.VISIBLE);
@@ -380,7 +392,6 @@ public class MainActivity extends ProfileThemedActivity {
             // data sets below
             return;
         }
-        collapseProfileList();
 
         drawer.closeDrawers();
 
@@ -427,6 +438,9 @@ public class MainActivity extends ProfileThemedActivity {
     private void profileThemeChanged() {
         Bundle bundle = new Bundle();
         onSaveInstanceState(bundle);
+
+        storeThemeIdInPrefs(profile.getThemeId());
+
         // restart activity to reflect theme change
         finish();
 
@@ -438,6 +452,13 @@ public class MainActivity extends ProfileThemedActivity {
         intent.putExtra(BUNDLE_SAVED_STATE, bundle);
         startActivity(intent);
     }
+    private void storeThemeIdInPrefs(int themeId) {
+        // store the new theme id in the preferences
+        SharedPreferences prefs = getPreferences(MODE_PRIVATE);
+        SharedPreferences.Editor e = prefs.edit();
+        e.putInt(PREF_THEME_ID, themeId);
+        e.apply();
+    }
     public void startEditProfileActivity(MobileLedgerProfile profile) {
         Intent intent = new Intent(this, ProfileDetailActivity.class);
         Bundle args = new Bundle();
@@ -449,7 +470,7 @@ public class MainActivity extends ProfileThemedActivity {
         startActivity(intent, args);
     }
     private void setupProfile() {
-        MLDB.getOption(MLDB.OPT_PROFILE_UUID, null, new GetOptCallback(){
+        MLDB.getOption(MLDB.OPT_PROFILE_UUID, null, new GetOptCallback() {
             @Override
             protected void onResult(String profileUUID) {
                 MobileLedgerProfile startupProfile;
@@ -527,7 +548,9 @@ public class MainActivity extends ProfileThemedActivity {
         }
     }
     public void updateLastUpdateTextFromDB() {
-        long last_update = (profile != null) ? profile.getLongOption(MLDB.OPT_LAST_SCRAPE, 0L) : 0;
+        if (profile == null) return;
+
+        long last_update = profile.getLongOption(MLDB.OPT_LAST_SCRAPE, 0L);
 
         debug("transactions", String.format(Locale.ENGLISH, "Last update = %d", last_update));
         if (last_update == 0) {
@@ -587,75 +610,6 @@ public class MainActivity extends ProfileThemedActivity {
     public void fabHide() {
         fab.hide();
     }
-    public void navProfilesHeadClicked(View view) {
-        if (profileListExpanded) {
-            collapseProfileList();
-        }
-        else {
-            expandProfileList();
-        }
-    }
-    private void expandProfileList() {
-        profileListExpanded = true;
-
-
-        profileListContainer.setVisibility(View.VISIBLE);
-        profileListContainer.startAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_down));
-        profileListHeadArrow.startAnimation(AnimationUtils.loadAnimation(this, R.anim.rotate_180));
-        profileListHeadMore.setVisibility(View.VISIBLE);
-        profileListHeadMore.startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in));
-        final ArrayList<MobileLedgerProfile> profiles = Data.profiles.getValue();
-        findViewById(R.id.nav_profile_list).setMinimumHeight(
-                (int) (getResources().getDimension(R.dimen.thumb_row_height) *
-                       (profiles != null ? profiles.size() : 0)));
-    }
-    private void collapseProfileList() {
-        boolean wasExpanded = profileListExpanded;
-        profileListExpanded = false;
-
-        if (wasExpanded) {
-            final Animation animation = AnimationUtils.loadAnimation(this, R.anim.slide_up);
-            animation.setAnimationListener(new Animation.AnimationListener() {
-                @Override
-                public void onAnimationStart(Animation animation) {
-
-                }
-                @Override
-                public void onAnimationEnd(Animation animation) {
-                    profileListContainer.setVisibility(View.GONE);
-                }
-                @Override
-                public void onAnimationRepeat(Animation animation) {
-
-                }
-            });
-            mProfileListAdapter.stopEditingProfiles();
-
-            profileListContainer.startAnimation(animation);
-            profileListHeadArrow.setRotation(0f);
-            profileListHeadArrow
-                    .startAnimation(AnimationUtils.loadAnimation(this, R.anim.rotate_180_back));
-            final Animation moreAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out);
-            moreAnimation.setAnimationListener(new Animation.AnimationListener() {
-                @Override
-                public void onAnimationStart(Animation animation) {
-                }
-                @Override
-                public void onAnimationEnd(Animation animation) {
-                    profileListHeadMore.setVisibility(View.GONE);
-                }
-                @Override
-                public void onAnimationRepeat(Animation animation) {
-                }
-            });
-            profileListHeadMore.startAnimation(moreAnimation);
-        }
-        else {
-            profileListContainer.setVisibility(View.GONE);
-            profileListHeadArrow.setRotation(0f);
-            profileListHeadMore.setVisibility(View.GONE);
-        }
-    }
     public void onAccountSummaryRowViewClicked(View view) {
         ViewGroup row;
         if (view.getId() == R.id.account_expander) row = (ViewGroup) view.getParent().getParent();