From 5653fcb41fe84048042de550ee227d0e9294853a Mon Sep 17 00:00:00 2001 From: Ammar Githam Date: Sun, 28 Mar 2021 17:42:09 +0900 Subject: [PATCH] Fix last selected tab on activity recreate --- .../instagrabber/activities/MainActivity.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/awais/instagrabber/activities/MainActivity.java b/app/src/main/java/awais/instagrabber/activities/MainActivity.java index 111ec538..50710107 100644 --- a/app/src/main/java/awais/instagrabber/activities/MainActivity.java +++ b/app/src/main/java/awais/instagrabber/activities/MainActivity.java @@ -94,6 +94,7 @@ import static awais.instagrabber.utils.Utils.settingsHelper; public class MainActivity extends BaseLanguageActivity implements FragmentManager.OnBackStackChangedListener { private static final String TAG = "MainActivity"; private static final String FIRST_FRAGMENT_GRAPH_INDEX_KEY = "firstFragmentGraphIndex"; + private static final String LAST_SELECT_NAV_MENU_ID = "lastSelectedNavMenuId"; private ActivityMainBinding binding; private LiveData currentNavControllerLiveData; @@ -105,6 +106,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage private boolean showSearch = true; private Handler suggestionsFetchHandler; private int firstFragmentGraphIndex; + private int lastSelectedNavMenuId; private boolean isActivityCheckerServiceBound = false; private boolean isBackStackEmpty = false; private boolean isLoggedIn; @@ -201,6 +203,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage @Override protected void onSaveInstanceState(@NonNull final Bundle outState) { outState.putString(FIRST_FRAGMENT_GRAPH_INDEX_KEY, String.valueOf(firstFragmentGraphIndex)); + outState.putString(LAST_SELECT_NAV_MENU_ID, String.valueOf(binding.bottomNavView.getSelectedItemId())); super.onSaveInstanceState(outState); } @@ -213,6 +216,12 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage firstFragmentGraphIndex = Integer.parseInt(key); } catch (NumberFormatException ignored) { } } + final String lastSelected = (String) savedInstanceState.get(LAST_SELECT_NAV_MENU_ID); + if (lastSelected != null) { + try { + lastSelectedNavMenuId = Integer.parseInt(lastSelected); + } catch (NumberFormatException ignored) { } + } setupBottomNavigationBar(false); } @@ -461,7 +470,6 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage private void setupBottomNavigationBar(final boolean setDefaultTabFromSettings) { currentTabs = !isLoggedIn ? setupAnonBottomNav() : setupMainBottomNav(); - final List mainNavList = currentTabs.stream() .map(Tab::getNavigationResId) .collect(Collectors.toList()); @@ -470,6 +478,8 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage .collect(Collectors.toList()); if (setDefaultTabFromSettings) { setSelectedTab(currentTabs); + } else { + binding.bottomNavView.setSelectedItemId(lastSelectedNavMenuId); } final LiveData navControllerLiveData = setupWithNavController( binding.bottomNavView, @@ -507,7 +517,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage return tab.getNavigationResId() == defaultNavId; }); if (index < 0 || index >= tabs.size()) index = 0; - if (index >= 0) firstFragmentGraphIndex = index; + firstFragmentGraphIndex = index; setBottomNavSelectedTab(tabs.get(index)); } catch (Exception e) { Log.e(TAG, "Error parsing id", e);