summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author David Su <dysu@google.com> 2019-11-22 00:07:50 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-11-22 00:07:50 +0000
commit70531992132b03a26d2396d86c7f1dc1afee87e8 (patch)
tree7dd5c63afe91edafb107db03952b4c3d70fef8f4
parent575039571580b0a60c71e4e38151f67f34f7fdcd (diff)
parent3c9241075a7ae2e5e4197018ef1ef12a6c94f1fe (diff)
Merge changes from topic "rssi-level-thresholds"
* changes: Add new WifiManager API to calculate signal levels Fix broken test caused by calculateSignalLevel() migration Migrate WifiStatusTracker calculateSignalLevel()
-rw-r--r--api/current.txt4
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java8
-rw-r--r--wifi/java/android/net/wifi/IWifiManager.aidl2
-rw-r--r--wifi/java/android/net/wifi/WifiManager.java40
-rw-r--r--wifi/java/com/android/server/wifi/BaseWifiService.java5
-rw-r--r--wifi/tests/src/android/net/wifi/WifiManagerTest.java19
7 files changed, 71 insertions, 9 deletions
diff --git a/api/current.txt b/api/current.txt
index f899e40edab4..b7ba11f2ad74 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -30061,7 +30061,8 @@ package android.net.wifi {
method public void addOrUpdatePasspointConfiguration(android.net.wifi.hotspot2.PasspointConfiguration);
method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void addScanResultsListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.ScanResultsListener);
method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE}) public void addSuggestionConnectionStatusListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SuggestionConnectionStatusListener);
- method public static int calculateSignalLevel(int, int);
+ method @Deprecated public static int calculateSignalLevel(int, int);
+ method public int calculateSignalLevel(int);
method @Deprecated public void cancelWps(android.net.wifi.WifiManager.WpsCallback);
method public static int compareSignalLevel(int, int);
method public android.net.wifi.WifiManager.MulticastLock createMulticastLock(String);
@@ -30074,6 +30075,7 @@ package android.net.wifi {
method public android.net.wifi.WifiInfo getConnectionInfo();
method public android.net.DhcpInfo getDhcpInfo();
method public int getMaxNumberOfNetworkSuggestionsPerApp();
+ method public int getMaxSignalLevel();
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public java.util.List<android.net.wifi.WifiNetworkSuggestion> getNetworkSuggestions();
method @Deprecated @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", "android.permission.NETWORK_SETUP_WIZARD"}) public java.util.List<android.net.wifi.hotspot2.PasspointConfiguration> getPasspointConfigurations();
method public java.util.List<android.net.wifi.ScanResult> getScanResults();
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
index 51e37d1e0771..8591116fce0f 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
@@ -142,7 +142,7 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback {
private void updateRssi(int newRssi) {
rssi = newRssi;
- level = WifiManager.calculateSignalLevel(rssi, WifiManager.RSSI_LEVELS);
+ level = mWifiManager.calculateSignalLevel(rssi);
}
private void maybeRequestNetworkScore() {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
index 4d866136c915..61a7cc752c70 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
@@ -139,6 +139,14 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
when(mMockCm.getDefaultNetworkCapabilitiesForUser(0)).thenReturn(
new NetworkCapabilities[] { mNetCapabilities });
when(mMockTm.createForSubscriptionId(anyInt())).thenReturn(mMockTm);
+ doAnswer(invocation -> {
+ int rssi = invocation.getArgument(0);
+ if (rssi < -88) return 0;
+ if (rssi < -77) return 1;
+ if (rssi < -66) return 2;
+ if (rssi < -55) return 3;
+ return 4;
+ }).when(mMockWm).calculateSignalLevel(anyInt());
mSignalStrength = mock(SignalStrength.class);
mServiceState = mock(ServiceState.class);
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index b4e72abfa201..4619372e2258 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -240,4 +240,6 @@ interface IWifiManager
void registerSuggestionConnectionStatusListener(in IBinder binder, in ISuggestionConnectionStatusListener listener, int listenerIdentifier, String packageName, String featureId);
void unregisterSuggestionConnectionStatusListener(int listenerIdentifier, String packageName);
+
+ int calculateSignalLevel(int rssi);
}
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index 8802c9c0a485..77666b072bff 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -1153,8 +1153,6 @@ public class WifiManager {
* @hide
*/
@UnsupportedAppUsage
- // TODO(b/140781184): need to support custom number of RSSI levels, as well as levels that are
- // not evenly spaced
public static final int RSSI_LEVELS = 5;
/**
@@ -2782,11 +2780,13 @@ public class WifiManager {
* is being shown.
*
* @param rssi The power of the signal measured in RSSI.
- * @param numLevels The number of levels to consider in the calculated
- * level.
- * @return A level of the signal, given in the range of 0 to numLevels-1
- * (both inclusive).
+ * @param numLevels The number of levels to consider in the calculated level.
+ * @return A level of the signal, given in the range of 0 to numLevels-1 (both inclusive).
+ * @deprecated Callers should use {@link #calculateSignalLevel(int)} instead to get the
+ * signal level using the system default RSSI thresholds, or otherwise compute the RSSI level
+ * themselves using their own formula.
*/
+ @Deprecated
public static int calculateSignalLevel(int rssi, int numLevels) {
if (rssi <= MIN_RSSI) {
return 0;
@@ -2800,6 +2800,34 @@ public class WifiManager {
}
/**
+ * Given a raw RSSI, return the RSSI signal quality rating using the system default RSSI
+ * quality rating thresholds.
+ * @param rssi a raw RSSI value, in dBm, usually between -55 and -90
+ * @return the RSSI signal quality rating, in the range
+ * [0, {@link #getMaxSignalLevel()}], where 0 is the lowest (worst signal) RSSI
+ * rating and {@link #getMaxSignalLevel()} is the highest (best signal) RSSI rating.
+ */
+ public int calculateSignalLevel(int rssi) {
+ try {
+ IWifiManager iWifiManager = getIWifiManager();
+ if (iWifiManager == null) {
+ throw new RemoteException("Wifi service is not running");
+ }
+ return iWifiManager.calculateSignalLevel(rssi);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Get the system default maximum signal level.
+ * This is the maximum RSSI level returned by {@link #calculateSignalLevel(int)}.
+ */
+ public int getMaxSignalLevel() {
+ return calculateSignalLevel(Integer.MAX_VALUE);
+ }
+
+ /**
* Compares two signal strengths.
*
* @param rssiA The power of the first signal measured in RSSI.
diff --git a/wifi/java/com/android/server/wifi/BaseWifiService.java b/wifi/java/com/android/server/wifi/BaseWifiService.java
index d740c363f889..ee03c11c826a 100644
--- a/wifi/java/com/android/server/wifi/BaseWifiService.java
+++ b/wifi/java/com/android/server/wifi/BaseWifiService.java
@@ -535,4 +535,9 @@ public class BaseWifiService extends IWifiManager.Stub {
String packageName) {
throw new UnsupportedOperationException();
}
+
+ @Override
+ public int calculateSignalLevel(int rssi) {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java
index 06ebc1b3f6da..507d50295d86 100644
--- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java
@@ -1899,8 +1899,25 @@ public class WifiManagerTest {
*/
@Test
public void testRemoveSuggestionConnectionListener() throws Exception {
-
mWifiManager.removeSuggestionConnectionStatusListener(mListener);
verify(mWifiService).unregisterSuggestionConnectionStatusListener(anyInt(), anyString());
}
+
+ /** Test {@link WifiManager#calculateSignalLevel(int)} */
+ @Test
+ public void testCalculateSignalLevel() throws Exception {
+ when(mWifiService.calculateSignalLevel(anyInt())).thenReturn(3);
+ int actual = mWifiManager.calculateSignalLevel(-60);
+ verify(mWifiService).calculateSignalLevel(-60);
+ assertEquals(3, actual);
+ }
+
+ /** Test {@link WifiManager#getMaxSignalLevel()} */
+ @Test
+ public void testGetMaxSignalLevel() throws Exception {
+ when(mWifiService.calculateSignalLevel(anyInt())).thenReturn(4);
+ int actual = mWifiManager.getMaxSignalLevel();
+ verify(mWifiService).calculateSignalLevel(Integer.MAX_VALUE);
+ assertEquals(4, actual);
+ }
}