From 3fd0b14fe6ad26d99e626b98516b1c86c401d8b9 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Wed, 30 Aug 2017 18:11:21 -0400 Subject: [PATCH] Add bt battery level to QS icons Test: visual Change-Id: I690e496e3e88fd734d43ea2f25396772e922940c Fixes: 63393322 --- .../com/android/systemui/qs/QSDetailItems.java | 7 ++++++- .../android/systemui/qs/tiles/BluetoothTile.java | 15 +++++++++++++++ .../statusbar/policy/BluetoothController.java | 1 + .../statusbar/policy/BluetoothControllerImpl.java | 5 +++++ .../utils/leaks/FakeBluetoothController.java | 5 +++++ 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetailItems.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetailItems.java index f91aa9a6d0b06..b4cc4b1586a2d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSDetailItems.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetailItems.java @@ -184,7 +184,11 @@ public class QSDetailItems extends FrameLayout { } view.setVisibility(mItemsVisible ? VISIBLE : INVISIBLE); final ImageView iv = (ImageView) view.findViewById(android.R.id.icon); - iv.setImageResource(item.icon); + if (item.iconDrawable != null) { + iv.setImageDrawable(item.iconDrawable); + } else { + iv.setImageResource(item.icon); + } iv.getOverlay().clear(); if (item.overlay != null) { item.overlay.setBounds(0, 0, mQsDetailIconOverlaySize, mQsDetailIconOverlaySize); @@ -254,6 +258,7 @@ public class QSDetailItems extends FrameLayout { public static class Item { public int icon; + public Drawable iconDrawable; public Drawable overlay; public CharSequence line1; public CharSequence line2; diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java index 12fccda907ff2..bc6233d45a673 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -16,6 +16,8 @@ package com.android.systemui.qs.tiles; +import static com.android.settingslib.graph.BluetoothDeviceLayerDrawable.createLayerDrawable; + import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; @@ -32,8 +34,10 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settingslib.Utils; import com.android.settingslib.bluetooth.CachedBluetoothDevice; +import com.android.settingslib.graph.BluetoothDeviceLayerDrawable; import com.android.systemui.Dependency; import com.android.systemui.R; +import com.android.systemui.R.drawable; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.plugins.qs.DetailAdapter; import com.android.systemui.plugins.qs.QSTile.BooleanState; @@ -127,6 +131,15 @@ public class BluetoothTile extends QSTileImpl { if (connected) { state.icon = ResourceIcon.get(R.drawable.ic_qs_bluetooth_connected); state.label = mController.getLastDeviceName(); + CachedBluetoothDevice lastDevice = mController.getLastDevice(); + if (lastDevice != null) { + int batteryLevel = lastDevice.getBatteryLevel(); + if (batteryLevel != BluetoothDevice.BATTERY_LEVEL_UNKNOWN) { + BluetoothDeviceLayerDrawable drawable = createLayerDrawable(mContext, + R.drawable.ic_qs_bluetooth_connected, batteryLevel); + state.icon = new DrawableIcon(drawable); + } + } state.contentDescription = mContext.getString( R.string.accessibility_bluetooth_name, state.label); } else if (state.isTransient) { @@ -278,6 +291,8 @@ public class BluetoothTile extends QSTileImpl { item.icon = R.drawable.ic_qs_bluetooth_connected; int batteryLevel = device.getBatteryLevel(); if (batteryLevel != BluetoothDevice.BATTERY_LEVEL_UNKNOWN) { + item.iconDrawable = createLayerDrawable(mContext, item.icon, + batteryLevel); item.line2 = mContext.getString( R.string.quick_settings_connected_battery_level, Utils.formatPercentage(batteryLevel)); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java index 9daa199ee92a0..b693ebbf09a41 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java @@ -39,6 +39,7 @@ public interface BluetoothController extends CallbackController, Dumpa int getMaxConnectionState(CachedBluetoothDevice device); int getBondState(CachedBluetoothDevice device); + CachedBluetoothDevice getLastDevice(); public interface Callback { void onBluetoothStateChange(boolean enabled); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java index 5b24f9cd97bf2..3b15c2b8253fc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java @@ -120,6 +120,11 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa return getCachedState(device).mBondState; } + @Override + public CachedBluetoothDevice getLastDevice() { + return mLastDevice; + } + @Override public int getMaxConnectionState(CachedBluetoothDevice device) { return getCachedState(device).mMaxConnectionState; diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBluetoothController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBluetoothController.java index 9ec096ad49e0a..44c49835def41 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBluetoothController.java +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBluetoothController.java @@ -93,4 +93,9 @@ public class FakeBluetoothController extends BaseLeakChecker implement public int getBondState(CachedBluetoothDevice device) { return 0; } + + @Override + public CachedBluetoothDevice getLastDevice() { + return null; + } }