am 4402f4bb: Merge "Tuner: add battery pct preference." into mnc-dev
* commit '4402f4bb12cc70eef3bae20631a4a9fe210c7c80': Tuner: add battery pct preference.
This commit is contained in:
@@ -1025,6 +1025,12 @@
|
||||
<!-- Name of special SystemUI debug settings -->
|
||||
<string name="system_ui_tuner">System UI tuner</string>
|
||||
|
||||
<!-- Preference to show/hide embedded battery percentage [CHAR LIMIT=50] -->
|
||||
<string name="show_battery_percentage">Show embedded battery percentage</string>
|
||||
|
||||
<!-- Summary for battery percentage preference [CHAR LIMIT=NONE] -->
|
||||
<string name="show_battery_percentage_summary">Show battery level percentage inside the status bar icon when not charging</string>
|
||||
|
||||
<!-- Name of quick settings -->
|
||||
<string name="quick_settings">Quick Settings</string>
|
||||
|
||||
|
||||
@@ -17,10 +17,14 @@
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:title="@string/system_ui_tuner">
|
||||
|
||||
<!-- Tuner prefs go here -->
|
||||
|
||||
<Preference
|
||||
android:key="qs_tuner"
|
||||
android:title="@string/quick_settings" />
|
||||
|
||||
<SwitchPreference
|
||||
android:key="battery_pct"
|
||||
android:title="@string/show_battery_percentage"
|
||||
android:summary="@string/show_battery_percentage_summary"
|
||||
android:persistent="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
@@ -23,16 +23,17 @@ import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.database.ContentObserver;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuffColorFilter;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.Typeface;
|
||||
import android.net.Uri;
|
||||
import android.os.BatteryManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.provider.Settings;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
@@ -43,10 +44,9 @@ public class BatteryMeterView extends View implements DemoMode,
|
||||
BatteryController.BatteryStateChangeCallback {
|
||||
public static final String TAG = BatteryMeterView.class.getSimpleName();
|
||||
public static final String ACTION_LEVEL_TEST = "com.android.systemui.BATTERY_LEVEL_TEST";
|
||||
public static final String SHOW_PERCENT_SETTING = "status_bar_show_battery_percent";
|
||||
|
||||
private static final boolean ENABLE_PERCENT = true;
|
||||
private static final boolean SINGLE_DIGIT_PERCENT = false;
|
||||
private static final boolean SHOW_100_PERCENT = false;
|
||||
|
||||
private static final int FULL = 96;
|
||||
|
||||
@@ -54,7 +54,7 @@ public class BatteryMeterView extends View implements DemoMode,
|
||||
|
||||
private final int[] mColors;
|
||||
|
||||
boolean mShowPercent = true;
|
||||
private boolean mShowPercent;
|
||||
private float mButtonHeightFraction;
|
||||
private float mSubpixelSmoothingLeft;
|
||||
private float mSubpixelSmoothingRight;
|
||||
@@ -87,103 +87,8 @@ public class BatteryMeterView extends View implements DemoMode,
|
||||
private int mLightModeBackgroundColor;
|
||||
private int mLightModeFillColor;
|
||||
|
||||
private class BatteryTracker extends BroadcastReceiver {
|
||||
public static final int UNKNOWN_LEVEL = -1;
|
||||
|
||||
// current battery status
|
||||
int level = UNKNOWN_LEVEL;
|
||||
String percentStr;
|
||||
int plugType;
|
||||
boolean plugged;
|
||||
int health;
|
||||
int status;
|
||||
String technology;
|
||||
int voltage;
|
||||
int temperature;
|
||||
boolean testmode = false;
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
final String action = intent.getAction();
|
||||
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
|
||||
if (testmode && ! intent.getBooleanExtra("testmode", false)) return;
|
||||
|
||||
level = (int)(100f
|
||||
* intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)
|
||||
/ intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100));
|
||||
|
||||
plugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
|
||||
plugged = plugType != 0;
|
||||
health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH,
|
||||
BatteryManager.BATTERY_HEALTH_UNKNOWN);
|
||||
status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
|
||||
BatteryManager.BATTERY_STATUS_UNKNOWN);
|
||||
technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
|
||||
voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
|
||||
temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);
|
||||
|
||||
setContentDescription(
|
||||
context.getString(R.string.accessibility_battery_level, level));
|
||||
postInvalidate();
|
||||
} else if (action.equals(ACTION_LEVEL_TEST)) {
|
||||
testmode = true;
|
||||
post(new Runnable() {
|
||||
int curLevel = 0;
|
||||
int incr = 1;
|
||||
int saveLevel = level;
|
||||
int savePlugged = plugType;
|
||||
Intent dummy = new Intent(Intent.ACTION_BATTERY_CHANGED);
|
||||
@Override
|
||||
public void run() {
|
||||
if (curLevel < 0) {
|
||||
testmode = false;
|
||||
dummy.putExtra("level", saveLevel);
|
||||
dummy.putExtra("plugged", savePlugged);
|
||||
dummy.putExtra("testmode", false);
|
||||
} else {
|
||||
dummy.putExtra("level", curLevel);
|
||||
dummy.putExtra("plugged", incr > 0 ? BatteryManager.BATTERY_PLUGGED_AC : 0);
|
||||
dummy.putExtra("testmode", true);
|
||||
}
|
||||
getContext().sendBroadcast(dummy);
|
||||
|
||||
if (!testmode) return;
|
||||
|
||||
curLevel += incr;
|
||||
if (curLevel == 100) {
|
||||
incr *= -1;
|
||||
}
|
||||
postDelayed(this, 200);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BatteryTracker mTracker = new BatteryTracker();
|
||||
|
||||
@Override
|
||||
public void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
|
||||
filter.addAction(ACTION_LEVEL_TEST);
|
||||
final Intent sticky = getContext().registerReceiver(mTracker, filter);
|
||||
if (sticky != null) {
|
||||
// preload the battery level
|
||||
mTracker.onReceive(getContext(), sticky);
|
||||
}
|
||||
mBatteryController.addStateChangedCallback(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
|
||||
getContext().unregisterReceiver(mTracker);
|
||||
mBatteryController.removeStateChangedCallback(this);
|
||||
}
|
||||
private BatteryTracker mTracker = new BatteryTracker();
|
||||
private final SettingObserver mSettingObserver = new SettingObserver();
|
||||
|
||||
public BatteryMeterView(Context context) {
|
||||
this(context, null, 0);
|
||||
@@ -213,8 +118,7 @@ public class BatteryMeterView extends View implements DemoMode,
|
||||
levels.recycle();
|
||||
colors.recycle();
|
||||
atts.recycle();
|
||||
mShowPercent = ENABLE_PERCENT && 0 != Settings.System.getInt(
|
||||
context.getContentResolver(), "status_bar_show_battery_percent", 0);
|
||||
updateShowPercent();
|
||||
mWarningString = context.getString(R.string.battery_meter_very_low_overlay_symbol);
|
||||
mCriticalLevel = mContext.getResources().getInteger(
|
||||
com.android.internal.R.integer.config_criticalBatteryWarningLevel);
|
||||
@@ -261,6 +165,32 @@ public class BatteryMeterView extends View implements DemoMode,
|
||||
mLightModeFillColor = context.getColor(R.color.light_mode_icon_color_dual_tone_fill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
|
||||
filter.addAction(ACTION_LEVEL_TEST);
|
||||
final Intent sticky = getContext().registerReceiver(mTracker, filter);
|
||||
if (sticky != null) {
|
||||
// preload the battery level
|
||||
mTracker.onReceive(getContext(), sticky);
|
||||
}
|
||||
mBatteryController.addStateChangedCallback(this);
|
||||
getContext().getContentResolver().registerContentObserver(
|
||||
Settings.System.getUriFor(SHOW_PERCENT_SETTING), false, mSettingObserver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
|
||||
getContext().unregisterReceiver(mTracker);
|
||||
mBatteryController.removeStateChangedCallback(this);
|
||||
getContext().getContentResolver().unregisterContentObserver(mSettingObserver);
|
||||
}
|
||||
|
||||
public void setBatteryController(BatteryController batteryController) {
|
||||
mBatteryController = batteryController;
|
||||
mPowerSaveEnabled = mBatteryController.isPowerSave();
|
||||
@@ -300,6 +230,11 @@ public class BatteryMeterView extends View implements DemoMode,
|
||||
mWarningTextHeight = -mWarningTextPaint.getFontMetrics().ascent;
|
||||
}
|
||||
|
||||
private void updateShowPercent() {
|
||||
mShowPercent = 0 != Settings.System.getInt(getContext().getContentResolver(),
|
||||
SHOW_PERCENT_SETTING, 0);
|
||||
}
|
||||
|
||||
private int getColorForLevel(int percent) {
|
||||
|
||||
// If we are in power save mode, always use the normal color.
|
||||
@@ -447,8 +382,7 @@ public class BatteryMeterView extends View implements DemoMode,
|
||||
boolean pctOpaque = false;
|
||||
float pctX = 0, pctY = 0;
|
||||
String pctText = null;
|
||||
if (!tracker.plugged && level > mCriticalLevel && mShowPercent
|
||||
&& !(tracker.level == 100 && !SHOW_100_PERCENT)) {
|
||||
if (!tracker.plugged && level > mCriticalLevel && mShowPercent) {
|
||||
mTextPaint.setColor(getColorForLevel(level));
|
||||
mTextPaint.setTextSize(height *
|
||||
(SINGLE_DIGIT_PERCENT ? 0.75f
|
||||
@@ -518,4 +452,92 @@ public class BatteryMeterView extends View implements DemoMode,
|
||||
postInvalidate();
|
||||
}
|
||||
}
|
||||
|
||||
private final class BatteryTracker extends BroadcastReceiver {
|
||||
public static final int UNKNOWN_LEVEL = -1;
|
||||
|
||||
// current battery status
|
||||
int level = UNKNOWN_LEVEL;
|
||||
String percentStr;
|
||||
int plugType;
|
||||
boolean plugged;
|
||||
int health;
|
||||
int status;
|
||||
String technology;
|
||||
int voltage;
|
||||
int temperature;
|
||||
boolean testmode = false;
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
final String action = intent.getAction();
|
||||
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
|
||||
if (testmode && ! intent.getBooleanExtra("testmode", false)) return;
|
||||
|
||||
level = (int)(100f
|
||||
* intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)
|
||||
/ intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100));
|
||||
|
||||
plugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
|
||||
plugged = plugType != 0;
|
||||
health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH,
|
||||
BatteryManager.BATTERY_HEALTH_UNKNOWN);
|
||||
status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
|
||||
BatteryManager.BATTERY_STATUS_UNKNOWN);
|
||||
technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
|
||||
voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
|
||||
temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);
|
||||
|
||||
setContentDescription(
|
||||
context.getString(R.string.accessibility_battery_level, level));
|
||||
postInvalidate();
|
||||
} else if (action.equals(ACTION_LEVEL_TEST)) {
|
||||
testmode = true;
|
||||
post(new Runnable() {
|
||||
int curLevel = 0;
|
||||
int incr = 1;
|
||||
int saveLevel = level;
|
||||
int savePlugged = plugType;
|
||||
Intent dummy = new Intent(Intent.ACTION_BATTERY_CHANGED);
|
||||
@Override
|
||||
public void run() {
|
||||
if (curLevel < 0) {
|
||||
testmode = false;
|
||||
dummy.putExtra("level", saveLevel);
|
||||
dummy.putExtra("plugged", savePlugged);
|
||||
dummy.putExtra("testmode", false);
|
||||
} else {
|
||||
dummy.putExtra("level", curLevel);
|
||||
dummy.putExtra("plugged", incr > 0 ? BatteryManager.BATTERY_PLUGGED_AC
|
||||
: 0);
|
||||
dummy.putExtra("testmode", true);
|
||||
}
|
||||
getContext().sendBroadcast(dummy);
|
||||
|
||||
if (!testmode) return;
|
||||
|
||||
curLevel += incr;
|
||||
if (curLevel == 100) {
|
||||
incr *= -1;
|
||||
}
|
||||
postDelayed(this, 200);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private final class SettingObserver extends ContentObserver {
|
||||
public SettingObserver() {
|
||||
super(new Handler());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChange(boolean selfChange, Uri uri) {
|
||||
super.onChange(selfChange, uri);
|
||||
updateShowPercent();
|
||||
postInvalidate();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,11 +15,19 @@
|
||||
*/
|
||||
package com.android.systemui.tuner;
|
||||
|
||||
import static com.android.systemui.BatteryMeterView.SHOW_PERCENT_SETTING;
|
||||
|
||||
import android.app.FragmentTransaction;
|
||||
import android.database.ContentObserver;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.preference.Preference;
|
||||
import android.preference.Preference.OnPreferenceChangeListener;
|
||||
import android.preference.Preference.OnPreferenceClickListener;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.SwitchPreference;
|
||||
import android.provider.Settings.System;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.android.systemui.R;
|
||||
@@ -27,6 +35,11 @@ import com.android.systemui.R;
|
||||
public class TunerFragment extends PreferenceFragment {
|
||||
|
||||
private static final String KEY_QS_TUNER = "qs_tuner";
|
||||
private static final String KEY_BATTERY_PCT = "battery_pct";
|
||||
|
||||
private final SettingObserver mSettingObserver = new SettingObserver();
|
||||
|
||||
private SwitchPreference mBatteryPct;
|
||||
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -45,6 +58,21 @@ public class TunerFragment extends PreferenceFragment {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
mBatteryPct = (SwitchPreference) findPreference(KEY_BATTERY_PCT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
updateBatteryPct();
|
||||
getContext().getContentResolver().registerContentObserver(
|
||||
System.getUriFor(SHOW_PERCENT_SETTING), false, mSettingObserver);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
getContext().getContentResolver().unregisterContentObserver(mSettingObserver);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -57,4 +85,31 @@ public class TunerFragment extends PreferenceFragment {
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
private void updateBatteryPct() {
|
||||
mBatteryPct.setOnPreferenceChangeListener(null);
|
||||
mBatteryPct.setChecked(System.getInt(getContext().getContentResolver(),
|
||||
SHOW_PERCENT_SETTING, 0) != 0);
|
||||
mBatteryPct.setOnPreferenceChangeListener(mBatteryPctChange);
|
||||
}
|
||||
|
||||
private final class SettingObserver extends ContentObserver {
|
||||
public SettingObserver() {
|
||||
super(new Handler());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChange(boolean selfChange, Uri uri, int userId) {
|
||||
super.onChange(selfChange, uri, userId);
|
||||
updateBatteryPct();
|
||||
}
|
||||
}
|
||||
|
||||
private final OnPreferenceChangeListener mBatteryPctChange = new OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
final boolean v = (Boolean) newValue;
|
||||
System.putInt(getContext().getContentResolver(), SHOW_PERCENT_SETTING, v ? 1 : 0);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user