summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorQuang Luong <qal@google.com>2019-12-19 15:34:10 -0800
committerQuang Luong <qal@google.com>2019-12-26 09:53:03 -0800
commit811818bfa82b7633ffa66b31eadbf5ed4d9565bd (patch)
tree34c9f092032102da30422505f791720365dbc758 /libs
parent8492ba2f6001000b23afa31a3697cdbac35d09c2 (diff)
Fix StandardWifiEntry connect success callback trigger
Listeners on StandardWifiEntry would be notified for connection success when the call to WifiManager.connect() returned success. However, the success signal from WifiManager indicates that the call succeeded but not that the actual network was connected to. This resulted in Settings showing a toast "Connected to <network>" immediately after the connect button was pressed. This change modifies the success callback to run after the connection is completed. Bug: 70983952 Test: manual - tap on Connect in the Network Details Page and verify the "Connected to <network>" toast appears only after the network is connected to. Change-Id: If825d33cdfad50950e18186c6027d4fea0ddc035
Diffstat (limited to 'libs')
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardNetworkDetailsTracker.java13
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java40
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java26
3 files changed, 52 insertions, 27 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..0586f1c5b 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
@@ -435,6 +436,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 +459,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);
- }
- }
}