Merge "Fix a CalledFromWrongThreadException" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
a73de184a5
@@ -88,10 +88,6 @@ public class DreamOverlayStatusBarView extends ConstraintLayout {
|
||||
fetchStatusIconForResId(R.id.dream_overlay_priority_mode));
|
||||
}
|
||||
|
||||
void showIcon(@StatusIconType int iconType, boolean show) {
|
||||
showIcon(iconType, show, null);
|
||||
}
|
||||
|
||||
void showIcon(@StatusIconType int iconType, boolean show, @Nullable String contentDescription) {
|
||||
View icon = mStatusIcons.get(iconType);
|
||||
if (icon == null) {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.systemui.dreams;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.AlarmManager;
|
||||
import android.content.res.Resources;
|
||||
import android.hardware.SensorPrivacyManager;
|
||||
@@ -45,6 +46,7 @@ import com.android.systemui.util.time.DateFormatUtil;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@@ -62,6 +64,9 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
private final IndividualSensorPrivacyController mSensorPrivacyController;
|
||||
private final NotificationListener mNotificationListener;
|
||||
private final ZenModeController mZenModeController;
|
||||
private final Executor mMainExecutor;
|
||||
|
||||
private boolean mIsAttached;
|
||||
|
||||
private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder()
|
||||
.clearCapabilities()
|
||||
@@ -131,6 +136,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
public DreamOverlayStatusBarViewController(
|
||||
DreamOverlayStatusBarView view,
|
||||
@Main Resources resources,
|
||||
@Main Executor mainExecutor,
|
||||
ConnectivityManager connectivityManager,
|
||||
TouchInsetManager.TouchInsetSession touchInsetSession,
|
||||
AlarmManager alarmManager,
|
||||
@@ -141,6 +147,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
ZenModeController zenModeController) {
|
||||
super(view);
|
||||
mResources = resources;
|
||||
mMainExecutor = mainExecutor;
|
||||
mConnectivityManager = connectivityManager;
|
||||
mTouchInsetSession = touchInsetSession;
|
||||
mAlarmManager = alarmManager;
|
||||
@@ -157,6 +164,8 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
|
||||
@Override
|
||||
protected void onViewAttached() {
|
||||
mIsAttached = true;
|
||||
|
||||
updateNotificationsStatusIcon();
|
||||
|
||||
mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback);
|
||||
@@ -181,6 +190,8 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
mNextAlarmController.removeCallback(mNextAlarmCallback);
|
||||
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
|
||||
mTouchInsetSession.clear();
|
||||
|
||||
mIsAttached = false;
|
||||
}
|
||||
|
||||
private void updateWifiUnavailableStatusIcon() {
|
||||
@@ -189,14 +200,14 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
mConnectivityManager.getActiveNetwork());
|
||||
final boolean available = capabilities != null
|
||||
&& capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
|
||||
mView.showIcon(DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, !available);
|
||||
showIcon(DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, !available);
|
||||
}
|
||||
|
||||
private void updateAlarmStatusIcon() {
|
||||
final AlarmManager.AlarmClockInfo alarm =
|
||||
mAlarmManager.getNextAlarmClock(UserHandle.USER_CURRENT);
|
||||
final boolean hasAlarm = alarm != null && alarm.getTriggerTime() > 0;
|
||||
mView.showIcon(
|
||||
showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_ALARM_SET,
|
||||
hasAlarm,
|
||||
hasAlarm ? buildAlarmContentDescription(alarm) : null);
|
||||
@@ -215,7 +226,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
.isSensorBlocked(SensorPrivacyManager.Sensors.MICROPHONE);
|
||||
final boolean cameraBlocked = mSensorPrivacyController
|
||||
.isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA);
|
||||
mView.showIcon(
|
||||
showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED,
|
||||
micBlocked && cameraBlocked);
|
||||
}
|
||||
@@ -230,7 +241,7 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
final StatusBarNotification[] notifications =
|
||||
mNotificationListener.getActiveNotifications();
|
||||
final int notificationCount = notifications != null ? notifications.length : 0;
|
||||
mView.showIcon(
|
||||
showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_NOTIFICATIONS,
|
||||
notificationCount > 0,
|
||||
notificationCount > 0
|
||||
@@ -246,8 +257,23 @@ public class DreamOverlayStatusBarViewController extends ViewController<DreamOve
|
||||
}
|
||||
|
||||
private void updatePriorityModeStatusIcon() {
|
||||
mView.showIcon(
|
||||
showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON,
|
||||
mZenModeController.getZen() != Settings.Global.ZEN_MODE_OFF);
|
||||
}
|
||||
|
||||
private void showIcon(@DreamOverlayStatusBarView.StatusIconType int iconType, boolean show) {
|
||||
showIcon(iconType, show, null);
|
||||
}
|
||||
|
||||
private void showIcon(
|
||||
@DreamOverlayStatusBarView.StatusIconType int iconType,
|
||||
boolean show,
|
||||
@Nullable String contentDescription) {
|
||||
mMainExecutor.execute(() -> {
|
||||
if (mIsAttached) {
|
||||
mView.showIcon(iconType, show, contentDescription);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,8 @@ import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
@SmallTest
|
||||
@RunWith(AndroidTestingRunner.class)
|
||||
public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
@@ -90,6 +92,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
@Mock
|
||||
ZenModeController mZenModeController;
|
||||
|
||||
private final Executor mMainExecutor = Runnable::run;
|
||||
|
||||
DreamOverlayStatusBarViewController mController;
|
||||
|
||||
@Before
|
||||
@@ -102,6 +106,7 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
mController = new DreamOverlayStatusBarViewController(
|
||||
mView,
|
||||
mResources,
|
||||
mMainExecutor,
|
||||
mConnectivityManager,
|
||||
mTouchSession,
|
||||
mAlarmManager,
|
||||
@@ -134,7 +139,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
.thenReturn(false);
|
||||
when(mConnectivityManager.getNetworkCapabilities(any())).thenReturn(mNetworkCapabilities);
|
||||
mController.onViewAttached();
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true);
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -143,13 +149,16 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
.thenReturn(true);
|
||||
when(mConnectivityManager.getNetworkCapabilities(any())).thenReturn(mNetworkCapabilities);
|
||||
mController.onViewAttached();
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false);
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnViewAttachedShowsWifiIconWhenNetworkCapabilitiesUnavailable() {
|
||||
when(mConnectivityManager.getNetworkCapabilities(any())).thenReturn(null);
|
||||
mController.onViewAttached();
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -176,7 +185,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA))
|
||||
.thenReturn(true);
|
||||
mController.onViewAttached();
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, true);
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, true, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -186,7 +196,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
when(mSensorPrivacyController.isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA))
|
||||
.thenReturn(false);
|
||||
mController.onViewAttached();
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, false);
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, false, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -211,7 +222,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
when(mZenModeController.getZen()).thenReturn(
|
||||
Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
|
||||
mController.onViewAttached();
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, true);
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, true, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -219,7 +231,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
when(mZenModeController.getZen()).thenReturn(
|
||||
Settings.Global.ZEN_MODE_OFF);
|
||||
mController.onViewAttached();
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, false);
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, false, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -250,7 +263,9 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
|
||||
verify(mConnectivityManager).registerNetworkCallback(any(), callbackCapture.capture());
|
||||
callbackCapture.getValue().onAvailable(mNetwork);
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false);
|
||||
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -266,7 +281,9 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
ArgumentCaptor.forClass(ConnectivityManager.NetworkCallback.class);
|
||||
verify(mConnectivityManager).registerNetworkCallback(any(), callbackCapture.capture());
|
||||
callbackCapture.getValue().onLost(mNetwork);
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true);
|
||||
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, true, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -283,7 +300,9 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
when(mNetworkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI))
|
||||
.thenReturn(true);
|
||||
callbackCapture.getValue().onCapabilitiesChanged(mNetwork, mNetworkCapabilities);
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false);
|
||||
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_WIFI_UNAVAILABLE, false, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -333,7 +352,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
callbackCapture.getValue().onSensorBlockedChanged(
|
||||
SensorPrivacyManager.Sensors.MICROPHONE, true);
|
||||
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, true);
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, true, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -350,7 +370,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
callbackCapture.getValue().onSensorBlockedChanged(
|
||||
SensorPrivacyManager.Sensors.MICROPHONE, false);
|
||||
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, false);
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_MIC_CAMERA_DISABLED, false, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -364,7 +385,8 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
verify(mZenModeController).addCallback(callbackCapture.capture());
|
||||
callbackCapture.getValue().onZenChanged(Settings.Global.ZEN_MODE_NO_INTERRUPTIONS);
|
||||
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, true);
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, true, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -373,12 +395,12 @@ public class DreamOverlayStatusBarViewControllerTest extends SysuiTestCase {
|
||||
.thenReturn(Settings.Global.ZEN_MODE_OFF);
|
||||
mController.onViewAttached();
|
||||
|
||||
|
||||
final ArgumentCaptor<ZenModeController.Callback> callbackCapture =
|
||||
ArgumentCaptor.forClass(ZenModeController.Callback.class);
|
||||
verify(mZenModeController).addCallback(callbackCapture.capture());
|
||||
callbackCapture.getValue().onZenChanged(Settings.Global.ZEN_MODE_OFF);
|
||||
|
||||
verify(mView).showIcon(DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, false);
|
||||
verify(mView).showIcon(
|
||||
DreamOverlayStatusBarView.STATUS_ICON_PRIORITY_MODE_ON, false, null);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user