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

Commit 34d2e8ba authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Inject AppCompatConfiguration to WindowManager" into main

parents fd353244 f5782de3
Loading
Loading
Loading
Loading
+3 −19
Original line number Diff line number Diff line
@@ -16,16 +16,13 @@

package com.android.server.wm;

import static android.os.StrictMode.setThreadPolicy;

import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;

import android.annotation.MainThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Environment;
import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy;
import android.util.AtomicFile;
import android.util.Slog;

@@ -122,7 +119,7 @@ class AppCompatConfigurationPersister {
        final File prefFiles = new File(configFolder, letterboxConfigurationFileName);
        mConfigurationFile = new AtomicFile(prefFiles);
        mPersisterQueue = persisterQueue;
        runWithDiskReadsThreadPolicy(this::readCurrentConfiguration);
        readCurrentConfiguration();
    }

    /**
@@ -212,6 +209,7 @@ class AppCompatConfigurationPersister {
                mDefaultTabletopModeReachabilitySupplier.get();
    }

    @MainThread
    private void readCurrentConfiguration() {
        if (!mConfigurationFile.exists()) {
            useDefaultValue();
@@ -272,20 +270,6 @@ class AppCompatConfigurationPersister {
        }
    }

    // The LetterboxConfigurationDeviceConfig needs to access the
    // file with the current reachability position once when the
    // device boots. Because DisplayThread uses allowIo=false
    // accessing a file triggers a DiskReadViolation.
    // Here we use StrictMode to allow the current thread to read
    // the AtomicFile once in the current thread restoring the
    // original ThreadPolicy after that.
    private void runWithDiskReadsThreadPolicy(Runnable runnable) {
        final ThreadPolicy currentPolicy = StrictMode.getThreadPolicy();
        setThreadPolicy(new ThreadPolicy.Builder().permitDiskReads().build());
        runnable.run();
        setThreadPolicy(currentPolicy);
    }

    private static class UpdateValuesCommand implements
            PersisterQueue.WriteQueueItem<UpdateValuesCommand> {

+12 −7
Original line number Diff line number Diff line
@@ -1186,9 +1186,13 @@ public class WindowManagerService extends IWindowManager.Stub
    public static WindowManagerService main(final Context context, final InputManagerService im,
            final boolean showBootMsgs, WindowManagerPolicy policy,
            ActivityTaskManagerService atm) {
        // Using SysUI context to have access to Material colors extracted from Wallpaper.
        final AppCompatConfiguration appCompat = new AppCompatConfiguration(
                ActivityThread.currentActivityThread().getSystemUiContext());

        final WindowManagerService wms = main(context, im, showBootMsgs, policy, atm,
                new DisplayWindowSettingsProvider(), SurfaceControl.Transaction::new,
                SurfaceControl.Builder::new);
                SurfaceControl.Builder::new, appCompat);
        WindowManagerGlobal.setWindowManagerServiceForSystemProcess(wms);
        return wms;
    }
@@ -1202,12 +1206,14 @@ public class WindowManagerService extends IWindowManager.Stub
            final boolean showBootMsgs, WindowManagerPolicy policy, ActivityTaskManagerService atm,
            DisplayWindowSettingsProvider displayWindowSettingsProvider,
            Supplier<SurfaceControl.Transaction> transactionFactory,
            Supplier<SurfaceControl.Builder> surfaceControlFactory) {
            Supplier<SurfaceControl.Builder> surfaceControlFactory,
            AppCompatConfiguration appCompat) {

        final WindowManagerService[] wms = new WindowManagerService[1];
        DisplayThread.getHandler().runWithScissors(() ->
                wms[0] = new WindowManagerService(context, im, showBootMsgs, policy, atm,
                        displayWindowSettingsProvider, transactionFactory,
                        surfaceControlFactory), 0);
                        surfaceControlFactory, appCompat), 0);
        return wms[0];
    }

@@ -1231,7 +1237,8 @@ public class WindowManagerService extends IWindowManager.Stub
            boolean showBootMsgs, WindowManagerPolicy policy, ActivityTaskManagerService atm,
            DisplayWindowSettingsProvider displayWindowSettingsProvider,
            Supplier<SurfaceControl.Transaction> transactionFactory,
            Supplier<SurfaceControl.Builder> surfaceControlFactory) {
            Supplier<SurfaceControl.Builder> surfaceControlFactory,
            AppCompatConfiguration appCompat) {
        installLock(this, INDEX_WINDOW);
        mGlobalLock = atm.getGlobalLock();
        mAtmService = atm;
@@ -1283,9 +1290,7 @@ public class WindowManagerService extends IWindowManager.Stub
                    | WindowInsets.Type.navigationBars();
        }

        mAppCompatConfiguration = new AppCompatConfiguration(
                // Using SysUI context to have access to Material colors extracted from Wallpaper.
                ActivityThread.currentActivityThread().getSystemUiContext());
        mAppCompatConfiguration = appCompat;

        mInputManager = inputManager; // Must be before createDisplayContentLocked.
        mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class);
+7 −1
Original line number Diff line number Diff line
@@ -133,6 +133,7 @@ public class SystemServicesTestRule implements TestRule {
    private final ArrayList<DeviceConfig.OnPropertiesChangedListener> mDeviceConfigListeners =
            new ArrayList<>();

    private AppCompatConfiguration mAppCompat;
    private Description mDescription;
    private Context mContext;
    private StaticMockitoSession mMockitoSession;
@@ -379,6 +380,11 @@ public class SystemServicesTestRule implements TestRule {
                mock(ActivityManagerService.class, withSettings().stubOnly());
        mAtmService = new TestActivityTaskManagerService(mContext, amService);
        LocalServices.addService(ActivityTaskManagerInternal.class, mAtmService.getAtmInternal());

        // AppCompatConfiguration
        mAppCompat = new AppCompatConfiguration(
                ActivityThread.currentActivityThread().getSystemUiContext());

        // Create a fake WindowProcessController for the system process.
        final WindowProcessController wpc =
                addProcess("android", "system", 1485 /* pid */, 1000 /* uid */);
@@ -394,7 +400,7 @@ public class SystemServicesTestRule implements TestRule {
        mWmService = WindowManagerService.main(
                mContext, mImService, false, wmPolicy, mAtmService,
                testDisplayWindowSettingsProvider, StubTransaction::new,
                MockSurfaceControlBuilder::new);
                MockSurfaceControlBuilder::new, mAppCompat);
        spyOn(mWmService);
        spyOn(mWmService.mRoot);
        // Invoked during {@link ActivityStack} creation.