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

Commit d2fe6571 authored by Charles Chen's avatar Charles Chen Committed by Android (Google) Code Review
Browse files

Merge "Update resources when config update of sysUiContext" into main

parents 05e684c4 e773f462
Loading
Loading
Loading
Loading
+40 −7
Original line number Diff line number Diff line
@@ -162,6 +162,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.content.ComponentCallbacks;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ActivityInfo;
@@ -456,6 +457,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    private DisplayInfo mLastDisplayInfoOverride;

    private final DisplayMetrics mDisplayMetrics = new DisplayMetrics();
    @NonNull
    private final DisplayPolicy mDisplayPolicy;
    private final DisplayRotation mDisplayRotation;

@@ -542,6 +544,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    /** Remove this display when animation on it has completed. */
    private boolean mDeferredRemoval;

    @NonNull
    final PinnedTaskController mPinnedTaskController;

    private final LinkedList<ActivityRecord> mTmpUpdateAllDrawn = new LinkedList();
@@ -1101,6 +1104,29 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        w.updateResizingWindowIfNeeded();
    };

    /**
     * Called to update fields retrieve from {@link #getDisplayUiContext()} resources when
     * there's a configuration update on {@link #getDisplayUiContext()}.
     */
    @NonNull
    private final ComponentCallbacks mSysUiContextConfigCallback = new ComponentCallbacks() {

        @Override
        public void onConfigurationChanged(@NonNull Configuration newConfig) {
            synchronized (mWmService.mGlobalLock) {
                if (mDisplayReady) {
                    mDisplayPolicy.onConfigurationChanged();
                    mMinSizeOfResizeableTaskDp = getMinimalTaskSizeDp();
                }
            }
        }

        @Override
        public void onLowMemory() {
            // Do nothing.
        }
    };

    /**
     * Create new {@link DisplayContent} instance, add itself to the root window container and
     * initialize direct children.
@@ -2797,11 +2823,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        final int lastOrientation = getConfiguration().orientation;
        final int lastWindowingMode = getWindowingMode();
        super.onConfigurationChanged(newParentConfig);
        if (mDisplayPolicy != null) {
            mDisplayPolicy.onConfigurationChanged();
            mPinnedTaskController.onPostDisplayConfigurationChanged();
            mMinSizeOfResizeableTaskDp = getMinimalTaskSizeDp();
        if (!Flags.trackSystemUiContextBeforeWms()) {
            mSysUiContextConfigCallback.onConfigurationChanged(newParentConfig);
        }
        mPinnedTaskController.onPostDisplayConfigurationChanged();
        // Update IME parent if needed.
        updateImeParent();

@@ -3381,6 +3406,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                    .getKeyguardController().onDisplayRemoved(mDisplayId);
            mWallpaperController.resetLargestDisplay(mDisplay);
            mWmService.mDisplayWindowSettings.onDisplayRemoved(this);
            if (Flags.trackSystemUiContextBeforeWms()) {
                getDisplayUiContext().unregisterComponentCallbacks(mSysUiContextConfigCallback);
            }
        } finally {
            mDisplayReady = false;
        }
@@ -5429,7 +5457,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
            reconfigureDisplayLocked();
            onRequestedOverrideConfigurationChanged(getRequestedOverrideConfiguration());
            mWmService.mDisplayNotificationController.dispatchDisplayAdded(this);
            // Attach the SystemUiContext to this DisplayContent the get latest configuration.
            // Attach the SystemUiContext to this DisplayContent to get latest configuration.
            // Note that the SystemUiContext will be removed automatically if this DisplayContent
            // is detached.
            registerSystemUiContext();
@@ -5437,11 +5465,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    }

    private void registerSystemUiContext() {
        final Context systemUiContext = getDisplayUiContext();
        final WindowProcessController wpc = mAtmService.getProcessController(
                getDisplayUiContext().getIApplicationThread());
                systemUiContext.getIApplicationThread());
        mWmService.mWindowContextListenerController.registerWindowContainerListener(
                wpc, getDisplayUiContext().getWindowContextToken(), this,
                wpc, systemUiContext.getWindowContextToken(), this,
                INVALID_WINDOW_TYPE, null /* options */);
        if (Flags.trackSystemUiContextBeforeWms()) {
            systemUiContext.registerComponentCallbacks(mSysUiContextConfigCallback);
        }
    }

    @Override
@@ -6620,6 +6652,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        forAllTasks((t) -> { t.getRootTask().removeChild(t, "removeAllTasks"); });
    }

    @NonNull
    Context getDisplayUiContext() {
        return mDisplayPolicy.getSystemUiContext();
    }
+1 −0
Original line number Diff line number Diff line
@@ -1865,6 +1865,7 @@ public class DisplayPolicy {
        return mContext;
    }

    @NonNull
    Context getSystemUiContext() {
        return mUiContext;
    }
+8 −0
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ import com.android.server.policy.PermissionPolicyInternal;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.testutils.StubTransaction;
import com.android.server.uri.UriGrantsManagerInternal;
import com.android.window.flags.Flags;

import org.junit.rules.TestRule;
import org.junit.runner.Description;
@@ -657,6 +658,13 @@ public class SystemServicesTestRule implements TestRule {
            AppWarnings appWarnings = getAppWarningsLocked();
            spyOn(appWarnings);
            doNothing().when(appWarnings).onStartActivity(any());

            if (Flags.trackSystemUiContextBeforeWms()) {
                final Context uiContext = getUiContext();
                spyOn(uiContext);
                doNothing().when(uiContext).registerComponentCallbacks(any());
                doNothing().when(uiContext).unregisterComponentCallbacks(any());
            }
        }

        @Override
+9 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Insets;
import android.graphics.Rect;
@@ -39,6 +40,7 @@ import android.view.DisplayCutout;
import android.view.DisplayInfo;

import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry;
import com.android.window.flags.Flags;

class TestDisplayContent extends DisplayContent {

@@ -79,6 +81,13 @@ class TestDisplayContent extends DisplayContent {
        WindowTestsBase.suppressInsetsAnimation(insetsPolicy.getPermanentControlTarget());
        WindowTestsBase.suppressInsetsAnimation(insetsPolicy.getTransientControlTarget());

        if (Flags.trackSystemUiContextBeforeWms()) {
            final Context uiContext = getDisplayUiContext();
            spyOn(uiContext);
            doNothing().when(uiContext).registerComponentCallbacks(any());
            doNothing().when(uiContext).unregisterComponentCallbacks(any());
        }

        // For devices that set the sysprop ro.bootanim.set_orientation_<display_id>
        // See DisplayRotation#readDefaultDisplayRotation for context.
        // Without that, meaning of height and width in context of the tests can be swapped if
+3 −5
Original line number Diff line number Diff line
@@ -861,11 +861,9 @@ public class WindowTestsBase extends SystemServiceTestsBase {
    /** Creates a {@link DisplayContent} and adds it to the system. */
    private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy,
            @Nullable SettingsEntry overrideSettings) {
        final DisplayContent display =
                new TestDisplayContent.Builder(mAtm, info)
        final DisplayContent dc = new TestDisplayContent.Builder(mAtm, info)
                .setOverrideSettings(overrideSettings)
                .build();
        final DisplayContent dc = display.mDisplayContent;
        // this display can show IME.
        dc.mWmService.mDisplayWindowSettings.setDisplayImePolicy(dc, imePolicy);
        return dc;