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 @@