summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt65
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt49
2 files changed, 72 insertions, 42 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
index 48790c23e688..2adc211ef23f 100644
--- a/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
+++ b/packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt
@@ -41,6 +41,8 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.devicepolicy.areKeyguardShortcutsDisabled
import com.android.systemui.log.DebugLogger.debugLog
+import com.android.systemui.notetask.NoteTaskEntryPoint.QUICK_AFFORDANCE
+import com.android.systemui.notetask.NoteTaskEntryPoint.TAIL_BUTTON
import com.android.systemui.notetask.NoteTaskRoleManagerExt.createNoteShortcutInfoAsUser
import com.android.systemui.notetask.NoteTaskRoleManagerExt.getDefaultRoleHolderAsUser
import com.android.systemui.notetask.shortcut.CreateNoteTaskShortcutActivity
@@ -121,23 +123,26 @@ constructor(
/**
* Returns the [UserHandle] of an android user that should handle the notes taking [entryPoint].
- *
- * On company owned personally enabled (COPE) devices, if the given [entryPoint] is in the
- * [FORCE_WORK_NOTE_APPS_ENTRY_POINTS_ON_COPE_DEVICES] list, the default notes app in the work
- * profile user will always be launched.
- *
- * On non managed devices or devices with other management modes, the current [UserHandle] is
- * returned.
+ * 1. tail button entry point: In COPE or work profile devices, the user can select whether the
+ * work or main profile notes app should be launched in the Settings app. In non-management
+ * or device owner devices, the user can only select main profile notes app.
+ * 2. lock screen quick affordance: since there is no user setting, the main profile notes app
+ * is used as default for work profile devices while the work profile notes app is used for
+ * COPE devices.
+ * 3. Other entry point: the current user from [UserTracker.userHandle].
*/
fun getUserForHandlingNotesTaking(entryPoint: NoteTaskEntryPoint): UserHandle =
- if (
- entryPoint in FORCE_WORK_NOTE_APPS_ENTRY_POINTS_ON_COPE_DEVICES &&
- devicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile
- ) {
- userTracker.userProfiles.firstOrNull { userManager.isManagedProfile(it.id) }?.userHandle
- ?: userTracker.userHandle
- } else {
- secureSettings.preferredUser
+ when {
+ entryPoint == TAIL_BUTTON -> secureSettings.preferredUser
+ devicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile &&
+ entryPoint == QUICK_AFFORDANCE -> {
+ userTracker.userProfiles
+ .firstOrNull { userManager.isManagedProfile(it.id) }
+ ?.userHandle
+ ?: userTracker.userHandle
+ }
+ // On work profile devices, SysUI always run in the main user.
+ else -> userTracker.userHandle
}
/**
@@ -267,15 +272,7 @@ constructor(
PackageManager.COMPONENT_ENABLED_STATE_DISABLED
}
- // If the required user matches the tracking user, the injected context is already a context
- // of the required user. Avoid calling #createContextAsUser because creating a context for
- // a user takes time.
- val userContext =
- if (user == userTracker.userHandle) {
- context
- } else {
- context.createContextAsUser(user, /* flags= */ 0)
- }
+ val userContext = context.createContextAsUser(user, /* flags= */ 0)
userContext.packageManager.setComponentEnabledSetting(
componentName,
@@ -283,7 +280,7 @@ constructor(
PackageManager.DONT_KILL_APP,
)
- debugLog { "setNoteTaskShortcutEnabled - completed: $isEnabled" }
+ debugLog { "setNoteTaskShortcutEnabled for user $user- completed: $enabledState" }
}
/**
@@ -359,10 +356,12 @@ constructor(
private val SecureSettings.preferredUser: UserHandle
get() {
+ val trackingUserId = userTracker.userHandle.identifier
val userId =
- secureSettings.getInt(
- Settings.Secure.DEFAULT_NOTE_TASK_PROFILE,
- userTracker.userHandle.identifier,
+ secureSettings.getIntForUser(
+ /* name= */ Settings.Secure.DEFAULT_NOTE_TASK_PROFILE,
+ /* def= */ trackingUserId,
+ /* userHandle= */ trackingUserId,
)
return UserHandle.of(userId)
}
@@ -381,16 +380,6 @@ constructor(
* @see com.android.launcher3.icons.IconCache.EXTRA_SHORTCUT_BADGE_OVERRIDE_PACKAGE
*/
const val EXTRA_SHORTCUT_BADGE_OVERRIDE_PACKAGE = "extra_shortcut_badge_override_package"
-
- /**
- * A list of entry points which should be redirected to the work profile default notes app
- * on company owned personally enabled (COPE) devices.
- *
- * Entry points in this list don't let users / admin to select the work or personal default
- * notes app to be launched.
- */
- val FORCE_WORK_NOTE_APPS_ENTRY_POINTS_ON_COPE_DEVICES =
- listOf(NoteTaskEntryPoint.TAIL_BUTTON, NoteTaskEntryPoint.QUICK_AFFORDANCE)
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
index a76af8e83248..c65a2d36e223 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt
@@ -118,6 +118,7 @@ internal class NoteTaskControllerTest : SysuiTestCase() {
whenever(context.getString(eq(R.string.note_task_shortcut_long_label), any()))
.thenReturn(NOTE_TASK_LONG_LABEL)
whenever(context.packageManager).thenReturn(packageManager)
+ whenever(context.createContextAsUser(any(), any())).thenReturn(context)
whenever(packageManager.getApplicationInfo(any(), any<Int>())).thenReturn(mock())
whenever(packageManager.getApplicationLabel(any())).thenReturn(NOTE_TASK_LONG_LABEL)
whenever(resolver.resolveInfo(any(), any(), any())).thenReturn(NOTE_TASK_INFO)
@@ -353,7 +354,13 @@ internal class NoteTaskControllerTest : SysuiTestCase() {
@Test
fun showNoteTask_defaultUserSet_shouldStartActivityWithExpectedUserAndLogUiEvent() {
- whenever(secureSettings.getInt(eq(Settings.Secure.DEFAULT_NOTE_TASK_PROFILE), any()))
+ whenever(
+ secureSettings.getIntForUser(
+ /* name= */ eq(Settings.Secure.DEFAULT_NOTE_TASK_PROFILE),
+ /* def= */ any(),
+ /* userHandle= */ any()
+ )
+ )
.thenReturn(10)
val user10 = UserHandle.of(/* userId= */ 10)
@@ -615,13 +622,21 @@ internal class NoteTaskControllerTest : SysuiTestCase() {
}
@Test
- fun showNoteTask_copeDevices_tailButtonEntryPoint_shouldStartBubbleInWorkProfile() {
+ fun showNoteTask_copeDevices_tailButtonEntryPoint_shouldStartBubbleInTheUserSelectedUser() {
+ whenever(
+ secureSettings.getIntForUser(
+ /* name= */ eq(Settings.Secure.DEFAULT_NOTE_TASK_PROFILE),
+ /* def= */ any(),
+ /* userHandle= */ any()
+ )
+ )
+ .thenReturn(mainUserInfo.id)
whenever(devicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile).thenReturn(true)
userTracker.set(mainAndWorkProfileUsers, mainAndWorkProfileUsers.indexOf(mainUserInfo))
createNoteTaskController().showNoteTask(entryPoint = TAIL_BUTTON)
- verifyNoteTaskOpenInBubbleInUser(workUserInfo.userHandle)
+ verifyNoteTaskOpenInBubbleInUser(mainUserInfo.userHandle)
}
@Test
@@ -813,7 +828,15 @@ internal class NoteTaskControllerTest : SysuiTestCase() {
}
@Test
- fun getUserForHandlingNotesTaking_cope_tailButton_shouldReturnWorkProfileUser() {
+ fun getUserForHandlingNotesTaking_cope_userSelectedWorkProfile_tailButton_shouldReturnWorkProfileUser() { // ktlint-disable max-line-length
+ whenever(
+ secureSettings.getIntForUser(
+ /* name= */ eq(Settings.Secure.DEFAULT_NOTE_TASK_PROFILE),
+ /* def= */ any(),
+ /* userHandle= */ any()
+ )
+ )
+ .thenReturn(workUserInfo.id)
whenever(devicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile).thenReturn(true)
userTracker.set(mainAndWorkProfileUsers, mainAndWorkProfileUsers.indexOf(mainUserInfo))
@@ -823,6 +846,24 @@ internal class NoteTaskControllerTest : SysuiTestCase() {
}
@Test
+ fun getUserForHandlingNotesTaking_cope_userSelectedMainProfile_tailButton_shouldReturnMainProfileUser() { // ktlint-disable max-line-length
+ whenever(
+ secureSettings.getIntForUser(
+ /* name= */ eq(Settings.Secure.DEFAULT_NOTE_TASK_PROFILE),
+ /* def= */ any(),
+ /* userHandle= */ any()
+ )
+ )
+ .thenReturn(mainUserInfo.id)
+ whenever(devicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile).thenReturn(true)
+ userTracker.set(mainAndWorkProfileUsers, mainAndWorkProfileUsers.indexOf(mainUserInfo))
+
+ val user = createNoteTaskController().getUserForHandlingNotesTaking(TAIL_BUTTON)
+
+ assertThat(user).isEqualTo(UserHandle.of(mainUserInfo.id))
+ }
+
+ @Test
fun getUserForHandlingNotesTaking_cope_appClip_shouldReturnCurrentUser() {
whenever(devicePolicyManager.isOrganizationOwnedDeviceWithManagedProfile).thenReturn(true)
userTracker.set(mainAndWorkProfileUsers, mainAndWorkProfileUsers.indexOf(mainUserInfo))