Loading core/java/android/app/WindowConfiguration.java +8 −0 Original line number Diff line number Diff line Loading @@ -345,6 +345,14 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu mAlwaysOnTop = alwaysOnTop ? ALWAYS_ON_TOP_ON : ALWAYS_ON_TOP_OFF; } /** * Unsets always-on-top to undefined. * @hide */ public void unsetAlwaysOnTop() { mAlwaysOnTop = ALWAYS_ON_TOP_UNDEFINED; } private void setAlwaysOnTop(@AlwaysOnTop int alwaysOnTop) { mAlwaysOnTop = alwaysOnTop; } Loading services/core/java/com/android/server/wm/ConfigurationContainer.java +8 −0 Original line number Diff line number Diff line Loading @@ -126,6 +126,10 @@ public abstract class ConfigurationContainer<E extends ConfigurationContainer> { mResolvedTmpConfig.setTo(mResolvedOverrideConfiguration); resolveOverrideConfiguration(newParentConfig); mFullConfiguration.setTo(newParentConfig); // Do not inherit always-on-top property from parent, otherwise the always-on-top // property is propagated to all children. In that case, newly added child is // always being positioned at bottom (behind the always-on-top siblings). mFullConfiguration.windowConfiguration.unsetAlwaysOnTop(); mFullConfiguration.updateFrom(mResolvedOverrideConfiguration); onMergedOverrideConfigurationChanged(); if (!mResolvedTmpConfig.equals(mResolvedOverrideConfiguration)) { Loading Loading @@ -228,6 +232,10 @@ public abstract class ConfigurationContainer<E extends ConfigurationContainer> { final ConfigurationContainer parent = getParent(); if (parent != null) { mMergedOverrideConfiguration.setTo(parent.getMergedOverrideConfiguration()); // Do not inherit always-on-top property from parent, otherwise the always-on-top // property is propagated to all children. In that case, newly added child is // always being positioned at bottom (behind the always-on-top siblings). mMergedOverrideConfiguration.windowConfiguration.unsetAlwaysOnTop(); mMergedOverrideConfiguration.updateFrom(mResolvedOverrideConfiguration); } else { mMergedOverrideConfiguration.setTo(mResolvedOverrideConfiguration); Loading services/tests/wmtests/src/com/android/server/wm/ConfigurationContainerTests.java +15 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; 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_UNDEFINED; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; Loading Loading @@ -209,6 +210,20 @@ public class ConfigurationContainerTests { assertEquals(mergedConfig2, child2.getConfiguration()); } @Test public void testSetAlwaysOnTop() { final TestConfigurationContainer root = new TestConfigurationContainer(); final TestConfigurationContainer child1 = root.addChild(); final TestConfigurationContainer child2 = root.addChild(); root.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); root.setAlwaysOnTop(true); final TestConfigurationContainer child3 = root.addChild(); assertEquals(true, root.isAlwaysOnTop()); assertEquals(false, child1.isAlwaysOnTop()); assertEquals(false, child2.isAlwaysOnTop()); assertEquals(false, child3.isAlwaysOnTop()); } @Test public void testSetWindowingMode() { final TestConfigurationContainer root = new TestConfigurationContainer(); Loading services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java +0 −2 Original line number Diff line number Diff line Loading @@ -674,8 +674,6 @@ public class TaskDisplayAreaTests extends WindowTestsBase { taskDisplayArea.positionChildAt(POSITION_TOP, alwaysOnTopRootTask, false /* includingParents */); assertTrue(alwaysOnTopRootTask.isAlwaysOnTop()); // Ensure always on top state is synced to the children of the root task. assertTrue(alwaysOnTopRootTask.getTopNonFinishingActivity().isAlwaysOnTop()); assertEquals(alwaysOnTopRootTask, taskDisplayArea.getTopRootTask()); final Task pinnedRootTask = taskDisplayArea.createRootTask( Loading Loading
core/java/android/app/WindowConfiguration.java +8 −0 Original line number Diff line number Diff line Loading @@ -345,6 +345,14 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu mAlwaysOnTop = alwaysOnTop ? ALWAYS_ON_TOP_ON : ALWAYS_ON_TOP_OFF; } /** * Unsets always-on-top to undefined. * @hide */ public void unsetAlwaysOnTop() { mAlwaysOnTop = ALWAYS_ON_TOP_UNDEFINED; } private void setAlwaysOnTop(@AlwaysOnTop int alwaysOnTop) { mAlwaysOnTop = alwaysOnTop; } Loading
services/core/java/com/android/server/wm/ConfigurationContainer.java +8 −0 Original line number Diff line number Diff line Loading @@ -126,6 +126,10 @@ public abstract class ConfigurationContainer<E extends ConfigurationContainer> { mResolvedTmpConfig.setTo(mResolvedOverrideConfiguration); resolveOverrideConfiguration(newParentConfig); mFullConfiguration.setTo(newParentConfig); // Do not inherit always-on-top property from parent, otherwise the always-on-top // property is propagated to all children. In that case, newly added child is // always being positioned at bottom (behind the always-on-top siblings). mFullConfiguration.windowConfiguration.unsetAlwaysOnTop(); mFullConfiguration.updateFrom(mResolvedOverrideConfiguration); onMergedOverrideConfigurationChanged(); if (!mResolvedTmpConfig.equals(mResolvedOverrideConfiguration)) { Loading Loading @@ -228,6 +232,10 @@ public abstract class ConfigurationContainer<E extends ConfigurationContainer> { final ConfigurationContainer parent = getParent(); if (parent != null) { mMergedOverrideConfiguration.setTo(parent.getMergedOverrideConfiguration()); // Do not inherit always-on-top property from parent, otherwise the always-on-top // property is propagated to all children. In that case, newly added child is // always being positioned at bottom (behind the always-on-top siblings). mMergedOverrideConfiguration.windowConfiguration.unsetAlwaysOnTop(); mMergedOverrideConfiguration.updateFrom(mResolvedOverrideConfiguration); } else { mMergedOverrideConfiguration.setTo(mResolvedOverrideConfiguration); Loading
services/tests/wmtests/src/com/android/server/wm/ConfigurationContainerTests.java +15 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; 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_UNDEFINED; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; Loading Loading @@ -209,6 +210,20 @@ public class ConfigurationContainerTests { assertEquals(mergedConfig2, child2.getConfiguration()); } @Test public void testSetAlwaysOnTop() { final TestConfigurationContainer root = new TestConfigurationContainer(); final TestConfigurationContainer child1 = root.addChild(); final TestConfigurationContainer child2 = root.addChild(); root.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW); root.setAlwaysOnTop(true); final TestConfigurationContainer child3 = root.addChild(); assertEquals(true, root.isAlwaysOnTop()); assertEquals(false, child1.isAlwaysOnTop()); assertEquals(false, child2.isAlwaysOnTop()); assertEquals(false, child3.isAlwaysOnTop()); } @Test public void testSetWindowingMode() { final TestConfigurationContainer root = new TestConfigurationContainer(); Loading
services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java +0 −2 Original line number Diff line number Diff line Loading @@ -674,8 +674,6 @@ public class TaskDisplayAreaTests extends WindowTestsBase { taskDisplayArea.positionChildAt(POSITION_TOP, alwaysOnTopRootTask, false /* includingParents */); assertTrue(alwaysOnTopRootTask.isAlwaysOnTop()); // Ensure always on top state is synced to the children of the root task. assertTrue(alwaysOnTopRootTask.getTopNonFinishingActivity().isAlwaysOnTop()); assertEquals(alwaysOnTopRootTask, taskDisplayArea.getTopRootTask()); final Task pinnedRootTask = taskDisplayArea.createRootTask( Loading