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

Commit 3b44c8b0 authored by Louis Chang's avatar Louis Chang Committed by Automerger Merge Worker
Browse files

Merge "Do not propagate always-on-top config to child containers" into tm-dev...

Merge "Do not propagate always-on-top config to child containers" into tm-dev am: 0e52eb3a am: 9d1a5663 am: 72267a45

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18492569



Change-Id: I7c280b9341b420f2db898808419d8695da9c382c
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 6784afd5 72267a45
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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;
    }
+8 −0
Original line number Diff line number Diff line
@@ -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);
+15 −0
Original line number Diff line number Diff line
@@ -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();
+0 −2
Original line number Diff line number Diff line
@@ -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(