diff options
author | jackqdyulei <jackqdyulei@google.com> | 2018-01-24 18:26:53 -0800 |
---|---|---|
committer | jackqdyulei <jackqdyulei@google.com> | 2018-02-05 19:32:24 -0800 |
commit | b77fec0872c58d1293c480fe0ddd7f9a49098c78 (patch) | |
tree | fb5eac36b5da910dfec40df057fa0884ed20604b /src/com/android/settings/fuelgauge/batterysaver | |
parent | 7e999df6d9cb5dc9a815956c30d02cf21b2ac5ec (diff) | |
download | packages_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.java | 135 | ||||
-rw-r--r-- | src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java | 1 |
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; } |