diff options
| author | 2024-04-08 18:02:25 -0700 | |
|---|---|---|
| committer | 2024-04-09 12:58:15 -0700 | |
| commit | aa0485053714dd0f13636a82c458beeca8f44ba9 (patch) | |
| tree | bd045c07ec198a4fa8fa60a11eafc1dea5f55680 | |
| parent | ba7eba9c2d24e0743b0476bba69ba9bbb118a974 (diff) | |
Fix an issue with the wifi status bar icon appearing when it shouldn't.
Bug: 333416497
Test: atest DreamOverlayStatusBarViewControllerTest
Flag: NA
Change-Id: Ibfa4b5caed040919c4d44f525d2475dddd15641d
2 files changed, 28 insertions, 137 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java index 39db2beb4c44..f561c531253b 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java @@ -36,11 +36,8 @@ import android.app.AlarmManager; import android.content.Context; import android.content.res.Resources; import android.hardware.SensorPrivacyManager; -import android.net.ConnectivityManager; -import android.net.Network; -import android.net.NetworkCapabilities; -import android.net.NetworkRequest; import android.provider.Settings; +import android.testing.TestableLooper; import android.view.View; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -51,6 +48,7 @@ import com.android.systemui.log.LogBuffer; import com.android.systemui.log.core.FakeLogBuffer; import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; +import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepository; import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.ZenModeController; @@ -72,6 +70,7 @@ import java.util.Optional; import java.util.concurrent.Executor; @SmallTest +@TestableLooper.RunWithLooper(setAsMainLooper = true) @RunWith(AndroidJUnit4.class) public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { private static final String NOTIFICATION_INDICATOR_FORMATTER_STRING = @@ -80,12 +79,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { @Mock MockDreamOverlayStatusBarView mView; @Mock - ConnectivityManager mConnectivityManager; - @Mock - NetworkCapabilities mNetworkCapabilities; - @Mock - Network mNetwork; - @Mock TouchInsetManager.TouchInsetSession mTouchSession; @Mock Resources mResources; @@ -121,6 +114,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { private final Executor mMainExecutor = Runnable::run; + private final FakeWifiRepository mWifiRepository = new FakeWifiRepository(); + DreamOverlayStatusBarViewController mController; @Before @@ -137,7 +132,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { mView, mResources, mMainExecutor, - mConnectivityManager, mTouchSession, mAlarmManager, mNextAlarmController, @@ -149,6 +143,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { mDreamOverlayStatusBarItemsProvider, mDreamOverlayStateController, mUserTracker, + mWifiRepository, mLogBuffer); } @@ -164,39 +159,21 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { } @Test - public void testOnViewAttachedRegistersNetworkCallback() { + public void testWifiIconShownWhenWifiUnavailable() { mController.onViewAttached(); - verify(mConnectivityManager) - .registerNetworkCallback(any(NetworkRequest.class), any( - ConnectivityManager.NetworkCallback.class)); - } + mController.updateWifiUnavailableStatusIcon(false); - @Test - public void testOnViewAttachedShowsWifiIconWhenWifiUnavailable() { - when(mNetworkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) - .thenReturn(false); - when(mConnectivityManager.getNetworkCapabilities(any())).thenReturn(mNetworkCapabilities); - mController.onViewAttached(); verify(mView).showIcon( DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true, null); } @Test - public void testOnViewAttachedHidesWifiIconWhenWifiAvailable() { - when(mNetworkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) - .thenReturn(true); - when(mConnectivityManager.getNetworkCapabilities(any())).thenReturn(mNetworkCapabilities); + public void testWifiIconHiddenWhenWifiAvailable() { mController.onViewAttached(); - verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false, null); - } + mController.updateWifiUnavailableStatusIcon(true); - @Test - public void testOnViewAttachedShowsWifiIconWhenNetworkCapabilitiesUnavailable() { - when(mConnectivityManager.getNetworkCapabilities(any())).thenReturn(null); - mController.onViewAttached(); verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true, null); + DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false, null); } @Test @@ -282,7 +259,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { mView, mResources, mMainExecutor, - mConnectivityManager, mTouchSession, mAlarmManager, mNextAlarmController, @@ -294,6 +270,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { mDreamOverlayStatusBarItemsProvider, mDreamOverlayStateController, mUserTracker, + mWifiRepository, mLogBuffer); controller.onViewAttached(); verify(mView, never()).showIcon( @@ -319,13 +296,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { } @Test - public void testOnViewDetachedUnregistersNetworkCallback() { - mController.onViewDetached(); - verify(mConnectivityManager) - .unregisterNetworkCallback(any(ConnectivityManager.NetworkCallback.class)); - } - - @Test public void testOnViewDetachedRemovesCallbacks() { mController.onViewDetached(); verify(mNextAlarmController).removeCallback(any()); @@ -343,61 +313,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { } @Test - public void testWifiIconHiddenWhenWifiBecomesAvailable() { - // Make sure wifi starts out unavailable when onViewAttached is called, and then returns - // true on the second query. - when(mNetworkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) - .thenReturn(false).thenReturn(true); - when(mConnectivityManager.getNetworkCapabilities(any())).thenReturn(mNetworkCapabilities); - mController.onViewAttached(); - - final ArgumentCaptor<ConnectivityManager.NetworkCallback> callbackCapture = - ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class); - verify(mConnectivityManager).registerNetworkCallback(any(), callbackCapture.capture()); - callbackCapture.getValue().onAvailable(mNetwork); - - verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false, null); - } - - @Test - public void testWifiIconShownWhenWifiBecomesUnavailable() { - // Make sure wifi starts out available when onViewAttached is called, then returns false - // on the second query. - when(mNetworkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) - .thenReturn(true).thenReturn(false); - when(mConnectivityManager.getNetworkCapabilities(any())).thenReturn(mNetworkCapabilities); - mController.onViewAttached(); - - final ArgumentCaptor<ConnectivityManager.NetworkCallback> callbackCapture = - ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class); - verify(mConnectivityManager).registerNetworkCallback(any(), callbackCapture.capture()); - callbackCapture.getValue().onLost(mNetwork); - - verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true, null); - } - - @Test - public void testWifiIconHiddenWhenCapabilitiesChange() { - // Make sure wifi starts out unavailable when onViewAttached is called. - when(mNetworkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) - .thenReturn(false); - when(mConnectivityManager.getNetworkCapabilities(any())).thenReturn(mNetworkCapabilities); - mController.onViewAttached(); - - final ArgumentCaptor<ConnectivityManager.NetworkCallback> callbackCapture = - ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class); - verify(mConnectivityManager).registerNetworkCallback(any(), callbackCapture.capture()); - when(mNetworkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) - .thenReturn(true); - callbackCapture.getValue().onCapabilitiesChanged(mNetwork, mNetworkCapabilities); - - verify(mView).showIcon( - DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false, null); - } - - @Test public void testNotificationsIconShownWhenNotificationAdded() { mController.onViewAttached(); diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java index 8d8702ebc6c7..da72a569e854 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java @@ -16,30 +16,30 @@ package com.android.systemui.dreams; +import static com.android.systemui.util.kotlin.JavaAdapterKt.collectFlow; + import android.app.AlarmManager; import android.app.StatusBarManager; import android.content.res.Resources; import android.hardware.SensorPrivacyManager; -import android.net.ConnectivityManager; -import android.net.ConnectivityManager.NetworkCallback; -import android.net.Network; -import android.net.NetworkCapabilities; -import android.net.NetworkRequest; import android.provider.Settings; import android.text.format.DateFormat; import android.util.PluralsMessageFormatter; import android.view.View; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; -import com.android.systemui.res.R; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dreams.DreamOverlayStatusBarItemsProvider.StatusBarItem; import com.android.systemui.dreams.dagger.DreamOverlayComponent; import com.android.systemui.log.LogBuffer; import com.android.systemui.log.dagger.DreamLog; +import com.android.systemui.res.R; import com.android.systemui.settings.UserTracker; import com.android.systemui.statusbar.CrossFadeHelper; +import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository; +import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel; import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; import com.android.systemui.statusbar.policy.NextAlarmController; import com.android.systemui.statusbar.policy.ZenModeController; @@ -65,7 +65,6 @@ import javax.inject.Inject; public class DreamOverlayStatusBarViewController extends ViewController<DreamOverlayStatusBarView> { private static final String TAG = "DreamStatusBarCtrl"; - private final ConnectivityManager mConnectivityManager; private final TouchInsetManager.TouchInsetSession mTouchInsetSession; private final NextAlarmController mNextAlarmController; private final AlarmManager mAlarmManager; @@ -77,6 +76,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve private final ZenModeController mZenModeController; private final DreamOverlayStateController mDreamOverlayStateController; private final UserTracker mUserTracker; + private final WifiRepository mWifiRepository; private final StatusBarWindowStateController mStatusBarWindowStateController; private final DreamOverlayStatusBarItemsProvider mStatusBarItemsProvider; private final Executor mMainExecutor; @@ -89,28 +89,6 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve // Whether dream entry animations are finished. private boolean mEntryAnimationsFinished = false; - private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder() - .clearCapabilities() - .addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(); - - private final NetworkCallback mNetworkCallback = new NetworkCallback() { - @Override - public void onCapabilitiesChanged( - Network network, NetworkCapabilities networkCapabilities) { - updateWifiUnavailableStatusIcon(); - } - - @Override - public void onAvailable(Network network) { - updateWifiUnavailableStatusIcon(); - } - - @Override - public void onLost(Network network) { - updateWifiUnavailableStatusIcon(); - } - }; - private final DreamOverlayStateController.Callback mDreamOverlayStateCallback = new DreamOverlayStateController.Callback() { @Override @@ -151,7 +129,6 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve DreamOverlayStatusBarView view, @Main Resources resources, @Main Executor mainExecutor, - ConnectivityManager connectivityManager, TouchInsetManager.TouchInsetSession touchInsetSession, AlarmManager alarmManager, NextAlarmController nextAlarmController, @@ -163,11 +140,11 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve DreamOverlayStatusBarItemsProvider statusBarItemsProvider, DreamOverlayStateController dreamOverlayStateController, UserTracker userTracker, + WifiRepository wifiRepository, @DreamLog LogBuffer logBuffer) { super(view); mResources = resources; mMainExecutor = mainExecutor; - mConnectivityManager = connectivityManager; mTouchInsetSession = touchInsetSession; mAlarmManager = alarmManager; mNextAlarmController = nextAlarmController; @@ -179,6 +156,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve mZenModeController = zenModeController; mDreamOverlayStateController = dreamOverlayStateController; mUserTracker = userTracker; + mWifiRepository = wifiRepository; mLogger = new DreamLogger(logBuffer, TAG); // Register to receive show/hide updates for the system status bar. Our custom status bar @@ -190,8 +168,11 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve protected void onViewAttached() { mIsAttached = true; - mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback); - updateWifiUnavailableStatusIcon(); + collectFlow( + mView, + mWifiRepository.getWifiNetwork(), + network -> updateWifiUnavailableStatusIcon( + network instanceof WifiNetworkModel.Active)); mNextAlarmController.addCallback(mNextAlarmCallback); updateAlarmStatusIcon(); @@ -215,7 +196,6 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve mZenModeController.removeCallback(mZenModeCallback); mSensorPrivacyController.removeCallback(mSensorCallback); mNextAlarmController.removeCallback(mNextAlarmCallback); - mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); mDreamOverlayNotificationCountProvider.ifPresent( provider -> provider.removeCallback(mNotificationCountCallback)); mStatusBarItemsProvider.removeCallback(mStatusBarItemsProviderCallback); @@ -258,12 +238,8 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve && !mStatusBarWindowStateController.windowIsShowing(); } - private void updateWifiUnavailableStatusIcon() { - final NetworkCapabilities capabilities = - mConnectivityManager.getNetworkCapabilities( - mConnectivityManager.getActiveNetwork()); - final boolean available = capabilities != null - && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI); + @VisibleForTesting + void updateWifiUnavailableStatusIcon(boolean available) { showIcon(DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, !available, R.string.wifi_unavailable_dream_overlay_content_description); } |