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

Commit fa462853 authored by Chet Haase's avatar Chet Haase Committed by The Android Automerger
Browse files

Ensure that transitions animating alpha end on a reasonable value

The Fade transition sets an initial alpha value of 0 when items are
appearing. This makes items invisible to start with, and then they
eventually fade in as part of the transition when the transition's
animation runs.

But if that animation/transition gets interrupted, or not started, then
the alpha value would not be restored, and the value would stay 0,
making the items invisible indefinitely. This is what was happening in
the action bar of the People app when performing a search.

The fix is to handle Transition and animation events to restore the alpha
to its true value when the transition completes, whether that
transition is canceled or not.

Issue #10726905 ActionBar weirdness in People app

Change-Id: Idb65fd8d471d2ac0a1ddc243fee00ae99f7e72d8

Conflicts:
	core/java/android/transition/TransitionManager.java
parent c212b879
Loading
Loading
Loading
Loading
+33 −1
Original line number Original line Diff line number Diff line
@@ -91,6 +91,9 @@ public class Fade extends Visibility {
            return null;
            return null;
        }
        }
        final ObjectAnimator anim = ObjectAnimator.ofFloat(view, "alpha", startAlpha, endAlpha);
        final ObjectAnimator anim = ObjectAnimator.ofFloat(view, "alpha", startAlpha, endAlpha);
        if (DBG) {
            Log.d(LOG_TAG, "Created animator " + anim);
        }
        if (listener != null) {
        if (listener != null) {
            anim.addListener(listener);
            anim.addListener(listener);
            anim.addPauseListener(listener);
            anim.addPauseListener(listener);
@@ -146,12 +149,41 @@ public class Fade extends Visibility {
        final View endView = endValues.view;
        final View endView = endValues.view;
        if (DBG) {
        if (DBG) {
            View startView = (startValues != null) ? startValues.view : null;
            View startView = (startValues != null) ? startValues.view : null;
            Log.d(LOG_TAG, "Fade.onDisappear: startView, startVis, endView, endVis = " +
            Log.d(LOG_TAG, "Fade.onAppear: startView, startVis, endView, endVis = " +
                    startView + ", " + startVisibility + ", " + endView + ", " + endVisibility);
                    startView + ", " + startVisibility + ", " + endView + ", " + endVisibility);
        }
        }
        // if alpha < 1, just fade it in from the current value
        // if alpha < 1, just fade it in from the current value
        if (endView.getAlpha() == 1.0f) {
        if (endView.getAlpha() == 1.0f) {
            endView.setAlpha(0);
            endView.setAlpha(0);
            TransitionListener transitionListener = new TransitionListenerAdapter() {
                boolean mCanceled = false;
                float mPausedAlpha;

                @Override
                public void onTransitionCancel(Transition transition) {
                    endView.setAlpha(1);
                    mCanceled = true;
                }

                @Override
                public void onTransitionEnd(Transition transition) {
                    if (!mCanceled) {
                        endView.setAlpha(1);
                    }
                }

                @Override
                public void onTransitionPause(Transition transition) {
                    mPausedAlpha = endView.getAlpha();
                    endView.setAlpha(1);
                }

                @Override
                public void onTransitionResume(Transition transition) {
                    endView.setAlpha(mPausedAlpha);
                }
            };
            addListener(transitionListener);
        }
        }
        return createAnimation(endView, endView.getAlpha(), 1, null);
        return createAnimation(endView, endView.getAlpha(), 1, null);
    }
    }
+4 −3
Original line number Original line Diff line number Diff line
@@ -1240,12 +1240,13 @@ public abstract class Transition implements Cloneable {
                    View oldView = oldInfo.view;
                    View oldView = oldInfo.view;
                    TransitionValues newValues = mEndValues.viewValues != null ?
                    TransitionValues newValues = mEndValues.viewValues != null ?
                            mEndValues.viewValues.get(oldView) : null;
                            mEndValues.viewValues.get(oldView) : null;
                    if (newValues == null) {
                        newValues = mEndValues.idValues.get(oldView.getId());
                    }
                    if (oldValues != null) {
                    if (oldValues != null) {
                        // if oldValues null, then transition didn't care to stash values,
                        // if oldValues null, then transition didn't care to stash values,
                        // and won't get canceled
                        // and won't get canceled
                        if (newValues == null) {
                        if (newValues != null) {
                            cancel = true;
                        } else {
                            for (String key : oldValues.values.keySet()) {
                            for (String key : oldValues.values.keySet()) {
                                Object oldValue = oldValues.values.get(key);
                                Object oldValue = oldValues.values.get(key);
                                Object newValue = newValues.values.get(key);
                                Object newValue = newValues.values.get(key);
+3 −3
Original line number Original line Diff line number Diff line
@@ -355,10 +355,10 @@ public class TransitionManager {
//            if (transition == null) {
//            if (transition == null) {
//                transition = sDefaultTransition;
//                transition = sDefaultTransition;
//            }
//            }
//            final Transition finalTransition = transition.clone();
//            final Transition transitionClone = transition.clone();
//            sceneChangeSetup(sceneRoot, transition);
//            sceneChangeSetup(sceneRoot, transitionClone);
//            Scene.setCurrentScene(sceneRoot, null);
//            Scene.setCurrentScene(sceneRoot, null);
//            sceneChangeRunTransition(sceneRoot, finalTransition);
//            sceneChangeRunTransition(sceneRoot, transitionClone);
//        }
//        }
    }
    }
}
}