From d1c86e2cb272f8b8be5b9b47aa4ec7084fe61c22 Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Sun, 1 Jun 2014 00:04:53 -0400 Subject: [PATCH] QuickSettings: Icon updates + BT connecting state. Bug:15186962 Change-Id: I56de6f3cabcb36b13617d4027323a078cceb9587 --- .../res/drawable/ic_qs_airplane_off.xml | 15 ++----- .../res/drawable/ic_qs_airplane_on.xml | 8 ++-- .../drawable/ic_qs_bluetooth_connected.xml | 6 +-- .../drawable/ic_qs_bluetooth_connecting.xml | 28 ++++++++++++ .../res/drawable/ic_qs_bluetooth_off.xml | 10 ++--- .../res/drawable/ic_qs_bluetooth_on.xml | 6 +-- .../SystemUI/res/drawable/ic_qs_cast_off.xml | 10 ++--- .../SystemUI/res/drawable/ic_qs_cast_on.xml | 6 +-- .../res/drawable/stat_sys_ringer_zen.xml | 4 +- packages/SystemUI/res/values/strings.xml | 2 + .../systemui/qs/tiles/BluetoothTile.java | 16 +++++-- .../statusbar/policy/BluetoothController.java | 12 +++-- .../policy/BluetoothControllerImpl.java | 44 +++++++++++++------ 13 files changed, 108 insertions(+), 59 deletions(-) create mode 100644 packages/SystemUI/res/drawable/ic_qs_bluetooth_connecting.xml diff --git a/packages/SystemUI/res/drawable/ic_qs_airplane_off.xml b/packages/SystemUI/res/drawable/ic_qs_airplane_off.xml index 9f0ec670d6e1e..c68238f24d206 100644 --- a/packages/SystemUI/res/drawable/ic_qs_airplane_off.xml +++ b/packages/SystemUI/res/drawable/ic_qs_airplane_off.xml @@ -19,17 +19,10 @@ Copyright (C) 2014 The Android Open Source Project android:height="64dp"/> + android:viewportWidth="48.0" + android:viewportHeight="48.0"/> - + android:fill="#4DFFFFFF" + android:pathData="M26.0,18.0L26.0,7.0c0.0,-1.7 -1.3,-3.0 -3.0,-3.0c-1.7,0.0 -3.0,1.3 -3.0,3.0l0.0,7.4L35.7,30.0l6.3,2.0l0.0,-4.0L26.0,18.0zM6.0,10.5l10.0,10.0L4.0,28.0l0.0,4.0l16.0,-5.0l0.0,11.0l-4.0,3.0l0.0,3.0l7.0,-2.0l7.0,2.0l0.0,-3.0l-4.0,-3.0l0.0,-7.5L37.5,42.0l2.5,-2.5L8.5,8.0L6.0,10.5z"/> diff --git a/packages/SystemUI/res/drawable/ic_qs_airplane_on.xml b/packages/SystemUI/res/drawable/ic_qs_airplane_on.xml index 95c20bb2886aa..c1e3c7e9a805e 100644 --- a/packages/SystemUI/res/drawable/ic_qs_airplane_on.xml +++ b/packages/SystemUI/res/drawable/ic_qs_airplane_on.xml @@ -19,13 +19,13 @@ Copyright (C) 2014 The Android Open Source Project android:height="64dp"/> + android:viewportWidth="48.0" + android:viewportHeight="48.0"/> + android:pathData="M20.4,18.0"/> + android:pathData="M42.0,32.0l0.0,-4.0L26.0,18.0L26.0,7.0c0.0,-1.7 -1.3,-3.0 -3.0,-3.0c-1.7,0.0 -3.0,1.3 -3.0,3.0l0.0,11.0L4.0,28.0l0.0,4.0l16.0,-5.0l0.0,11.0l-4.0,3.0l0.0,3.0l7.0,-2.0l7.0,2.0l0.0,-3.0l-4.0,-3.0L26.0,27.0L42.0,32.0z"/> diff --git a/packages/SystemUI/res/drawable/ic_qs_bluetooth_connected.xml b/packages/SystemUI/res/drawable/ic_qs_bluetooth_connected.xml index 61a777791e354..3957d02fdefda 100644 --- a/packages/SystemUI/res/drawable/ic_qs_bluetooth_connected.xml +++ b/packages/SystemUI/res/drawable/ic_qs_bluetooth_connected.xml @@ -19,10 +19,10 @@ Copyright (C) 2014 The Android Open Source Project android:height="64dp"/> + android:viewportWidth="48.0" + android:viewportHeight="48.0"/> + android:pathData="M14.0,24.0l-4.0,-4.0l-4.0,4.0l4.0,4.0L14.0,24.0zM35.4,15.4L24.0,4.0l-2.0,0.0l0.0,15.2L12.8,10.0L10.0,12.8L21.2,24.0L10.0,35.2l2.8,2.8l9.2,-9.2L22.0,44.0l2.0,0.0l11.4,-11.4L26.8,24.0L35.4,15.4zM26.0,11.7l3.8,3.8L26.0,19.2L26.0,11.7zM29.8,32.6L26.0,36.3l0.0,-7.5L29.8,32.6zM38.0,20.0l-4.0,4.0l4.0,4.0l4.0,-4.0L38.0,20.0z"/> diff --git a/packages/SystemUI/res/drawable/ic_qs_bluetooth_connecting.xml b/packages/SystemUI/res/drawable/ic_qs_bluetooth_connecting.xml new file mode 100644 index 0000000000000..e4038f9d66d2a --- /dev/null +++ b/packages/SystemUI/res/drawable/ic_qs_bluetooth_connecting.xml @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/packages/SystemUI/res/drawable/ic_qs_bluetooth_off.xml b/packages/SystemUI/res/drawable/ic_qs_bluetooth_off.xml index 7ac1cb9445230..00c5af8a2ecf1 100644 --- a/packages/SystemUI/res/drawable/ic_qs_bluetooth_off.xml +++ b/packages/SystemUI/res/drawable/ic_qs_bluetooth_off.xml @@ -19,12 +19,10 @@ Copyright (C) 2014 The Android Open Source Project android:height="64dp"/> + android:viewportWidth="48.0" + android:viewportHeight="48.0"/> + android:fill="#4DFFFFFF" + android:pathData="M26.0,11.8l3.8,3.8l-3.2,3.2l2.8,2.8l6.0,-6.0L24.0,4.2l-2.0,0.0l0.0,10.1l4.0,4.0L26.0,11.8zM10.8,8.2L8.0,11.0l13.2,13.2L10.0,35.3l2.8,2.8L22.0,29.0l0.0,15.2l2.0,0.0l8.6,-8.6l4.6,4.6l2.8,-2.8L10.8,8.2zM26.0,36.5L26.0,29.0l3.8,3.8L26.0,36.5z"/> diff --git a/packages/SystemUI/res/drawable/ic_qs_bluetooth_on.xml b/packages/SystemUI/res/drawable/ic_qs_bluetooth_on.xml index 61a777791e354..2b14f33ab5147 100644 --- a/packages/SystemUI/res/drawable/ic_qs_bluetooth_on.xml +++ b/packages/SystemUI/res/drawable/ic_qs_bluetooth_on.xml @@ -19,10 +19,10 @@ Copyright (C) 2014 The Android Open Source Project android:height="64dp"/> + android:viewportWidth="48.0" + android:viewportHeight="48.0"/> + android:pathData="M35.4,15.4L24.0,4.0l-2.0,0.0l0.0,15.2L12.8,10.0L10.0,12.8L21.2,24.0L10.0,35.2l2.8,2.8l9.2,-9.2L22.0,44.0l2.0,0.0l11.4,-11.4L26.8,24.0L35.4,15.4zM26.0,11.7l3.8,3.8L26.0,19.2L26.0,11.7zM29.8,32.6L26.0,36.3l0.0,-7.5L29.8,32.6z"/> diff --git a/packages/SystemUI/res/drawable/ic_qs_cast_off.xml b/packages/SystemUI/res/drawable/ic_qs_cast_off.xml index 130c6397969e3..2a9541e493a14 100644 --- a/packages/SystemUI/res/drawable/ic_qs_cast_off.xml +++ b/packages/SystemUI/res/drawable/ic_qs_cast_off.xml @@ -19,12 +19,10 @@ Copyright (C) 2014 The Android Open Source Project android:height="64dp"/> + android:viewportWidth="48.0" + android:viewportHeight="48.0"/> + android:fill="#4DFFFFFF" + android:pathData="M42.0,6.0L6.0,6.0c-2.2,0.0 -4.0,1.8 -4.0,4.0l0.0,6.0l4.0,0.0l0.0,-6.0l36.0,0.0l0.0,28.0L28.0,38.0l0.0,4.0l14.0,0.0c2.2,0.0 4.0,-1.8 4.0,-4.0L46.0,10.0C46.0,7.8 44.2,6.0 42.0,6.0zM2.0,36.0l0.0,6.0l6.0,0.0C8.0,38.7 5.3,36.0 2.0,36.0zM2.0,28.0l0.0,4.0c5.5,0.0 10.0,4.5 10.0,10.0l4.0,0.0C16.0,34.3 9.7,28.0 2.0,28.0zM2.0,20.0l0.0,4.0c9.9,0.0 18.0,8.1 18.0,18.0l4.0,0.0C24.0,29.8 14.1,20.0 2.0,20.0z"/> diff --git a/packages/SystemUI/res/drawable/ic_qs_cast_on.xml b/packages/SystemUI/res/drawable/ic_qs_cast_on.xml index 6c82b1c8fbd3c..8dacdc9809f0b 100644 --- a/packages/SystemUI/res/drawable/ic_qs_cast_on.xml +++ b/packages/SystemUI/res/drawable/ic_qs_cast_on.xml @@ -19,10 +19,10 @@ Copyright (C) 2014 The Android Open Source Project android:height="64dp"/> + android:viewportWidth="48.0" + android:viewportHeight="48.0"/> + android:pathData="M42.0,6.0L6.0,6.0c-2.2,0.0 -4.0,1.8 -4.0,4.0l0.0,6.0l4.0,0.0l0.0,-6.0l36.0,0.0l0.0,28.0L28.0,38.0l0.0,4.0l14.0,0.0c2.2,0.0 4.0,-1.8 4.0,-4.0L46.0,10.0C46.0,7.8 44.2,6.0 42.0,6.0zM2.0,36.0l0.0,6.0l6.0,0.0C8.0,38.7 5.3,36.0 2.0,36.0zM2.0,28.0l0.0,4.0c5.5,0.0 10.0,4.5 10.0,10.0l4.0,0.0C16.0,34.3 9.7,28.0 2.0,28.0zM2.0,20.0l0.0,4.0c9.9,0.0 18.0,8.1 18.0,18.0l4.0,0.0C24.0,29.8 14.1,20.0 2.0,20.0z"/> diff --git a/packages/SystemUI/res/drawable/stat_sys_ringer_zen.xml b/packages/SystemUI/res/drawable/stat_sys_ringer_zen.xml index 70174cbd26442..59924709016c2 100644 --- a/packages/SystemUI/res/drawable/stat_sys_ringer_zen.xml +++ b/packages/SystemUI/res/drawable/stat_sys_ringer_zen.xml @@ -15,8 +15,8 @@ Copyright (C) 2014 The Android Open Source Project --> + android:width="18dp" + android:height="18dp"/> Off. Connected. + + Connecting. GPRS 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 7335ab4f4f5c0..d220e1ad01e6c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java @@ -19,6 +19,7 @@ package com.android.systemui.qs.tiles; import android.bluetooth.BluetoothAdapter.BluetoothStateChangeCallback; import android.content.Intent; import android.provider.Settings; +import android.text.TextUtils; import com.android.systemui.R; import com.android.systemui.qs.QSTile; @@ -70,18 +71,27 @@ public class BluetoothTile extends QSTile { final boolean supported = mController.isBluetoothSupported(); final boolean enabled = mController.isBluetoothEnabled(); final boolean connected = mController.isBluetoothConnected(); + final boolean connecting = mController.isBluetoothConnecting(); state.visible = supported; state.value = enabled; final String stateContentDescription; if (enabled) { + state.label = null; if (connected) { state.iconId = R.drawable.ic_qs_bluetooth_connected; stateContentDescription = mContext.getString(R.string.accessibility_desc_connected); + state.label = mController.getLastDeviceName(); + } else if (connecting) { + state.iconId = R.drawable.ic_qs_bluetooth_connecting; + stateContentDescription = mContext.getString(R.string.accessibility_desc_connecting); + state.label = mController.getLastDeviceName(); } else { state.iconId = R.drawable.ic_qs_bluetooth_on; stateContentDescription = mContext.getString(R.string.accessibility_desc_on); } - state.label = mContext.getString(R.string.quick_settings_bluetooth_label); + if (TextUtils.isEmpty(state.label)) { + state.label = mContext.getString(R.string.quick_settings_bluetooth_label); + } } else { state.iconId = R.drawable.ic_qs_bluetooth_off; state.label = mContext.getString(R.string.quick_settings_bluetooth_off_label); @@ -91,9 +101,9 @@ public class BluetoothTile extends QSTile { R.string.accessibility_quick_settings_bluetooth, stateContentDescription); } - private final BluetoothStateChangeCallback mCallback = new BluetoothStateChangeCallback() { + private final BluetoothController.Callback mCallback = new BluetoothController.Callback() { @Override - public void onBluetoothStateChange(boolean on) { + public void onBluetoothStateChange(boolean enabled, boolean connecting) { refreshState(); } }; 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 f4145cd561ef1..8e9fb3009a560 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothController.java @@ -16,14 +16,18 @@ package com.android.systemui.statusbar.policy; -import android.bluetooth.BluetoothAdapter.BluetoothStateChangeCallback; - public interface BluetoothController { - void addStateChangedCallback(BluetoothStateChangeCallback callback); - void removeStateChangedCallback(BluetoothStateChangeCallback callback); + void addStateChangedCallback(Callback callback); + void removeStateChangedCallback(Callback callback); boolean isBluetoothSupported(); boolean isBluetoothEnabled(); boolean isBluetoothConnected(); + boolean isBluetoothConnecting(); + String getLastDeviceName(); void setBluetoothEnabled(boolean enabled); + + public interface Callback { + void onBluetoothStateChange(boolean enabled, boolean connecting); + } } 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 5a1988182b6ab..117bf61ccf57b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java @@ -17,7 +17,6 @@ package com.android.systemui.statusbar.policy; import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothAdapter.BluetoothStateChangeCallback; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; import android.content.Context; @@ -31,14 +30,13 @@ import java.util.Set; public class BluetoothControllerImpl extends BroadcastReceiver implements BluetoothController { private static final String TAG = "StatusBar.BluetoothController"; + private final ArrayList mCallbacks = new ArrayList(); + private final Set mBondedDevices = new HashSet(); private final BluetoothAdapter mAdapter; - private boolean mEnabled = false; - - private Set mBondedDevices = new HashSet(); - - private ArrayList mChangeCallbacks = - new ArrayList(); + private boolean mEnabled; + private boolean mConnecting; + private BluetoothDevice mLastDevice; public BluetoothControllerImpl(Context context) { mAdapter = BluetoothAdapter.getDefaultAdapter(); @@ -57,14 +55,14 @@ public class BluetoothControllerImpl extends BroadcastReceiver implements Blueto updateBondedBluetoothDevices(); } - public void addStateChangedCallback(BluetoothStateChangeCallback cb) { - mChangeCallbacks.add(cb); + public void addStateChangedCallback(Callback cb) { + mCallbacks.add(cb); fireCallback(cb); } @Override - public void removeStateChangedCallback(BluetoothStateChangeCallback cb) { - mChangeCallbacks.remove(cb); + public void removeStateChangedCallback(Callback cb) { + mCallbacks.remove(cb); } @Override @@ -78,6 +76,12 @@ public class BluetoothControllerImpl extends BroadcastReceiver implements Blueto && mAdapter.getConnectionState() == BluetoothAdapter.STATE_CONNECTED; } + @Override + public boolean isBluetoothConnecting() { + return mAdapter != null + && mAdapter.getConnectionState() == BluetoothAdapter.STATE_CONNECTING; + } + @Override public void setBluetoothEnabled(boolean enabled) { if (mAdapter != null) { @@ -98,6 +102,13 @@ public class BluetoothControllerImpl extends BroadcastReceiver implements Blueto return mBondedDevices; } + @Override + public String getLastDeviceName() { + return mLastDevice != null ? mLastDevice.getName() + : mBondedDevices.size() == 1 ? mBondedDevices.iterator().next().getName() + : null; + } + @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); @@ -106,6 +117,11 @@ public class BluetoothControllerImpl extends BroadcastReceiver implements Blueto handleAdapterStateChange( intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)); } + if (action.equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) { + mConnecting = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, -1) + == BluetoothAdapter.STATE_CONNECTING; + mLastDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); + } fireCallbacks(); updateBondedBluetoothDevices(); } @@ -131,12 +147,12 @@ public class BluetoothControllerImpl extends BroadcastReceiver implements Blueto } private void fireCallbacks() { - for (BluetoothStateChangeCallback cb : mChangeCallbacks) { + for (Callback cb : mCallbacks) { fireCallback(cb); } } - private void fireCallback(BluetoothStateChangeCallback cb) { - cb.onBluetoothStateChange(mEnabled); + private void fireCallback(Callback cb) { + cb.onBluetoothStateChange(mEnabled, mConnecting); } }