Loading services/core/java/com/android/server/wm/TaskFragment.java +0 −68 Original line number Diff line number Diff line Loading @@ -24,8 +24,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; Loading Loading @@ -796,13 +794,8 @@ class TaskFragment extends WindowContainer<WindowContainer> { return TASK_FRAGMENT_VISIBILITY_VISIBLE; } boolean gotRootSplitScreenFragment = false; boolean gotOpaqueSplitScreenPrimary = false; boolean gotOpaqueSplitScreenSecondary = false; boolean gotTranslucentFullscreen = false; boolean gotTranslucentAdjacent = false; boolean gotTranslucentSplitScreenPrimary = false; boolean gotTranslucentSplitScreenSecondary = false; boolean shouldBeVisible = true; // This TaskFragment is only considered visible if all its parent TaskFragments are Loading @@ -821,8 +814,6 @@ class TaskFragment extends WindowContainer<WindowContainer> { } final List<TaskFragment> adjacentTaskFragments = new ArrayList<>(); final int windowingMode = getWindowingMode(); final boolean isAssistantType = isActivityTypeAssistant(); for (int i = parent.getChildCount() - 1; i >= 0; --i) { final WindowContainer other = parent.getChildAt(i); if (other == null) continue; Loading Loading @@ -870,37 +861,6 @@ class TaskFragment extends WindowContainer<WindowContainer> { } // Multi-window TaskFragment that matches parent bounds would occlude other children return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } else if (otherWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY && !gotOpaqueSplitScreenPrimary) { gotRootSplitScreenFragment = true; gotTranslucentSplitScreenPrimary = isTranslucent(other, starting); gotOpaqueSplitScreenPrimary = !gotTranslucentSplitScreenPrimary; if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY && gotOpaqueSplitScreenPrimary) { // Can't be visible behind another opaque TaskFragment in split-screen-primary. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } else if (otherWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY && !gotOpaqueSplitScreenSecondary) { gotRootSplitScreenFragment = true; gotTranslucentSplitScreenSecondary = isTranslucent(other, starting); gotOpaqueSplitScreenSecondary = !gotTranslucentSplitScreenSecondary; if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY && gotOpaqueSplitScreenSecondary) { // Can't be visible behind another opaque TaskFragment in split-screen-secondary return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } if (gotOpaqueSplitScreenPrimary && gotOpaqueSplitScreenSecondary) { // Can not be visible if we are in split-screen windowing mode and both halves of // the screen are opaque. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } if (isAssistantType && gotRootSplitScreenFragment) { // Assistant TaskFragment can't be visible behind split-screen. In addition to // this not making sense, it also works around an issue here we boost the z-order // of the assistant window surfaces in window manager whenever it is visible. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } final TaskFragment otherTaskFrag = other.asTaskFragment(); Loading @@ -926,34 +886,6 @@ class TaskFragment extends WindowContainer<WindowContainer> { return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } // Handle cases when there can be a translucent split-screen TaskFragment on top. switch (windowingMode) { case WINDOWING_MODE_FULLSCREEN: if (gotTranslucentSplitScreenPrimary || gotTranslucentSplitScreenSecondary) { // At least one of the split-screen TaskFragment that covers this one is // translucent. // When in split mode, home will be reparented to the secondary split while // leaving TaskFragments not supporting split below. Due to // TaskDisplayArea#assignRootTaskOrdering always adjusts home surface layer to // the bottom, this makes sure TaskFragments not in split roots won't occlude // home task unexpectedly. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } break; case WINDOWING_MODE_SPLIT_SCREEN_PRIMARY: if (gotTranslucentSplitScreenPrimary) { // Covered by translucent primary split-screen on top. return TASK_FRAGMENT_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT; } break; case WINDOWING_MODE_SPLIT_SCREEN_SECONDARY: if (gotTranslucentSplitScreenSecondary) { // Covered by translucent secondary split-screen on top. return TASK_FRAGMENT_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT; } break; } // Lastly - check if there is a translucent fullscreen TaskFragment on top. return gotTranslucentFullscreen ? TASK_FRAGMENT_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT Loading services/core/java/com/android/server/wm/WindowState.java +0 −11 Original line number Diff line number Diff line Loading @@ -2985,7 +2985,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Override public void binderDied() { try { boolean resetSplitScreenResizing = false; synchronized (mWmService.mGlobalLock) { final WindowState win = mWmService .windowForClientLocked(mSession, mClient, false); Loading @@ -3001,16 +3000,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP WindowState.this.removeIfPossible(); } } if (resetSplitScreenResizing) { try { // Note: this calls into ActivityManager, so we must *not* hold the window // manager lock while calling this. mWmService.mActivityTaskManager.setSplitScreenResizing(false); } catch (RemoteException e) { // Local call, shouldn't return RemoteException. throw e.rethrowAsRuntimeException(); } } } catch (IllegalArgumentException ex) { // This will happen if the window has already been removed. } Loading services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java +2 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,7 @@ import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; Loading Loading @@ -529,6 +530,7 @@ public class RootTaskTests extends WindowTestsBase { // TODO(b/199236198): check this is unnecessary or need to migrate after remove legacy split. @Test @Ignore public void testShouldBeVisible_SplitScreen() { // task not supporting split should be fullscreen for this test. final Task notSupportingSplitTask = createTaskForShouldBeVisibleTest( Loading Loading
services/core/java/com/android/server/wm/TaskFragment.java +0 −68 Original line number Diff line number Diff line Loading @@ -24,8 +24,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; Loading Loading @@ -796,13 +794,8 @@ class TaskFragment extends WindowContainer<WindowContainer> { return TASK_FRAGMENT_VISIBILITY_VISIBLE; } boolean gotRootSplitScreenFragment = false; boolean gotOpaqueSplitScreenPrimary = false; boolean gotOpaqueSplitScreenSecondary = false; boolean gotTranslucentFullscreen = false; boolean gotTranslucentAdjacent = false; boolean gotTranslucentSplitScreenPrimary = false; boolean gotTranslucentSplitScreenSecondary = false; boolean shouldBeVisible = true; // This TaskFragment is only considered visible if all its parent TaskFragments are Loading @@ -821,8 +814,6 @@ class TaskFragment extends WindowContainer<WindowContainer> { } final List<TaskFragment> adjacentTaskFragments = new ArrayList<>(); final int windowingMode = getWindowingMode(); final boolean isAssistantType = isActivityTypeAssistant(); for (int i = parent.getChildCount() - 1; i >= 0; --i) { final WindowContainer other = parent.getChildAt(i); if (other == null) continue; Loading Loading @@ -870,37 +861,6 @@ class TaskFragment extends WindowContainer<WindowContainer> { } // Multi-window TaskFragment that matches parent bounds would occlude other children return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } else if (otherWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY && !gotOpaqueSplitScreenPrimary) { gotRootSplitScreenFragment = true; gotTranslucentSplitScreenPrimary = isTranslucent(other, starting); gotOpaqueSplitScreenPrimary = !gotTranslucentSplitScreenPrimary; if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_PRIMARY && gotOpaqueSplitScreenPrimary) { // Can't be visible behind another opaque TaskFragment in split-screen-primary. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } else if (otherWindowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY && !gotOpaqueSplitScreenSecondary) { gotRootSplitScreenFragment = true; gotTranslucentSplitScreenSecondary = isTranslucent(other, starting); gotOpaqueSplitScreenSecondary = !gotTranslucentSplitScreenSecondary; if (windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY && gotOpaqueSplitScreenSecondary) { // Can't be visible behind another opaque TaskFragment in split-screen-secondary return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } } if (gotOpaqueSplitScreenPrimary && gotOpaqueSplitScreenSecondary) { // Can not be visible if we are in split-screen windowing mode and both halves of // the screen are opaque. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } if (isAssistantType && gotRootSplitScreenFragment) { // Assistant TaskFragment can't be visible behind split-screen. In addition to // this not making sense, it also works around an issue here we boost the z-order // of the assistant window surfaces in window manager whenever it is visible. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } final TaskFragment otherTaskFrag = other.asTaskFragment(); Loading @@ -926,34 +886,6 @@ class TaskFragment extends WindowContainer<WindowContainer> { return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } // Handle cases when there can be a translucent split-screen TaskFragment on top. switch (windowingMode) { case WINDOWING_MODE_FULLSCREEN: if (gotTranslucentSplitScreenPrimary || gotTranslucentSplitScreenSecondary) { // At least one of the split-screen TaskFragment that covers this one is // translucent. // When in split mode, home will be reparented to the secondary split while // leaving TaskFragments not supporting split below. Due to // TaskDisplayArea#assignRootTaskOrdering always adjusts home surface layer to // the bottom, this makes sure TaskFragments not in split roots won't occlude // home task unexpectedly. return TASK_FRAGMENT_VISIBILITY_INVISIBLE; } break; case WINDOWING_MODE_SPLIT_SCREEN_PRIMARY: if (gotTranslucentSplitScreenPrimary) { // Covered by translucent primary split-screen on top. return TASK_FRAGMENT_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT; } break; case WINDOWING_MODE_SPLIT_SCREEN_SECONDARY: if (gotTranslucentSplitScreenSecondary) { // Covered by translucent secondary split-screen on top. return TASK_FRAGMENT_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT; } break; } // Lastly - check if there is a translucent fullscreen TaskFragment on top. return gotTranslucentFullscreen ? TASK_FRAGMENT_VISIBILITY_VISIBLE_BEHIND_TRANSLUCENT Loading
services/core/java/com/android/server/wm/WindowState.java +0 −11 Original line number Diff line number Diff line Loading @@ -2985,7 +2985,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Override public void binderDied() { try { boolean resetSplitScreenResizing = false; synchronized (mWmService.mGlobalLock) { final WindowState win = mWmService .windowForClientLocked(mSession, mClient, false); Loading @@ -3001,16 +3000,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP WindowState.this.removeIfPossible(); } } if (resetSplitScreenResizing) { try { // Note: this calls into ActivityManager, so we must *not* hold the window // manager lock while calling this. mWmService.mActivityTaskManager.setSplitScreenResizing(false); } catch (RemoteException e) { // Local call, shouldn't return RemoteException. throw e.rethrowAsRuntimeException(); } } } catch (IllegalArgumentException ex) { // This will happen if the window has already been removed. } Loading
services/tests/wmtests/src/com/android/server/wm/RootTaskTests.java +2 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,7 @@ import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; Loading Loading @@ -529,6 +530,7 @@ public class RootTaskTests extends WindowTestsBase { // TODO(b/199236198): check this is unnecessary or need to migrate after remove legacy split. @Test @Ignore public void testShouldBeVisible_SplitScreen() { // task not supporting split should be fullscreen for this test. final Task notSupportingSplitTask = createTaskForShouldBeVisibleTest( Loading