From bd6045bea92453d80ae2d878cd71ab63cfbb7a3e Mon Sep 17 00:00:00 2001 From: Salvador Martinez Date: Wed, 1 May 2019 13:18:43 -0700 Subject: [PATCH] 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 --- ...BatterySaverScheduleSeekBarController.java | 3 ++ .../BatterySaverScheduleSettings.java | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java index b704fde5096..a936e99f751 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java +++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java @@ -100,6 +100,9 @@ public class BatterySaverScheduleSeekBarController implements } 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 3f8716dcdc8..6553c609a1b 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 @@ import java.util.List; 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 @@ public class BatterySaverScheduleSettings extends RadioButtonPickerFragment { 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 @@ -78,6 +103,12 @@ public class BatterySaverScheduleSettings extends RadioButtonPickerFragment { super.onCreate(savedInstanceState); } + @Override + public void onPause() { + mContext.getContentResolver().unregisterContentObserver(mSettingsObserver); + super.onPause(); + } + @Override protected List getCandidates() { Context context = getContext();