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 f5e57560..d898a388 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 @@ -1,6 +1,7 @@ package com.d4rk.androidtutorials.java.ui.screens.main; import android.Manifest; +import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; @@ -253,20 +254,6 @@ private void observeViewModel() { } } - 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(); - androidx.navigation.NavDestination destination = navController.getCurrentDestination(); if (destination != null) { currentNavIndex = navOrder.get(destination.getId(), currentNavIndex); @@ -281,7 +268,7 @@ private void observeViewModel() { return true; } int newIndex = navOrder.get(item.getItemId()); - NavOptions options = newIndex > currentNavIndex ? forwardOptions : backwardOptions; + NavOptions options = applyTopLevelNavAnimations(new NavOptions.Builder()).build(); navController.navigate(item.getItemId(), null, options); currentNavIndex = newIndex; return true; @@ -295,7 +282,7 @@ private void observeViewModel() { return true; } int newIndex = navOrder.get(item.getItemId()); - NavOptions options = newIndex > currentNavIndex ? forwardOptions : backwardOptions; + NavOptions options = applyTopLevelNavAnimations(new NavOptions.Builder()).build(); navController.navigate(item.getItemId(), null, options); currentNavIndex = newIndex; return true; @@ -316,6 +303,21 @@ private void observeViewModel() { }); } + private NavOptions.Builder applyTopLevelNavAnimations(NavOptions.Builder builder) { + if (ValueAnimator.areAnimatorsEnabled()) { + builder.setEnterAnim(R.anim.fragment_top_level_enter) + .setExitAnim(R.anim.fragment_top_level_exit) + .setPopEnterAnim(R.anim.fragment_top_level_enter) + .setPopExitAnim(R.anim.fragment_top_level_exit); + } else { + builder.setEnterAnim(0) + .setExitAnim(0) + .setPopEnterAnim(0) + .setPopExitAnim(0); + } + return builder; + } + private void navigateToPreferredDestination(int preferredDestination) { if (navController == null) { @@ -328,10 +330,11 @@ private void navigateToPreferredDestination(int preferredDestination) { lastPreferredStartDestination = preferredDestination; return; } - NavOptions options = new NavOptions.Builder() - .setPopUpTo(graph.getStartDestinationId(), true) - .setLaunchSingleTop(true) - .build(); + NavOptions options = applyTopLevelNavAnimations( + new NavOptions.Builder() + .setPopUpTo(graph.getStartDestinationId(), true) + .setLaunchSingleTop(true) + ).build(); navController.navigate(preferredDestination, null, options); lastPreferredStartDestination = preferredDestination; } diff --git a/app/src/main/res/anim/fragment_spring_enter.xml b/app/src/main/res/anim/fragment_spring_enter.xml deleted file mode 100644 index d3f014fe..00000000 --- a/app/src/main/res/anim/fragment_spring_enter.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/app/src/main/res/anim/fragment_spring_exit.xml b/app/src/main/res/anim/fragment_spring_exit.xml deleted file mode 100644 index a73a5655..00000000 --- a/app/src/main/res/anim/fragment_spring_exit.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/app/src/main/res/anim/fragment_spring_interpolator.xml b/app/src/main/res/anim/fragment_spring_interpolator.xml deleted file mode 100644 index 900ad8c9..00000000 --- a/app/src/main/res/anim/fragment_spring_interpolator.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app/src/main/res/anim/fragment_spring_pop_enter.xml b/app/src/main/res/anim/fragment_spring_pop_enter.xml deleted file mode 100644 index 511d2073..00000000 --- a/app/src/main/res/anim/fragment_spring_pop_enter.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/app/src/main/res/anim/fragment_spring_pop_exit.xml b/app/src/main/res/anim/fragment_spring_pop_exit.xml deleted file mode 100644 index 91d60747..00000000 --- a/app/src/main/res/anim/fragment_spring_pop_exit.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/app/src/main/res/anim/fragment_top_level_enter.xml b/app/src/main/res/anim/fragment_top_level_enter.xml new file mode 100644 index 00000000..0b137a3d --- /dev/null +++ b/app/src/main/res/anim/fragment_top_level_enter.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/app/src/main/res/anim/fragment_top_level_exit.xml b/app/src/main/res/anim/fragment_top_level_exit.xml new file mode 100644 index 00000000..9f2fddf8 --- /dev/null +++ b/app/src/main/res/anim/fragment_top_level_exit.xml @@ -0,0 +1,9 @@ + + + + diff --git a/app/src/main/res/transition/fragment_spring.xml b/app/src/main/res/transition/fragment_spring.xml deleted file mode 100644 index 77f1d53b..00000000 --- a/app/src/main/res/transition/fragment_spring.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - -