diff options
author | Quang Luong <qal@google.com> | 2022-06-08 21:55:50 +0000 |
---|---|---|
committer | Quang Luong <qal@google.com> | 2022-06-08 21:55:50 +0000 |
commit | fff38eb5671d5dfe01a56b2d2fdea54383a1b75c (patch) | |
tree | 92ce425af46247e17c9d6b94fce69ffa6fafe9e8 | |
parent | 833e89b054cd1f8790b6ef502cf1f733c09e8d5e (diff) | |
download | wifi-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
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. |