diff options
2 files changed, 62 insertions, 5 deletions
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PermissionsTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PermissionsTest.java index fefe9cdb0c5..1c633c3eaff 100644 --- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PermissionsTest.java +++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/PermissionsTest.java @@ -343,8 +343,9 @@ public class PermissionsTest extends BaseDeviceAdminTest { PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( SIMPLE_PRE_M_APP_PACKAGE_NAME, 0); assertEquals(PackageManager.PERMISSION_GRANTED, - PermissionChecker.checkPermission(mContext, PERMISSION_NAME, -1, - packageInfo.applicationInfo.uid, SIMPLE_PRE_M_APP_PACKAGE_NAME)); + PermissionChecker.checkPermissionForDataDelivery(mContext, PERMISSION_NAME, + PermissionChecker.PID_UNKNOWN, packageInfo.applicationInfo.uid, + SIMPLE_PRE_M_APP_PACKAGE_NAME)); } private void assertCanSetPermissionGrantStateAppPreM(int value) throws Exception { @@ -365,7 +366,8 @@ public class PermissionsTest extends BaseDeviceAdminTest { // For pre-M apps the access to the data might be prevented via app-ops. Hence check that // they are correctly set - boolean isGranted = (PermissionChecker.checkPermission(mContext, PERMISSION_NAME, -1, + boolean isGranted = (PermissionChecker.checkPermissionForDataDelivery(mContext, + PERMISSION_NAME, PermissionChecker.PID_UNKNOWN, packageInfo.applicationInfo.uid, SIMPLE_PRE_M_APP_PACKAGE_NAME) == PackageManager.PERMISSION_GRANTED); switch (value) { diff --git a/tests/tests/permission/src/android/permission/cts/LocationAccessCheckTest.java b/tests/tests/permission/src/android/permission/cts/LocationAccessCheckTest.java index 232cd1f50bc..895c6134da0 100644 --- a/tests/tests/permission/src/android/permission/cts/LocationAccessCheckTest.java +++ b/tests/tests/permission/src/android/permission/cts/LocationAccessCheckTest.java @@ -38,6 +38,8 @@ import static org.junit.Assume.assumeTrue; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import android.app.ActivityManager; +import android.app.AppOpsManager; import android.app.UiAutomation; import android.content.ComponentName; import android.content.ContentResolver; @@ -50,6 +52,7 @@ import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; +import android.os.Debug; import android.os.IBinder; import android.os.Looper; import android.os.ParcelFileDescriptor; @@ -379,6 +382,15 @@ public class LocationAccessCheckTest { } /** + * Disable location access check + */ + private void disableLocationAccessCheck() { + runWithShellPermissionIdentity(() -> DeviceConfig.setProperty( + DeviceConfig.NAMESPACE_PRIVACY, + PROPERTY_LOCATION_ACCESS_CHECK_ENABLED, "false", false)); + } + + /** * Make sure fine location can be accessed at all. */ @Before @@ -507,7 +519,7 @@ public class LocationAccessCheckTest { accessLocation(); getNotification(true); - assertNull(getNotification(false)); + assertNull(getNotification(true)); } @Test @@ -525,7 +537,7 @@ public class LocationAccessCheckTest { grantPermissionToTestApp(ACCESS_BACKGROUND_LOCATION); accessLocation(); - assertNotNull(getNotification(false)); + assertNotNull(getNotification(true)); } @Test @@ -557,6 +569,7 @@ public class LocationAccessCheckTest { eventually(() -> assertNull(getNotification(false)), UNEXPECTED_TIMEOUT_MILLIS); } finally { installBackgroundAccessApp(); + getNotification(true); } } @@ -583,4 +596,46 @@ public class LocationAccessCheckTest { installBackgroundAccessApp(); } } + + @Test + public void noNotificationIfFeatureDisabled() throws Throwable { + disableLocationAccessCheck(); + accessLocation(); + assertNull(getNotification(true)); + } + + @Test + public void notificationOnlyForAccessesSinceFeatureWasEnabled() throws Throwable { + // Disable the feature and access location in disabled state + disableLocationAccessCheck(); + accessLocation(); + assertNull(getNotification(true)); + + // No notification expected for accesses before enabling the feature + enableLocationAccessCheck(); + assertNull(getNotification(true)); + + // Notification expected for access after enabling the feature + accessLocation(); + assertNotNull(getNotification(true)); + } + + @Test + public void noNotificationIfBlamerNotSystemOrLocationProvider() throws Throwable { + // Blame the app for access from an untrusted for notification purposes package. + runWithShellPermissionIdentity(() -> { + AppOpsManager appOpsManager = sContext.getSystemService(AppOpsManager.class); + appOpsManager.noteProxyOpNoThrow(AppOpsManager.OPSTR_FINE_LOCATION, TEST_APP_PKG, + sContext.getPackageManager().getPackageUid(TEST_APP_PKG, 0)); + }); + assertNull(getNotification(true)); + } + + @Test + public void testOpeningLocationSettingsDoesNotTriggerAccess() throws Throwable { + Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + sContext.startActivity(intent); + assertNull(getNotification(true)); + } } |