• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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.permissioncontroller.permissionui.ui.handheld
18 
19 import android.content.Intent
20 import android.os.Build
21 import android.permission.flags.Flags
22 import android.permission.cts.PermissionUtils.grantPermission
23 import android.permission.cts.PermissionUtils.install
24 import android.permission.cts.PermissionUtils.revokePermission
25 import android.permission.cts.PermissionUtils.uninstallApp
26 import android.platform.test.annotations.RequiresFlagsDisabled
27 import android.platform.test.annotations.RequiresFlagsEnabled
28 import android.platform.test.flag.junit.CheckFlagsRule
29 import android.platform.test.flag.junit.DeviceFlagsValueProvider
30 import androidx.test.ext.junit.runners.AndroidJUnit4
31 import androidx.test.filters.SdkSuppress
32 import androidx.test.uiautomator.By
33 import com.android.compatibility.common.util.SystemUtil.eventually
34 import com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity
35 import com.android.compatibility.common.util.UiAutomatorUtils2.waitFindObject
36 import com.android.compatibility.common.util.UiAutomatorUtils2.waitFindObjectOrNull
37 import com.android.permissioncontroller.permissionui.getUsageCountsFromUi
38 import com.android.permissioncontroller.permissionui.wakeUpScreen
39 import com.google.common.truth.Truth.assertThat
40 import org.junit.After
41 import org.junit.Assert.assertNotNull
42 import org.junit.Assert.assertNull
43 import org.junit.Before
44 import org.junit.Rule
45 import org.junit.Test
46 import org.junit.runner.RunWith
47 
48 /** Simple tests for {@link ManageCustomPermissionsFragment} */
49 @RunWith(AndroidJUnit4::class)
50 class ManageCustomPermissionsFragmentTest : BaseHandheldPermissionUiTest() {
51 
52     @JvmField @Rule val checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule()
53 
54     private val ONE_PERMISSION_DEFINER_APK =
55         "/data/local/tmp/pc-permissionui/" + "PermissionUiDefineAdditionalPermissionApp.apk"
56     private val PERMISSION_USER_APK =
57         "/data/local/tmp/pc-permissionui/" + "PermissionUiUseAdditionalPermissionApp.apk"
58     private val DEFINER_PKG = "com.android.permissioncontroller.tests.appthatdefinespermission"
59     private val USER_PKG = "com.android.permissioncontroller.tests.appthatrequestpermission"
60 
61     private val PERM_LABEL = "Permission A"
62     private val PERM = "com.android.permissioncontroller.tests.A"
63     private val ADDITIONAL_PERMISSIONS_LABEL = "Additional permissions"
64     private val BODY_SENSORS_LABEL = "Body sensors"
65 
66     @Before
setupnull67     fun setup() {
68         wakeUpScreen()
69 
70         runWithShellPermissionIdentity {
71             instrumentationContext.startActivity(
72                 Intent(Intent.ACTION_MANAGE_PERMISSIONS).apply {
73                     addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
74                 }
75             )
76         }
77     }
78 
79     @Test
groupSummaryGetsUpdatedWhenPermissionGetsGrantednull80     fun groupSummaryGetsUpdatedWhenPermissionGetsGranted() {
81         install(ONE_PERMISSION_DEFINER_APK)
82         install(PERMISSION_USER_APK)
83         waitFindObject(By.textContains(ADDITIONAL_PERMISSIONS_LABEL)).click()
84         waitFindObject(By.textContains(PERM_LABEL))
85 
86         val original = getUsageCountsFromUi(PERM_LABEL)
87 
88         grantPermission(USER_PKG, PERM)
89         eventually {
90             assertThat(getUsageCountsFromUi(PERM_LABEL).granted).isEqualTo(original.granted + 1)
91         }
92     }
93 
94     @Test
groupSummaryGetsUpdatedWhenPermissionGetsRevokednull95     fun groupSummaryGetsUpdatedWhenPermissionGetsRevoked() {
96         install(ONE_PERMISSION_DEFINER_APK)
97         install(PERMISSION_USER_APK)
98         waitFindObject(By.textContains(ADDITIONAL_PERMISSIONS_LABEL)).click()
99         waitFindObject(By.textContains(PERM_LABEL))
100 
101         val original = getUsageCountsFromUi(PERM_LABEL)
102 
103         grantPermission(USER_PKG, PERM)
104         eventually { assertThat(getUsageCountsFromUi(PERM_LABEL)).isNotEqualTo(original) }
105 
106         revokePermission(USER_PKG, PERM)
107         eventually { assertThat(getUsageCountsFromUi(PERM_LABEL)).isEqualTo(original) }
108     }
109 
110 
111     @SdkSuppress(
112         minSdkVersion = Build.VERSION_CODES.TIRAMISU,
113         maxSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE,
114     )
115     @Test
testFindBodySensor_preV_labelDisplayednull116     fun testFindBodySensor_preV_labelDisplayed() {
117         if (waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL)) == null) {
118             waitFindObject(By.textContains(ADDITIONAL_PERMISSIONS_LABEL)).click()
119             assertNotNull(waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL)))
120         }
121     }
122 
123     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA)
124     @RequiresFlagsDisabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
125     @Test
testFindBodySensor_replaceBodySensorFlagDisabled_labelDisplayednull126     fun testFindBodySensor_replaceBodySensorFlagDisabled_labelDisplayed() {
127         if (waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL)) == null) {
128             waitFindObject(By.textContains(ADDITIONAL_PERMISSIONS_LABEL)).click()
129             assertNotNull(waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL)))
130         }
131     }
132 
133     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.BAKLAVA)
134     @RequiresFlagsEnabled(Flags.FLAG_REPLACE_BODY_SENSOR_PERMISSION_ENABLED)
135     @Test
testFindBodySensor_replaceBodySensorFlagEnabled_labelNotDisplayednull136     fun testFindBodySensor_replaceBodySensorFlagEnabled_labelNotDisplayed() {
137         install(ONE_PERMISSION_DEFINER_APK)
138 
139         assertNull(waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL)))
140         waitFindObject(By.textContains(ADDITIONAL_PERMISSIONS_LABEL)).click()
141         assertNull(waitFindObjectOrNull(By.textContains(BODY_SENSORS_LABEL)))
142     }
143 
144     @After
tearDownnull145     fun tearDown() {
146         uninstallApp(DEFINER_PKG)
147         uninstallApp(USER_PKG)
148 
149         uiDevice.pressBack()
150     }
151 }
152