@Override public void dispatch(Flow.Traversal traversal, final Flow.TraversalCallback callback) { MasterDetailPath currentMaster = ((MasterDetailPath) traversal.origin.top()).getMaster(); MasterDetailPath newMaster = ((MasterDetailPath) traversal.destination.top()).getMaster(); // Short circuit if the new screen has the same master. if (getCurrentChild() != null && newMaster.equals(currentMaster)) { callback.onTraversalCompleted(); } else { super.dispatch(traversal, new Flow.TraversalCallback() { @Override public void onTraversalCompleted() { callback.onTraversalCompleted(); } }); } }
@Override public void dispatch(@NonNull Traversal traversal, @NonNull TraversalCallback callback) { Log.d("BasicDispatcher", "dispatching " + traversal); Object destKey = traversal.destination.top(); traversal.getState(traversal.origin.top()).save(currentView); traversal.getState(traversal.destination.top()).restore(incomingView);
@Override public void dispatch(Flow.Traversal traversal, final Flow.TraversalCallback callback) { Path path = traversal.destination.top(); setTitle(path.getClass().getSimpleName()); boolean canGoBack = traversal.destination.size() > 1; String title = path.getClass().getSimpleName(); ActionBarOwner.MenuAction menu = canGoBack ? null : new ActionBarOwner.MenuAction("Friends", new Runnable() { @Override public void run() { Flow.get(MortarDemoActivity.this).set(new FriendListScreen()); } }); actionBarOwner.setConfig(new ActionBarOwner.Config(false, canGoBack, title, menu)); container.dispatch(traversal, new Flow.TraversalCallback() { @Override public void onTraversalCompleted() { invalidateOptionsMenu(); callback.onTraversalCompleted(); } }); }
public final void executeTraversal(PathContainerView view, Flow.Traversal traversal, final Flow.TraversalCallback callback) { final View oldChild = view.getCurrentChild(); Path path = traversal.destination.top(); ViewState viewState = traversal.destination.currentViewState(); Path oldPath; ViewGroup containerView = view.getContainerView(); TraversalState traversalState = ensureTag(containerView); // See if we already have the direct child we want, and if so short circuit the traversal. if (oldChild != null) { oldPath = Preconditions.checkNotNull(traversalState.toPath, "Container view has child %s with no path", oldChild.toString()); if (oldPath.equals(path)) { callback.onTraversalCompleted(); return; } } traversalState.setNextEntry(path, viewState); performTraversal(containerView, traversalState, traversal.direction, callback); }