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

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

Merge "Revert "Back up the smooth display setting"" into udc-dev

parents 8155b72c eef23f44
Loading
Loading
Loading
Loading
+39 −11
Original line number Diff line number Diff line
@@ -16,18 +16,17 @@

package com.android.settings.development;

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

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;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;

import com.android.internal.display.RefreshRateSettingsUtils;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
@@ -35,6 +34,12 @@ 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;

    @VisibleForTesting
    float mPeakRefreshRate;

@@ -43,8 +48,17 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr

    public ForcePeakRefreshRatePreferenceController(Context context) {
        super(context);
        mPeakRefreshRate =
                RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(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());
        }

        Log.d(TAG, "DEFAULT_REFRESH_RATE : " + DEFAULT_REFRESH_RATE
            + " mPeakRefreshRate : " + mPeakRefreshRate);
    }
@@ -85,20 +99,34 @@ public class ForcePeakRefreshRatePreferenceController extends DeveloperOptionsPr
    @Override
    protected void onDeveloperOptionsSwitchDisabled() {
        super.onDeveloperOptionsSwitchDisabled();
        Settings.System.putInt(mContext.getContentResolver(),
                Settings.System.FORCE_PEAK_REFRESH_RATE, 0);
        Settings.System.putFloat(mContext.getContentResolver(),
            Settings.System.MIN_REFRESH_RATE, NO_CONFIG);

        ((SwitchPreference) mPreference).setChecked(false);
    }

    @VisibleForTesting
    void forcePeakRefreshRate(boolean enable) {
        Settings.System.putInt(mContext.getContentResolver(),
                Settings.System.FORCE_PEAK_REFRESH_RATE, enable ? 1 : 0);
        final float peakRefreshRate = enable ? mPeakRefreshRate : NO_CONFIG;
        Settings.System.putFloat(mContext.getContentResolver(),
            Settings.System.MIN_REFRESH_RATE, peakRefreshRate);
    }

    boolean isForcePeakRefreshRateEnabled() {
        return Settings.System.getInt(mContext.getContentResolver(),
                Settings.System.FORCE_PEAK_REFRESH_RATE, 0) == 1;
        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;
    }
}
+47 −10
Original line number Diff line number Diff line
@@ -16,20 +16,18 @@

package com.android.settings.display;

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

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;
import androidx.preference.PreferenceScreen;

import com.android.internal.display.RefreshRateSettingsUtils;
import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -41,6 +39,8 @@ 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";
@@ -65,8 +65,17 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
                        updateState(mPreference);
                    }
                };
        mPeakRefreshRate =
                RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay(context);

        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());
        }

        Log.d(
                TAG,
                "DEFAULT_REFRESH_RATE : "
@@ -97,15 +106,21 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl

    @Override
    public boolean isChecked() {
        return Settings.System.getInt(mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY,
                0) == 1;
        final float peakRefreshRate =
                Settings.System.getFloat(
                        mContext.getContentResolver(),
                        Settings.System.PEAK_REFRESH_RATE,
                        getDefaultPeakRefreshRate());
        return Math.round(peakRefreshRate) == Math.round(mPeakRefreshRate);
    }

    @Override
    public boolean setChecked(boolean isChecked) {
        Log.d(TAG, "setChecked to : " + isChecked);
        return Settings.System.putInt(
                mContext.getContentResolver(), Settings.System.SMOOTH_DISPLAY, isChecked ? 1 : 0);
        final float peakRefreshRate = isChecked ? mPeakRefreshRate : DEFAULT_REFRESH_RATE;
        Log.d(TAG, "setChecked to : " + peakRefreshRate);

        return Settings.System.putFloat(
                mContext.getContentResolver(), Settings.System.PEAK_REFRESH_RATE, peakRefreshRate);
    }

    @Override
@@ -123,6 +138,17 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
        mDeviceConfigDisplaySettings.stopListening();
    }

    @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;
    }

    private class DeviceConfigDisplaySettings
            implements DeviceConfig.OnPropertiesChangedListener, Executor {
        public void startListening() {
@@ -165,4 +191,15 @@ public class PeakRefreshRatePreferenceController extends TogglePreferenceControl
            }
        }
    }

    private float getDefaultPeakRefreshRate() {
        float defaultPeakRefreshRate = mDeviceConfigDisplaySettings.getDefaultPeakRefreshRate();
        if (defaultPeakRefreshRate == INVALIDATE_REFRESH_RATE) {
            defaultPeakRefreshRate = (float) mContext.getResources().getInteger(
                    com.android.internal.R.integer.config_defaultPeakRefreshRate);
        }

        Log.d(TAG, "DeviceConfig getDefaultPeakRefreshRate : " + defaultPeakRefreshRate);
        return defaultPeakRefreshRate;
    }
}
+14 −8
Original line number Diff line number Diff line
@@ -16,8 +16,8 @@

