Merge "Add an overloading function for starting notes app on another user" into udc-dev

This commit is contained in:
Steven Ng
2023-03-17 10:07:42 +00:00
committed by Android (Google) Code Review
2 changed files with 47 additions and 3 deletions

View File

@@ -27,6 +27,7 @@ import android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import android.content.pm.PackageManager
import android.os.Build
import android.os.UserHandle
import android.os.UserManager
import android.util.Log
import androidx.annotation.VisibleForTesting
@@ -99,6 +100,14 @@ constructor(
*/
fun showNoteTask(
entryPoint: NoteTaskEntryPoint,
) {
showNoteTaskAsUser(entryPoint, userTracker.userHandle)
}
/** A variant of [showNoteTask] which launches note task in the given [user]. */
fun showNoteTaskAsUser(
entryPoint: NoteTaskEntryPoint,
user: UserHandle,
) {
if (!isEnabled) return
@@ -113,7 +122,7 @@ constructor(
// note task when the screen is locked.
if (
isKeyguardLocked &&
devicePolicyManager.areKeyguardShortcutsDisabled(userId = userTracker.userId)
devicePolicyManager.areKeyguardShortcutsDisabled(userId = user.identifier)
) {
logDebug { "Enterprise policy disallows launching note app when the screen is locked." }
return
@@ -126,7 +135,7 @@ constructor(
// TODO(b/266686199): We should handle when app not available. For now, we log.
val intent = createNoteIntent(info)
try {
logDebug { "onShowNoteTask - start: $info" }
logDebug { "onShowNoteTask - start: $info on user#${user.identifier}" }
when (info.launchMode) {
is NoteTaskLaunchMode.AppBubble -> {
bubbles.showOrHideAppBubble(intent, userTracker.userHandle)
@@ -134,7 +143,7 @@ constructor(
logDebug { "onShowNoteTask - opened as app bubble: $info" }
}
is NoteTaskLaunchMode.Activity -> {
context.startActivityAsUser(intent, userTracker.userHandle)
context.startActivityAsUser(intent, user)
eventLogger.logNoteTaskOpened(info)
logDebug { "onShowNoteTask - opened as activity: $info" }
}

View File

@@ -215,6 +215,41 @@ internal class NoteTaskControllerTest : SysuiTestCase() {
verifyZeroInteractions(bubbles)
}
@Test
fun showNoteTaskWithUser_keyguardIsLocked_shouldStartActivityWithExpectedUserAndLogUiEvent() {
val user10 = UserHandle.of(/* userId= */ 10)
val expectedInfo =
noteTaskInfo.copy(
entryPoint = NoteTaskEntryPoint.TAIL_BUTTON,
isKeyguardLocked = true,
)
whenever(keyguardManager.isKeyguardLocked).thenReturn(expectedInfo.isKeyguardLocked)
whenever(resolver.resolveInfo(any(), any())).thenReturn(expectedInfo)
createNoteTaskController()
.showNoteTaskAsUser(
entryPoint = expectedInfo.entryPoint!!,
user = user10,
)
val intentCaptor = argumentCaptor<Intent>()
val userCaptor = argumentCaptor<UserHandle>()
verify(context).startActivityAsUser(capture(intentCaptor), capture(userCaptor))
intentCaptor.value.let { intent ->
assertThat(intent.action).isEqualTo(Intent.ACTION_CREATE_NOTE)
assertThat(intent.`package`).isEqualTo(NOTES_PACKAGE_NAME)
assertThat(intent.flags and FLAG_ACTIVITY_NEW_TASK).isEqualTo(FLAG_ACTIVITY_NEW_TASK)
assertThat(intent.flags and FLAG_ACTIVITY_MULTIPLE_TASK)
.isEqualTo(FLAG_ACTIVITY_MULTIPLE_TASK)
assertThat(intent.flags and FLAG_ACTIVITY_NEW_DOCUMENT)
.isEqualTo(FLAG_ACTIVITY_NEW_DOCUMENT)
assertThat(intent.getBooleanExtra(Intent.EXTRA_USE_STYLUS_MODE, false)).isTrue()
}
assertThat(userCaptor.value).isEqualTo(user10)
verify(eventLogger).logNoteTaskOpened(expectedInfo)
verifyZeroInteractions(bubbles)
}
@Test
fun showNoteTask_keyguardIsUnlocked_shouldStartBubblesWithoutLoggingUiEvent() {
val expectedInfo =