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

Commit a8a9bc58 authored by Andrii Kulian's avatar Andrii Kulian
Browse files

Make usage of Configuration.EMPTY safe

With current approach there is a high chance of making a programming
error and altering the state of singleton Configuration.EMPTY object,
because previously configuration was usually set by link to it.

This CL changes the behavior to create Configuration member objects
only once and alter their state afterwards.

Test: Manual and existing tests still pass.
Change-Id: Ie267c2fbf555f137670b7bd2cd251b817c69bc8e
parent e1a81fcc
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -59,7 +59,8 @@ public final class ResourcesKey {
        mOverlayDirs = overlayDirs;
        mLibDirs = libDirs;
        mDisplayId = displayId;
        mOverrideConfiguration = overrideConfig != null ? overrideConfig : Configuration.EMPTY;
        mOverrideConfiguration = new Configuration(overrideConfig != null
                ? overrideConfig : Configuration.EMPTY);
        mCompatInfo = compatInfo != null ? compatInfo : CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;

        int hash = 17;
+6 −4
Original line number Diff line number Diff line
@@ -26,18 +26,20 @@ public class DisplayAdjustments {
    public static final DisplayAdjustments DEFAULT_DISPLAY_ADJUSTMENTS = new DisplayAdjustments();

    private volatile CompatibilityInfo mCompatInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
    private Configuration mConfiguration = Configuration.EMPTY;
    private Configuration mConfiguration;

    public DisplayAdjustments() {
    }

    public DisplayAdjustments(Configuration configuration) {
        mConfiguration = configuration;
        mConfiguration = new Configuration(configuration != null
                ? configuration : Configuration.EMPTY);
    }

    public DisplayAdjustments(DisplayAdjustments daj) {
        setCompatibilityInfo(daj.mCompatInfo);
        mConfiguration = daj.mConfiguration;
        mConfiguration = new Configuration(daj.mConfiguration != null
                ? daj.mConfiguration : Configuration.EMPTY);
    }

    public void setCompatibilityInfo(CompatibilityInfo compatInfo) {
@@ -62,7 +64,7 @@ public class DisplayAdjustments {
            throw new IllegalArgumentException(
                    "setConfiguration: Cannot modify DEFAULT_DISPLAY_ADJUSTMENTS");
        }
        mConfiguration = configuration != null ? configuration : Configuration.EMPTY;
        mConfiguration.setTo(configuration != null ? configuration : Configuration.EMPTY);
    }

    public Configuration getConfiguration() {
+2 −3
Original line number Diff line number Diff line
@@ -1558,8 +1558,8 @@ final class TaskRecord extends ConfigurationContainer {
    }

    /** Clears passed config and fills it with new override values. */
    private Configuration calculateOverrideConfig(Configuration config, Rect bounds,
            Rect insetBounds, boolean overrideWidth, boolean overrideHeight) {
    private void calculateOverrideConfig(Configuration config, Rect bounds, Rect insetBounds,
            boolean overrideWidth, boolean overrideHeight) {
        mTmpNonDecorBounds.set(bounds);
        mTmpStableBounds.set(bounds);
        subtractNonDecorInsets(
@@ -1599,7 +1599,6 @@ final class TaskRecord extends ConfigurationContainer {

        config.smallestScreenWidthDp = mService.mWindowManager.getSmallestWidthForTaskBounds(
                insetBounds != null ? insetBounds : bounds);
        return config;
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -2734,7 +2734,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                }
            }

            if (overrideConfig != null && overrideConfig != EMPTY) {
            if (overrideConfig != null && !overrideConfig.equals(EMPTY)) {
                if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "addStartingWindow: creating context based"
                        + " on overrideConfig" + overrideConfig + " for starting window");
                final Context overrideContext = context.createConfigurationContext(overrideConfig);