Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3defa2d authored by Issei Suzuki's avatar Issei Suzuki Committed by Android (Google) Code Review
Browse files

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

parents e6c5d04a 4a46a92e
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
@@ -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);

+2 −0
Original line number Diff line number Diff line
@@ -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"
+22 −1
Original line number Diff line number Diff line
@@ -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);