Merge "Do not propagate always-on-top config to child containers" into tm-dev am: 0e52eb3aa7 am: 626fa3b45a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18492569 Change-Id: Ibde53f5879bc37ffdb748b412643bdf88ebc0d14 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -330,6 +330,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;
|
||||
}
|
||||
|
||||
@@ -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)) {
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
@@ -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();
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user