summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuang Luong <qal@google.com>2019-12-30 06:02:23 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-12-30 06:02:23 +0000
commit2e60666973b46feb44ddfc5241c90ad71fc8b630 (patch)
tree7df5ce83fef959853a1b50e8e0d61bdf27d17bd9
parentc2a54eba755deeaa5b71a32b696fb24e1d35a66e (diff)
parent2b1b0b1a60bf206f8d04031ee3cec25b0b7bfa07 (diff)
Merge changes from topic "networkDetailsConnect"
* changes: Handle unsaved secure StandardWifiEntry.connect() Implement StandardWifiEntry.setAutoJoinEnabled() Fix StandardWifiEntry connect success callback trigger
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java13
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java55
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java26
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java16
4 files changed, 76 insertions, 34 deletions
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java
index 574d33cdb..3f0870dad 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java
@@ -26,8 +26,10 @@ import static java.util.stream.Collectors.toList;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
import android.net.NetworkScoreManager;
import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.text.TextUtils;
@@ -66,6 +68,9 @@ class StandardNetworkDetailsTracker extends NetworkDetailsTracker {
cacheNewScanResults();
conditionallyUpdateScanResults(true /* lastScanSucceeded */);
conditionallyUpdateConfig();
+ final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
+ final NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
+ mChosenEntry.updateConnectionInfo(wifiInfo, networkInfo);
}
@AnyThread
@@ -110,6 +115,14 @@ class StandardNetworkDetailsTracker extends NetworkDetailsTracker {
}
}
+ @WorkerThread
+ @Override
+ protected void handleNetworkStateChangedAction(@NonNull Intent intent) {
+ checkNotNull(intent, "Intent cannot be null!");
+ mChosenEntry.updateConnectionInfo(mWifiManager.getConnectionInfo(),
+ (NetworkInfo) intent.getExtra(WifiManager.EXTRA_NETWORK_INFO));
+ }
+
/**
* Updates the tracked entry's scan results up to the max scan age (or more, if the last scan
* was unsuccessful). If Wifi is disabled, the tracked entry's level will be cleared.
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java
index e988bd163..eefae5485 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java
@@ -56,6 +56,7 @@ class StandardWifiEntry extends WifiEntry {
private final @Security int mSecurity;
@Nullable private WifiConfiguration mWifiConfig;
@Nullable private NetworkInfo mNetworkInfo;
+ private boolean mCalledConnect = false;
private int mLevel = WIFI_LEVEL_UNREACHABLE;
@@ -208,8 +209,8 @@ class StandardWifiEntry extends WifiEntry {
@Override
public boolean canConnect() {
- // TODO(b/70983952): Fill this method in
- return false;
+ return mLevel != WIFI_LEVEL_UNREACHABLE
+ && getConnectedState() == CONNECTED_STATE_DISCONNECTED;
}
@Override
@@ -235,8 +236,7 @@ class StandardWifiEntry extends WifiEntry {
mWifiManager.connect(connectConfig, new ConnectListener());
} else {
// Secure network
- // TODO(b/70983952): Add support for unsaved secure networks
- // Return bad password failure to prompt user to enter password.
+ notifyOnConnectResult(WifiEntryCallback.CONNECT_STATUS_FAILURE_NO_CONFIG);
}
} else {
// Saved network
@@ -351,19 +351,21 @@ class StandardWifiEntry extends WifiEntry {
@Override
public boolean isAutoJoinEnabled() {
- // TODO(b/70983952): Fill this method in
- return true;
+ if (mWifiConfig == null) {
+ return false;
+ }
+
+ return mWifiConfig.allowAutojoin;
}
@Override
public boolean canSetAutoJoinEnabled() {
- // TODO(b/70983952): Fill this method in
- return false;
+ return isSaved();
}
@Override
public void setAutoJoinEnabled(boolean enabled) {
- // TODO(b/70983952): Fill this method in
+ mWifiManager.allowAutojoin(mWifiConfig.networkId, enabled);
}
@WorkerThread
@@ -435,6 +437,10 @@ class StandardWifiEntry extends WifiEntry {
if (wifiInfoRssi != INVALID_RSSI) {
mLevel = mWifiManager.calculateSignalLevel(wifiInfoRssi);
}
+ if (mCalledConnect && getConnectedState() == CONNECTED_STATE_CONNECTED) {
+ mCalledConnect = false;
+ notifyOnConnectResult(WifiEntryCallback.CONNECT_STATUS_SUCCESS);
+ }
} else {
mNetworkInfo = null;
}
@@ -454,4 +460,35 @@ class StandardWifiEntry extends WifiEntry {
return KEY_PREFIX + removeDoubleQuotes(config.SSID) + ","
+ getSecurityFromWifiConfiguration(config);
}
+
+ class ConnectListener implements WifiManager.ActionListener {
+ @Override
+ public void onSuccess() {
+ mCalledConnect = true;
+ // If we aren't connected to the network after 10 seconds, trigger the failure callback
+ mCallbackHandler.postDelayed(() -> {
+ if (mCalledConnect && getConnectedState() == CONNECTED_STATE_DISCONNECTED) {
+ notifyOnConnectResult(WifiEntryCallback.CONNECT_STATUS_FAILURE_UNKNOWN);
+ mCalledConnect = false;
+ }
+ }, 10_000 /* delayMillis */);
+ }
+
+ @Override
+ public void onFailure(int i) {
+ notifyOnConnectResult(WifiEntryCallback.CONNECT_STATUS_FAILURE_UNKNOWN);
+ }
+ }
+
+ class ForgetListener implements WifiManager.ActionListener {
+ @Override
+ public void onSuccess() {
+ notifyOnForgetResult(WifiEntryCallback.FORGET_STATUS_SUCCESS);
+ }
+
+ @Override
+ public void onFailure(int i) {
+ notifyOnForgetResult(WifiEntryCallback.FORGET_STATUS_FAILURE_UNKNOWN);
+ }
+ }
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
index 4caa312c3..7bf94b5c5 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java
@@ -133,7 +133,7 @@ public abstract class WifiEntry implements Comparable<WifiEntry> {
// Callback associated with this WifiEntry. Subclasses should call its methods appropriately.
private WifiEntryCallback mListener;
- private Handler mCallbackHandler;
+ protected Handler mCallbackHandler;
WifiEntry(@NonNull Handler callbackHandler, boolean forSavedNetworksPage,
@NonNull WifiManager wifiManager) throws IllegalArgumentException {
@@ -451,28 +451,4 @@ public abstract class WifiEntry implements Comparable<WifiEntry> {
mCallbackHandler.post(() -> mListener.onSignInResult(status));
}
}
-
- class ConnectListener implements WifiManager.ActionListener {
- @Override
- public void onSuccess() {
- notifyOnConnectResult(WifiEntryCallback.CONNECT_STATUS_SUCCESS);
- }
-
- @Override
- public void onFailure(int i) {
- notifyOnConnectResult(WifiEntryCallback.CONNECT_STATUS_FAILURE_UNKNOWN);
- }
- }
-
- class ForgetListener implements WifiManager.ActionListener {
- @Override
- public void onSuccess() {
- notifyOnForgetResult(WifiEntryCallback.FORGET_STATUS_SUCCESS);
- }
-
- @Override
- public void onFailure(int i) {
- notifyOnForgetResult(WifiEntryCallback.FORGET_STATUS_FAILURE_UNKNOWN);
- }
- }
}
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java
index 7b9d100e4..e4ddaa364 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/StandardWifiEntryTest.java
@@ -370,6 +370,22 @@ public class StandardWifiEntryTest {
}
@Test
+ public void testConnect_unsavedSecureNetwork_returnsNoConfigFailure() {
+ final ScanResult secureScan = buildScanResult("ssid", "bssid0", 0, GOOD_RSSI);
+ secureScan.capabilities = "PSK";
+ final StandardWifiEntry entry = new StandardWifiEntry(mTestHandler,
+ Arrays.asList(secureScan),
+ mMockWifiManager);
+ entry.setListener(mMockListener);
+
+ entry.connect();
+ mTestLooper.dispatchAll();
+
+ verify(mMockListener, times(1))
+ .onConnectResult(WifiEntry.WifiEntryCallback.CONNECT_STATUS_FAILURE_NO_CONFIG);
+ }
+
+ @Test
public void testGetMacAddress_randomizationOn_usesRandomizedValue() {
final String randomizedMac = "01:23:45:67:89:ab";
final WifiConfiguration config = new WifiConfiguration();