Loading packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt +12 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading @@ -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) Loading @@ -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" } } Loading packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt +35 −0 Original line number Diff line number Diff line Loading @@ -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 = Loading Loading
packages/SystemUI/src/com/android/systemui/notetask/NoteTaskController.kt +12 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading @@ -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) Loading @@ -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" } } Loading
packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt +35 −0 Original line number Diff line number Diff line Loading @@ -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 = Loading