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

Commit 3a9777c8 authored by Piotr Wilczyński's avatar Piotr Wilczyński Committed by Android (Google) Code Review
Browse files

Merge "Back up peak refresh rate and min refresh rate" into main

parents 47e8c39b 176a63a1
Loading
Loading
Loading
Loading
+7 −29
Original line number Diff line number Diff line
@@ -16,11 +16,12 @@

package com.android.settings.development;

import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
import static com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay;

import android.content.Context;
import android.hardware.display.DisplayManager;
import android.provider.Settings;
import android.util.Log;
import android.view.Display;

import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -34,9 +35,6 @@ import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPreferenceController
        implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {

    @VisibleForTesting
    static float DEFAULT_REFRESH_RATE = 60f;

    @VisibleForTesting
    static float NO_CONFIG = 0f;

@@ -48,17 +46,7 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr

    public ForcePeakRefreshRatePreferenceController(Context context) {
        super(context);

        final DisplayManager dm = context.getSystemService(DisplayManager.class);
        final Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);

        if (display == null) {
            Log.w(TAG, "No valid default display device");
            mPeakRefreshRate = DEFAULT_REFRESH_RATE;
        } else {
            mPeakRefreshRate = findPeakRefreshRate(display.getSupportedModes());
        }

        mPeakRefreshRate = findHighestRefreshRateForDefaultDisplay(context);
        Log.d(TAG, "DEFAULT_REFRESH_RATE : " + DEFAULT_REFRESH_RATE
            + " mPeakRefreshRate : " + mPeakRefreshRate);
    }
@@ -107,7 +95,7 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr

    @VisibleForTesting
    void forcePeakRefreshRate(boolean enable) {
        final float peakRefreshRate = enable ? mPeakRefreshRate : NO_CONFIG;
        final float peakRefreshRate = enable ? Float.POSITIVE_INFINITY : NO_CONFIG;
        Settings.System.putFloat(mContext.getContentResolver(),
            Settings.System.MIN_REFRESH_RATE, peakRefreshRate);
    }
@@ -116,17 +104,7 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr
        final float peakRefreshRate = Settings.System.getFloat(mContext.getContentResolver(),
            Settings.System.MIN_REFRESH_RATE, NO_CONFIG);

        return peakRefreshRate >= mPeakRefreshRate;
    }

    private float findPeakRefreshRate(Display.Mode[] modes) {
        float peakRefreshRate = DEFAULT_REFRESH_RATE;
        for (Display.Mode mode : modes) {
            if (Math.round(mode.getRefreshRate()) > peakRefreshRate) {
                peakRefreshRate = mode.getRefreshRate();
            }
        }

        return peakRefreshRate;
        return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate)
                || Float.isInfinite(peakRefreshRate);
    }
}
+13 −26
Original line number Diff line number Diff line
@@ -16,13 +16,15 @@

package com.android.settings.display;

import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
import static com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay;

import android.content.Context;
import android.hardware.display.DisplayManager;
import android.os.Handler;
import android.provider.DeviceConfig;
import android.provider.Settings;
import android.util.Log;
import android.view.Display;

