]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java
fix (+) fab visible after profile change (activity recreation)
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / activity / MainActivity.java
index 876f8da8c4e60f8f411f4eeba803ba3b5fdbac03..3f71e0a4707cf0f19dd5883b372795d9b6cacc96 100644 (file)
@@ -36,8 +36,8 @@ import android.view.animation.AnimationUtils;
 import android.widget.LinearLayout;
 import android.widget.ProgressBar;
 import android.widget.TextView;
-import android.widget.Toast;
 
+import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBarDrawerToggle;
 import androidx.appcompat.widget.Toolbar;
 import androidx.core.view.GravityCompat;
@@ -50,6 +50,7 @@ import androidx.recyclerview.widget.RecyclerView;
 import androidx.viewpager.widget.ViewPager;
 
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
+import com.google.android.material.snackbar.Snackbar;
 
 import net.ktnx.mobileledger.R;
 import net.ktnx.mobileledger.async.DbOpQueue;
@@ -184,13 +185,32 @@ public class MainActivity extends ProfileThemedActivity {
             drawer.addDrawerListener(barDrawerToggle);
         }
         barDrawerToggle.syncState();
+        drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
+            @Override
+            public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
+                if (slideOffset > 0.2)
+                    fabHide();
+            }
+            @Override
+            public void onDrawerOpened(@NonNull View drawerView) {
+                fabHide();
+            }
+            @Override
+            public void onDrawerClosed(@NonNull View drawerView) {
+                fabShouldShow();
+            }
+            @Override
+            public void onDrawerStateChanged(int newState) {}
+        });
 
-        TextView ver = drawer.findViewById(R.id.drawer_version_text);
 
         try {
             PackageInfo pi = getApplicationContext().getPackageManager()
                                                     .getPackageInfo(getPackageName(), 0);
-            ver.setText(pi.versionName);
+            ((TextView) findViewById(R.id.nav_upper).findViewById(
+                    R.id.drawer_version_text)).setText(pi.versionName);
+            ((TextView) findViewById(R.id.no_profiles_layout).findViewById(
+                    R.id.drawer_version_text)).setText(pi.versionName);
         }
         catch (Exception e) {
             e.printStackTrace();
@@ -306,7 +326,6 @@ public class MainActivity extends ProfileThemedActivity {
             };
             drawer.addDrawerListener(drawerListener);
         }
-        setupProfile();
     }
     private void scheduleDataRetrievalIfStale(Date lastUpdate) {
         long now = new Date().getTime();
@@ -325,9 +344,13 @@ public class MainActivity extends ProfileThemedActivity {
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1)
             return;
 
+        ShortcutManager sm = getSystemService(ShortcutManager.class);
         List<ShortcutInfo> shortcuts = new ArrayList<>();
         int i = 0;
         for (MobileLedgerProfile p : list) {
+            if (shortcuts.size() >= sm.getMaxShortcutCountPerActivity())
+                break;
+
             if (!p.isPostingPermitted())
                 continue;
 
@@ -351,7 +374,6 @@ public class MainActivity extends ProfileThemedActivity {
             shortcuts.add(si);
             i++;
         }
-        ShortcutManager sm = getSystemService(ShortcutManager.class);
         sm.setDynamicShortcuts(shortcuts);
     }
     private void onProfileListChanged(List<MobileLedgerProfile> newList) {
@@ -359,18 +381,18 @@ public class MainActivity extends ProfileThemedActivity {
             // 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);
+            findViewById(R.id.main_app_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);
+            findViewById(R.id.main_app_layout).setVisibility(View.GONE);
             findViewById(R.id.loading_layout).setVisibility(View.GONE);
             return;
         }
 
-        findViewById(R.id.pager_layout).setVisibility(View.VISIBLE);
+        findViewById(R.id.main_app_layout).setVisibility(View.VISIBLE);
         findViewById(R.id.no_profiles_layout).setVisibility(View.GONE);
         findViewById(R.id.loading_layout).setVisibility(View.GONE);
 
@@ -387,8 +409,6 @@ public class MainActivity extends ProfileThemedActivity {
      */
     private void onProfileChanged(MobileLedgerProfile profile) {
         boolean haveProfile = profile != null;
-        findViewById(R.id.no_profiles_layout).setVisibility(haveProfile ? View.GONE : View.VISIBLE);
-        findViewById(R.id.pager_layout).setVisibility(haveProfile ? View.VISIBLE : View.VISIBLE);
 
         if (haveProfile)
             setTitle(profile.getName());
@@ -397,20 +417,23 @@ public class MainActivity extends ProfileThemedActivity {
 
         this.profile = profile;
 
-        mProfileListAdapter.notifyDataSetChanged();
-
         int newProfileTheme = haveProfile ? profile.getThemeHue() : -1;
         if (newProfileTheme != Colors.profileThemeId) {
             debug("profiles",
                     String.format(Locale.ENGLISH, "profile theme %d → %d", Colors.profileThemeId,
                             newProfileTheme));
-            MainActivity.this.profileThemeChanged();
             Colors.profileThemeId = newProfileTheme;
+            profileThemeChanged();
             // profileThemeChanged would restart the activity, so no need to reload the
             // data sets below
             return;
         }
 
+        findViewById(R.id.no_profiles_layout).setVisibility(haveProfile ? View.GONE : View.VISIBLE);
+        findViewById(R.id.pager_layout).setVisibility(haveProfile ? View.VISIBLE : View.VISIBLE);
+
+        mProfileListAdapter.notifyDataSetChanged();
+
         drawer.closeDrawers();
 
         Data.transactions.clear();
@@ -426,7 +449,7 @@ public class MainActivity extends ProfileThemedActivity {
                 fab.show();
             }
             else {
-                mToolbar.setSubtitle(R.string.profile_subitlte_read_only);
+                mToolbar.setSubtitle(R.string.profile_subtitle_read_only);
                 fab.hide();
             }
         }
@@ -455,21 +478,14 @@ public class MainActivity extends ProfileThemedActivity {
         scheduleDataRetrievalIfStale(newValue);
     }
     private void profileThemeChanged() {
-        Bundle bundle = new Bundle();
-        onSaveInstanceState(bundle);
-
         storeThemeIdInPrefs(profile.getThemeHue());
 
-        // restart activity to reflect theme change
-        finish();
-
         // un-hook all observed LiveData
         Data.profile.removeObservers(this);
         Data.profiles.removeObservers(this);
         Data.lastUpdateDate.removeObservers(this);
-        Intent intent = new Intent(this, this.getClass());
-        intent.putExtra(BUNDLE_SAVED_STATE, bundle);
-        startActivity(intent);
+
+        recreate();
     }
     private void storeThemeIdInPrefs(int themeId) {
         // store the new theme id in the preferences
@@ -592,8 +608,8 @@ public class MainActivity extends ProfileThemedActivity {
             TransactionListViewModel.scheduleTransactionListReload();
         }
         else
-            Toast.makeText(this, error, Toast.LENGTH_LONG)
-                 .show();
+            Snackbar.make(mViewPager, error, Snackbar.LENGTH_LONG)
+                    .show();
     }
     public void onRetrieveStart() {
         ProgressBar progressBar = findViewById(R.id.transaction_list_progress_bar);
@@ -629,8 +645,10 @@ public class MainActivity extends ProfileThemedActivity {
         }
     }
     public void fabShouldShow() {
-        if ((profile != null) && profile.isPostingPermitted())
+        if ((profile != null) && profile.isPostingPermitted() && !drawer.isOpen())
             fab.show();
+        else
+            fabHide();
     }
     public void fabHide() {
         fab.hide();