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

Commit 7914a69d authored by Jiaming Liu's avatar Jiaming Liu
Browse files

Report empty home TaskFragment as invisible

Empty TaskFragment in the HOME task was incorrectly reported as visible
before this CL, causing performance issue in Launcher due to repeated
WCT to change force hidden state.

Bug: 338313509
Test: atest TaskFragmentTest

Change-Id: I9e80a514f92bd356f73970f992496d378cbf2b46
parent 057d218e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1223,7 +1223,7 @@ class TaskFragment extends WindowContainer<WindowContainer> {
                // have any running activities, not starting one and not home stack.
                shouldBeVisible = hasRunningActivities
                        || (starting != null && starting.isDescendantOf(this))
                        || isActivityTypeHome();
                        || (isActivityTypeHome() && !isEmbedded());
                break;
            }

+17 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.wm;

import static android.Manifest.permission.EMBED_ANY_APP_IN_UNTRUSTED_MODE;
import static android.Manifest.permission.MANAGE_ACTIVITY_TASKS;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
@@ -961,6 +962,22 @@ public class TaskFragmentTest extends WindowTestsBase {
        assertEquals(appLeftTop, task.getDisplayContent().mFocusedApp);
    }

    @Test
    public void testShouldBeVisible_invisibleForEmptyTaskFragment() {
        final Task task = new TaskBuilder(mSupervisor).setCreateActivity(true)
                .setWindowingMode(WINDOWING_MODE_FULLSCREEN).build();
        final TaskFragment taskFragment = new TaskFragmentBuilder(mAtm)
                .setParentTask(task)
                .build();

        // Empty taskFragment should be invisible
        assertFalse(taskFragment.shouldBeVisible(null));

        // Should be invisible even if it is ACTIVITY_TYPE_HOME.
        when(taskFragment.getActivityType()).thenReturn(ACTIVITY_TYPE_HOME);
        assertFalse(taskFragment.shouldBeVisible(null));
    }

    private WindowState createAppWindow(ActivityRecord app, String name) {
        final WindowState win = createWindow(null, TYPE_BASE_APPLICATION, app, name,
                0 /* ownerId */, false /* ownerCanAddInternalSystemWindow */, new TestIWindow());