diff options
| author | 2023-07-14 22:16:46 +0000 | |
|---|---|---|
| committer | 2023-07-19 23:22:45 +0000 | |
| commit | f41e6867044e83409f1716b373555b54b0801749 (patch) | |
| tree | 921b7866ffa9839664dfa10d4d545e28c4591e72 | |
| parent | af7990b7ddf6c2fae0f7649f2663e6a850d3e86b (diff) | |
Also update manage profile state after a transition finishes
- When you start a swipe gesture, a transition to home is started
which in U w/ ShellTransitions enabled will resume the home
activity (vs. just starting it pre-U), as a result, if the user
just taps or swipes back down without committing to going home
the transition will finish without SysUI updating the work profile
state again.
Bug: 288955624
Test: atest SystemUITests
Test: atest PhoneStatusBarPolicyTest
Test: Manual from repro steps in bug
Change-Id: Ie3cc6fe3943672f6c33cb4cc2c2380b13d96d83d
2 files changed, 45 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 1d934d65df7e..79151fd987d1 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 @@ public class PhoneStatusBarPolicy 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 @@ public class PhoneStatusBarPolicy } @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 85fbef0d7bb6..9795b9d3c169 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,32 @@ class PhoneStatusBarPolicyTest : SysuiTestCase() { } @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() |