Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8881502d authored by George Mount's avatar George Mount
Browse files

Target only the proper views in activity transitions.

Bug 15725361

Change-Id: I0b50aac9323653b6652d6ec638d54ff2d55ba8d5
parent e4fce52b
Loading
Loading
Loading
Loading
+14 −6
Original line number Diff line number Diff line
@@ -288,16 +288,22 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
        }
    }

    protected static Transition addTargets(Transition transition, Collection<View> views) {
        if (transition == null || views == null || views.isEmpty()) {
    protected Transition setTargets(Transition transition, boolean add) {
        if (transition == null || (add &&
                (mTransitioningViews == null || mTransitioningViews.isEmpty()))) {
            return null;
        }
        // Add the targets to a set containing transition so that transition
        // remains unaffected. We don't want to modify the targets of transition itself.
        TransitionSet set = new TransitionSet();
        if (views != null) {
            for (View view : views) {
        if (mTransitioningViews != null) {
            for (int i = mTransitioningViews.size() - 1; i >= 0; i--) {
                View view = mTransitioningViews.get(i);
                if (add) {
                    set.addTarget(view);
                } else {
                    set.excludeTarget(view, true);
                }
            }
        }
        // By adding the transition after addTarget, we prevent addTarget from
@@ -306,10 +312,12 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
        return set;
    }

    protected Transition configureTransition(Transition transition) {
    protected Transition configureTransition(Transition transition,
            boolean includeTransitioningViews) {
        if (transition != null) {
            transition = transition.clone();
            transition.setEpicenterCallback(mEpicenterCallback);
            transition = setTargets(transition, includeTransitioningViews);
        }
        return transition;
    }
+2 −5
Original line number Diff line number Diff line
@@ -254,7 +254,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
    }

    private void startSharedElementTransition(Bundle sharedElementState) {
        setEpicenter();
        // Remove rejected shared elements
        ArrayList<String> rejectedNames = new ArrayList<String>(mAllSharedElementNames);
        rejectedNames.removeAll(mSharedElementNames);
@@ -327,14 +326,13 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
            boolean startSharedElementTransition) {
        Transition sharedElementTransition = null;
        if (startSharedElementTransition && !mSharedElementNames.isEmpty()) {
            sharedElementTransition = configureTransition(getSharedElementTransition());
            sharedElementTransition = configureTransition(getSharedElementTransition(), false);
        }
        Transition viewsTransition = null;
        if (startEnterTransition && !mTransitioningViews.isEmpty()) {
            viewsTransition = configureTransition(getViewsTransition());
            viewsTransition = configureTransition(getViewsTransition(), true);
            if (viewsTransition != null) {
                stripOffscreenViews();
                viewsTransition = addTargets(viewsTransition, mTransitioningViews);
            }
        }

@@ -465,7 +463,6 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
        startTransition(new Runnable() {
            @Override
            public void run() {
                setEpicenter();
                boolean startEnterTransition = true;
                boolean startSharedElementTransition = false;
                Transition transition = beginTransition(startEnterTransition,
+2 −2
Original line number Diff line number Diff line
@@ -256,7 +256,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
    private Transition getExitTransition() {
        Transition viewsTransition = null;
        if (!mTransitioningViews.isEmpty()) {
            viewsTransition = configureTransition(getViewsTransition());
            viewsTransition = configureTransition(getViewsTransition(), true);
        }
        if (viewsTransition == null) {
            exitTransitionComplete();
@@ -283,7 +283,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
    private Transition getSharedElementExitTransition() {
        Transition sharedElementTransition = null;
        if (!mSharedElements.isEmpty()) {
            sharedElementTransition = configureTransition(getSharedElementTransition());
            sharedElementTransition = configureTransition(getSharedElementTransition(), false);
        }
        if (sharedElementTransition == null) {
            sharedElementTransitionComplete();