aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lake <ilake@google.com>2019-04-29 15:05:12 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-04-29 15:05:12 +0000
commit01a809c78ef3564609cbf4b21fe833f3a182e31d (patch)
tree623701760f87a08f22ef997a7cb81c6622c0aad9
parent2eac178f9a705152eabffce7d324330c0224089d (diff)
parentd339df058031dadca4676524c5c184e559553a2e (diff)
downloadsupport-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.java41
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);
}
/**