diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java
index a2abf5d6..23663acf 100644
--- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java
+++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java
@@ -6,6 +6,7 @@
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
+import android.util.SparseIntArray;
import android.view.View;
import androidx.activity.OnBackPressedCallback;
@@ -74,6 +75,8 @@ public class MainActivity extends AppCompatActivity {
private StartupViewModel startupViewModel;
private ConsentInformation consentInformation;
private NavController navController;
+ private final SparseIntArray navOrder = new SparseIntArray();
+ private int currentNavIndex;
private AppUpdateNotificationsManager appUpdateNotificationsManager;
private AppUpdateManager appUpdateManager;
private InstallStateUpdatedListener installStateUpdatedListener;
@@ -227,23 +230,47 @@ private void observeViewModel() {
navGraph.setStartDestination(uiState.getDefaultNavDestination());
navController.setGraph(navGraph);
- NavOptions springNavOptions = new NavOptions.Builder()
+ navOrder.put(R.id.navigation_home, 0);
+ navOrder.put(R.id.navigation_android_studio, 1);
+ navOrder.put(R.id.navigation_about, 2);
+ currentNavIndex = navOrder.get(navController.getCurrentDestination().getId());
+
+ NavOptions forwardOptions = new NavOptions.Builder()
.setEnterAnim(R.anim.fragment_spring_enter)
.setExitAnim(R.anim.fragment_spring_exit)
.setPopEnterAnim(R.anim.fragment_spring_pop_enter)
.setPopExitAnim(R.anim.fragment_spring_pop_exit)
.build();
+ NavOptions backwardOptions = new NavOptions.Builder()
+ .setEnterAnim(R.anim.fragment_spring_pop_enter)
+ .setExitAnim(R.anim.fragment_spring_pop_exit)
+ .setPopEnterAnim(R.anim.fragment_spring_enter)
+ .setPopExitAnim(R.anim.fragment_spring_exit)
+ .build();
+
if (useRail) {
NavigationUI.setupWithNavController(mBinding.navRail, navController);
mBinding.navRail.setOnItemSelectedListener(item -> {
- navController.navigate(item.getItemId(), null, springNavOptions);
+ if (item.getItemId() == navController.getCurrentDestination().getId()) {
+ return true;
+ }
+ int newIndex = navOrder.get(item.getItemId());
+ NavOptions options = newIndex > currentNavIndex ? forwardOptions : backwardOptions;
+ navController.navigate(item.getItemId(), null, options);
+ currentNavIndex = newIndex;
return true;
});
} else {
NavigationUI.setupWithNavController(navBarView, navController);
navBarView.setOnItemSelectedListener(item -> {
- navController.navigate(item.getItemId(), null, springNavOptions);
+ if (item.getItemId() == navController.getCurrentDestination().getId()) {
+ return true;
+ }
+ int newIndex = navOrder.get(item.getItemId());
+ NavOptions options = newIndex > currentNavIndex ? forwardOptions : backwardOptions;
+ navController.navigate(item.getItemId(), null, options);
+ currentNavIndex = newIndex;
return true;
});
}
diff --git a/app/src/main/res/anim/fragment_spring_enter.xml b/app/src/main/res/anim/fragment_spring_enter.xml
index 0bded03a..67b017fd 100644
--- a/app/src/main/res/anim/fragment_spring_enter.xml
+++ b/app/src/main/res/anim/fragment_spring_enter.xml
@@ -3,11 +3,11 @@
diff --git a/app/src/main/res/anim/fragment_spring_exit.xml b/app/src/main/res/anim/fragment_spring_exit.xml
index e7d0be19..86f6d070 100644
--- a/app/src/main/res/anim/fragment_spring_exit.xml
+++ b/app/src/main/res/anim/fragment_spring_exit.xml
@@ -3,11 +3,11 @@
diff --git a/app/src/main/res/anim/fragment_spring_pop_enter.xml b/app/src/main/res/anim/fragment_spring_pop_enter.xml
index f734c469..575e1c25 100644
--- a/app/src/main/res/anim/fragment_spring_pop_enter.xml
+++ b/app/src/main/res/anim/fragment_spring_pop_enter.xml
@@ -3,11 +3,11 @@
diff --git a/app/src/main/res/anim/fragment_spring_pop_exit.xml b/app/src/main/res/anim/fragment_spring_pop_exit.xml
index 3ef11c06..e552f3b3 100644
--- a/app/src/main/res/anim/fragment_spring_pop_exit.xml
+++ b/app/src/main/res/anim/fragment_spring_pop_exit.xml
@@ -3,11 +3,11 @@
diff --git a/app/src/main/res/transition/fragment_spring.xml b/app/src/main/res/transition/fragment_spring.xml
index 9f2ecf81..91e48069 100644
--- a/app/src/main/res/transition/fragment_spring.xml
+++ b/app/src/main/res/transition/fragment_spring.xml
@@ -1,9 +1,9 @@