Adding test for adjacent translucent TaskFragments
An activity that behind adjacent translucent TaskFragments
should still be visible.
Bug: 203086979
Test: atest SplitActivityLifecycleTest
Change-Id: I4bad305388d8a1e0bd08d1343ffe8b1bac4007a5
diff --git a/tests/framework/base/windowmanager/AndroidManifest.xml b/tests/framework/base/windowmanager/AndroidManifest.xml
index b3b6094..35f50d9 100644
--- a/tests/framework/base/windowmanager/AndroidManifest.xml
+++ b/tests/framework/base/windowmanager/AndroidManifest.xml
@@ -514,6 +514,10 @@
android:exported="true"
android:taskAffinity=".TaskFragmentB.embeddedTask"
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|colorMode|density|touchscreen"/>
+ <activity android:name="android.server.wm.SplitActivityLifecycleTest$TranslucentActivity"
+ android:exported="true"
+ android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|colorMode|density|touchscreen"
+ android:theme="@android:style/Theme.Translucent.NoTitleBar" />
</application>
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/SplitActivityLifecycleTest.java b/tests/framework/base/windowmanager/src/android/server/wm/SplitActivityLifecycleTest.java
index 356953b..cc73c84 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/SplitActivityLifecycleTest.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/SplitActivityLifecycleTest.java
@@ -20,6 +20,7 @@
import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.server.wm.SplitActivityLifecycleTest.ActivityB.EXTRA_SHOW_WHEN_LOCKED;
+import static android.server.wm.WindowManagerState.STATE_STARTED;
import static android.server.wm.WindowManagerState.STATE_STOPPED;
import static com.google.common.truth.Truth.assertThat;
@@ -44,6 +45,7 @@
import org.junit.Ignore;
import org.junit.Test;
+
/**
* Tests that verify the behavior of split Activity.
* <p>
@@ -520,9 +522,46 @@
// Launch Activity C without show-when-lock and verifies that both activities are stopped.
mOwnerActivity.startActivity(mIntent);
- waitAndAssertActivityState(mActivityA, STATE_STOPPED,"Activity A must be stopped");
- waitAndAssertActivityState(mActivityC, STATE_STOPPED,"Activity C must be stopped");
+ waitAndAssertActivityState(mActivityA, STATE_STOPPED, "Activity A must be stopped");
+ waitAndAssertActivityState(mActivityC, STATE_STOPPED, "Activity C must be stopped");
+ }
+ /**
+ * Verifies an Activity below adjacent translucent TaskFragments is visible.
+ */
+ @Test
+ public void testTranslucentAdjacentTaskFragment() {
+ // Create ActivityB on top of ActivityA
+ Activity activityB = startActivity(ActivityB.class);
+ waitAndAssertResumedActivity(mActivityB, "Activity B must be resumed.");
+ waitAndAssertActivityState(mActivityA, STATE_STOPPED,
+ "Activity A is occluded by Activity B, so it must be stopped.");
+
+ // Create two adjacent TaskFragments, making ActivityB and TranslucentActivity
+ // displayed side-by-side (ActivityB|TranslucentActivity).
+ mOwnerActivity.getWindowManager().getCurrentWindowMetrics().getBounds()
+ .splitVertically(mPrimaryBounds, mSideBounds);
+ final TaskFragmentCreationParams primaryParams = generatePrimaryTaskFragParams();
+ final TaskFragmentCreationParams secondaryParams = generateSideTaskFragParams();
+ IBinder primaryToken = primaryParams.getFragmentToken();
+ IBinder secondaryToken = secondaryParams.getFragmentToken();
+
+ final ComponentName translucentActivity = new ComponentName(mContext,
+ TranslucentActivity.class);
+ final Intent intent = new Intent().setComponent(translucentActivity);
+ WindowContainerTransaction wct = new WindowContainerTransaction()
+ .createTaskFragment(primaryParams)
+ .reparentActivityToTaskFragment(primaryToken, getActivityToken(activityB))
+ .createTaskFragment(secondaryParams)
+ .setAdjacentTaskFragments(primaryToken, secondaryToken, null /* params */)
+ .startActivityInTaskFragment(secondaryToken, mOwnerToken, intent,
+ null /* activityOptions */);
+ mTaskFragmentOrganizer.applyTransaction(wct);
+
+ waitAndAssertResumedActivity(translucentActivity, "TranslucentActivity must be resumed.");
+ waitAndAssertResumedActivity(mActivityB, "Activity B must be resumed.");
+ waitAndAssertActivityState(mActivityA, STATE_STARTED,
+ "Activity A is not fully occluded and must be visible and started");
}
private TaskFragmentCreationParams generatePrimaryTaskFragParams() {
@@ -562,6 +601,7 @@
public static class ActivityA extends SplitTestActivity {}
public static class ActivityB extends SplitTestActivity {}
public static class ActivityC extends SplitTestActivity {}
+ public static class TranslucentActivity extends SplitTestActivity {}
public static class SplitTestActivity extends FocusableActivity {
public static final String EXTRA_SHOW_WHEN_LOCKED = "showWhenLocked";
@Override
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java b/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java
index 0227c3c..a95ea95 100644
--- a/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/WindowManagerState.java
@@ -92,6 +92,7 @@
public class WindowManagerState {
public static final String STATE_INITIALIZING = "INITIALIZING";
+ public static final String STATE_STARTED = "STARTED";
public static final String STATE_RESUMED = "RESUMED";
public static final String STATE_PAUSED = "PAUSED";
public static final String STATE_STOPPED = "STOPPED";