Fix Fade constructor

Bug: 30776091
Change-Id: I5905cee1764e7c47a8fa7a0cef702523be1f0c7d
diff --git a/transition/src/android/support/transition/Fade.java b/transition/src/android/support/transition/Fade.java
index 1aaa1ec..a9965a6 100644
--- a/transition/src/android/support/transition/Fade.java
+++ b/transition/src/android/support/transition/Fade.java
@@ -75,18 +75,18 @@
      */
     public Fade(int fadingMode) {
         super(true);
-        if (Build.VERSION.SDK_INT < 19) {
-            if (fadingMode < 0) {
-                mImpl = new FadeIcs(this, fadingMode);
-            } else {
-                mImpl = new FadeIcs(this);
-            }
-        } else {
-            if (fadingMode < 0) {
+        if (Build.VERSION.SDK_INT >= 19) {
+            if (fadingMode > 0) {
                 mImpl = new FadeKitKat(this, fadingMode);
             } else {
                 mImpl = new FadeKitKat(this);
             }
+        } else {
+            if (fadingMode > 0) {
+                mImpl = new FadeIcs(this, fadingMode);
+            } else {
+                mImpl = new FadeIcs(this);
+            }
         }
     }
 
diff --git a/transition/tests/src/android/support/transition/FadeTest.java b/transition/tests/src/android/support/transition/FadeTest.java
new file mode 100644
index 0000000..f8760af
--- /dev/null
+++ b/transition/tests/src/android/support/transition/FadeTest.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.support.transition;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+import android.animation.Animator;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.annotation.UiThreadTest;
+import android.view.View;
+import android.view.ViewGroup;
+
+import org.junit.Before;
+import org.junit.Test;
+
+
+public class FadeTest extends BaseTest {
+
+    private View mView;
+    private ViewGroup mRoot;
+
+    @Before
+    public void setUp() {
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                mRoot = rule.getActivity().getRoot();
+                mView = new View(rule.getActivity());
+                mRoot.addView(mView, new ViewGroup.LayoutParams(100, 100));
+            }
+        });
+    }
+
+    @Test
+    @UiThreadTest
+    public void testDisappear() {
+        final Fade fade = new Fade();
+        final TransitionValues startValues = new TransitionValues();
+        startValues.view = mView;
+        fade.captureStartValues(startValues);
+        mView.setVisibility(View.INVISIBLE);
+        final TransitionValues endValues = new TransitionValues();
+        endValues.view = mView;
+        fade.captureEndValues(endValues);
+        Animator animator = fade.createAnimator(mRoot, startValues, endValues);
+        assertThat(animator, is(notNullValue()));
+    }
+
+    @Test
+    @UiThreadTest
+    public void testAppear() {
+        mView.setVisibility(View.INVISIBLE);
+        final Fade fade = new Fade();
+        final TransitionValues startValues = new TransitionValues();
+        startValues.view = mView;
+        fade.captureStartValues(startValues);
+        mView.setVisibility(View.VISIBLE);
+        final TransitionValues endValues = new TransitionValues();
+        endValues.view = mView;
+        fade.captureEndValues(endValues);
+        Animator animator = fade.createAnimator(mRoot, startValues, endValues);
+        assertThat(animator, is(notNullValue()));
+    }
+
+    @Test
+    @UiThreadTest
+    public void testNoChange() {
+        final Fade fade = new Fade();
+        final TransitionValues startValues = new TransitionValues();
+        startValues.view = mView;
+        fade.captureStartValues(startValues);
+        final TransitionValues endValues = new TransitionValues();
+        endValues.view = mView;
+        fade.captureEndValues(endValues);
+        Animator animator = fade.createAnimator(mRoot, startValues, endValues);
+        // No visibility change; no animation should happen
+        assertThat(animator, is(nullValue()));
+    }
+
+}