Loading packages/SystemUI/multivalentTests/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModelTest.kt +46 −19 Original line number Diff line number Diff line Loading @@ -27,9 +27,11 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues import com.android.systemui.inputdevice.tutorial.InputDeviceTutorialLogger import com.android.systemui.inputdevice.tutorial.domain.interactor.KeyboardTouchpadConnectionInteractor import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_KEY import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_TOUCHPAD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_KEY import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_TOUCHPAD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_TOUCHPAD_BACK import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_TOUCHPAD_HOME import com.android.systemui.inputdevice.tutorial.ui.viewmodel.Screen.ACTION_KEY import com.android.systemui.inputdevice.tutorial.ui.viewmodel.Screen.BACK_GESTURE import com.android.systemui.inputdevice.tutorial.ui.viewmodel.Screen.HOME_GESTURE Loading Loading @@ -66,8 +68,8 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { private val sysUiState = kosmos.sysUiState private val touchpadRepo = PrettyFakeTouchpadRepository() private val keyboardRepo = kosmos.keyboardRepository private var startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD private val viewModel by lazy { createViewModel(startingPeripheral) } private var tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD private val viewModel by lazy { createViewModel(tutorialScope) } // createUnsafe so its methods don't have to be called on Main thread private val lifecycle = LifecycleRegistry.createUnsafe(mock(LifecycleOwner::class.java)) Loading @@ -75,7 +77,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @get:Rule val mainDispatcherRule = MainDispatcherRule(kosmos.testDispatcher) private fun createViewModel( startingPeripheral: String = INTENT_TUTORIAL_TYPE_TOUCHPAD, scope: String = INTENT_TUTORIAL_SCOPE_TOUCHPAD, hasTouchpadTutorialScreens: Boolean = true, ): KeyboardTouchpadTutorialViewModel { val viewModel = Loading @@ -84,7 +86,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { KeyboardTouchpadConnectionInteractor(keyboardRepo, touchpadRepo), hasTouchpadTutorialScreens, mock<InputDeviceTutorialLogger>(), SavedStateHandle(mapOf(INTENT_TUTORIAL_TYPE_KEY to startingPeripheral)) SavedStateHandle(mapOf(INTENT_TUTORIAL_SCOPE_KEY to scope)), ) lifecycle.addObserver(viewModel) return viewModel Loading Loading @@ -169,7 +171,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @Test fun screensOrder_whenGoingBackAndOnlyKeyboardConnected() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_KEYBOARD tutorialScope = INTENT_TUTORIAL_SCOPE_KEYBOARD val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) peripheralsState(keyboardConnected = true, touchpadConnected = false) Loading @@ -185,13 +187,12 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @Test fun screensOrder_whenTouchpadConnected() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) peripheralsState(keyboardConnected = false, touchpadConnected = true) goToNextScreen() goToNextScreen() goToNextScreen() Loading @@ -200,15 +201,41 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { } @Test fun screensOrder_whenKeyboardConnected() = fun screensOrder_withBackGestureScope() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_KEYBOARD tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD_BACK val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) peripheralsState(touchpadConnected = true) peripheralsState(keyboardConnected = true) goToNextScreen() assertThat(screens).containsExactly(BACK_GESTURE).inOrder() assertThat(closeActivity).isTrue() } @Test fun screensOrder_withHomeGestureScope() = testScope.runTest { tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD_HOME val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) peripheralsState(touchpadConnected = true) goToNextScreen() assertThat(screens).containsExactly(HOME_GESTURE).inOrder() assertThat(closeActivity).isTrue() } @Test fun screensOrder_withKeyboardScope() = testScope.runTest { tutorialScope = INTENT_TUTORIAL_SCOPE_KEYBOARD val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) peripheralsState(keyboardConnected = true) goToNextScreen() assertThat(screens).containsExactly(ACTION_KEY).inOrder() Loading @@ -218,7 +245,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @Test fun touchpadGesturesDisabled_onlyDuringTouchpadTutorial() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD collectValues(viewModel.screen) // just to initialize viewModel peripheralsState(keyboardConnected = true, touchpadConnected = true) Loading @@ -234,8 +261,8 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { testScope.runTest { val viewModel = createViewModel( startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD, hasTouchpadTutorialScreens = false scope = INTENT_TUTORIAL_SCOPE_TOUCHPAD, hasTouchpadTutorialScreens = false, ) val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) Loading @@ -248,7 +275,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @Test fun touchpadGesturesDisabled_whenTutorialGoesToForeground() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD collectValues(viewModel.screen) // just to initialize viewModel peripheralsState(touchpadConnected = true) Loading @@ -260,7 +287,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @Test fun touchpadGesturesNotDisabled_whenTutorialGoesToBackground() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD collectValues(viewModel.screen) peripheralsState(touchpadConnected = true) Loading Loading @@ -288,7 +315,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { private fun TestScope.peripheralsState( keyboardConnected: Boolean = false, touchpadConnected: Boolean = false touchpadConnected: Boolean = false, ) { keyboardRepo.setIsAnyKeyboardConnected(keyboardConnected) touchpadRepo.setIsAnyTouchpadConnected(touchpadConnected) Loading packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/KeyboardTouchpadTutorialCoreStartable.kt +8 −7 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build import android.os.UserHandle import com.android.systemui.CoreStartable import com.android.systemui.broadcast.BroadcastDispatcher Loading Loading @@ -52,13 +53,13 @@ constructor( receiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { applicationContext.startActivityAsUser( Intent( applicationContext, KeyboardTouchpadTutorialActivity::class.java ), UserHandle.SYSTEM ) val activityIntent = Intent(applicationContext, KeyboardTouchpadTutorialActivity::class.java) if (Build.IS_DEBUGGABLE) { // helpful for testing different cases but pointless for public builds intent.extras?.let { activityIntent.putExtras(it) } } applicationContext.startActivityAsUser(activityIntent, UserHandle.SYSTEM) } }, filter = IntentFilter("com.android.systemui.action.KEYBOARD_TOUCHPAD_TUTORIAL"), Loading packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/KeyboardTouchpadTutorialMetricsLogger.kt +4 −4 Original line number Diff line number Diff line Loading @@ -18,8 +18,8 @@ package com.android.systemui.inputdevice.tutorial import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_ENTRY_POINT_CONTEXTUAL_EDU import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_ENTRY_POINT_SCHEDULER import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_TOUCHPAD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_TOUCHPAD import com.android.systemui.shared.system.SysUiStatsLog import javax.inject.Inject Loading @@ -37,9 +37,9 @@ class KeyboardTouchpadTutorialMetricsLogger @Inject constructor() { val tutorialType = when (tutorialTypeExtra) { INTENT_TUTORIAL_TYPE_KEYBOARD -> INTENT_TUTORIAL_SCOPE_KEYBOARD -> SysUiStatsLog.PERIPHERAL_TUTORIAL_LAUNCHED__TUTORIAL_TYPE__KEYBOARD INTENT_TUTORIAL_TYPE_TOUCHPAD -> INTENT_TUTORIAL_SCOPE_TOUCHPAD -> SysUiStatsLog.PERIPHERAL_TUTORIAL_LAUNCHED__TUTORIAL_TYPE__TOUCHPAD else -> SysUiStatsLog.PERIPHERAL_TUTORIAL_LAUNCHED__TUTORIAL_TYPE__BOTH } Loading packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/TutorialNotificationCoordinator.kt +8 −8 Original line number Diff line number Diff line Loading @@ -34,10 +34,10 @@ import com.android.systemui.inputdevice.tutorial.domain.interactor.TutorialSched import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_ENTRY_POINT_KEY import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_ENTRY_POINT_SCHEDULER import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_BOTH import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_KEY import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_TOUCHPAD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_ALL import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_KEY import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_TOUCHPAD import com.android.systemui.res.R import com.android.systemui.settings.UserTracker import javax.inject.Inject Loading Loading @@ -108,7 +108,7 @@ constructor( private fun createPendingIntent(tutorialType: String): PendingIntent { val intent = Intent(context, KeyboardTouchpadTutorialActivity::class.java).apply { putExtra(INTENT_TUTORIAL_TYPE_KEY, tutorialType) putExtra(INTENT_TUTORIAL_SCOPE_KEY, tutorialType) putExtra(INTENT_TUTORIAL_ENTRY_POINT_KEY, INTENT_TUTORIAL_ENTRY_POINT_SCHEDULER) flags = Intent.FLAG_ACTIVITY_NEW_TASK } Loading @@ -128,13 +128,13 @@ constructor( NotificationInfo( context.getString(R.string.launch_keyboard_tutorial_notification_title), context.getString(R.string.launch_keyboard_tutorial_notification_content), INTENT_TUTORIAL_TYPE_KEYBOARD, INTENT_TUTORIAL_SCOPE_KEYBOARD, ) TutorialType.TOUCHPAD -> NotificationInfo( context.getString(R.string.launch_touchpad_tutorial_notification_title), context.getString(R.string.launch_touchpad_tutorial_notification_content), INTENT_TUTORIAL_TYPE_TOUCHPAD, INTENT_TUTORIAL_SCOPE_TOUCHPAD, ) TutorialType.BOTH -> NotificationInfo( Loading @@ -144,7 +144,7 @@ constructor( context.getString( R.string.launch_keyboard_touchpad_tutorial_notification_content ), INTENT_TUTORIAL_TYPE_BOTH, INTENT_TUTORIAL_SCOPE_ALL, ) TutorialType.NONE -> null } Loading packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/view/KeyboardTouchpadTutorialActivity.kt +8 −5 Original line number Diff line number Diff line Loading @@ -56,10 +56,13 @@ constructor( ) : ComponentActivity() { companion object { const val INTENT_TUTORIAL_TYPE_KEY = "tutorial_type" const val INTENT_TUTORIAL_TYPE_TOUCHPAD = "touchpad" const val INTENT_TUTORIAL_TYPE_KEYBOARD = "keyboard" const val INTENT_TUTORIAL_TYPE_BOTH = "both" const val INTENT_TUTORIAL_SCOPE_KEY = "tutorial_scope" const val INTENT_TUTORIAL_SCOPE_TOUCHPAD = "touchpad" const val INTENT_TUTORIAL_SCOPE_TOUCHPAD_BACK = "touchpad_back" const val INTENT_TUTORIAL_SCOPE_TOUCHPAD_HOME = "touchpad_home" const val INTENT_TUTORIAL_SCOPE_KEYBOARD = "keyboard" const val INTENT_TUTORIAL_SCOPE_ALL = "all" const val INTENT_TUTORIAL_ENTRY_POINT_KEY = "entry_point" const val INTENT_TUTORIAL_ENTRY_POINT_SCHEDULER = "scheduler" const val INTENT_TUTORIAL_ENTRY_POINT_CONTEXTUAL_EDU = "contextual_edu" Loading Loading @@ -94,7 +97,7 @@ constructor( if (savedInstanceState == null) { metricsLogger.logPeripheralTutorialLaunched( intent.getStringExtra(INTENT_TUTORIAL_ENTRY_POINT_KEY), intent.getStringExtra(INTENT_TUTORIAL_TYPE_KEY), intent.getStringExtra(INTENT_TUTORIAL_SCOPE_KEY), ) logger.logOpenTutorial(TutorialContext.KEYBOARD_TOUCHPAD_TUTORIAL) } Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/inputdevice/tutorial/ui/viewmodel/KeyboardTouchpadTutorialViewModelTest.kt +46 −19 Original line number Diff line number Diff line Loading @@ -27,9 +27,11 @@ import com.android.systemui.coroutines.collectLastValue import com.android.systemui.coroutines.collectValues import com.android.systemui.inputdevice.tutorial.InputDeviceTutorialLogger import com.android.systemui.inputdevice.tutorial.domain.interactor.KeyboardTouchpadConnectionInteractor import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_KEY import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_TOUCHPAD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_KEY import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_TOUCHPAD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_TOUCHPAD_BACK import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_TOUCHPAD_HOME import com.android.systemui.inputdevice.tutorial.ui.viewmodel.Screen.ACTION_KEY import com.android.systemui.inputdevice.tutorial.ui.viewmodel.Screen.BACK_GESTURE import com.android.systemui.inputdevice.tutorial.ui.viewmodel.Screen.HOME_GESTURE Loading Loading @@ -66,8 +68,8 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { private val sysUiState = kosmos.sysUiState private val touchpadRepo = PrettyFakeTouchpadRepository() private val keyboardRepo = kosmos.keyboardRepository private var startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD private val viewModel by lazy { createViewModel(startingPeripheral) } private var tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD private val viewModel by lazy { createViewModel(tutorialScope) } // createUnsafe so its methods don't have to be called on Main thread private val lifecycle = LifecycleRegistry.createUnsafe(mock(LifecycleOwner::class.java)) Loading @@ -75,7 +77,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @get:Rule val mainDispatcherRule = MainDispatcherRule(kosmos.testDispatcher) private fun createViewModel( startingPeripheral: String = INTENT_TUTORIAL_TYPE_TOUCHPAD, scope: String = INTENT_TUTORIAL_SCOPE_TOUCHPAD, hasTouchpadTutorialScreens: Boolean = true, ): KeyboardTouchpadTutorialViewModel { val viewModel = Loading @@ -84,7 +86,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { KeyboardTouchpadConnectionInteractor(keyboardRepo, touchpadRepo), hasTouchpadTutorialScreens, mock<InputDeviceTutorialLogger>(), SavedStateHandle(mapOf(INTENT_TUTORIAL_TYPE_KEY to startingPeripheral)) SavedStateHandle(mapOf(INTENT_TUTORIAL_SCOPE_KEY to scope)), ) lifecycle.addObserver(viewModel) return viewModel Loading Loading @@ -169,7 +171,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @Test fun screensOrder_whenGoingBackAndOnlyKeyboardConnected() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_KEYBOARD tutorialScope = INTENT_TUTORIAL_SCOPE_KEYBOARD val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) peripheralsState(keyboardConnected = true, touchpadConnected = false) Loading @@ -185,13 +187,12 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @Test fun screensOrder_whenTouchpadConnected() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) peripheralsState(keyboardConnected = false, touchpadConnected = true) goToNextScreen() goToNextScreen() goToNextScreen() Loading @@ -200,15 +201,41 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { } @Test fun screensOrder_whenKeyboardConnected() = fun screensOrder_withBackGestureScope() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_KEYBOARD tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD_BACK val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) peripheralsState(touchpadConnected = true) peripheralsState(keyboardConnected = true) goToNextScreen() assertThat(screens).containsExactly(BACK_GESTURE).inOrder() assertThat(closeActivity).isTrue() } @Test fun screensOrder_withHomeGestureScope() = testScope.runTest { tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD_HOME val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) peripheralsState(touchpadConnected = true) goToNextScreen() assertThat(screens).containsExactly(HOME_GESTURE).inOrder() assertThat(closeActivity).isTrue() } @Test fun screensOrder_withKeyboardScope() = testScope.runTest { tutorialScope = INTENT_TUTORIAL_SCOPE_KEYBOARD val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) peripheralsState(keyboardConnected = true) goToNextScreen() assertThat(screens).containsExactly(ACTION_KEY).inOrder() Loading @@ -218,7 +245,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @Test fun touchpadGesturesDisabled_onlyDuringTouchpadTutorial() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD collectValues(viewModel.screen) // just to initialize viewModel peripheralsState(keyboardConnected = true, touchpadConnected = true) Loading @@ -234,8 +261,8 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { testScope.runTest { val viewModel = createViewModel( startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD, hasTouchpadTutorialScreens = false scope = INTENT_TUTORIAL_SCOPE_TOUCHPAD, hasTouchpadTutorialScreens = false, ) val screens by collectValues(viewModel.screen) val closeActivity by collectLastValue(viewModel.closeActivity) Loading @@ -248,7 +275,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @Test fun touchpadGesturesDisabled_whenTutorialGoesToForeground() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD collectValues(viewModel.screen) // just to initialize viewModel peripheralsState(touchpadConnected = true) Loading @@ -260,7 +287,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { @Test fun touchpadGesturesNotDisabled_whenTutorialGoesToBackground() = testScope.runTest { startingPeripheral = INTENT_TUTORIAL_TYPE_TOUCHPAD tutorialScope = INTENT_TUTORIAL_SCOPE_TOUCHPAD collectValues(viewModel.screen) peripheralsState(touchpadConnected = true) Loading Loading @@ -288,7 +315,7 @@ class KeyboardTouchpadTutorialViewModelTest : SysuiTestCase() { private fun TestScope.peripheralsState( keyboardConnected: Boolean = false, touchpadConnected: Boolean = false touchpadConnected: Boolean = false, ) { keyboardRepo.setIsAnyKeyboardConnected(keyboardConnected) touchpadRepo.setIsAnyTouchpadConnected(touchpadConnected) Loading
packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/KeyboardTouchpadTutorialCoreStartable.kt +8 −7 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build import android.os.UserHandle import com.android.systemui.CoreStartable import com.android.systemui.broadcast.BroadcastDispatcher Loading Loading @@ -52,13 +53,13 @@ constructor( receiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { applicationContext.startActivityAsUser( Intent( applicationContext, KeyboardTouchpadTutorialActivity::class.java ), UserHandle.SYSTEM ) val activityIntent = Intent(applicationContext, KeyboardTouchpadTutorialActivity::class.java) if (Build.IS_DEBUGGABLE) { // helpful for testing different cases but pointless for public builds intent.extras?.let { activityIntent.putExtras(it) } } applicationContext.startActivityAsUser(activityIntent, UserHandle.SYSTEM) } }, filter = IntentFilter("com.android.systemui.action.KEYBOARD_TOUCHPAD_TUTORIAL"), Loading
packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/KeyboardTouchpadTutorialMetricsLogger.kt +4 −4 Original line number Diff line number Diff line Loading @@ -18,8 +18,8 @@ package com.android.systemui.inputdevice.tutorial import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_ENTRY_POINT_CONTEXTUAL_EDU import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_ENTRY_POINT_SCHEDULER import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_TOUCHPAD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_TOUCHPAD import com.android.systemui.shared.system.SysUiStatsLog import javax.inject.Inject Loading @@ -37,9 +37,9 @@ class KeyboardTouchpadTutorialMetricsLogger @Inject constructor() { val tutorialType = when (tutorialTypeExtra) { INTENT_TUTORIAL_TYPE_KEYBOARD -> INTENT_TUTORIAL_SCOPE_KEYBOARD -> SysUiStatsLog.PERIPHERAL_TUTORIAL_LAUNCHED__TUTORIAL_TYPE__KEYBOARD INTENT_TUTORIAL_TYPE_TOUCHPAD -> INTENT_TUTORIAL_SCOPE_TOUCHPAD -> SysUiStatsLog.PERIPHERAL_TUTORIAL_LAUNCHED__TUTORIAL_TYPE__TOUCHPAD else -> SysUiStatsLog.PERIPHERAL_TUTORIAL_LAUNCHED__TUTORIAL_TYPE__BOTH } Loading
packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/TutorialNotificationCoordinator.kt +8 −8 Original line number Diff line number Diff line Loading @@ -34,10 +34,10 @@ import com.android.systemui.inputdevice.tutorial.domain.interactor.TutorialSched import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_ENTRY_POINT_KEY import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_ENTRY_POINT_SCHEDULER import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_BOTH import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_KEY import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_TYPE_TOUCHPAD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_ALL import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_KEY import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_KEYBOARD import com.android.systemui.inputdevice.tutorial.ui.view.KeyboardTouchpadTutorialActivity.Companion.INTENT_TUTORIAL_SCOPE_TOUCHPAD import com.android.systemui.res.R import com.android.systemui.settings.UserTracker import javax.inject.Inject Loading Loading @@ -108,7 +108,7 @@ constructor( private fun createPendingIntent(tutorialType: String): PendingIntent { val intent = Intent(context, KeyboardTouchpadTutorialActivity::class.java).apply { putExtra(INTENT_TUTORIAL_TYPE_KEY, tutorialType) putExtra(INTENT_TUTORIAL_SCOPE_KEY, tutorialType) putExtra(INTENT_TUTORIAL_ENTRY_POINT_KEY, INTENT_TUTORIAL_ENTRY_POINT_SCHEDULER) flags = Intent.FLAG_ACTIVITY_NEW_TASK } Loading @@ -128,13 +128,13 @@ constructor( NotificationInfo( context.getString(R.string.launch_keyboard_tutorial_notification_title), context.getString(R.string.launch_keyboard_tutorial_notification_content), INTENT_TUTORIAL_TYPE_KEYBOARD, INTENT_TUTORIAL_SCOPE_KEYBOARD, ) TutorialType.TOUCHPAD -> NotificationInfo( context.getString(R.string.launch_touchpad_tutorial_notification_title), context.getString(R.string.launch_touchpad_tutorial_notification_content), INTENT_TUTORIAL_TYPE_TOUCHPAD, INTENT_TUTORIAL_SCOPE_TOUCHPAD, ) TutorialType.BOTH -> NotificationInfo( Loading @@ -144,7 +144,7 @@ constructor( context.getString( R.string.launch_keyboard_touchpad_tutorial_notification_content ), INTENT_TUTORIAL_TYPE_BOTH, INTENT_TUTORIAL_SCOPE_ALL, ) TutorialType.NONE -> null } Loading
packages/SystemUI/src/com/android/systemui/inputdevice/tutorial/ui/view/KeyboardTouchpadTutorialActivity.kt +8 −5 Original line number Diff line number Diff line Loading @@ -56,10 +56,13 @@ constructor( ) : ComponentActivity() { companion object { const val INTENT_TUTORIAL_TYPE_KEY = "tutorial_type" const val INTENT_TUTORIAL_TYPE_TOUCHPAD = "touchpad" const val INTENT_TUTORIAL_TYPE_KEYBOARD = "keyboard" const val INTENT_TUTORIAL_TYPE_BOTH = "both" const val INTENT_TUTORIAL_SCOPE_KEY = "tutorial_scope" const val INTENT_TUTORIAL_SCOPE_TOUCHPAD = "touchpad" const val INTENT_TUTORIAL_SCOPE_TOUCHPAD_BACK = "touchpad_back" const val INTENT_TUTORIAL_SCOPE_TOUCHPAD_HOME = "touchpad_home" const val INTENT_TUTORIAL_SCOPE_KEYBOARD = "keyboard" const val INTENT_TUTORIAL_SCOPE_ALL = "all" const val INTENT_TUTORIAL_ENTRY_POINT_KEY = "entry_point" const val INTENT_TUTORIAL_ENTRY_POINT_SCHEDULER = "scheduler" const val INTENT_TUTORIAL_ENTRY_POINT_CONTEXTUAL_EDU = "contextual_edu" Loading Loading @@ -94,7 +97,7 @@ constructor( if (savedInstanceState == null) { metricsLogger.logPeripheralTutorialLaunched( intent.getStringExtra(INTENT_TUTORIAL_ENTRY_POINT_KEY), intent.getStringExtra(INTENT_TUTORIAL_TYPE_KEY), intent.getStringExtra(INTENT_TUTORIAL_SCOPE_KEY), ) logger.logOpenTutorial(TutorialContext.KEYBOARD_TOUCHPAD_TUTORIAL) } Loading