summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Will Leshner <wleshner@google.com> 2024-04-08 18:02:25 -0700
committer Will Leshner <wleshner@google.com> 2024-04-09 12:58:15 -0700
commitaa0485053714dd0f13636a82c458beeca8f44ba9 (patch)
treebd045c07ec198a4fa8fa60a11eafc1dea5f55680
parentba7eba9c2d24e0743b0476bba69ba9bbb118a974 (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
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayStatusBarViewControllerTest.java109
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayStatusBarViewController.java56
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);
}