diff options
author | 2024-01-26 14:38:00 -0800 | |
---|---|---|
committer | 2024-01-29 16:45:12 -0800 | |
commit | b038eae4dccbc562c122b203a387a26482e7348f (patch) | |
tree | d3a098f2d1a82f5d977056472755b68ad49007f9 | |
parent | 0ab7d5b89d241a031db960ee7c5ef7631e045ba0 (diff) |
[ECM] Make setClearRestrictionAllowed SystemApi
We plan to call EnhancedConfirmationManager::setClearRestrictionAllowed
a hidden API method, from PermissionController. But,
PermissionController can't access hidden API methods. In order to make
this possible, setClearRestrictionAllowed will need to be upgraded from
hidden API to SystemApi.
The reason we need to call setClearRestrictionAllowed from
PermissionController is that we plan to move the
ActionDisabledByAppOpsDialog activity into PermissionController, and
modify it to call setClearRestrictionAllowed instead of directly setting
appops.
Bug: 322026141
Fix: 320517290
Test: atest CtsPermissionUiTestCases:android.permissionui.cts.EnhancedConfirmationManagerTest
Change-Id: Ibd068ac456846fd1af8e867a6b336853a7835c4a
3 files changed, 2 insertions, 11 deletions
diff --git a/framework-s/api/system-current.txt b/framework-s/api/system-current.txt index 02ab5b562..183de368a 100644 --- a/framework-s/api/system-current.txt +++ b/framework-s/api/system-current.txt @@ -6,6 +6,7 @@ package android.app.ecm { method @NonNull public android.app.PendingIntent getRestrictedSettingDialogIntent(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; method @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) public boolean isClearRestrictionAllowed(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; method @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) public boolean isRestricted(@NonNull String, @NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; + method @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) public void setClearRestrictionAllowed(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; } } diff --git a/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java b/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java index 6feae2ee8..4db179288 100644 --- a/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java +++ b/framework-s/java/android/app/ecm/EnhancedConfirmationManager.java @@ -307,7 +307,6 @@ public final class EnhancedConfirmationManager { * * @param packageName package name of the application which should be considered acknowledged * @throws NameNotFoundException if the provided package was not found - * @hide */ @RequiresPermission(android.Manifest.permission.MANAGE_ENHANCED_CONFIRMATION_STATES) public void setClearRestrictionAllowed(@NonNull String packageName) diff --git a/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt b/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt index 7ef050fae..83f53b252 100644 --- a/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt +++ b/tests/cts/permissionui/src/android/permissionui/cts/EnhancedConfirmationManagerTest.kt @@ -112,7 +112,7 @@ class EnhancedConfirmationManagerTest : BaseUsePermissionTest() { installPackageWithInstallSourceAndMetadataFromDownloadedFile(apkName) runWithShellPermissionIdentity { eventually { assertTrue(ecm.isRestricted(APP_PACKAGE_NAME, PROTECTED_SETTING)) } - setClearRestrictionAllowed(context, APP_PACKAGE_NAME) + ecm.setClearRestrictionAllowed(APP_PACKAGE_NAME) eventually { assertTrue(ecm.isClearRestrictionAllowed(APP_PACKAGE_NAME)) } ecm.clearRestriction(APP_PACKAGE_NAME) eventually { assertFalse(ecm.isRestricted(APP_PACKAGE_NAME, PROTECTED_SETTING)) } @@ -122,17 +122,8 @@ class EnhancedConfirmationManagerTest : BaseUsePermissionTest() { companion object { private const val NON_PROTECTED_SETTING = "example_setting_which_is_not_protected" private const val PROTECTED_SETTING = "android:bind_accessibility_service" - private const val MODE_IGNORED = 1 private const val MODE_ERRORED = 2 - // TODO(b/320517290): Since setClearRestrictionAllowed is not API, we're currently - // simulating its behavior. We should instead actually invoke this method on - // EnhancedConfirmationManager. - @Throws(PackageManager.NameNotFoundException::class) - private fun setClearRestrictionAllowed(context: Context, packageName: String) { - setAppEcmState(context, packageName, MODE_IGNORED) - } - @Throws(PackageManager.NameNotFoundException::class) private fun setAppEcmState(context: Context, packageName: String, mode: Int) { val appOpsManager = context.getSystemService(AppOpsManager::class.java)!! |