summaryrefslogtreecommitdiffstats
path: root/tests/TransitionTests
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2013-06-17 16:50:50 -0700
committerChet Haase <chet@google.com>2013-06-20 15:35:04 -0700
commit6ebe3de331efd00ba23bc4191d4a82cfa4c39160 (patch)
tree8899ae2504fddbfbdaba69f85bc37f11e65ab022 /tests/TransitionTests
parentcb64e3e6d33228221a3730e03292b2c1b2b8649b (diff)
downloadframeworks_base-6ebe3de331efd00ba23bc4191d4a82cfa4c39160.zip
frameworks_base-6ebe3de331efd00ba23bc4191d4a82cfa4c39160.tar.gz
frameworks_base-6ebe3de331efd00ba23bc4191d4a82cfa4c39160.tar.bz2
Fix transitions on disappearing view hiearchies
Previously, Fade transitions did not work correctly on hirearchies; they only handled individual views. in particular, they would side-effect all fading views by removing them from their parent to fade them out in the overlay of the scene root. This worked for the fade-out transition itself, but caused problems when those same hierarchies were added back in and another Fade was run on the hierarchy, because now all of the views inside that parent node had been removed, so they didn't fade in at all. The fix was to add logic in Visibility to detect when a disappearing view was inside a hierarchy that was also disappearing, and to skip the fade on the views inside that hierarchy, leaving only the top-most disappearing view to be faded out, thus preserving the hierarchy under that faded-out group. Along the way, there were various cleanups, fixes, and refactorings in the transition code, and slight API modifications. Issue #9406371 Transitions: Removing view hierarchy not working correctly Issue #9470255 Transitions: Separate different transitions by Scene Root Change-Id: I42e80dac6097fee740f651dcc0535f2c57c11ebb
Diffstat (limited to 'tests/TransitionTests')
-rw-r--r--tests/TransitionTests/AndroidManifest.xml7
-rw-r--r--tests/TransitionTests/res/layout/fading_hierarchy.xml39
-rw-r--r--tests/TransitionTests/src/com/android/transitiontests/FadingHierarchy.java54
3 files changed, 100 insertions, 0 deletions
diff --git a/tests/TransitionTests/AndroidManifest.xml b/tests/TransitionTests/AndroidManifest.xml
index 98174ab..3861164 100644
--- a/tests/TransitionTests/AndroidManifest.xml
+++ b/tests/TransitionTests/AndroidManifest.xml
@@ -219,6 +219,13 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
+ <activity android:label="FadingHierachy"
+ android:name=".FadingHierarchy">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
</application>
diff --git a/tests/TransitionTests/res/layout/fading_hierarchy.xml b/tests/TransitionTests/res/layout/fading_hierarchy.xml
new file mode 100644
index 0000000..a24a6b6
--- /dev/null
+++ b/tests/TransitionTests/res/layout/fading_hierarchy.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:id="@+id/container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/submit"
+ android:onClick="sendMessage"
+ android:id="@+id/sceneSwitchButton"/>
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/button"/>
+ <LinearLayout
+ android:orientation="vertical"
+ android:id="@+id/removingContainer"
+ android:layout_width="wrap_content"
+ android:layout_height="200dip">
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/removingButton"
+ android:id="@+id/removingButton"/>
+ </LinearLayout>
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/button"/>
+ </LinearLayout>
+</LinearLayout> \ No newline at end of file
diff --git a/tests/TransitionTests/src/com/android/transitiontests/FadingHierarchy.java b/tests/TransitionTests/src/com/android/transitiontests/FadingHierarchy.java
new file mode 100644
index 0000000..e0fe379
--- /dev/null
+++ b/tests/TransitionTests/src/com/android/transitiontests/FadingHierarchy.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2013 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 com.android.transitiontests;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.transition.Scene;
+import android.view.transition.TransitionManager;
+import android.widget.Button;
+
+public class FadingHierarchy extends Activity {
+
+ ViewGroup mRemovingContainer, mContainer;
+ Button mRemovingButton;
+ boolean mVisible = true;
+ ViewGroup mInnerContainerParent;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.fading_hierarchy);
+
+ mContainer = (ViewGroup) findViewById(R.id.container);
+ mRemovingContainer = (ViewGroup) findViewById(R.id.removingContainer);
+ mInnerContainerParent = (ViewGroup) mRemovingContainer.getParent();
+
+ mRemovingButton = (Button) findViewById(R.id.removingButton);
+ }
+
+ public void sendMessage(View view) {
+ TransitionManager.beginDelayedTransition(mContainer, null);
+ if (mVisible) {
+ mInnerContainerParent.removeView(mRemovingContainer);
+ } else {
+ mInnerContainerParent.addView(mRemovingContainer);
+ }
+ mVisible = !mVisible;
+ }
+}