Chromium Code Reviews| 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 |