From aa0485053714dd0f13636a82c458beeca8f44ba9 Mon Sep 17 00:00:00 2001 From: Will Leshner Date: Mon, 8 Apr 2024 18:02:25 -0700 Subject: Fix an issue with the wifi status bar icon appearing when it shouldn't. Bug: 333416497 Test: atest DreamOverlayStatusBarViewControllerTest Flag: NA Change-Id: Ibfa4b5caed040919c4d44f525d2475dddd15641d --- .../DreamOverlayStatusBarViewControllerTest.java | 109 +++------------------ .../DreamOverlayStatusBarViewController.java | 56 +++-------- 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( @@ -318,13 +295,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, false, null); } - @Test - public void testOnViewDetachedUnregistersNetworkCallback() { - mController.onViewDetached(); - verify(mConnectivityManager) - .unregisterNetworkCallback(any(ConnectivityManager.NetworkCallback.class)); - } - @Test public void testOnViewDetachedRemovesCallbacks() { mController.onViewDetached(); @@ -342,61 +312,6 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase { verify(mView).removeAllExtraStatusBarItemViews(); } - @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 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 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 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 { 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 updateWifiUnavailableStatusIcon( + network instanceof WifiNetworkModel.Active)); mNextAlarmController.addCallback(mNextAlarmCallback); updateAlarmStatusIcon(); @@ -215,7 +196,6 @@ public class DreamOverlayStatusBarViewController extends ViewController provider.removeCallback(mNotificationCountCallback)); mStatusBarItemsProvider.removeCallback(mStatusBarItemsProviderCallback); @@ -258,12 +238,8 @@ public class DreamOverlayStatusBarViewController extends ViewController