Index: chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java |
index c3bece95d76975a4215614bab331ec18decdc769..3df3e17d5ba0ca8ab924dade4f747026dfaa0c87 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java |
@@ -10,11 +10,17 @@ import android.content.BroadcastReceiver; |
import android.content.Context; |
import android.content.Intent; |
import android.content.IntentFilter; |
+import android.content.res.Resources; |
+import android.graphics.drawable.Drawable; |
+import android.graphics.drawable.LevelListDrawable; |
+import android.graphics.drawable.StateListDrawable; |
import android.location.LocationManager; |
+import android.support.graphics.drawable.VectorDrawableCompat; |
import android.text.SpannableString; |
import android.text.TextUtils; |
import android.view.View; |
+import org.chromium.base.Log; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.base.annotations.CalledByNative; |
import org.chromium.chrome.R; |
@@ -63,6 +69,8 @@ public class BluetoothChooserDialog |
// bluetooth devices. For valid values see SecurityStateModel::SecurityLevel. |
int mSecurityLevel; |
+ LevelListDrawable strengthSignalIcons; |
+ |
// A pointer back to the native part of the implementation for this dialog. |
long mNativeBluetoothChooserDialogPtr; |
@@ -106,6 +114,54 @@ public class BluetoothChooserDialog |
mOrigin = origin; |
mSecurityLevel = securityLevel; |
mNativeBluetoothChooserDialogPtr = nativeBluetoothChooserDialogPtr; |
+ Resources resources = mActivity.getResources(); |
+ |
+ StateListDrawable level0 = new StateListDrawable(); |
+ level0.addState(new int[] {-android.R.attr.state_selected}, |
+ VectorDrawableCompat.create( |
+ resources, R.drawable.ic_signal_cellular_0_bar_grey, null /* theme */)); |
Ian Wen
2016/10/14 01:39:51
Why not simply use mActivity.getTheme() here? Or i
|
+ level0.addState(new int[] {android.R.attr.state_selected}, |
+ VectorDrawableCompat.create( |
+ resources, R.drawable.ic_signal_cellular_0_bar_white, null /* theme */)); |
+ |
+ StateListDrawable level1 = new StateListDrawable(); |
+ level1.addState(new int[] {-android.R.attr.state_selected}, |
+ VectorDrawableCompat.create( |
+ resources, R.drawable.ic_signal_cellular_1_bar_grey, null /* theme */)); |
+ level1.addState(new int[] {android.R.attr.state_selected}, |
+ VectorDrawableCompat.create( |
+ resources, R.drawable.ic_signal_cellular_1_bar_white, null /* theme */)); |
+ |
+ StateListDrawable level2 = new StateListDrawable(); |
+ level2.addState(new int[] {-android.R.attr.state_selected}, |
+ VectorDrawableCompat.create( |
+ resources, R.drawable.ic_signal_cellular_2_bar_grey, null /* theme */)); |
+ level2.addState(new int[] {android.R.attr.state_selected}, |
+ VectorDrawableCompat.create( |
+ resources, R.drawable.ic_signal_cellular_2_bar_white, null /* theme */)); |
+ |
+ StateListDrawable level3 = new StateListDrawable(); |
+ level3.addState(new int[] {-android.R.attr.state_selected}, |
+ VectorDrawableCompat.create( |
+ resources, R.drawable.ic_signal_cellular_3_bar_grey, null /* theme */)); |
+ level3.addState(new int[] {android.R.attr.state_selected}, |
+ VectorDrawableCompat.create( |
+ resources, R.drawable.ic_signal_cellular_3_bar_white, null /* theme */)); |
+ |
+ StateListDrawable level4 = new StateListDrawable(); |
+ level4.addState(new int[] {-android.R.attr.state_selected}, |
+ VectorDrawableCompat.create( |
+ resources, R.drawable.ic_signal_cellular_4_bar_grey, null /* theme */)); |
+ level4.addState(new int[] {android.R.attr.state_selected}, |
+ VectorDrawableCompat.create( |
+ resources, R.drawable.ic_signal_cellular_4_bar_white, null /* theme */)); |
+ |
+ strengthSignalIcons = new LevelListDrawable(); |
+ strengthSignalIcons.addLevel(0, 0, level0); |
+ strengthSignalIcons.addLevel(1, 1, level1); |
+ strengthSignalIcons.addLevel(2, 2, level2); |
+ strengthSignalIcons.addLevel(3, 3, level3); |
+ strengthSignalIcons.addLevel(4, 4, level4); |
} |
/** |
@@ -156,7 +212,7 @@ public class BluetoothChooserDialog |
ItemChooserDialog.ItemChooserLabels labels = |
new ItemChooserDialog.ItemChooserLabels(title, searching, noneFound, statusActive, |
statusIdleNoneFound, statusIdleSomeFound, positiveButton); |
- mItemChooserDialog = new ItemChooserDialog(mActivity, this, labels); |
+ mItemChooserDialog = new ItemChooserDialog(mActivity, this, labels, true /* usingIcon */); |
mActivity.registerReceiver(mLocationModeBroadcastReceiver, |
new IntentFilter(LocationManager.MODE_CHANGED_ACTION)); |
@@ -337,9 +393,29 @@ public class BluetoothChooserDialog |
@VisibleForTesting |
@CalledByNative |
- void addOrUpdateDevice(String deviceId, String deviceName) { |
+ void addOrUpdateDevice(String deviceId, String deviceName, int signalStrengthLevel) { |
+ assert - 1 <= signalStrengthLevel && signalStrengthLevel <= 4; |
+ ItemChooserDialog.ItemChooserRow row = mItemChooserDialog.getItemChooserRow(deviceId); |
+ Drawable icon = null; |
+ String iconDescription = null; |
+ boolean didUpdateOldDrawable = false; |
+ if (signalStrengthLevel != -1) { |
+ if (row == null) { |
+ icon = strengthSignalIcons.getConstantState().newDrawable(); |
+ } else { |
+ icon = row.getIcon(); |
+ } |
+ if (icon.setLevel(signalStrengthLevel)) { |
+ icon.invalidateSelf(); |
+ } |
+ iconDescription = mActivity.getResources().getQuantityString( |
+ R.plurals.signal_strength_level_n_bars, signalStrengthLevel, |
+ signalStrengthLevel); |
+ didUpdateOldDrawable = true; |
+ } |
mItemChooserDialog.addOrUpdateItem( |
- new ItemChooserDialog.ItemChooserRow(deviceId, deviceName)); |
+ new ItemChooserDialog.ItemChooserRow(deviceId, deviceName, icon, iconDescription), |
Ian Wen
2016/10/14 01:39:51
IIRC this method will be called more than 10 times
|
+ didUpdateOldDrawable); |
} |
@VisibleForTesting |