diff options
Diffstat (limited to 'packages/SystemUI/src')
8 files changed, 180 insertions, 23 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/quicksettings/BatteryTile.java b/packages/SystemUI/src/com/android/systemui/quicksettings/BatteryTile.java index 3c3e206..06aad14 100644 --- a/packages/SystemUI/src/com/android/systemui/quicksettings/BatteryTile.java +++ b/packages/SystemUI/src/com/android/systemui/quicksettings/BatteryTile.java @@ -41,7 +41,7 @@ public class BatteryTile extends QuickSettingsTile implements BatteryStateChange @Override void onPostCreate() { updateTile(); - BatteryController controller = new BatteryController(mContext); + BatteryController controller = new BatteryController(mContext, false); controller.addStateChangedCallback(this); super.onPostCreate(); } diff --git a/packages/SystemUI/src/com/android/systemui/quicksettings/DockBatteryTile.java b/packages/SystemUI/src/com/android/systemui/quicksettings/DockBatteryTile.java new file mode 100644 index 0000000..9367fcb --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/quicksettings/DockBatteryTile.java @@ -0,0 +1,91 @@ +package com.android.systemui.quicksettings; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LevelListDrawable; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.android.systemui.R; +import com.android.systemui.statusbar.phone.QuickSettingsContainerView; +import com.android.systemui.statusbar.phone.QuickSettingsController; +import com.android.systemui.statusbar.policy.DockBatteryController; +import com.android.systemui.statusbar.policy.DockBatteryController.DockBatteryStateChangeCallback; + +public class DockBatteryTile extends QuickSettingsTile implements DockBatteryStateChangeCallback { + + private boolean mPresent = false; + private boolean mCharging = false; + private int mDockBatteryLevel = 0; + private Drawable mDockBatteryIcon; + + private LevelListDrawable mDockBatteryLevels; + private LevelListDrawable mChargingDockBatteryLevels; + + public DockBatteryTile(Context context, LayoutInflater inflater, + QuickSettingsContainerView container, QuickSettingsController qsc) { + super(context, inflater, container, qsc); + + mTileLayout = R.layout.quick_settings_tile_dock_battery; + + mOnClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + startSettingsActivity(Intent.ACTION_POWER_USAGE_SUMMARY); + } + }; + } + + @Override + void onPostCreate() { + updateTile(); + DockBatteryController controller = new DockBatteryController(mContext); + controller.addStateChangedCallback(this); + super.onPostCreate(); + } + + @Override + public void onDockBatteryLevelChanged(int level, boolean present, boolean pluggedIn) { + mDockBatteryLevel = level; + mCharging = pluggedIn; + mPresent = present; + updateResources(); + } + + @Override + public void updateResources() { + updateTile(); + super.updateResources(); + } + + private synchronized void updateTile() { + mTile.setVisibility(mPresent ? View.VISIBLE : View.GONE); + mDockBatteryLevels = (LevelListDrawable) mContext.getResources().getDrawable(R.drawable.qs_sys_dock_battery); + mChargingDockBatteryLevels = (LevelListDrawable) mContext.getResources().getDrawable(R.drawable.qs_sys_dock_battery_charging); + mDockBatteryIcon = mCharging + ? mChargingDockBatteryLevels : + mDockBatteryLevels; + if(mDockBatteryLevel == 100) { + mLabel = mContext.getString(R.string.quick_settings_battery_charged_label); + }else{ + mLabel = mCharging + ? mContext.getString(R.string.quick_settings_battery_charging_label, + mDockBatteryLevel) + : mContext.getString(R.string.status_bar_settings_battery_meter_format, + mDockBatteryLevel); + } + } + + @Override + void updateQuickSettings() { + TextView tv = (TextView) mTile.findViewById(R.id.dock_battery_textview); + tv.setText(mLabel); + ImageView iv = (ImageView) mTile.findViewById(R.id.dock_battery_image); + iv.setImageDrawable(mDockBatteryIcon); + iv.setImageLevel(mDockBatteryLevel); + } + +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index ee5bae0..a620f61 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -2960,6 +2960,10 @@ public class PhoneStatusBar extends BaseStatusBar { false, this); cr.registerContentObserver( + Settings.System.getUriFor(Settings.System.QS_DYNAMIC_DOCK_BATTERY), + false, this); + + cr.registerContentObserver( Settings.System.getUriFor(Settings.System.QS_DYNAMIC_IME), false, this); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java index 782af23..16d087f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java @@ -43,6 +43,7 @@ import static com.android.internal.util.cm.QSConstants.TILE_WIFI; import static com.android.internal.util.cm.QSConstants.TILE_WIFIAP; import static com.android.internal.util.cm.QSConstants.TILE_WIMAX; import static com.android.internal.util.cm.QSUtils.deviceSupportsBluetooth; +import static com.android.internal.util.cm.QSUtils.deviceSupportsDockBattery; import static com.android.internal.util.cm.QSUtils.deviceSupportsImeSwitcher; import static com.android.internal.util.cm.QSUtils.deviceSupportsTelephony; import static com.android.internal.util.cm.QSUtils.deviceSupportsUsbTether; @@ -69,6 +70,7 @@ import com.android.systemui.quicksettings.BatteryTile; import com.android.systemui.quicksettings.BluetoothTile; import com.android.systemui.quicksettings.BrightnessTile; import com.android.systemui.quicksettings.BugReportTile; +import com.android.systemui.quicksettings.DockBatteryTile; import com.android.systemui.quicksettings.GPSTile; import com.android.systemui.quicksettings.InputMethodTile; import com.android.systemui.quicksettings.LteTile; @@ -159,6 +161,7 @@ public class QuickSettingsController { Log.i(TAG, "Tiles list: " + tiles); // Split out the tile names and add to the list + boolean dockBatteryLoaded = false; for (String tile : tiles.split("\\|")) { QuickSettingsTile qs = null; if (tile.equals(TILE_USER)) { @@ -215,6 +218,12 @@ public class QuickSettingsController { if (qs != null) { qs.setupQuickSettingsTile(); mQuickSettingsTiles.add(qs); + + // Add dock battery beside main battery when possible + if (qs instanceof BatteryTile) { + loadDockBatteryTile(resolver, inflater); + dockBatteryLoaded = true; + } } } @@ -231,6 +240,9 @@ public class QuickSettingsController { qs.setupQuickSettingsTile(); mQuickSettingsTiles.add(qs); } + if (!dockBatteryLoaded) { + loadDockBatteryTile(resolver, inflater); + } if (Settings.System.getInt(resolver, Settings.System.QS_DYNAMIC_WIFI, 1) == 1) { QuickSettingsTile qs = new WiFiDisplayTile(mContext, inflater, mContainerView, this); qs.setupQuickSettingsTile(); @@ -248,6 +260,14 @@ public class QuickSettingsController { } } + private void loadDockBatteryTile(final ContentResolver resolver, final LayoutInflater inflater) { + if (deviceSupportsDockBattery(mContext) && Settings.System.getInt(resolver, Settings.System.QS_DYNAMIC_DOCK_BATTERY, 1) == 1) { + QuickSettingsTile qs = new DockBatteryTile(mContext, inflater, mContainerView, this); + qs.setupQuickSettingsTile(); + mQuickSettingsTiles.add(qs); + } + } + protected void setupQuickSettings() { mQuickSettingsTiles.clear(); mContainerView.removeAllViews(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java index 95fede4..a2b425b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryController.java @@ -63,6 +63,8 @@ public class BatteryController extends BroadcastReceiver { Handler mHandler; + private final boolean mUiController; + class SettingsObserver extends ContentObserver { SettingsObserver(Handler handler) { super(handler); @@ -87,12 +89,19 @@ public class BatteryController extends BroadcastReceiver { } public BatteryController(Context context) { + this(context, true); + } + + public BatteryController(Context context, boolean ui) { mContext = context; mHandler = new Handler(); + mUiController = ui; - SettingsObserver settingsObserver = new SettingsObserver(mHandler); - settingsObserver.observe(); - updateSettings(); + if (mUiController) { + SettingsObserver settingsObserver = new SettingsObserver(mHandler); + settingsObserver.observe(); + updateSettings(); + } IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); @@ -145,14 +154,18 @@ public class BatteryController extends BroadcastReceiver { return true; } - private boolean isBatteryStatusUnknown() { + protected boolean isBatteryStatusUnknown() { return getBatteryStatus() == BatteryManager.BATTERY_STATUS_UNKNOWN; } - private boolean isBatteryStatusCharging() { + protected boolean isBatteryStatusCharging() { return getBatteryStatus() == BatteryManager.BATTERY_STATUS_CHARGING; } + protected boolean isUiController() { + return mUiController; + } + public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { @@ -161,23 +174,27 @@ public class BatteryController extends BroadcastReceiver { mBatteryStatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN); updateViews(level); - updateBattery(); + if (mUiController) { + updateBattery(); + } } } protected void updateViews(int level) { - int N = mIconViews.size(); - for (int i=0; i<N; i++) { - ImageView v = mIconViews.get(i); - v.setImageLevel(level); - v.setContentDescription(mContext.getString(R.string.accessibility_battery_level, - level)); - } - N = mLabelViews.size(); - for (int i=0; i<N; i++) { - TextView v = mLabelViews.get(i); - v.setText(mContext.getString(BATTERY_TEXT_STYLE_MIN, - level)); + if (mUiController) { + int N = mIconViews.size(); + for (int i=0; i<N; i++) { + ImageView v = mIconViews.get(i); + v.setImageLevel(level); + v.setContentDescription(mContext.getString(R.string.accessibility_battery_level, + level)); + } + N = mLabelViews.size(); + for (int i=0; i<N; i++) { + TextView v = mLabelViews.get(i); + v.setText(mContext.getString(BATTERY_TEXT_STYLE_MIN, + level)); + } } for (BatteryStateChangeCallback cb : mChangeCallbacks) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java index e18b28a..769e5b2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java @@ -30,8 +30,6 @@ import android.view.IWindowManager; import android.widget.CompoundButton; import android.widget.ImageView; -import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; - import java.util.ArrayList; public class BrightnessController implements ToggleSlider.Listener { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DockBatteryController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DockBatteryController.java index fae6572..83639ee 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DockBatteryController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DockBatteryController.java @@ -22,6 +22,8 @@ import android.os.BatteryManager; import com.android.systemui.R; +import java.util.ArrayList; + public class DockBatteryController extends BatteryController { private static final String TAG = "StatusBar.DockBatteryController"; @@ -30,7 +32,11 @@ public class DockBatteryController extends BatteryController { private boolean mBatteryPresent = false; public DockBatteryController(Context context) { - super(context); + this(context, true); + } + + public DockBatteryController(Context context, boolean ui) { + super(context, ui); } @Override @@ -49,6 +55,28 @@ public class DockBatteryController extends BatteryController { } @Override + protected void updateViews(int level) { + if (isUiController()) { + super.updateViews(level); + } + + for (DockBatteryStateChangeCallback cb : mChangeCallbacks) { + cb.onDockBatteryLevelChanged(level, isBatteryPresent(), isBatteryStatusCharging()); + } + } + + private ArrayList<DockBatteryStateChangeCallback> mChangeCallbacks = + new ArrayList<DockBatteryStateChangeCallback>(); + + public interface DockBatteryStateChangeCallback { + public void onDockBatteryLevelChanged(int level, boolean present, boolean pluggedIn); + } + + public void addStateChangedCallback(DockBatteryStateChangeCallback cb) { + mChangeCallbacks.add(cb); + } + + @Override public int getIconStyleUnknown() { return R.drawable.stat_sys_kb_battery_unknown; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java index 776cf36..5db0934 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java @@ -37,7 +37,6 @@ import android.app.INotificationManager; import com.android.internal.statusbar.StatusBarNotification; import com.android.systemui.R; -import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback; public class LocationController extends BroadcastReceiver { private static final String TAG = "StatusBar.LocationController"; |
