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

Commit a0f62f21 authored by Kriti Dang's avatar Kriti Dang
Browse files

Change the way in which user preferred display mode gets applied

If a display has display specific user pref mode, global user pref mode
should not overide it.

Test: atest DefaultDisplayModeTest
Bug: 201782019

Change-Id: I44e0fbc5177873ed658a4c41032b319f311420ba
parent 9c74d734
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -141,7 +141,6 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -1754,10 +1753,6 @@ public final class DisplayManagerService extends SystemService {

    void setUserPreferredDisplayModeInternal(int displayId, Display.Mode mode) {
        synchronized (mSyncRoot) {
            if (Objects.equals(mUserPreferredMode, mode) && displayId == Display.INVALID_DISPLAY) {
                return;
            }

            if (mode != null && !isResolutionAndRefreshRateValid(mode)
                    && displayId == Display.INVALID_DISPLAY) {
                throw new IllegalArgumentException("width, height and refresh rate of mode should "
@@ -1811,7 +1806,15 @@ public final class DisplayManagerService extends SystemService {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.USER_PREFERRED_RESOLUTION_WIDTH, resolutionWidth);
        mDisplayDeviceRepo.forEachLocked((DisplayDevice device) -> {
            // If there is a display specific mode, don't override that
            final Point deviceUserPreferredResolution =
                    mPersistentDataStore.getUserPreferredResolution(device);
            final float deviceRefreshRate =
                    mPersistentDataStore.getUserPreferredRefreshRate(device);
            if (!isValidResolution(deviceUserPreferredResolution)
                    && !isValidRefreshRate(deviceRefreshRate)) {
                device.setUserPreferredDisplayModeLocked(mode);
            }
        });
    }

@@ -3531,6 +3534,14 @@ public final class DisplayManagerService extends SystemService {
                && (brightness <= PowerManager.BRIGHTNESS_MAX);
    }

    private static boolean isValidResolution(Point resolution) {
        return (resolution != null) && (resolution.x > 0) && (resolution.y > 0);
    }

    private static boolean isValidRefreshRate(float refreshRate) {
        return !Float.isNaN(refreshRate) && (refreshRate > 0.0f);
    }

    private final class LocalService extends DisplayManagerInternal {

        @Override