summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuang Luong <qal@google.com>2022-06-08 21:55:50 +0000
committerQuang Luong <qal@google.com>2022-06-08 21:55:50 +0000
commitfff38eb5671d5dfe01a56b2d2fdea54383a1b75c (patch)
tree92ce425af46247e17c9d6b94fce69ffa6fafe9e8
parent833e89b054cd1f8790b6ef502cf1f733c09e8d5e (diff)
downloadwifi-fff38eb5671d5dfe01a56b2d2fdea54383a1b75c.tar.gz
WifiTracker: Return MergedCarrierEntry before initialization
WifiPickerTracker populates MergedCarrierEntry during handleOnStart(), which is called on the worker thread some time after onStart(). However, Settings relies on MergedCarrierEntry being populated immediately after onStart(). Thus we should make sure MergedCarrierEntry is returned in getMergedCarrierEntry() even if handleOnStart() hasn't been called yet. Bug: 234636613 Test: atest WifiPickerTrackerTest Change-Id: I1bda4e23b77cd14ee7962c9e894d74a26eacc4c5
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java12
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java10
-rw-r--r--libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java19
3 files changed, 41 insertions, 0 deletions
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
index 831970477..64d1c5a4d 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
@@ -85,6 +85,8 @@ public class BaseWifiTracker implements LifecycleObserver {
private int mWifiState = WifiManager.WIFI_STATE_DISABLED;
+ private boolean mIsInitialized = false;
+
// Registered on the worker thread
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
@@ -311,6 +313,7 @@ public class BaseWifiTracker implements LifecycleObserver {
NonSdkApiWrapper.registerSystemDefaultNetworkCallback(
mConnectivityManager, mDefaultNetworkCallback, mWorkerHandler);
handleOnStart();
+ mIsInitialized = true;
});
}
@@ -329,6 +332,15 @@ public class BaseWifiTracker implements LifecycleObserver {
}
/**
+ * Returns true if this WifiTracker has already been initialized in the worker thread via
+ * handleOnStart()
+ */
+ @AnyThread
+ boolean isInitialized() {
+ return mIsInitialized;
+ }
+
+ /**
* Returns the state of Wi-Fi as one of the following values.
*
* <li>{@link WifiManager#WIFI_STATE_DISABLED}</li>
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
index bed117bc4..2d3cf5404 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java
@@ -196,6 +196,16 @@ public class WifiPickerTracker extends BaseWifiTracker {
*/
@AnyThread
public @Nullable MergedCarrierEntry getMergedCarrierEntry() {
+ if (!isInitialized() && mMergedCarrierEntry == null) {
+ // Settings currently relies on the MergedCarrierEntry being available before
+ // handleOnStart() is called in order to display the W+ toggle. Populate it here if
+ // we aren't initialized yet.
+ int subId = SubscriptionManager.getDefaultDataSubscriptionId();
+ if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+ mMergedCarrierEntry = new MergedCarrierEntry(mWorkerHandler, mWifiManager,
+ /* forSavedNetworksPage */ false, mContext, subId);
+ }
+ }
return mMergedCarrierEntry;
}
diff --git a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
index 0829eb60b..27b27c889 100644
--- a/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
+++ b/libs/WifiTrackerLib/tests/src/com/android/wifitrackerlib/WifiPickerTrackerTest.java
@@ -1427,6 +1427,25 @@ public class WifiPickerTrackerTest {
}
/**
+ * Tests that a MergedCarrierEntry is returned even if WifiPickerTracker hasn't been initialized
+ * via handleOnStart() yet.
+ */
+ @Test
+ public void testGetMergedCarrierEntry_trackerNotInitialized_entryIsNotNull() {
+ final int subId = 1;
+ MockitoSession session = mockitoSession().spyStatic(SubscriptionManager.class)
+ .startMocking();
+ try {
+ doReturn(subId).when(SubscriptionManager::getDefaultDataSubscriptionId);
+ final WifiPickerTracker wifiPickerTracker = createTestWifiPickerTracker();
+ MergedCarrierEntry mergedCarrierEntry = wifiPickerTracker.getMergedCarrierEntry();
+ assertThat(mergedCarrierEntry).isNotNull();
+ } finally {
+ session.finishMocking();
+ }
+ }
+
+ /**
* Tests that roaming from one network to another will update the new network as the default
* network if the default route did not change away from Wifi during the roam. This happens if
* the new network was switched to via MBB.