From 2cd1ffdeb17d0b4c091ef2097c87d1241fef587e Mon Sep 17 00:00:00 2001 From: Ammar Githam Date: Tue, 16 Mar 2021 22:45:34 +0900 Subject: [PATCH] Check if it is safe to navigate. Should fix https://github.com/austinhuang0131/barinsta/issues/708 --- .../settings/MorePreferencesFragment.java | 49 +++++++++++++------ 1 file changed, 35 insertions(+), 14 deletions(-) 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 2b39f02b..f9947ecc 100644 --- a/app/src/main/java/awais/instagrabber/fragments/settings/MorePreferencesFragment.java +++ b/app/src/main/java/awais/instagrabber/fragments/settings/MorePreferencesFragment.java @@ -14,6 +14,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; +import androidx.navigation.NavController; import androidx.navigation.NavDirections; import androidx.navigation.fragment.NavHostFragment; import androidx.preference.Preference; @@ -132,43 +133,58 @@ public class MorePreferencesFragment extends BasePreferencesFragment { // generalCategory.setIconSpaceReserved(false); // screen.addPreference(generalCategory); 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 -> { - final NavDirections navDirections = MorePreferencesFragmentDirections.actionGlobalNotificationsViewerFragment("notif", 0l); - NavHostFragment.findNavController(this).navigate(navDirections); + if (isSafeToNavigate(navController)) { + final NavDirections navDirections = MorePreferencesFragmentDirections.actionGlobalNotificationsViewerFragment("notif", 0L); + navController.navigate(navDirections); + } return true; })); screen.addPreference(getPreference(R.string.action_ayml, R.drawable.ic_suggested_users, preference -> { - final NavDirections navDirections = MorePreferencesFragmentDirections.actionGlobalNotificationsViewerFragment("ayml", 0l); - NavHostFragment.findNavController(this).navigate(navDirections); + if (isSafeToNavigate(navController)) { + final NavDirections navDirections = MorePreferencesFragmentDirections.actionGlobalNotificationsViewerFragment("ayml", 0L); + navController.navigate(navDirections); + } return true; })); screen.addPreference(getPreference(R.string.action_archive, R.drawable.ic_archive, preference -> { - final NavDirections navDirections = MorePreferencesFragmentDirections.actionGlobalStoryListViewerFragment("archive"); - NavHostFragment.findNavController(this).navigate(navDirections); + if (isSafeToNavigate(navController)) { + final NavDirections navDirections = MorePreferencesFragmentDirections.actionGlobalStoryListViewerFragment("archive"); + navController.navigate(navDirections); + } return true; })); } screen.addPreference(getPreference(R.string.title_favorites, R.drawable.ic_star_24, preference -> { - final NavDirections navDirections = MorePreferencesFragmentDirections.actionMorePreferencesFragmentToFavoritesFragment(); - NavHostFragment.findNavController(this).navigate(navDirections); + if (isSafeToNavigate(navController)) { + final NavDirections navDirections = MorePreferencesFragmentDirections.actionMorePreferencesFragmentToFavoritesFragment(); + navController.navigate(navDirections); + } return true; })); screen.addPreference(getDivider(context)); screen.addPreference(getPreference(R.string.action_settings, R.drawable.ic_outline_settings_24, preference -> { - final NavDirections navDirections = MorePreferencesFragmentDirections.actionMorePreferencesFragmentToSettingsPreferencesFragment(); - NavHostFragment.findNavController(this).navigate(navDirections); + if (isSafeToNavigate(navController)) { + final NavDirections navDirections = MorePreferencesFragmentDirections.actionMorePreferencesFragmentToSettingsPreferencesFragment(); + navController.navigate(navDirections); + } return true; })); screen.addPreference(getPreference(R.string.backup_and_restore, R.drawable.ic_settings_backup_restore_24, preference -> { - final NavDirections navDirections = MorePreferencesFragmentDirections.actionMorePreferencesFragmentToBackupPreferencesFragment(); - NavHostFragment.findNavController(this).navigate(navDirections); + if (isSafeToNavigate(navController)) { + final NavDirections navDirections = MorePreferencesFragmentDirections.actionMorePreferencesFragmentToBackupPreferencesFragment(); + navController.navigate(navDirections); + } return true; })); screen.addPreference(getPreference(R.string.action_about, R.drawable.ic_outline_info_24, preference1 -> { - final NavDirections navDirections = MorePreferencesFragmentDirections.actionMorePreferencesFragmentToAboutFragment(); - NavHostFragment.findNavController(this).navigate(navDirections); + if (isSafeToNavigate(navController)) { + final NavDirections navDirections = MorePreferencesFragmentDirections.actionMorePreferencesFragmentToAboutFragment(); + navController.navigate(navDirections); + } return true; })); @@ -187,6 +203,11 @@ public class MorePreferencesFragment extends BasePreferencesFragment { screen.addPreference(reminderPreference); } + private boolean isSafeToNavigate(final NavController navController) { + return navController.getCurrentDestination() != null + && navController.getCurrentDestination().getId() == R.id.morePreferencesFragment; + } + @Override public void onActivityResult(final int requestCode, final int resultCode, @Nullable final Intent data) { if (resultCode == Constants.LOGIN_RESULT_CODE) {