1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.statusbar.chips.mediaprojection.ui.view 18 19 import android.content.ComponentName 20 import android.content.Intent 21 import android.content.packageManager 22 import android.content.pm.ApplicationInfo 23 import android.content.pm.PackageManager 24 import androidx.test.ext.junit.runners.AndroidJUnit4 25 import androidx.test.filters.SmallTest 26 import com.android.systemui.SysuiTestCase 27 import com.android.systemui.kosmos.Kosmos 28 import com.android.systemui.kosmos.testCase 29 import com.android.systemui.mediaprojection.data.model.MediaProjectionState 30 import com.android.systemui.mediaprojection.taskswitcher.FakeActivityTaskManager.Companion.createTask 31 import com.android.systemui.statusbar.phone.SystemUIDialog 32 import com.android.systemui.statusbar.phone.mockSystemUIDialogFactory 33 import com.google.common.truth.Truth.assertThat 34 import kotlin.test.Test 35 import org.junit.runner.RunWith 36 import org.mockito.kotlin.any 37 import org.mockito.kotlin.eq 38 import org.mockito.kotlin.mock 39 import org.mockito.kotlin.verify 40 import org.mockito.kotlin.whenever 41 42 @SmallTest 43 @RunWith(AndroidJUnit4::class) 44 class EndMediaProjectionDialogHelperTest : SysuiTestCase() { <lambda>null45 private val kosmos = Kosmos().also { it.testCase = this } 46 47 private val underTest = kosmos.endMediaProjectionDialogHelper 48 49 @Test createDialog_usesDelegateAndFactorynull50 fun createDialog_usesDelegateAndFactory() { 51 val dialog = mock<SystemUIDialog>() 52 val delegate = SystemUIDialog.Delegate { dialog } 53 whenever(kosmos.mockSystemUIDialogFactory.create(eq(delegate))).thenReturn(dialog) 54 55 underTest.createDialog(delegate) 56 57 verify(kosmos.mockSystemUIDialogFactory).create(delegate) 58 } 59 60 @Test getAppName_stateVersion_entireScreen_returnsNullnull61 fun getAppName_stateVersion_entireScreen_returnsNull() { 62 val result = 63 underTest.getAppName(MediaProjectionState.Projecting.EntireScreen("host.package")) 64 65 assertThat(result).isNull() 66 } 67 68 @Test getAppName_stateVersion_singleTask_cannotFindPackage_returnsNullnull69 fun getAppName_stateVersion_singleTask_cannotFindPackage_returnsNull() { 70 val baseIntent = 71 Intent().apply { this.component = ComponentName("fake.task.package", "cls") } 72 whenever(kosmos.packageManager.getApplicationInfo(eq("fake.task.package"), any<Int>())) 73 .thenThrow(PackageManager.NameNotFoundException()) 74 75 val projectionState = 76 MediaProjectionState.Projecting.SingleTask( 77 "host.package", 78 hostDeviceName = null, 79 createTask(taskId = 1, baseIntent = baseIntent), 80 ) 81 82 val result = underTest.getAppName(projectionState) 83 84 assertThat(result).isNull() 85 } 86 87 @Test getAppName_stateVersion_singleTask_findsPackage_returnsNamenull88 fun getAppName_stateVersion_singleTask_findsPackage_returnsName() { 89 val baseIntent = 90 Intent().apply { this.component = ComponentName("fake.task.package", "cls") } 91 val appInfo = mock<ApplicationInfo>() 92 whenever(appInfo.loadLabel(kosmos.packageManager)).thenReturn("Fake Package") 93 whenever(kosmos.packageManager.getApplicationInfo(eq("fake.task.package"), any<Int>())) 94 .thenReturn(appInfo) 95 96 val projectionState = 97 MediaProjectionState.Projecting.SingleTask( 98 "host.package", 99 hostDeviceName = null, 100 createTask(taskId = 1, baseIntent = baseIntent), 101 ) 102 103 val result = underTest.getAppName(projectionState) 104 105 assertThat(result).isEqualTo("Fake Package") 106 } 107 108 @Test getAppName_taskInfoVersion_null_returnsNullnull109 fun getAppName_taskInfoVersion_null_returnsNull() { 110 val result = underTest.getAppName(specificTaskInfo = null) 111 112 assertThat(result).isNull() 113 } 114 115 @Test getAppName_taskInfoVersion_cannotFindPackage_returnsNullnull116 fun getAppName_taskInfoVersion_cannotFindPackage_returnsNull() { 117 val baseIntent = 118 Intent().apply { this.component = ComponentName("fake.task.package", "cls") } 119 whenever(kosmos.packageManager.getApplicationInfo(eq("fake.task.package"), any<Int>())) 120 .thenThrow(PackageManager.NameNotFoundException()) 121 122 val result = underTest.getAppName(createTask(taskId = 1, baseIntent = baseIntent)) 123 124 assertThat(result).isNull() 125 } 126 127 @Test getAppName_taskInfoVersion_findsPackage_returnsNamenull128 fun getAppName_taskInfoVersion_findsPackage_returnsName() { 129 val baseIntent = 130 Intent().apply { this.component = ComponentName("fake.task.package", "cls") } 131 val appInfo = mock<ApplicationInfo>() 132 whenever(appInfo.loadLabel(kosmos.packageManager)).thenReturn("Fake Package") 133 whenever(kosmos.packageManager.getApplicationInfo(eq("fake.task.package"), any<Int>())) 134 .thenReturn(appInfo) 135 136 val result = underTest.getAppName(createTask(taskId = 1, baseIntent = baseIntent)) 137 138 assertThat(result).isEqualTo("Fake Package") 139 } 140 141 @Test getAppName_packageNameVersion_cannotFindPackage_returnsNullnull142 fun getAppName_packageNameVersion_cannotFindPackage_returnsNull() { 143 whenever(kosmos.packageManager.getApplicationInfo(eq("fake.task.package"), any<Int>())) 144 .thenThrow(PackageManager.NameNotFoundException()) 145 146 val result = underTest.getAppName("fake.task.package") 147 148 assertThat(result).isNull() 149 } 150 151 @Test getAppName_packageNameVersion_findsPackage_returnsNamenull152 fun getAppName_packageNameVersion_findsPackage_returnsName() { 153 val appInfo = mock<ApplicationInfo>() 154 whenever(appInfo.loadLabel(kosmos.packageManager)).thenReturn("Fake Package") 155 whenever(kosmos.packageManager.getApplicationInfo(eq("fake.task.package"), any<Int>())) 156 .thenReturn(appInfo) 157 158 val result = underTest.getAppName("fake.task.package") 159 160 assertThat(result).isEqualTo("Fake Package") 161 } 162 } 163