import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -39,8 +41,6 @@ import java.util.concurrent.Executor;
public class PeakRefreshRatePreferenceController extends TogglePreferenceController
        implements LifecycleObserver, OnStart, OnStop {

    @VisibleForTesting static float DEFAULT_REFRESH_RATE = 60f;

    @VisibleForTesting float mPeakRefreshRate;

    private static final String TAG = "RefreshRatePrefCtr";
@@ -48,7 +48,7 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl

    private final Handler mHandler;
    private final IDeviceConfigChange mOnDeviceConfigChange;
    private final DeviceConfigDisplaySettings mDeviceConfigDisplaySettings;
    private DeviceConfigDisplaySettings mDeviceConfigDisplaySettings;
    private Preference mPreference;

    private interface IDeviceConfigChange {
@@ -65,17 +65,7 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
                        updateState(mPreference);
                    }
                };

        final DisplayManager dm = mContext.getSystemService(DisplayManager.class);
        final Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);

        if (display == null) {
            Log.w(TAG, "No valid default display device");
            mPeakRefreshRate = DEFAULT_REFRESH_RATE;
        } else {
            mPeakRefreshRate = findPeakRefreshRate(display.getSupportedModes());
        }

        mPeakRefreshRate = findHighestRefreshRateForDefaultDisplay(context);
        Log.d(
                TAG,
                "DEFAULT_REFRESH_RATE : "
@@ -111,12 +101,13 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
                        mContext.getContentResolver(),
                        Settings.System.PEAK_REFRESH_RATE,
                        getDefaultPeakRefreshRate());
        return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate);
        return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate)
                || Float.isInfinite(peakRefreshRate);
    }

    @Override
    public boolean setChecked(boolean isChecked) {
        final float peakRefreshRate = isChecked ? mPeakRefreshRate : DEFAULT_REFRESH_RATE;
        final float peakRefreshRate = isChecked ? Float.POSITIVE_INFINITY : DEFAULT_REFRESH_RATE;
        Log.d(TAG, "setChecked to : " + peakRefreshRate);

        return Settings.System.putFloat(
@@ -139,17 +130,13 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
    }

    @VisibleForTesting
    float findPeakRefreshRate(Display.Mode[] modes) {
        float peakRefreshRate = DEFAULT_REFRESH_RATE;
        for (Display.Mode mode : modes) {
            if (Math.round(mode.getRefreshRate()) > peakRefreshRate) {
                peakRefreshRate = mode.getRefreshRate();
            }
        }
        return peakRefreshRate;
    void injectDeviceConfigDisplaySettings(
            DeviceConfigDisplaySettings deviceConfigDisplaySettings) {
        mDeviceConfigDisplaySettings = deviceConfigDisplaySettings;
    }

    private class DeviceConfigDisplaySettings
    @VisibleForTesting
    class DeviceConfigDisplaySettings
            implements DeviceConfig.OnPropertiesChangedListener, Executor {
        public void startListening() {
            DeviceConfig.addOnPropertiesChangedListener(
+3 −4
Original line number Diff line number Diff line
@@ -16,8 +16,9 @@

package com.android.settings.development;

import static com.android.settings.development.ForcePeakRefreshRatePreferenceController.DEFAULT_REFRESH_RATE;
import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
import static com.android.settings.development.ForcePeakRefreshRatePreferenceController.NO_CONFIG;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.verify;
@@ -38,8 +39,6 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

import android.util.Log;

@RunWith(RobolectricTestRunner.class)
public class ForcePeakRefreshRatePreferenceControllerTest {

@@ -68,7 +67,7 @@ public class ForcePeakRefreshRatePreferenceControllerTest {
        mController.onPreferenceChange(mPreference, true);

        assertThat(Settings.System.getFloat(mContext.getContentResolver(),
                Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(88f);
                Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isPositiveInfinity();
    }

    @Test
+27 −16
Original line number Diff line number Diff line
@@ -16,21 +16,24 @@

package com.android.settings.display;

import static com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.android.settings.display.PeakRefreshRatePreferenceController.DEFAULT_REFRESH_RATE;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.Mockito.when;

import android.content.Context;
import android.provider.Settings;
import android.view.Display;

import androidx.preference.SwitchPreference;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -42,10 +45,16 @@ public class PeakRefreshRatePreferenceControllerTest {
    private PeakRefreshRatePreferenceController mController;
    private SwitchPreference mPreference;

    @Mock
    private PeakRefreshRatePreferenceController.DeviceConfigDisplaySettings
            mDeviceConfigDisplaySettings;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mController = new PeakRefreshRatePreferenceController(mContext, "key");
        mController.injectDeviceConfigDisplaySettings(mDeviceConfigDisplaySettings);
        mPreference = new SwitchPreference(RuntimeEnvironment.application);
    }

@@ -70,13 +79,13 @@ public class PeakRefreshRatePreferenceControllerTest {
    }

    @Test
    public void setChecked_enableSmoothDisplay_setCurrentRefreshRate() {
    public void setChecked_enableSmoothDisplay_setRefreshRateToInfinity() {
        mController.mPeakRefreshRate = 88f;
        mController.setChecked(true);

        assertThat(Settings.System.getFloat(mContext.getContentResolver(),
                Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE))
                .isEqualTo(88.0f);
                .isPositiveInfinity();
    }

    @Test
@@ -104,18 +113,20 @@ public class PeakRefreshRatePreferenceControllerTest {
    }

    @Test
    public void findPeakRefreshRate_moreThanOneHigherThanDefault() {
        Display.Mode lower = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE - 1);
        Display.Mode def = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE);
        Display.Mode higher = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE + 1);
        Display.Mode higher1 = new Display.Mode(0, 0, 0, DEFAULT_REFRESH_RATE + 2);

        assertThat(mController.findPeakRefreshRate(
                new Display.Mode[] {lower, def, higher, higher1}))
                .isEqualTo(DEFAULT_REFRESH_RATE + 2);
        assertThat(mController.findPeakRefreshRate(
                new Display.Mode[] {lower, def, higher1, higher}))
                .isEqualTo(DEFAULT_REFRESH_RATE + 2);
    public void isChecked_default_returnTrue() {
        mController.mPeakRefreshRate = 88f;
        when(mDeviceConfigDisplaySettings.getDefaultPeakRefreshRate())
                .thenReturn(mController.mPeakRefreshRate);

        assertThat(mController.isChecked()).isTrue();
    }

    @Test
    public void isChecked_default_returnFalse() {
        mController.mPeakRefreshRate = 88f;
        when(mDeviceConfigDisplaySettings.getDefaultPeakRefreshRate()).thenReturn(60f);

        assertThat(mController.isChecked()).isFalse();
    }

    private void enableSmoothDisplayPreference() {