summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuang Luong <qal@google.com>2020-08-10 18:36:13 -0700
committerQuang Luong <qal@google.com>2020-08-12 10:03:00 -0700
commit4976b67589de4033211b4495b1e1c5274cf03474 (patch)
tree97165e3128bdbaf9a7345d5b805315c7f1ffd7aa
parent1252c1e8cd21a9b5878c2bdff1f9c1d234b74745 (diff)
[WifiTrackerLib] Handle isAutoJoinEnabled when no configs available
PasspointWifiEntry may have cases where mPasspointConfig and mWifiConfig are both null, which can happen for a suggestion passpoint entry that goes out of range, or the brief moment when a subscription passpoint entry is forgotten but not yet removed. isAutoJoinEnabled needs to default to false in case both configs are missing. In addition, to prevent the wrong value from appearing for the out of range suggestion case, keep a reference to the old WifiConfig when updating with null scans. Bug: 163084959 Test: atest WifiTrackerLibTests Change-Id: I5eb40308cc01dc6e6f25b90828dd551f0cf4c633
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java15
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java17
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java11
3 files changed, 29 insertions, 14 deletions
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java
index e2d7acc8e..9ec431736 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointNetworkDetailsTracker.java
@@ -45,7 +45,6 @@ import androidx.annotation.WorkerThread;
import androidx.lifecycle.Lifecycle;
import java.time.Clock;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -59,6 +58,7 @@ class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
private final PasspointWifiEntry mChosenEntry;
private OsuWifiEntry mOsuWifiEntry;
private NetworkInfo mCurrentNetworkInfo;
+ private WifiConfiguration mCurrentWifiConfig;
PasspointNetworkDetailsTracker(@NonNull Lifecycle lifecycle,
@NonNull Context context,
@@ -180,14 +180,16 @@ class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
final String key = uniqueIdToPasspointWifiEntryKey(wifiConfig.getKey());
if (TextUtils.equals(key, mChosenEntry.getKey())) {
- mChosenEntry.updateScanResultInfo(wifiConfig,
+ mCurrentWifiConfig = wifiConfig;
+ mChosenEntry.updateScanResultInfo(mCurrentWifiConfig,
pair.second.get(WifiManager.PASSPOINT_HOME_NETWORK),
pair.second.get(WifiManager.PASSPOINT_ROAMING_NETWORK));
return;
}
}
- // No AP in range; set scan results and connection config to null.
- mChosenEntry.updateScanResultInfo(null /* wifiConfig */,
+ // No AP in range; set scan results to null but keep the last seen WifiConfig to display
+ // the previous information while out of range.
+ mChosenEntry.updateScanResultInfo(mCurrentWifiConfig,
null /* homeScanResults */,
null /* roamingScanResults */);
}
@@ -235,8 +237,9 @@ class PasspointNetworkDetailsTracker extends NetworkDetailsTracker {
*/
private void conditionallyUpdateScanResults(boolean lastScanSucceeded) {
if (mWifiManager.getWifiState() == WifiManager.WIFI_STATE_DISABLED) {
- mChosenEntry.updateScanResultInfo(null /* wifiConfig */,
- Collections.emptyList(), Collections.emptyList());
+ mChosenEntry.updateScanResultInfo(mCurrentWifiConfig,
+ null /* homeScanResults */,
+ null /* roamingScanResults */);
return;
}
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java
index 36c855898..1fca6a4e5 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java
@@ -476,26 +476,27 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry
@Override
public boolean isAutoJoinEnabled() {
// Suggestion network; use WifiConfig instead
- if (mPasspointConfig == null && mWifiConfig != null) {
+ if (mPasspointConfig != null) {
+ return mPasspointConfig.isAutojoinEnabled();
+ }
+ if (mWifiConfig != null) {
return mWifiConfig.allowAutojoin;
}
-
- return mPasspointConfig.isAutojoinEnabled();
+ return false;
}
@Override
public boolean canSetAutoJoinEnabled() {
- return true;
+ return mPasspointConfig != null || mWifiConfig != null;
}
@Override
public void setAutoJoinEnabled(boolean enabled) {
- if (mPasspointConfig == null && mWifiConfig != null) {
+ if (mPasspointConfig != null) {
+ mWifiManager.allowAutojoinPasspoint(mPasspointConfig.getHomeSp().getFqdn(), enabled);
+ } else if (mWifiConfig != null) {
mWifiManager.allowAutojoin(mWifiConfig.networkId, enabled);
- return;
}
-
- mWifiManager.allowAutojoinPasspoint(mPasspointConfig.getHomeSp().getFqdn(), enabled);
}
@Override
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java
index fa7812fe6..9fa6a2f40 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/PasspointWifiEntryTest.java
@@ -246,4 +246,15 @@ public class PasspointWifiEntryTest {
assertThat(entry.getMacAddress()).isEqualTo(wifiInfoMac);
}
+
+ @Test
+ public void testIsAutoJoinEnabled_nullConfigs_returnsFalse() {
+ PasspointWifiEntry entry = new PasspointWifiEntry(mMockContext, mTestHandler,
+ getPasspointConfiguration(), mMockWifiManager, mMockScoreCache,
+ false /* forSavedNetworksPage */);
+
+ entry.updatePasspointConfig(null);
+
+ assertThat(entry.isAutoJoinEnabled()).isFalse();
+ }
}