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

Commit dd57f686 authored by Chris Li's avatar Chris Li Committed by Android (Google) Code Review
Browse files

Merge "Cleanup empty and virtual override display settings on display removal" into main

parents 138763de 8986dae9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -522,7 +522,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    boolean mWaitingForConfig;

    // TODO(multi-display): remove some of the usages.
    @VisibleForTesting
    boolean isDefaultDisplay;

    /** Detect user tapping outside of current focused task bounds .*/
@@ -3358,6 +3357,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
            mRootWindowContainer.mTaskSupervisor
                    .getKeyguardController().onDisplayRemoved(mDisplayId);
            mWallpaperController.resetLargestDisplay(mDisplay);
            mWmService.mDisplayWindowSettings.onDisplayRemoved(this);
        } finally {
            mDisplayReady = false;
        }
+58 −30
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.view.Display;
import android.view.DisplayInfo;
import android.view.IWindowManager;
import android.view.Surface;
import android.view.WindowManager;
import android.view.WindowManager.DisplayImePolicy;

import com.android.server.policy.WindowManagerPolicy;
@@ -45,15 +46,20 @@ import java.util.Objects;
 * delegates the persistence and lookup of settings values to the supplied {@link SettingsProvider}.
 */
class DisplayWindowSettings {
    @NonNull
    private final WindowManagerService mService;
    @NonNull
    private final SettingsProvider mSettingsProvider;

