1 package com.android.launcher3.model 2 3 import android.app.prediction.AppPredictor 4 import android.app.prediction.AppTarget 5 import android.app.prediction.AppTargetEvent 6 import androidx.test.ext.junit.runners.AndroidJUnit4 7 import com.android.launcher3.LauncherAppState 8 import com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION 9 import com.android.launcher3.LauncherSettings.Favorites.CONTAINER_PREDICTION 10 import com.android.launcher3.LauncherSettings.Favorites.CONTAINER_WALLPAPERS 11 import com.android.launcher3.LauncherSettings.Favorites.CONTAINER_WIDGETS_PREDICTION 12 import com.android.launcher3.util.LauncherModelHelper 13 import org.junit.After 14 import org.junit.Assert.assertNotSame 15 import org.junit.Assert.assertSame 16 import org.junit.Before 17 import org.junit.Test 18 import org.junit.runner.RunWith 19 import org.mockito.Mock 20 import org.mockito.Mockito.never 21 import org.mockito.Mockito.verify 22 import org.mockito.Mockito.verifyZeroInteractions 23 import org.mockito.MockitoAnnotations 24 25 /** Unit tests for [QuickstepModelDelegate]. */ 26 @RunWith(AndroidJUnit4::class) 27 class QuickstepModelDelegateTest { 28 29 private lateinit var underTest: QuickstepModelDelegate 30 private lateinit var modelHelper: LauncherModelHelper 31 32 @Mock private lateinit var target: AppTarget 33 @Mock private lateinit var mockedAppTargetEvent: AppTargetEvent 34 @Mock private lateinit var allAppsPredictor: AppPredictor 35 @Mock private lateinit var hotseatPredictor: AppPredictor 36 @Mock private lateinit var widgetRecommendationPredictor: AppPredictor 37 38 @Before setUpnull39 fun setUp() { 40 MockitoAnnotations.initMocks(this) 41 modelHelper = LauncherModelHelper() 42 underTest = QuickstepModelDelegate(modelHelper.sandboxContext) 43 underTest.mAllAppsState.predictor = allAppsPredictor 44 underTest.mHotseatState.predictor = hotseatPredictor 45 underTest.mWidgetsRecommendationState.predictor = widgetRecommendationPredictor 46 underTest.mApp = LauncherAppState.getInstance(modelHelper.sandboxContext) 47 underTest.mDataModel = BgDataModel() 48 } 49 50 @After tearDownnull51 fun tearDown() { 52 modelHelper.destroy() 53 } 54 55 @Test onAppTargetEvent_notifyTargetnull56 fun onAppTargetEvent_notifyTarget() { 57 underTest.onAppTargetEvent(mockedAppTargetEvent, CONTAINER_PREDICTION) 58 59 verify(allAppsPredictor).notifyAppTargetEvent(mockedAppTargetEvent) 60 verifyZeroInteractions(hotseatPredictor) 61 verifyZeroInteractions(widgetRecommendationPredictor) 62 } 63 64 @Test onWidgetPrediction_notifyWidgetRecommendationPredictornull65 fun onWidgetPrediction_notifyWidgetRecommendationPredictor() { 66 underTest.onAppTargetEvent(mockedAppTargetEvent, CONTAINER_WIDGETS_PREDICTION) 67 68 verifyZeroInteractions(allAppsPredictor) 69 verify(widgetRecommendationPredictor).notifyAppTargetEvent(mockedAppTargetEvent) 70 verifyZeroInteractions(hotseatPredictor) 71 } 72 73 @Test onHotseatPrediction_notifyHotseatPredictornull74 fun onHotseatPrediction_notifyHotseatPredictor() { 75 underTest.onAppTargetEvent(mockedAppTargetEvent, CONTAINER_HOTSEAT_PREDICTION) 76 77 verifyZeroInteractions(allAppsPredictor) 78 verifyZeroInteractions(widgetRecommendationPredictor) 79 verify(hotseatPredictor).notifyAppTargetEvent(mockedAppTargetEvent) 80 } 81 82 @Test onOtherClient_notifyHotseatPredictornull83 fun onOtherClient_notifyHotseatPredictor() { 84 underTest.onAppTargetEvent(mockedAppTargetEvent, CONTAINER_WALLPAPERS) 85 86 verifyZeroInteractions(allAppsPredictor) 87 verifyZeroInteractions(widgetRecommendationPredictor) 88 verify(hotseatPredictor).notifyAppTargetEvent(mockedAppTargetEvent) 89 } 90 91 @Test hotseatActionPin_recreateHotSeatnull92 fun hotseatActionPin_recreateHotSeat() { 93 assertSame(underTest.mHotseatState.predictor, hotseatPredictor) 94 val appTargetEvent = AppTargetEvent.Builder(target, AppTargetEvent.ACTION_PIN).build() 95 underTest.markActive() 96 97 underTest.onAppTargetEvent(appTargetEvent, CONTAINER_HOTSEAT_PREDICTION) 98 99 verify(hotseatPredictor).destroy() 100 assertNotSame(underTest.mHotseatState.predictor, hotseatPredictor) 101 } 102 103 @Test hotseatActionUnpin_recreateHotSeatnull104 fun hotseatActionUnpin_recreateHotSeat() { 105 assertSame(underTest.mHotseatState.predictor, hotseatPredictor) 106 underTest.markActive() 107 val appTargetEvent = AppTargetEvent.Builder(target, AppTargetEvent.ACTION_UNPIN).build() 108 109 underTest.onAppTargetEvent(appTargetEvent, CONTAINER_HOTSEAT_PREDICTION) 110 111 verify(hotseatPredictor).destroy() 112 assertNotSame(underTest.mHotseatState.predictor, hotseatPredictor) 113 } 114 115 @Test container_actionPin_notRecreateHotSeatnull116 fun container_actionPin_notRecreateHotSeat() { 117 assertSame(underTest.mHotseatState.predictor, hotseatPredictor) 118 val appTargetEvent = AppTargetEvent.Builder(target, AppTargetEvent.ACTION_UNPIN).build() 119 underTest.markActive() 120 121 underTest.onAppTargetEvent(appTargetEvent, CONTAINER_PREDICTION) 122 123 verify(allAppsPredictor, never()).destroy() 124 verify(hotseatPredictor, never()).destroy() 125 assertSame(underTest.mHotseatState.predictor, hotseatPredictor) 126 } 127 } 128