From 8aaa9f55497e52651d15b8f06eb4077586012852 Mon Sep 17 00:00:00 2001 From: Yi Jiang Date: Wed, 19 May 2021 11:44:36 -0700 Subject: [PATCH] Defers initialization of preferences. In Screen Timeout Settings, preferences should not be initialized in onAttach() because the setting style hasn't been loaded yet. This change defers the initialiaztion of those preferences so that they appear correctly. Test: manually tested. Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.display Bug: 183909540 Change-Id: I86cfe196549d709ed763faa004fff7b631365b1e --- ...SleepBatterySaverPreferenceController.java | 22 +++++++++++------ ...eSleepCameraStatePreferenceController.java | 24 ++++++++++++------- .../AdaptiveSleepPreferenceController.java | 17 ++----------- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java index 855c5070bf2..528c94d7d81 100644 --- a/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java +++ b/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java @@ -32,23 +32,20 @@ import com.android.settingslib.widget.BannerMessagePreference; public class AdaptiveSleepBatterySaverPreferenceController { @VisibleForTesting - final BannerMessagePreference mPreference; + BannerMessagePreference mPreference; private final PowerManager mPowerManager; + private final Context mContext; public AdaptiveSleepBatterySaverPreferenceController(Context context) { - mPreference = new BannerMessagePreference(context); - mPreference.setTitle(R.string.ambient_camera_summary_battery_saver_on); - mPreference.setPositiveButtonText(R.string.disable_text); mPowerManager = context.getSystemService(PowerManager.class); - mPreference.setPositiveButtonOnClickListener(p -> { - mPowerManager.setPowerSaveModeEnabled(false); - }); + mContext = context; } /** * Adds the controlled preference to the provided preference screen. */ public void addToScreen(PreferenceScreen screen) { + initializePreference(); screen.addPreference(mPreference); updateVisibility(); } @@ -66,6 +63,17 @@ public class AdaptiveSleepBatterySaverPreferenceController { * Refreshes the visibility of the preference. */ public void updateVisibility() { + initializePreference(); mPreference.setVisible(isPowerSaveMode()); } + + private void initializePreference() { + if (mPreference == null) { + mPreference = new BannerMessagePreference(mContext); + mPreference.setTitle(R.string.ambient_camera_summary_battery_saver_on); + mPreference.setPositiveButtonText(R.string.disable_text); + mPreference.setPositiveButtonOnClickListener( + p -> mPowerManager.setPowerSaveModeEnabled(false)); + } + } } diff --git a/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java b/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java index ba7a3aba752..20080ce972f 100644 --- a/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java +++ b/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java @@ -33,26 +33,22 @@ import com.android.settingslib.widget.BannerMessagePreference; */ public class AdaptiveSleepCameraStatePreferenceController { @VisibleForTesting - final BannerMessagePreference mPreference; + BannerMessagePreference mPreference; private final SensorPrivacyManager mPrivacyManager; + private final Context mContext; public AdaptiveSleepCameraStatePreferenceController(Context context) { - mPreference = new BannerMessagePreference(context); - mPreference.setTitle(R.string.auto_rotate_camera_lock_title); - mPreference.setSummary(R.string.adaptive_sleep_camera_lock_summary); - mPreference.setPositiveButtonText(R.string.allow); mPrivacyManager = SensorPrivacyManager.getInstance(context); mPrivacyManager.addSensorPrivacyListener(CAMERA, (sensor, enabled) -> updateVisibility()); - mPreference.setPositiveButtonOnClickListener(p -> { - mPrivacyManager.setSensorPrivacy(CAMERA, false); - }); + mContext = context; } /** * Adds the controlled preference to the provided preference screen. */ public void addToScreen(PreferenceScreen screen) { + initializePreference(); screen.addPreference(mPreference); updateVisibility(); } @@ -70,6 +66,18 @@ public class AdaptiveSleepCameraStatePreferenceController { * Refreshes the visibility of the preference. */ public void updateVisibility() { + initializePreference(); mPreference.setVisible(isCameraLocked()); } + + private void initializePreference() { + if (mPreference == null) { + mPreference = new BannerMessagePreference(mContext); + mPreference.setTitle(R.string.auto_rotate_camera_lock_title); + mPreference.setSummary(R.string.adaptive_sleep_camera_lock_summary); + mPreference.setPositiveButtonText(R.string.allow); + mPreference.setPositiveButtonOnClickListener( + p -> mPrivacyManager.setSensorPrivacy(CAMERA, false)); + } + } } diff --git a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java index c57904e7be6..b86a070cf84 100644 --- a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java +++ b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java @@ -65,19 +65,6 @@ public class AdaptiveSleepPreferenceController { mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); mPrivacyManager = SensorPrivacyManager.getInstance(context); mPowerManager = context.getSystemService(PowerManager.class); - mPreference = new RestrictedSwitchPreference(context); - mPreference.setTitle(R.string.adaptive_sleep_title); - mPreference.setSummary(R.string.adaptive_sleep_description); - mPreference.setChecked(isChecked()); - mPreference.setKey(PREFERENCE_KEY); - mPreference.setOnPreferenceClickListener(preference -> { - final boolean isChecked = ((RestrictedSwitchPreference) preference).isChecked(); - mMetricsFeatureProvider.action(context, SettingsEnums.ACTION_SCREEN_ATTENTION_CHANGED, - isChecked); - Settings.Secure.putInt(context.getContentResolver(), - Settings.Secure.ADAPTIVE_SLEEP, isChecked ? 1 : DEFAULT_VALUE); - return true; - }); mPackageManager = context.getPackageManager(); } @@ -116,8 +103,8 @@ public class AdaptiveSleepPreferenceController { mPreference.setSummary(R.string.adaptive_sleep_description); mPreference.setChecked(isChecked()); mPreference.setKey(PREFERENCE_KEY); - mPreference.setOnPreferenceChangeListener((preference, value) -> { - final boolean isChecked = (Boolean) value; + mPreference.setOnPreferenceClickListener(preference -> { + final boolean isChecked = ((RestrictedSwitchPreference) preference).isChecked(); mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_SCREEN_ATTENTION_CHANGED, isChecked);