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
diff --git a/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java
index 855c507..528c94d 100644
--- a/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepBatterySaverPreferenceController.java
@@ -32,23 +32,20 @@
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 @@
* 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 ba7a3ab..20080ce 100644
--- a/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepCameraStatePreferenceController.java
@@ -33,26 +33,22 @@
*/
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 @@
* 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 c57904e..b86a070 100644
--- a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
@@ -65,19 +65,6 @@
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 @@
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);