OSDN Git Service

Null check for fade start alpha value.
authorGeorge Mount <mount@google.com>
Wed, 10 Feb 2016 23:14:17 +0000 (15:14 -0800)
committerGeorge Mount <mount@google.com>
Wed, 10 Feb 2016 23:14:17 +0000 (15:14 -0800)
Bug 27105186
Fade previously hadn't had any values saved over those captured
by Visibility. If a Transition merged two Visibility transitions,
it could avoid calling captureStartValues for the Fade transition.
This change prevents an NPE in that case. The combined transition
won't get the intermediate alpha value, but at least it won't
crash.

Change-Id: I8e5720caafda56b017dfe1cc0b16ebdf246e90c4

core/java/android/transition/Fade.java

index b2e8d33..627183f 100644 (file)
@@ -16,8 +16,6 @@
 
 package android.transition;
 
-import com.android.internal.R;
-
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ObjectAnimator;
@@ -28,6 +26,8 @@ import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.android.internal.R;
+
 /**
  * This transition tracks changes to the visibility of target views in the
  * start and end scenes and fades views in or out when they become visible
@@ -144,12 +144,9 @@ public class Fade extends Visibility {
             Log.d(LOG_TAG, "Fade.onAppear: startView, startVis, endView, endVis = " +
                     startView + ", " + view);
         }
-        float startAlpha = 0;
-        if (startValues != null) {
-            startAlpha = (Float) startValues.values.get(PROPNAME_TRANSITION_ALPHA);
-            if (startAlpha == 1) {
-                startAlpha = 0;
-            }
+        float startAlpha = getStartAlpha(startValues, 0);
+        if (startAlpha == 1) {
+            startAlpha = 0;
         }
         return createAnimation(view, startAlpha, 1);
     }
@@ -157,11 +154,19 @@ public class Fade extends Visibility {
     @Override
     public Animator onDisappear(ViewGroup sceneRoot, final View view, TransitionValues startValues,
             TransitionValues endValues) {
-        float startAlpha = 1;
+        float startAlpha = getStartAlpha(startValues, 1);
+        return createAnimation(view, startAlpha, 0);
+    }
+
+    private static float getStartAlpha(TransitionValues startValues, float fallbackValue) {
+        float startAlpha = fallbackValue;
         if (startValues != null) {
-            startAlpha = (Float) startValues.values.get(PROPNAME_TRANSITION_ALPHA);
+            Float startAlphaFloat = (Float) startValues.values.get(PROPNAME_TRANSITION_ALPHA);
+            if (startAlphaFloat != null) {
+                startAlpha = startAlphaFloat;
+            }
         }
-        return createAnimation(view, startAlpha, 0);
+        return startAlpha;
     }
 
     private static class FadeAnimatorListener extends AnimatorListenerAdapter {