• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.systemui.screenshot
2 
3 import android.graphics.drawable.Drawable
4 import android.os.UserHandle
5 import android.view.View
6 import android.view.ViewGroup
7 import android.widget.FrameLayout
8 import androidx.constraintlayout.widget.ConstraintLayout
9 import androidx.constraintlayout.widget.Guideline
10 import androidx.test.ext.junit.runners.AndroidJUnit4
11 import androidx.test.filters.SmallTest
12 import com.android.systemui.SysuiTestCase
13 import com.android.systemui.screenshot.message.LabeledIcon
14 import com.android.systemui.screenshot.message.ProfileMessageController
15 import com.android.systemui.util.mockito.any
16 import com.android.systemui.util.mockito.eq
17 import com.android.systemui.util.mockito.whenever
18 import junit.framework.Assert.assertEquals
19 import kotlinx.coroutines.test.TestScope
20 import kotlinx.coroutines.test.UnconfinedTestDispatcher
21 import kotlinx.coroutines.test.runTest
22 import org.junit.Before
23 import org.junit.Test
24 import org.junit.runner.RunWith
25 import org.mockito.Mock
26 import org.mockito.Mockito.never
27 import org.mockito.Mockito.verify
28 import org.mockito.MockitoAnnotations
29 
30 @SmallTest
31 @RunWith(AndroidJUnit4::class)
32 class MessageContainerControllerTest : SysuiTestCase() {
33     lateinit var messageContainer: MessageContainerController
34 
35     @Mock lateinit var workProfileMessageController: WorkProfileMessageController
36     @Mock lateinit var profileMessageController: ProfileMessageController
37 
38     @Mock lateinit var screenshotDetectionController: ScreenshotDetectionController
39 
40     @Mock lateinit var icon: Drawable
41 
42     lateinit var workProfileFirstRunView: ViewGroup
43     lateinit var detectionNoticeView: ViewGroup
44     lateinit var container: FrameLayout
45 
46     lateinit var screenshotView: ViewGroup
47 
48     val userHandle = UserHandle.of(5)
49     val screenshotData = ScreenshotData.forTesting(userHandle = userHandle)
50 
51     val appName = "app name"
52     lateinit var workProfileData: WorkProfileMessageController.WorkProfileFirstRunData
53 
54     @Before
setupnull55     fun setup() {
56         MockitoAnnotations.initMocks(this)
57         messageContainer =
58             MessageContainerController(
59                 workProfileMessageController,
60                 profileMessageController,
61                 screenshotDetectionController,
62                 TestScope(UnconfinedTestDispatcher()),
63             )
64         screenshotView = ConstraintLayout(mContext)
65         workProfileData = WorkProfileMessageController.WorkProfileFirstRunData(appName, icon)
66 
67         val guideline = Guideline(mContext)
68         guideline.id = com.android.systemui.res.R.id.guideline
69         screenshotView.addView(guideline)
70 
71         container = FrameLayout(mContext)
72         container.id = com.android.systemui.res.R.id.screenshot_message_container
73         screenshotView.addView(container)
74 
75         workProfileFirstRunView = FrameLayout(mContext)
76         workProfileFirstRunView.id = com.android.systemui.res.R.id.work_profile_first_run
77         container.addView(workProfileFirstRunView)
78 
79         detectionNoticeView = FrameLayout(mContext)
80         detectionNoticeView.id = com.android.systemui.res.R.id.screenshot_detection_notice
81         container.addView(detectionNoticeView)
82 
83         messageContainer.setView(screenshotView)
84     }
85 
86     @Test
<lambda>null87     fun testOnScreenshotTakenUserHandle_withProfileProfileFirstRun() = runTest {
88         val profileData =
89             ProfileMessageController.ProfileFirstRunData(
90                 LabeledIcon(appName, icon),
91                 ProfileMessageController.FirstRunProfile.PRIVATE,
92             )
93         whenever(profileMessageController.onScreenshotTaken(eq(userHandle))).thenReturn(profileData)
94         messageContainer.onScreenshotTaken(screenshotData)
95 
96         verify(profileMessageController)
97             .bindView(eq(workProfileFirstRunView), eq(profileData), any())
98         assertEquals(View.VISIBLE, workProfileFirstRunView.visibility)
99         assertEquals(View.GONE, detectionNoticeView.visibility)
100     }
101 
102     @Test
testOnScreenshotTakenScreenshotData_nothingToShownull103     fun testOnScreenshotTakenScreenshotData_nothingToShow() {
104         messageContainer.onScreenshotTaken(screenshotData)
105 
106         verify(workProfileMessageController, never()).populateView(any(), any(), any())
107         verify(profileMessageController, never()).bindView(any(), any(), any())
108         verify(screenshotDetectionController, never()).populateView(any(), any())
109 
110         assertEquals(View.GONE, container.visibility)
111     }
112 }
113