Merge "Also update manage profile state after a transition finishes" into main
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index 1d934d6..79151fd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -548,7 +548,7 @@
final int iconResId = mUserManager.getUserStatusBarIconResId(userId);
// TODO(b/170249807, b/230779281): Handle non-managed-profile String
String accessibilityString = getManagedProfileAccessibilityString();
- mHandler.post(() -> {
+ mMainExecutor.execute(() -> {
final boolean showIcon;
if (iconResId != Resources.ID_NULL && (!mKeyguardStateController.isShowing()
|| mKeyguardStateController.isOccluded())) {
@@ -629,6 +629,13 @@
}
@Override
+ public void appTransitionFinished(int displayId) {
+ if (mDisplayId == displayId) {
+ updateProfileIcon();
+ }
+ }
+
+ @Override
public void onKeyguardShowingChanged() {
updateProfileIcon();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt
index 85fbef0..9795b9d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicyTest.kt
@@ -18,6 +18,7 @@
import android.app.AlarmManager
import android.app.admin.DevicePolicyManager
+import android.app.admin.DevicePolicyResourcesManager
import android.content.SharedPreferences
import android.os.UserManager
import android.telecom.TelecomManager
@@ -49,6 +50,7 @@
import com.android.systemui.util.RingerModeTracker
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.kotlin.JavaAdapter
+import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.capture
import com.android.systemui.util.time.DateFormatUtil
import com.android.systemui.util.time.FakeSystemClock
@@ -67,6 +69,7 @@
import org.mockito.Captor
import org.mockito.Mock
import org.mockito.Mockito.anyInt
+import org.mockito.Mockito.anyString
import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.inOrder
import org.mockito.Mockito.never
@@ -83,6 +86,7 @@
companion object {
private const val ALARM_SLOT = "alarm"
private const val CONNECTED_DISPLAY_SLOT = "connected_display"
+ private const val MANAGED_PROFILE_SLOT = "managed_profile"
}
@Mock private lateinit var iconController: StatusBarIconController
@@ -104,6 +108,7 @@
@Mock private lateinit var userManager: UserManager
@Mock private lateinit var userTracker: UserTracker
@Mock private lateinit var devicePolicyManager: DevicePolicyManager
+ @Mock private lateinit var devicePolicyManagerResources: DevicePolicyResourcesManager
@Mock private lateinit var recordingController: RecordingController
@Mock private lateinit var telecomManager: TelecomManager
@Mock private lateinit var sharedPreferences: SharedPreferences
@@ -132,6 +137,12 @@
com.android.internal.R.string.status_bar_alarm_clock,
ALARM_SLOT
)
+ context.orCreateTestableResources.addOverride(
+ com.android.internal.R.string.status_bar_managed_profile,
+ MANAGED_PROFILE_SLOT
+ )
+ whenever(devicePolicyManager.resources).thenReturn(devicePolicyManagerResources)
+ whenever(devicePolicyManagerResources.getString(anyString(), any())).thenReturn("")
statusBarPolicy = createStatusBarPolicy()
}
@@ -182,6 +193,32 @@
}
@Test
+ fun testAppTransitionFinished_doesNotShowManagedProfileIcon() {
+ whenever(userManager.getUserStatusBarIconResId(anyInt())).thenReturn(0 /* ID_NULL */)
+ whenever(keyguardStateController.isShowing).thenReturn(false)
+ statusBarPolicy.appTransitionFinished(0)
+ // The above call posts to bgExecutor and then back to mainExecutor
+ executor.advanceClockToLast()
+ executor.runAllReady()
+ executor.advanceClockToLast()
+ executor.runAllReady()
+ verify(iconController, never()).setIconVisibility(MANAGED_PROFILE_SLOT, true)
+ }
+
+ @Test
+ fun testAppTransitionFinished_showsManagedProfileIcon() {
+ whenever(userManager.getUserStatusBarIconResId(anyInt())).thenReturn(100)
+ whenever(keyguardStateController.isShowing).thenReturn(false)
+ statusBarPolicy.appTransitionFinished(0)
+ // The above call posts to bgExecutor and then back to mainExecutor
+ executor.advanceClockToLast()
+ executor.runAllReady()
+ executor.advanceClockToLast()
+ executor.runAllReady()
+ verify(iconController).setIconVisibility(MANAGED_PROFILE_SLOT, true)
+ }
+
+ @Test
fun connectedDisplay_connected_iconShown() =
testScope.runTest {
statusBarPolicy.init()