diff options
author | Ian Lake <ilake@google.com> | 2019-04-29 15:05:12 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-04-29 15:05:12 +0000 |
commit | 01a809c78ef3564609cbf4b21fe833f3a182e31d (patch) | |
tree | 623701760f87a08f22ef997a7cb81c6622c0aad9 | |
parent | 2eac178f9a705152eabffce7d324330c0224089d (diff) | |
parent | d339df058031dadca4676524c5c184e559553a2e (diff) | |
download | support-01a809c78ef3564609cbf4b21fe833f3a182e31d.tar.gz |
Merge "Don't override isEnabled() is NavController's back callback" into androidx-master-dev
-rw-r--r-- | navigation/runtime/src/main/java/androidx/navigation/NavController.java | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/navigation/runtime/src/main/java/androidx/navigation/NavController.java b/navigation/runtime/src/main/java/androidx/navigation/NavController.java index b5e664c7074..f1b92eaec1e 100644 --- a/navigation/runtime/src/main/java/androidx/navigation/NavController.java +++ b/navigation/runtime/src/main/java/androidx/navigation/NavController.java @@ -78,8 +78,7 @@ public class NavController { public static final @NonNull String KEY_DEEP_LINK_INTENT = "android-support-nav:controller:deepLinkIntent"; - @SuppressWarnings("WeakerAccess") /* synthetic access */ - final Context mContext; + private final Context mContext; private Activity mActivity; private NavInflater mInflater; private NavGraph mGraph; @@ -88,8 +87,7 @@ public class NavController { private int[] mBackStackIdsToRestore; private Parcelable[] mBackStackArgsToRestore; - @SuppressWarnings("WeakerAccess") /* synthetic access */ - final Deque<NavBackStackEntry> mBackStack = new ArrayDeque<>(); + private final Deque<NavBackStackEntry> mBackStack = new ArrayDeque<>(); private LifecycleOwner mLifecycleOwner; private NavControllerViewModel mViewModel; @@ -99,6 +97,14 @@ public class NavController { private final CopyOnWriteArrayList<OnDestinationChangedListener> mOnDestinationChangedListeners = new CopyOnWriteArrayList<>(); + private final OnBackPressedCallback mOnBackPressedCallback = + new OnBackPressedCallback(false) { + @Override + public void handleOnBackPressed() { + popBackStack(); + } + }; + /** * OnDestinationChangedListener receives a callback when the * {@link #getCurrentDestination()} or its arguments change. @@ -281,6 +287,7 @@ public class NavController { break; } } + mOnBackPressedCallback.setEnabled(getDestinationCountOnBackStack() > 1); return popped; } @@ -346,8 +353,7 @@ public class NavController { * * @return If changes were dispatched. */ - @SuppressWarnings("WeakerAccess") /* synthetic access */ - boolean dispatchOnDestinationChanged() { + private boolean dispatchOnDestinationChanged() { // We never want to leave NavGraphs on the top of the stack //noinspection StatementWithEmptyBody while (!mBackStack.isEmpty() @@ -479,6 +485,7 @@ public class NavController { } mBackStack.add(new NavBackStackEntry(uuid, node, args)); } + mOnBackPressedCallback.setEnabled(getDestinationCountOnBackStack() > 1); mBackStackUUIDsToRestore = null; mBackStackIdsToRestore = null; mBackStackArgsToRestore = null; @@ -871,6 +878,7 @@ public class NavController { newDest.addInDefaultArgs(finalArgs)); mBackStack.add(newBackStackEntry); } + mOnBackPressedCallback.setEnabled(getDestinationCountOnBackStack() > 1); if (popped || newDest != null) { dispatchOnDestinationChanged(); } @@ -1015,23 +1023,10 @@ public class NavController { mLifecycleOwner = owner; } OnBackPressedDispatcher dispatcher = owner.getOnBackPressedDispatcher(); - dispatcher.addCallback(mLifecycleOwner, new OnBackPressedCallback(true) { - @Override - public boolean isEnabled() { - int destinationCount = 0; - for (NavBackStackEntry entry : mBackStack) { - if (!(entry.getDestination() instanceof NavGraph)) { - destinationCount++; - } - } - return destinationCount > 1; - } - - @Override - public void handleOnBackPressed() { - popBackStack(); - } - }); + // Remove the callback from any previous dispatcher + mOnBackPressedCallback.remove(); + // Then add it to the new dispatcher + dispatcher.addCallback(mLifecycleOwner, mOnBackPressedCallback); } /** |