Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2229)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java

Issue 2271413002: bluetooth: Implement RSSI indicator on android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-impl-rssi-tx-power
Patch Set: Draft of LevelListDrawable and StateListDrawable Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698