summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/fuelgauge/batterysaver
diff options
context:
space:
mode:
authorjackqdyulei <jackqdyulei@google.com>2018-01-24 18:26:53 -0800
committerjackqdyulei <jackqdyulei@google.com>2018-02-05 19:32:24 -0800
commitb77fec0872c58d1293c480fe0ddd7f9a49098c78 (patch)
treefb5eac36b5da910dfec40df057fa0884ed20604b /src/com/android/settings/fuelgauge/batterysaver
parent7e999df6d9cb5dc9a815956c30d02cf21b2ac5ec (diff)
downloadpackages_apps_Settings-b77fec0872c58d1293c480fe0ddd7f9a49098c78.tar.gz
packages_apps_Settings-b77fec0872c58d1293c480fe0ddd7f9a49098c78.tar.bz2
packages_apps_Settings-b77fec0872c58d1293c480fe0ddd7f9a49098c78.zip
Add preference controller for battery seekbar
Also update SeekBarPreference so we can set min for it. Bug: 72228477 Test: RunSettingsRoboTests Change-Id: I5ab1bfd78b0bd461551012c121c7e76764843a30
Diffstat (limited to 'src/com/android/settings/fuelgauge/batterysaver')
-rw-r--r--src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java135
-rw-r--r--src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java1
2 files changed, 136 insertions, 0 deletions
diff --git a/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java
new file mode 100644
index 0000000000..1c787abd5d
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batterysaver/AutoBatterySeekBarPreferenceController.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge.batterysaver;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.widget.SeekBarPreference;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+/**
+ * Controller that update the battery saver seekbar
+ */
+public class AutoBatterySeekBarPreferenceController extends BasePreferenceController implements
+ LifecycleObserver, OnStart, OnStop, SeekBarPreference.OnPreferenceChangeListener {
+ @VisibleForTesting
+ static final String KEY_AUTO_BATTERY_SEEK_BAR = "battery_saver_seek_bar";
+ private SeekBarPreference mPreference;
+ private AutoBatterySaverSettingObserver mContentObserver;
+
+ public AutoBatterySeekBarPreferenceController(Context context, Lifecycle lifecycle) {
+ super(context, KEY_AUTO_BATTERY_SEEK_BAR);
+ mContentObserver = new AutoBatterySaverSettingObserver(new Handler());
+ if (lifecycle != null) {
+ lifecycle.addObserver(this);
+ }
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = (SeekBarPreference) screen.findPreference(
+ KEY_AUTO_BATTERY_SEEK_BAR);
+ updatePreference(mPreference);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ updatePreference(preference);
+ }
+
+ @Override
+ public void onStart() {
+ mContentObserver.registerContentObserver();
+ }
+
+ @Override
+ public void onStop() {
+ mContentObserver.unRegisterContentObserver();
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final int progress = (int) newValue;
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, progress);
+ return true;
+ }
+
+ @VisibleForTesting
+ void updatePreference(Preference preference) {
+ final ContentResolver contentResolver = mContext.getContentResolver();
+ final int level = Settings.Global.getInt(contentResolver,
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
+ if (level == 0) {
+ preference.setVisible(false);
+ } else {
+ preference.setVisible(true);
+ preference.setTitle(mContext.getString(R.string.battery_saver_seekbar_title,
+ Utils.formatPercentage(level)));
+ ((SeekBarPreference) preference).setProgress(level);
+ }
+ }
+
+ /**
+ * Observer that listens to change from {@link Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL}
+ */
+ private final class AutoBatterySaverSettingObserver extends ContentObserver {
+ private final Uri mUri = Settings.Global.getUriFor(
+ Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL);
+ private final ContentResolver mContentResolver;
+
+ public AutoBatterySaverSettingObserver(Handler handler) {
+ super(handler);
+ mContentResolver = mContext.getContentResolver();
+ }
+
+ public void registerContentObserver() {
+ mContentResolver.registerContentObserver(mUri, false, this);
+ }
+
+ public void unRegisterContentObserver() {
+ mContentResolver.unregisterContentObserver(this);
+ }
+
+ @Override
+ public void onChange(boolean selfChange, Uri uri, int userId) {
+ if (mUri.equals(uri)) {
+ updatePreference(mPreference);
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
index 270c29c943..392032ce21 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
@@ -77,6 +77,7 @@ public class BatterySaverSettings extends DashboardFragment {
Context context, Lifecycle lifecycle) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new AutoBatterySaverPreferenceController(context));
+ controllers.add(new AutoBatterySeekBarPreferenceController(context, lifecycle));
return controllers;
}