Merge "Defers initialization of preferences." into sc-dev
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);