    DisplayWindowSettings(WindowManagerService service, SettingsProvider settingsProvider) {
    DisplayWindowSettings(@NonNull WindowManagerService service,
            @NonNull SettingsProvider settingsProvider) {
        mService = service;
        mSettingsProvider = settingsProvider;
    }

    void setUserRotation(DisplayContent displayContent, int rotationMode, int rotation) {
    void setUserRotation(@NonNull DisplayContent displayContent,
            @WindowManagerPolicy.UserRotationMode int rotationMode,
            @Surface.Rotation int rotation) {
        final DisplayInfo displayInfo = displayContent.getDisplayInfo();
        final SettingsProvider.SettingsEntry overrideSettings =
                mSettingsProvider.getOverrideSettings(displayInfo);
@@ -62,7 +68,7 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    void setForcedSize(DisplayContent displayContent, int width, int height) {
    void setForcedSize(@NonNull DisplayContent displayContent, int width, int height) {
        if (displayContent.isDefaultDisplay) {
            final String sizeString = (width == 0 || height == 0) ? "" : (width + "," + height);
            Settings.Global.putString(mService.mContext.getContentResolver(),
@@ -77,21 +83,20 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    void setForcedDensity(DisplayInfo info, int density, int userId) {
    void setForcedDensity(@NonNull DisplayInfo info, int density, int userId) {
        if (info.displayId == Display.DEFAULT_DISPLAY) {
            final String densityString = density == 0 ? "" : Integer.toString(density);
            Settings.Secure.putStringForUser(mService.mContext.getContentResolver(),
                    Settings.Secure.DISPLAY_DENSITY_FORCED, densityString, userId);
        }

        final DisplayInfo displayInfo = info;
        final SettingsProvider.SettingsEntry overrideSettings =
                mSettingsProvider.getOverrideSettings(displayInfo);
                mSettingsProvider.getOverrideSettings(info);
        overrideSettings.mForcedDensity = density;
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
        mSettingsProvider.updateOverrideSettings(info, overrideSettings);
    }

    void setForcedScalingMode(DisplayContent displayContent, @ForceScalingMode int mode) {
    void setForcedScalingMode(@NonNull DisplayContent displayContent, @ForceScalingMode int mode) {
        if (displayContent.isDefaultDisplay) {
            Settings.Global.putInt(mService.mContext.getContentResolver(),
                    Settings.Global.DISPLAY_SCALING_FORCE, mode);
@@ -104,7 +109,7 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    void setFixedToUserRotation(DisplayContent displayContent, int fixedToUserRotation) {
    void setFixedToUserRotation(@NonNull DisplayContent displayContent, int fixedToUserRotation) {
        final DisplayInfo displayInfo = displayContent.getDisplayInfo();
        final SettingsProvider.SettingsEntry overrideSettings =
                mSettingsProvider.getOverrideSettings(displayInfo);
@@ -112,8 +117,8 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    void setIgnoreOrientationRequest(
            DisplayContent displayContent, boolean ignoreOrientationRequest) {
    void setIgnoreOrientationRequest(@NonNull DisplayContent displayContent,
            boolean ignoreOrientationRequest) {
        final DisplayInfo displayInfo = displayContent.getDisplayInfo();
        final SettingsProvider.SettingsEntry overrideSettings =
                mSettingsProvider.getOverrideSettings(displayInfo);
@@ -121,7 +126,9 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    private int getWindowingModeLocked(SettingsProvider.SettingsEntry settings, DisplayContent dc) {
    @WindowConfiguration.WindowingMode
    private int getWindowingModeLocked(@NonNull SettingsProvider.SettingsEntry settings,
            @NonNull DisplayContent dc) {
        int windowingMode = settings.mWindowingMode;
        // This display used to be in freeform, but we don't support freeform anymore, so fall
        // back to fullscreen.
@@ -139,13 +146,15 @@ class DisplayWindowSettings {
        return windowingMode;
    }

    int getWindowingModeLocked(DisplayContent dc) {
    @WindowConfiguration.WindowingMode
    int getWindowingModeLocked(@NonNull DisplayContent dc) {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);
        return getWindowingModeLocked(settings, dc);
    }

    void setWindowingModeLocked(DisplayContent dc, int mode) {
    void setWindowingModeLocked(@NonNull DisplayContent dc,
            @WindowConfiguration.WindowingMode int mode) {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry overrideSettings =
                mSettingsProvider.getOverrideSettings(displayInfo);
@@ -157,7 +166,8 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    int getRemoveContentModeLocked(DisplayContent dc) {
    @WindowManager.RemoveContentMode
    int getRemoveContentModeLocked(@NonNull DisplayContent dc) {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);
        if (settings.mRemoveContentMode == REMOVE_CONTENT_MODE_UNDEFINED) {
@@ -171,7 +181,8 @@ class DisplayWindowSettings {
        return settings.mRemoveContentMode;
    }

    void setRemoveContentModeLocked(DisplayContent dc, int mode) {
    void setRemoveContentModeLocked(@NonNull DisplayContent dc,
            @WindowManager.RemoveContentMode int mode) {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry overrideSettings =
                mSettingsProvider.getOverrideSettings(displayInfo);
@@ -179,14 +190,14 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    boolean shouldShowWithInsecureKeyguardLocked(DisplayContent dc) {
    boolean shouldShowWithInsecureKeyguardLocked(@NonNull DisplayContent dc) {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);
        return settings.mShouldShowWithInsecureKeyguard != null
                ? settings.mShouldShowWithInsecureKeyguard : false;
    }

    void setShouldShowWithInsecureKeyguardLocked(DisplayContent dc, boolean shouldShow) {
    void setShouldShowWithInsecureKeyguardLocked(@NonNull DisplayContent dc, boolean shouldShow) {
        if (!dc.isPrivate() && shouldShow) {
            throw new IllegalArgumentException("Public display can't be allowed to show content"
                    + " when locked");
@@ -199,7 +210,7 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    void setDontMoveToTop(DisplayContent dc, boolean dontMoveToTop) {
    void setDontMoveToTop(@NonNull DisplayContent dc, boolean dontMoveToTop) {
        DisplayInfo displayInfo = dc.getDisplayInfo();
        SettingsProvider.SettingsEntry overrideSettings =
                mSettingsProvider.getSettings(displayInfo);
@@ -207,7 +218,7 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    boolean shouldShowSystemDecorsLocked(DisplayContent dc) {
    boolean shouldShowSystemDecorsLocked(@NonNull DisplayContent dc) {
        if (dc.getDisplayId() == Display.DEFAULT_DISPLAY) {
            // Default display should show system decors.
            return true;
@@ -218,7 +229,7 @@ class DisplayWindowSettings {
        return settings.mShouldShowSystemDecors != null ? settings.mShouldShowSystemDecors : false;
    }

    void setShouldShowSystemDecorsLocked(DisplayContent dc, boolean shouldShow) {
    void setShouldShowSystemDecorsLocked(@NonNull DisplayContent dc, boolean shouldShow) {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry overrideSettings =
                mSettingsProvider.getOverrideSettings(displayInfo);
@@ -226,7 +237,8 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    @DisplayImePolicy int getImePolicyLocked(DisplayContent dc) {
    @DisplayImePolicy
    int getImePolicyLocked(@NonNull DisplayContent dc) {
        if (dc.getDisplayId() == Display.DEFAULT_DISPLAY) {
            // Default display should show IME.
            return DISPLAY_IME_POLICY_LOCAL;
@@ -238,7 +250,7 @@ class DisplayWindowSettings {
                : DISPLAY_IME_POLICY_FALLBACK_DISPLAY;
    }

    void setDisplayImePolicy(DisplayContent dc, @DisplayImePolicy int imePolicy) {
    void setDisplayImePolicy(@NonNull DisplayContent dc, @DisplayImePolicy int imePolicy) {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry overrideSettings =
                mSettingsProvider.getOverrideSettings(displayInfo);
@@ -246,11 +258,11 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    void applySettingsToDisplayLocked(DisplayContent dc) {
    void applySettingsToDisplayLocked(@NonNull DisplayContent dc) {
        applySettingsToDisplayLocked(dc, /* includeRotationSettings */ true);
    }

    void applySettingsToDisplayLocked(DisplayContent dc, boolean includeRotationSettings) {
    void applySettingsToDisplayLocked(@NonNull DisplayContent dc, boolean includeRotationSettings) {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);

@@ -274,9 +286,8 @@ class DisplayWindowSettings {
        dc.mIsDensityForced = hasDensityOverride;
        dc.mIsSizeForced = hasSizeOverride;

        final boolean ignoreDisplayCutout = settings.mIgnoreDisplayCutout != null
        dc.mIgnoreDisplayCutout = settings.mIgnoreDisplayCutout != null
                ? settings.mIgnoreDisplayCutout : false;
        dc.mIgnoreDisplayCutout = ignoreDisplayCutout;

        final int width = hasSizeOverride ? settings.mForcedWidth : dc.mInitialDisplayWidth;
        final int height = hasSizeOverride ? settings.mForcedHeight : dc.mInitialDisplayHeight;
@@ -296,7 +307,7 @@ class DisplayWindowSettings {
        if (includeRotationSettings) applyRotationSettingsToDisplayLocked(dc);
    }

    void applyRotationSettingsToDisplayLocked(DisplayContent dc) {
    void applyRotationSettingsToDisplayLocked(@NonNull DisplayContent dc) {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);

@@ -315,7 +326,7 @@ class DisplayWindowSettings {
     * @return {@code true} if any settings for this display has changed; {@code false} if nothing
     * changed.
     */
    boolean updateSettingsForDisplay(DisplayContent dc) {
    boolean updateSettingsForDisplay(@NonNull DisplayContent dc) {
        final TaskDisplayArea defaultTda = dc.getDefaultTaskDisplayArea();
        if (defaultTda != null && defaultTda.getWindowingMode() != getWindowingModeLocked(dc)) {
            // For the time being the only thing that may change is windowing mode, so just update
@@ -326,6 +337,13 @@ class DisplayWindowSettings {
        return false;
    }

    /**
     * Called when the given {@link DisplayContent} is removed to cleanup.
     */
    void onDisplayRemoved(@NonNull DisplayContent dc) {
        mSettingsProvider.onDisplayRemoved(dc.getDisplayInfo());
    }

    /**
     * Provides the functionality to lookup the {@link SettingsEntry settings} for a given
     * {@link DisplayInfo}.
@@ -363,20 +381,30 @@ class DisplayWindowSettings {
         */
        void updateOverrideSettings(@NonNull DisplayInfo info, @NonNull SettingsEntry overrides);

        /**
         * Called when a display is removed to cleanup.
         */
        void onDisplayRemoved(@NonNull DisplayInfo info);

        /**
         * Settings for a display.
         */
        class SettingsEntry {
            @WindowConfiguration.WindowingMode
            int mWindowingMode = WindowConfiguration.WINDOWING_MODE_UNDEFINED;
            @Nullable
            @WindowManagerPolicy.UserRotationMode
            Integer mUserRotationMode;
            @Nullable
            @Surface.Rotation
            Integer mUserRotation;
            int mForcedWidth;
            int mForcedHeight;
            int mForcedDensity;
            @Nullable
            @ForceScalingMode
            Integer mForcedScalingMode;
            @WindowManager.RemoveContentMode
            int mRemoveContentMode = REMOVE_CONTENT_MODE_UNDEFINED;
            @Nullable
            Boolean mShouldShowWithInsecureKeyguard;
@@ -395,7 +423,7 @@ class DisplayWindowSettings {

            SettingsEntry() {}

            SettingsEntry(SettingsEntry copyFrom) {
            SettingsEntry(@NonNull SettingsEntry copyFrom) {
                setTo(copyFrom);
            }

+71 −22
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.server.wm;

import static android.view.Display.TYPE_VIRTUAL;
import static android.view.WindowManager.DISPLAY_IME_POLICY_FALLBACK_DISPLAY;
import static android.view.WindowManager.DISPLAY_IME_POLICY_LOCAL;
import static android.view.WindowManager.REMOVE_CONTENT_MODE_UNDEFINED;
@@ -28,6 +29,8 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.WindowConfiguration;
import android.os.Environment;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.AtomicFile;
import android.util.Slog;
import android.util.Xml;
@@ -49,7 +52,6 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

/**
@@ -86,7 +88,9 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
        void finishWrite(OutputStream os, boolean success);
    }

    @NonNull
    private ReadableSettings mBaseSettings;
    @NonNull
    private final WritableSettings mOverrideSettings;

    DisplayWindowSettingsProvider() {
@@ -155,6 +159,16 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
        mOverrideSettings.updateSettingsEntry(info, overrides);
    }

    @Override
    public void onDisplayRemoved(@NonNull DisplayInfo info) {
        mOverrideSettings.onDisplayRemoved(info);
    }

    @VisibleForTesting
    int getOverrideSettingsSize() {
        return mOverrideSettings.mSettings.size();
    }

    /**
     * Class that allows reading {@link SettingsEntry entries} from a
     * {@link ReadableSettingsStorage}.
@@ -168,14 +182,15 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
         */
        @DisplayIdentifierType
        protected int mIdentifierType;
        protected final Map<String, SettingsEntry> mSettings = new HashMap<>();
        @NonNull
        protected final ArrayMap<String, SettingsEntry> mSettings = new ArrayMap<>();

        ReadableSettings(ReadableSettingsStorage settingsStorage) {
        ReadableSettings(@NonNull ReadableSettingsStorage settingsStorage) {
            loadSettings(settingsStorage);
        }

        @Nullable
        final SettingsEntry getSettingsEntry(DisplayInfo info) {
        final SettingsEntry getSettingsEntry(@NonNull DisplayInfo info) {
            final String identifier = getIdentifier(info);
            SettingsEntry settings;
            // Try to get corresponding settings using preferred identifier for the current config.
@@ -193,7 +208,8 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
        }

        /** Gets the identifier of choice for the current config. */
        protected final String getIdentifier(DisplayInfo displayInfo) {
        @NonNull
        protected final String getIdentifier(@NonNull DisplayInfo displayInfo) {
            if (mIdentifierType == IDENTIFIER_PORT && displayInfo.address != null) {
                // Config suggests using port as identifier for physical displays.
                if (displayInfo.address instanceof DisplayAddress.Physical) {
@@ -203,7 +219,7 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
            return displayInfo.uniqueId;
        }

        private void loadSettings(ReadableSettingsStorage settingsStorage) {
        private void loadSettings(@NonNull ReadableSettingsStorage settingsStorage) {
            FileData fileData = readSettings(settingsStorage);
            if (fileData != null) {
                mIdentifierType = fileData.mIdentifierType;
@@ -217,15 +233,18 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
     * {@link WritableSettingsStorage}.
     */
    private static final class WritableSettings extends ReadableSettings {
        @NonNull
        private final WritableSettingsStorage mSettingsStorage;
        @NonNull
        private final ArraySet<String> mVirtualDisplayIdentifiers = new ArraySet<>();

        WritableSettings(WritableSettingsStorage settingsStorage) {
        WritableSettings(@NonNull WritableSettingsStorage settingsStorage) {
            super(settingsStorage);
            mSettingsStorage = settingsStorage;
        }

        @NonNull
        SettingsEntry getOrCreateSettingsEntry(DisplayInfo info) {
        SettingsEntry getOrCreateSettingsEntry(@NonNull DisplayInfo info) {
            final String identifier = getIdentifier(info);
            SettingsEntry settings;
            // Try to get corresponding settings using preferred identifier for the current config.
@@ -243,21 +262,47 @@ class DisplayWindowSettingsProvider implements SettingsProvider {

            settings = new SettingsEntry();
            mSettings.put(identifier, settings);
            if (info.type == TYPE_VIRTUAL) {
                // Keep track of virtual display. We don't want to write virtual display settings to
                // file.
                mVirtualDisplayIdentifiers.add(identifier);
            }
            return settings;
        }

        void updateSettingsEntry(DisplayInfo info, SettingsEntry settings) {
        void updateSettingsEntry(@NonNull DisplayInfo info, @NonNull SettingsEntry settings) {
            final SettingsEntry overrideSettings = getOrCreateSettingsEntry(info);
            final boolean changed = overrideSettings.setTo(settings);
            if (changed) {
            if (changed && info.type != TYPE_VIRTUAL) {
                writeSettings();
            }
        }

        void onDisplayRemoved(@NonNull DisplayInfo info) {
            final String identifier = getIdentifier(info);
            if (!mSettings.containsKey(identifier)) {
                return;
            }
            if (mVirtualDisplayIdentifiers.remove(identifier)
                    || mSettings.get(identifier).isEmpty()) {
                // Don't keep track of virtual display or empty settings to avoid growing the cached
                // map.
                mSettings.remove(identifier);
            }
        }

        private void writeSettings() {
            FileData fileData = new FileData();
            final FileData fileData = new FileData();
            fileData.mIdentifierType = mIdentifierType;
            fileData.mSettings.putAll(mSettings);
            final int size = mSettings.size();
            for (int i = 0; i < size; i++) {
                final String identifier = mSettings.keyAt(i);
                if (mVirtualDisplayIdentifiers.contains(identifier)) {
                    // Do not write virtual display settings to file.
                    continue;
                }
                fileData.mSettings.put(identifier, mSettings.get(identifier));
            }
            DisplayWindowSettingsProvider.writeSettings(mSettingsStorage, fileData);
        }
    }
@@ -283,7 +328,7 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
    }

    @Nullable
    private static FileData readSettings(ReadableSettingsStorage storage) {
    private static FileData readSettings(@NonNull ReadableSettingsStorage storage) {
        InputStream stream;
        try {
            stream = storage.openRead();
@@ -348,13 +393,14 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
        return fileData;
    }

    private static int getIntAttribute(TypedXmlPullParser parser, String name, int defaultValue) {
    private static int getIntAttribute(@NonNull TypedXmlPullParser parser, @NonNull String name,
            int defaultValue) {
        return parser.getAttributeInt(null, name, defaultValue);
    }

    @Nullable
    private static Integer getIntegerAttribute(TypedXmlPullParser parser, String name,
            @Nullable Integer defaultValue) {
    private static Integer getIntegerAttribute(@NonNull TypedXmlPullParser parser,
            @NonNull String name, @Nullable Integer defaultValue) {
        try {
            return parser.getAttributeInt(null, name);
        } catch (Exception ignored) {
@@ -363,8 +409,8 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
    }

    @Nullable
    private static Boolean getBooleanAttribute(TypedXmlPullParser parser, String name,
            @Nullable Boolean defaultValue) {
    private static Boolean getBooleanAttribute(@NonNull TypedXmlPullParser parser,
            @NonNull String name, @Nullable Boolean defaultValue) {
        try {
            return parser.getAttributeBoolean(null, name);
        } catch (Exception ignored) {
@@ -372,7 +418,7 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
        }
    }

    private static void readDisplay(TypedXmlPullParser parser, FileData fileData)
    private static void readDisplay(@NonNull TypedXmlPullParser parser, @NonNull FileData fileData)
            throws NumberFormatException, XmlPullParserException, IOException {
        String name = parser.getAttributeValue(null, "name");
        if (name != null) {
@@ -420,7 +466,7 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
        XmlUtils.skipCurrentTag(parser);
    }

    private static void readConfig(TypedXmlPullParser parser, FileData fileData)
    private static void readConfig(@NonNull TypedXmlPullParser parser, @NonNull FileData fileData)
            throws NumberFormatException,
            XmlPullParserException, IOException {
        fileData.mIdentifierType = getIntAttribute(parser, "identifier",
@@ -428,7 +474,8 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
        XmlUtils.skipCurrentTag(parser);
    }

    private static void writeSettings(WritableSettingsStorage storage, FileData data) {
    private static void writeSettings(@NonNull WritableSettingsStorage storage,
            @NonNull FileData data) {
        OutputStream stream;
        try {
            stream = storage.startWrite();
@@ -525,7 +572,8 @@ class DisplayWindowSettingsProvider implements SettingsProvider {

    private static final class FileData {
        int mIdentifierType;
        final Map<String, SettingsEntry> mSettings = new HashMap<>();
        @NonNull
        final Map<String, SettingsEntry> mSettings = new ArrayMap<>();

        @Override
        public String toString() {
@@ -537,6 +585,7 @@ class DisplayWindowSettingsProvider implements SettingsProvider {
    }

    private static final class AtomicFileStorage implements WritableSettingsStorage {
        @NonNull
        private final AtomicFile mAtomicFile;

        AtomicFileStorage(@NonNull AtomicFile atomicFile) {
+2 −0
Original line number Diff line number Diff line
@@ -552,7 +552,9 @@ public class WindowManagerService extends IWindowManager.Stub
    final PackageManagerInternal mPmInternal;
    private final TestUtilityService mTestUtilityService;

    @NonNull
    final DisplayWindowSettingsProvider mDisplayWindowSettingsProvider;
    @NonNull
    final DisplayWindowSettings mDisplayWindowSettings;

    /** If the system should display notifications for apps displaying an alert window. */
+66 −0

File changed.

Preview size limit exceeded, changes collapsed.

Loading