From b80ae2fcfedcba621906bab9b2c32c16f6fe57e7 Mon Sep 17 00:00:00 2001 From: Ammar Githam Date: Thu, 25 Mar 2021 01:23:33 +0900 Subject: [PATCH] Get 'show bottom destinations' from tabs. Add Activity to list of available tabs. --- .../instagrabber/activities/MainActivity.java | 28 ++++++++++--------- .../fragments/main/ProfileFragment.java | 4 +-- .../settings/MorePreferencesFragment.java | 28 +++++++++++-------- .../java/awais/instagrabber/models/Tab.java | 16 +++++++++-- .../java/awais/instagrabber/utils/Utils.java | 13 ++++++++- .../notification_viewer_nav_graph.xml | 3 +- app/src/main/res/values/arrays.xml | 15 ++++++++++ 7 files changed, 75 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/awais/instagrabber/activities/MainActivity.java b/app/src/main/java/awais/instagrabber/activities/MainActivity.java index 3e8139fa..4ac90477 100644 --- a/app/src/main/java/awais/instagrabber/activities/MainActivity.java +++ b/app/src/main/java/awais/instagrabber/activities/MainActivity.java @@ -53,6 +53,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterators; import java.util.ArrayList; +import java.util.Collections; import java.util.Deque; import java.util.List; import java.util.stream.Collectors; @@ -92,14 +93,6 @@ import static awais.instagrabber.utils.Utils.settingsHelper; public class MainActivity extends BaseLanguageActivity implements FragmentManager.OnBackStackChangedListener { private static final String TAG = "MainActivity"; - - private static final List SHOW_BOTTOM_VIEW_DESTINATIONS = ImmutableList.of( - R.id.directMessagesInboxFragment, - R.id.feedFragment, - R.id.profileFragment, - R.id.discoverFragment, - R.id.morePreferencesFragment, - R.id.favoritesFragment); private static final String FIRST_FRAGMENT_GRAPH_INDEX_KEY = "firstFragmentGraphIndex"; private ActivityMainBinding binding; @@ -117,6 +110,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage private boolean isLoggedIn; private HideBottomViewOnScrollBehavior behavior; private List currentTabs; + private List showBottomViewDestinations = Collections.emptyList(); private final ServiceConnection serviceConnection = new ServiceConnection() { @Override @@ -470,6 +464,9 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage final List mainNavList = currentTabs.stream() .map(Tab::getNavigationResId) .collect(Collectors.toList()); + showBottomViewDestinations = currentTabs.stream() + .map(Tab::getStartDestinationFragmentId) + .collect(Collectors.toList()); if (setDefaultTabFromSettings) { setSelectedTab(currentTabs); } @@ -522,16 +519,17 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage false, "profile_nav_graph", R.navigation.profile_nav_graph, - R.id.profile_nav_graph); + R.id.profile_nav_graph, + R.id.profileFragment); final Tab moreTab = new Tab(R.drawable.ic_more_horiz_24, getString(R.string.more), false, "more_nav_graph", R.navigation.more_nav_graph, - R.id.more_nav_graph); + R.id.more_nav_graph, + R.id.morePreferencesFragment); final Menu menu = binding.bottomNavView.getMenu(); menu.clear(); - // binding.bottomNavView.inflateMenu(R.menu.logged_out_bottom_navigation_menu); menu.add(0, profileTab.getNavigationRootId(), 0, profileTab.getTitle()).setIcon(profileTab.getIconResId()); menu.add(0, moreTab.getNavigationRootId(), 0, moreTab.getTitle()).setIcon(moreTab.getIconResId()); if (selectedItemId != R.id.profile_nav_graph && selectedItemId != R.id.more_nav_graph) { @@ -589,7 +587,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage final int destinationId = destination.getId(); @SuppressLint("RestrictedApi") final Deque backStack = navController.getBackStack(); setupMenu(backStack.size(), destinationId); - final boolean contains = SHOW_BOTTOM_VIEW_DESTINATIONS.contains(destinationId); + final boolean contains = showBottomViewDestinations.contains(destinationId); binding.bottomNavView.setVisibility(contains ? View.VISIBLE : View.GONE); if (contains && behavior != null) { behavior.slideUp(binding.bottomNavView); @@ -771,7 +769,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage final NavController navController = currentNavControllerLiveData.getValue(); if (navController == null) return; final Bundle bundle = new Bundle(); - bundle.putLong("locationId", Long.valueOf(locationId)); + bundle.putLong("locationId", Long.parseLong(locationId)); navController.navigate(R.id.action_global_locationFragment, bundle); } @@ -882,4 +880,8 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage public List getCurrentTabs() { return currentTabs; } + + public boolean isNavRootInCurrentTabs(@IdRes final int navRootId) { + return showBottomViewDestinations.stream().anyMatch(id -> id == navRootId); + } } \ No newline at end of file diff --git a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java index 4c305f75..2109f935 100644 --- a/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/main/ProfileFragment.java @@ -581,9 +581,7 @@ public class ProfileFragment extends Fragment implements SwipeRefreshLayout.OnRe } private void init() { - disableDm = fragmentActivity.getCurrentTabs() - .stream() - .noneMatch(tab -> tab.getNavigationRootId() == R.id.direct_messages_nav_graph); + disableDm = !fragmentActivity.isNavRootInCurrentTabs(R.id.directMessagesInboxFragment); if (getArguments() != null) { final ProfileFragmentArgs fragmentArgs = ProfileFragmentArgs.fromBundle(getArguments()); username = fragmentArgs.getUsername(); diff --git a/app/src/main/java/awais/instagrabber/fragments/settings/MorePreferencesFragment.java b/app/src/main/java/awais/instagrabber/fragments/settings/MorePreferencesFragment.java index 30137d7b..947996a2 100644 --- a/app/src/main/java/awais/instagrabber/fragments/settings/MorePreferencesFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/settings/MorePreferencesFragment.java @@ -56,6 +56,7 @@ public class MorePreferencesFragment extends BasePreferencesFragment { void setupPreferenceScreen(final PreferenceScreen screen) { final String cookie = settingsHelper.getString(Constants.COOKIE); final boolean isLoggedIn = !TextUtils.isEmpty(cookie) && CookieUtils.getUserIdFromCookie(cookie) > 0; + final MainActivity activity = (MainActivity) getActivity(); // screen.addPreference(new MoreHeaderPreference(getContext())); final Context context = getContext(); if (context == null) return; @@ -136,13 +137,19 @@ public class MorePreferencesFragment extends BasePreferencesFragment { screen.addPreference(getDivider(context)); final NavController navController = NavHostFragment.findNavController(this); if (isLoggedIn) { - screen.addPreference(getPreference(R.string.action_notif, R.drawable.ic_not_liked, preference -> { - if (isSafeToNavigate(navController)) { - final NavDirections navDirections = MorePreferencesFragmentDirections.actionGlobalNotificationsViewerFragment("notif"); - navController.navigate(navDirections); - } - return true; - })); + boolean showActivity = true; + if (activity != null) { + showActivity = !activity.isNavRootInCurrentTabs(R.id.notificationsViewer); + } + if (showActivity) { + screen.addPreference(getPreference(R.string.action_notif, R.drawable.ic_not_liked, preference -> { + if (isSafeToNavigate(navController)) { + final NavDirections navDirections = MorePreferencesFragmentDirections.actionGlobalNotificationsViewerFragment("notif"); + navController.navigate(navDirections); + } + return true; + })); + } screen.addPreference(getPreference(R.string.action_ayml, R.drawable.ic_suggested_users, preference -> { if (isSafeToNavigate(navController)) { final NavDirections navDirections = MorePreferencesFragmentDirections.actionGlobalNotificationsViewerFragment("ayml"); @@ -161,11 +168,8 @@ public class MorePreferencesFragment extends BasePreferencesFragment { // Check if favorites has been added as a tab. And if so, do not add in this list boolean showFavorites = true; - final MainActivity activity = (MainActivity) getActivity(); - if (activity != null && activity.getCurrentTabs() != null) { - showFavorites = activity.getCurrentTabs() - .stream() - .noneMatch(tab -> tab.getNavigationRootId() == R.id.favorites_nav_graph); + if (activity != null) { + showFavorites = !activity.isNavRootInCurrentTabs(R.id.favoritesFragment); } if (showFavorites) { screen.addPreference(getPreference(R.string.title_favorites, R.drawable.ic_star_24, preference -> { diff --git a/app/src/main/java/awais/instagrabber/models/Tab.java b/app/src/main/java/awais/instagrabber/models/Tab.java index 7f9bad89..e4e608be 100644 --- a/app/src/main/java/awais/instagrabber/models/Tab.java +++ b/app/src/main/java/awais/instagrabber/models/Tab.java @@ -30,18 +30,25 @@ public class Tab { */ private final int navigationRootId; + /** + * This is the start destination of the nav graph + */ + private final int startDestinationFragmentId; + public Tab(@DrawableRes final int iconResId, @NonNull final String title, final boolean removable, @NonNull final String graphName, @NavigationRes final int navigationResId, - @IdRes final int navigationRootId) { + @IdRes final int navigationRootId, + @IdRes final int startDestinationFragmentId) { this.iconResId = iconResId; this.title = title; this.removable = removable; this.graphName = graphName; this.navigationResId = navigationResId; this.navigationRootId = navigationRootId; + this.startDestinationFragmentId = startDestinationFragmentId; } public int getIconResId() { @@ -68,6 +75,10 @@ public class Tab { return navigationRootId; } + public int getStartDestinationFragmentId() { + return startDestinationFragmentId; + } + @Override public boolean equals(final Object o) { if (this == o) return true; @@ -77,13 +88,14 @@ public class Tab { removable == tab.removable && navigationResId == tab.navigationResId && navigationRootId == tab.navigationRootId && + startDestinationFragmentId == tab.startDestinationFragmentId && Objects.equals(title, tab.title) && Objects.equals(graphName, tab.graphName); } @Override public int hashCode() { - return Objects.hash(iconResId, title, removable, graphName, navigationResId, navigationRootId); + return Objects.hash(iconResId, title, removable, graphName, navigationResId, navigationRootId, startDestinationFragmentId); } @NonNull diff --git a/app/src/main/java/awais/instagrabber/utils/Utils.java b/app/src/main/java/awais/instagrabber/utils/Utils.java index c67c1130..7d0afd2b 100644 --- a/app/src/main/java/awais/instagrabber/utils/Utils.java +++ b/app/src/main/java/awais/instagrabber/utils/Utils.java @@ -425,6 +425,16 @@ public final class Utils { } typedArray.recycle(); + typedArray = resources.obtainTypedArray(R.array.main_nav_start_dest_frag_ids); + length = typedArray.length(); + final int[] startDestFragIds = new int[length]; + for (int i = 0; i < length; i++) { + final int resourceId = typedArray.getResourceId(i, 0); + if (resourceId == 0) continue; + startDestFragIds[i] = resourceId; + } + typedArray.recycle(); + final List currentOrderGraphNames = getCurrentOrderOfGraphNamesFromPref(navGraphNames); if (titleArray.length != iconIds.length || titleArray.length != navGraphNames.length) { @@ -441,7 +451,8 @@ public final class Utils { !NON_REMOVABLE_NAV_ROOT_IDS.contains(navRootId), navGraphName, navigationResIds[i], - navRootId); + navRootId, + startDestFragIds[i]); if (!currentOrderGraphNames.contains(navGraphName)) { otherTabs.add(tab); continue; diff --git a/app/src/main/res/navigation/notification_viewer_nav_graph.xml b/app/src/main/res/navigation/notification_viewer_nav_graph.xml index 245a2cee..89df18be 100644 --- a/app/src/main/res/navigation/notification_viewer_nav_graph.xml +++ b/app/src/main/res/navigation/notification_viewer_nav_graph.xml @@ -13,7 +13,8 @@ + app:nullable="false" + android:defaultValue="notif"/> @id/more_nav_graph @id/favorites_nav_graph + @id/notification_viewer_nav_graph @@ -105,6 +106,7 @@ @navigation/discover_nav_graph @navigation/more_nav_graph @navigation/favorites_nav_graph + @navigation/notification_viewer_nav_graph @@ -114,6 +116,7 @@ @string/title_discover @string/more @string/title_favorites + @string/title_notifications @@ -123,6 +126,18 @@ @drawable/ic_explore_24 @drawable/ic_more_horiz_24 @drawable/ic_star_24 + @drawable/ic_not_liked + + + + + @id/directMessagesInboxFragment + @id/feedFragment + @id/profileFragment + @id/discoverFragment + @id/morePreferencesFragment + @id/favoritesFragment + @id/notificationsViewer