Merge "Fix unexpected closure of the bubble." into rvc-dev

This commit is contained in:
Issei Suzuki
2020-06-11 10:39:16 +00:00
committed by Android (Google) Code Review
3 changed files with 29 additions and 11 deletions

View File

@@ -1436,15 +1436,6 @@ class Task extends WindowContainer<WindowContainer> {
mAtmService.getTaskChangeNotificationController().notifyTaskStackChanged();
}
final boolean isRootTask = isRootTask();
if (isRootTask) {
final DisplayContent display = getDisplayContent();
if (display.isSingleTaskInstance()) {
mAtmService.notifySingleTaskDisplayEmpty(display.mDisplayId);
}
display.mDisplayContent.setLayoutNeeded();
}
if (hasChild()) {
updateEffectiveIntent();
@@ -1465,7 +1456,7 @@ class Task extends WindowContainer<WindowContainer> {
} else if (!mReuseTask && !mCreatedByOrganizer) {
// Remove entire task if it doesn't have any activity left and it isn't marked for reuse
// or created by task organizer.
if (!isRootTask) {
if (!isRootTask()) {
getStack().removeChild(this, reason);
}
EventLogTags.writeWmTaskRemoved(mTaskId,
@@ -2817,6 +2808,10 @@ class Task extends WindowContainer<WindowContainer> {
if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing taskId=" + mTaskId);
EventLogTags.writeWmTaskRemoved(mTaskId, "removeTask");
if (mDisplayContent != null && mDisplayContent.isSingleTaskInstance()) {
mAtmService.notifySingleTaskDisplayEmpty(mDisplayContent.mDisplayId);
}
// If applicable let the TaskOrganizer know the Task is vanishing.
setTaskOrganizer(null);

View File

@@ -54,6 +54,8 @@
<activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityViewTestActivity" />
<activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityInActivityView"
android:resizeableActivity="true" />
<activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityLaunchesNewActivityInActivityView"
android:resizeableActivity="true" />
<activity android:name="com.android.server.wm.TaskStackChangedListenerTest$LandscapeActivity"
android:screenOrientation="sensorLandscape"
android:showWhenLocked="true"

View File

@@ -299,6 +299,20 @@ public class TaskStackChangedListenerTest {
waitForCallback(singleTaskDisplayDrawnLatch);
}
public static class ActivityLaunchesNewActivityInActivityView extends TestActivity {
private boolean mActivityBLaunched = false;
@Override
protected void onPostResume() {
super.onPostResume();
if (mActivityBLaunched) {
return;
}
mActivityBLaunched = true;
startActivity(new Intent(this, ActivityB.class));
}
}
@Test
public void testSingleTaskDisplayEmpty() throws Exception {
final Instrumentation instrumentation = getInstrumentation();
@@ -335,13 +349,20 @@ public class TaskStackChangedListenerTest {
});
waitForCallback(activityViewReadyLatch);
// 1. start ActivityLaunchesNewActivityInActivityView in an ActivityView
// 2. ActivityLaunchesNewActivityInActivityView launches ActivityB
// 3. ActivityB finishes self.
// 4. Verify ITaskStackListener#onSingleTaskDisplayEmpty is not called yet.
final Context context = instrumentation.getContext();
Intent intent = new Intent(context, ActivityInActivityView.class);
Intent intent = new Intent(context, ActivityLaunchesNewActivityInActivityView.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
activityView.startActivity(intent);
waitForCallback(singleTaskDisplayDrawnLatch);
UiDevice.getInstance(getInstrumentation()).waitForIdle();
assertEquals(1, singleTaskDisplayEmptyLatch.getCount());
// 5. Release the container, and ActivityLaunchesNewActivityInActivityView finishes.
// 6. Verify ITaskStackListener#onSingleTaskDisplayEmpty is called.
activityView.release();
waitForCallback(activityViewDestroyedLatch);
waitForCallback(singleTaskDisplayEmptyLatch);