diff options
author | Quang Luong <qal@google.com> | 2019-12-30 06:02:23 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-12-30 06:02:23 +0000 |
commit | 2e60666973b46feb44ddfc5241c90ad71fc8b630 (patch) | |
tree | 7df5ce83fef959853a1b50e8e0d61bdf27d17bd9 | |
parent | c2a54eba755deeaa5b71a32b696fb24e1d35a66e (diff) | |
parent | 2b1b0b1a60bf206f8d04031ee3cec25b0b7bfa07 (diff) |
Merge changes from topic "networkDetailsConnect"
* changes:
Handle unsaved secure StandardWifiEntry.connect()
Implement StandardWifiEntry.setAutoJoinEnabled()
Fix StandardWifiEntry connect success callback trigger
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(); |