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