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

Commit 0f0c4734 authored by George Mount's avatar George Mount
Browse files

Use Alpha instead of TransitionAlpha for Activity Transitions.

Bug 17406204

Chrome needs to be notified when the shared element
should be hidden. The alpha setter can be overridden,
but setTransitionAlpha cannot. By setting alpha as
well as transitionAlpha, we get the immediate effect
from transitionAlpha along with enabling a trigger
for Chrome's shared element to hide.

Change-Id: I6ecb44872fd237afe89dbb36e43aa50c98693b52
parent fdd04d42
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -205,6 +205,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
    private boolean mIsStartingTransition;
    private ArrayList<GhostViewListeners> mGhostViewListeners =
            new ArrayList<GhostViewListeners>();
    private ArrayMap<View, Float> mOriginalAlphas = new ArrayMap<View, Float>();

    public ActivityTransitionCoordinator(Window window,
            ArrayList<String> allSharedElementNames,
@@ -577,6 +578,7 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
        mWindow = null;
        mSharedElements.clear();
        mTransitioningViews.clear();
        mOriginalAlphas.clear();
        mResultReceiver = null;
        mPendingTransition = null;
        mListener = null;
@@ -586,10 +588,27 @@ abstract class ActivityTransitionCoordinator extends ResultReceiver {
        return getWindow().getTransitionBackgroundFadeDuration();
    }

    protected static void setTransitionAlpha(ArrayList<View> views, float alpha) {
    protected void hideViews(ArrayList<View> views) {
        int count = views.size();
        for (int i = 0; i < count; i++) {
            views.get(i).setTransitionAlpha(alpha);
            View view = views.get(i);
            if (!mOriginalAlphas.containsKey(view)) {
                mOriginalAlphas.put(view, view.getAlpha());
            }
            view.setAlpha(0f);
            view.setTransitionAlpha(0f);
        }
    }

    protected void showViews(ArrayList<View> views) {
        int count = views.size();
        for (int i = 0; i < count; i++) {
            View view = views.get(i);
            Float alpha = mOriginalAlphas.remove(view);
            if (alpha != null) {
                view.setAlpha(alpha);
                view.setTransitionAlpha(1f);
            }
        }
    }

+5 −5
Original line number Diff line number Diff line
@@ -113,9 +113,9 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
    protected void viewsReady(ArrayMap<String, View> sharedElements) {
        super.viewsReady(sharedElements);
        mIsReadyForTransition = true;
        setTransitionAlpha(mSharedElements, 0);
        hideViews(mSharedElements);
        if (getViewsTransition() != null) {
            setTransitionAlpha(mTransitioningViews, 0);
            hideViews(mTransitioningViews);
        }
        if (mIsReturning) {
            sendSharedElementDestination();
@@ -240,7 +240,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
        if (!mIsCanceled) {
            mIsCanceled = true;
            if (getViewsTransition() == null || mIsViewsTransitionStarted) {
                setTransitionAlpha(mSharedElements, 1);
                showViews(mSharedElements);
            } else {
                mTransitioningViews.addAll(mSharedElements);
            }
@@ -300,7 +300,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
        // Now start shared element transition
        ArrayList<View> sharedElementSnapshots = createSnapshots(sharedElementState,
                mSharedElementNames);
        setTransitionAlpha(mSharedElements, 1);
        showViews(mSharedElements);
        scheduleSetSharedElementEnd(sharedElementSnapshots);
        ArrayList<SharedElementOriginalState> originalImageViewState =
                setSharedElementState(sharedElementState, sharedElementSnapshots);
@@ -410,7 +410,7 @@ class EnterTransitionCoordinator extends ActivityTransitionCoordinator {
                    @Override
                    public void onTransitionStart(Transition transition) {
                        mEnterViewsTransition = transition;
                        setTransitionAlpha(mTransitioningViews, 1);
                        showViews(mTransitioningViews);
                        super.onTransitionStart(transition);
                    }

+5 −5
Original line number Diff line number Diff line
@@ -126,8 +126,8 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
    }

    public void resetViews() {
        setTransitionAlpha(mTransitioningViews, 1);
        setTransitionAlpha(mSharedElements, 1);
        showViews(mTransitioningViews);
        showViews(mSharedElements);
        mIsHidden = true;
        if (!mIsReturning && getDecor() != null) {
            getDecor().suppressLayout(false);
@@ -186,7 +186,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
    private void hideSharedElements() {
        moveSharedElementsFromOverlay();
        if (!mIsHidden) {
            setTransitionAlpha(mSharedElements, 0);
            hideViews(mSharedElements);
        }
        mSharedElementsHidden = true;
        finishIfNecessary();
@@ -295,7 +295,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
                    transition.removeListener(this);
                    exitTransitionComplete();
                    if (mIsHidden) {
                        setTransitionAlpha(mTransitioningViews, 1);
                        showViews(mTransitioningViews);
                    }
                    if (mSharedElementBundle != null) {
                        delayCancel();
@@ -322,7 +322,7 @@ class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
                    transition.removeListener(this);
                    sharedElementTransitionComplete();
                    if (mIsHidden) {
                        setTransitionAlpha(mSharedElements, 1);
                        showViews(mSharedElements);
                    }
                }
            });