diff options
2 files changed, 49 insertions, 1 deletions
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 3b5aaeac6c21..6dbf70754b3b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -546,7 +546,7 @@ public class PhoneStatusBarPolicy userId = ActivityTaskManager.getService().getLastResumedActivityUserId(); boolean isManagedProfile = mUserManager.isManagedProfile(userId); String accessibilityString = getManagedProfileAccessibilityString(); - mHandler.post(() -> { + mMainExecutor.execute(() -> { final boolean showIcon; if (isManagedProfile && (!mKeyguardStateController.isShowing() || mKeyguardStateController.isOccluded())) { @@ -627,6 +627,13 @@ public class PhoneStatusBarPolicy } @Override + public void appTransitionFinished(int displayId) { + if (mDisplayId == displayId) { + updateManagedProfile(); + } + } + + @Override public void onKeyguardShowingChanged() { updateManagedProfile(); } 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 85fbef0d7bb6..52f642df195e 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 @@ package com.android.systemui.statusbar.phone 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.statusbar.policy.ZenModeController 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.ArgumentCaptor 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 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() { 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 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() { @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 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() { 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,36 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() { } @Test + fun testAppTransitionFinished_doesNotShowManagedProfileIcon() { + whenever(userManager.isManagedProfile(anyInt())).thenReturn(false) + 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.isManagedProfile(anyInt())).thenReturn(true) + 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() |