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