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