Update Battery Saver schedule to add order to seekbar

If the first time battery saver warning was the one causing
a change in settings global the radio button picker doesn't update
the preferences correctly and would put the seekbar at the top. This
explicitly adds an order to the seekbar so that if it gets updated
for some reason it will show up at the end again.

Test: atest BatterySaverScheduleSettingsTest
Bug: 131434758
Change-Id: Iebab5d176c8fbdaea078e13a71eff7e21408353b
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java
index b704fde..a936e99 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java
@@ -100,6 +100,9 @@
     }
 
     public void addToScreen(PreferenceScreen screen) {
+        // makes sure it gets added after the preferences if called due to first time battery
+        // saver message
+        mSeekBarPreference.setOrder(5);
         screen.addPreference(mSeekBarPreference);
     }
 }
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
index 3f8716d..6553c60 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
@@ -17,15 +17,20 @@
 package com.android.settings.fuelgauge.batterysaver;
 
 import android.content.Context;
+import android.database.ContentObserver;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
+import android.net.Uri;
 import android.os.Bundle;
+import android.os.Handler;
+import android.provider.Settings;
 import android.text.TextUtils;
 import android.view.View;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
@@ -51,8 +56,18 @@
 public class BatterySaverScheduleSettings extends RadioButtonPickerFragment {
 
     public BatterySaverScheduleRadioButtonsController mRadioButtonController;
+    @VisibleForTesting
+    Context mContext;
     private BatterySaverScheduleSeekBarController mSeekBarController;
 
+    @VisibleForTesting
+    final ContentObserver mSettingsObserver = new ContentObserver(new Handler()) {
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            updateCandidates();
+        }
+    };
+
     @Override
     protected int getPreferenceScreenResId() {
         return R.xml.battery_saver_schedule_settings;
@@ -64,6 +79,16 @@
         mSeekBarController = new BatterySaverScheduleSeekBarController(context);
         mRadioButtonController = new BatterySaverScheduleRadioButtonsController(
                 context, mSeekBarController);
+        mContext = context;
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mContext.getContentResolver().registerContentObserver(
+                Settings.Secure.getUriFor(Settings.Secure.LOW_POWER_WARNING_ACKNOWLEDGED),
+                false,
+                mSettingsObserver);
     }
 
     @Override
@@ -79,6 +104,12 @@
     }
 
     @Override
+    public void onPause() {
+        mContext.getContentResolver().unregisterContentObserver(mSettingsObserver);
+        super.onPause();
+    }
+
+    @Override
     protected List<? extends CandidateInfo> getCandidates() {
         Context context = getContext();
         List<CandidateInfo> candidates = Lists.newArrayList();