package com.android.settings.development;

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

import static com.android.settings.development.ForcePeakRefreshRatePreferenceController.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,6 +38,8 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

import android.util.Log;

@RunWith(RobolectricTestRunner.class)
public class ForcePeakRefreshRatePreferenceControllerTest {

@@ -61,18 +63,22 @@ public class ForcePeakRefreshRatePreferenceControllerTest {

    @Test
    public void onPreferenceChange_preferenceChecked_shouldEnableForcePeak() {
        mController.mPeakRefreshRate = 88f;

        mController.onPreferenceChange(mPreference, true);

        assertThat(Settings.System.getInt(mContext.getContentResolver(),
                Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(1);
        assertThat(Settings.System.getFloat(mContext.getContentResolver(),
                Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(88f);
    }

    @Test
    public void onPreferenceChange_preferenceUnchecked_shouldDisableForcePeak() {
        mController.mPeakRefreshRate = 88f;

        mController.onPreferenceChange(mPreference, false);

        assertThat(Settings.System.getInt(mContext.getContentResolver(),
                Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(0);
        assertThat(Settings.System.getFloat(mContext.getContentResolver(),
                Settings.System.MIN_REFRESH_RATE, NO_CONFIG)).isEqualTo(NO_CONFIG);
    }

    @Test
@@ -119,8 +125,8 @@ public class ForcePeakRefreshRatePreferenceControllerTest {
    public void onDeveloperOptionsDisabled_shouldDisablePreference() {
        mController.onDeveloperOptionsSwitchDisabled();

        assertThat(Settings.System.getInt(mContext.getContentResolver(),
                Settings.System.FORCE_PEAK_REFRESH_RATE, -1)).isEqualTo(0);
        assertThat(Settings.System.getFloat(mContext.getContentResolver(),
                Settings.System.MIN_REFRESH_RATE, -1f)).isEqualTo(NO_CONFIG);
        assertThat(mPreference.isChecked()).isFalse();
        assertThat(mPreference.isEnabled()).isFalse();
    }
+33 −15
Original line number Diff line number Diff line
@@ -16,14 +16,15 @@

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 android.content.Context;
import android.provider.Settings;
import android.view.Display;

import androidx.preference.SwitchPreference;

@@ -69,21 +70,23 @@ public class PeakRefreshRatePreferenceControllerTest {
    }

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

        assertThat(Settings.System.getInt(mContext.getContentResolver(),
                Settings.System.SMOOTH_DISPLAY, -1))
                .isEqualTo(1);
        assertThat(Settings.System.getFloat(mContext.getContentResolver(),
                Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE))
                .isEqualTo(88.0f);
    }

    @Test
    public void setChecked_disableSmoothDisplay() {
    public void setChecked_disableSmoothDisplay_setDefaultRefreshRate() {
        mController.mPeakRefreshRate = 88f;
        mController.setChecked(false);

        assertThat(Settings.System.getInt(mContext.getContentResolver(),
                Settings.System.SMOOTH_DISPLAY, -1))
                .isEqualTo(0);
        assertThat(Settings.System.getFloat(mContext.getContentResolver(),
                Settings.System.PEAK_REFRESH_RATE, DEFAULT_REFRESH_RATE))
                .isEqualTo(DEFAULT_REFRESH_RATE);
    }

    @Test
@@ -100,21 +103,36 @@ public class PeakRefreshRatePreferenceControllerTest {
        assertThat(mController.isChecked()).isFalse();
    }

    @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);
    }

    private void enableSmoothDisplayPreference() {
        mController.mPeakRefreshRate = 88f;

        Settings.System.putInt(
        Settings.System.putFloat(
                mContext.getContentResolver(),
                Settings.System.SMOOTH_DISPLAY,
                1);
                Settings.System.PEAK_REFRESH_RATE,
                mController.mPeakRefreshRate);
    }

    private void disableSmoothDisplayPreference() {
        mController.mPeakRefreshRate = 88f;

        Settings.System.putInt(
        Settings.System.putFloat(
                mContext.getContentResolver(),
                Settings.System.SMOOTH_DISPLAY,
                0);
                Settings.System.PEAK_REFRESH_RATE,
                DEFAULT_REFRESH_RATE);
    }
}