diff --git a/api/current.txt b/api/current.txt index c62e04eab03d4..401fd36c49461 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5913,7 +5913,7 @@ package android.app.admin { method public boolean setAlwaysOnVpnPackage(android.content.ComponentName, java.lang.String); method public boolean setApplicationHidden(android.content.ComponentName, java.lang.String, boolean); method public void setApplicationRestrictions(android.content.ComponentName, java.lang.String, android.os.Bundle); - method public void setApplicationRestrictionsManagingPackage(android.content.ComponentName, java.lang.String); + method public void setApplicationRestrictionsManagingPackage(android.content.ComponentName, java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public void setAutoTimeRequired(android.content.ComponentName, boolean); method public void setBluetoothContactSharingDisabled(android.content.ComponentName, boolean); method public void setCameraDisabled(android.content.ComponentName, boolean); diff --git a/api/system-current.txt b/api/system-current.txt index 6484f7d83af4c..dd60a73e5049d 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6061,7 +6061,7 @@ package android.app.admin { method public boolean setAlwaysOnVpnPackage(android.content.ComponentName, java.lang.String); method public boolean setApplicationHidden(android.content.ComponentName, java.lang.String, boolean); method public void setApplicationRestrictions(android.content.ComponentName, java.lang.String, android.os.Bundle); - method public void setApplicationRestrictionsManagingPackage(android.content.ComponentName, java.lang.String); + method public void setApplicationRestrictionsManagingPackage(android.content.ComponentName, java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public void setAutoTimeRequired(android.content.ComponentName, boolean); method public void setBluetoothContactSharingDisabled(android.content.ComponentName, boolean); method public void setCameraDisabled(android.content.ComponentName, boolean); diff --git a/api/test-current.txt b/api/test-current.txt index b27c0f9196c33..c0f551a830395 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -5917,7 +5917,7 @@ package android.app.admin { method public boolean setAlwaysOnVpnPackage(android.content.ComponentName, java.lang.String); method public boolean setApplicationHidden(android.content.ComponentName, java.lang.String, boolean); method public void setApplicationRestrictions(android.content.ComponentName, java.lang.String, android.os.Bundle); - method public void setApplicationRestrictionsManagingPackage(android.content.ComponentName, java.lang.String); + method public void setApplicationRestrictionsManagingPackage(android.content.ComponentName, java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public void setAutoTimeRequired(android.content.ComponentName, boolean); method public void setBluetoothContactSharingDisabled(android.content.ComponentName, boolean); method public void setCameraDisabled(android.content.ComponentName, boolean); diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index b7d9b80e9a536..fe5c45f21ede7 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -31,6 +31,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ParceledListSlice; import android.content.pm.UserInfo; import android.graphics.Bitmap; @@ -3980,18 +3981,21 @@ public class DevicePolicyManager { * {@code null} value or uninstalling the managing package. *

* The supplied application restriction managing package must be installed when calling this - * API, otherwise an {@link IllegalArgumentException} will be thrown. + * API, otherwise an {@link NameNotFoundException} will be thrown. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param packageName The package name which will be given access to application restrictions * APIs. If {@code null} is given the current package will be cleared. * @throws SecurityException if {@code admin} is not a device or profile owner. + * @throws NameNotFoundException if {@code packageName} is not found */ public void setApplicationRestrictionsManagingPackage(@NonNull ComponentName admin, - @Nullable String packageName) { + @Nullable String packageName) throws NameNotFoundException { if (mService != null) { try { - mService.setApplicationRestrictionsManagingPackage(admin, packageName); + if (!mService.setApplicationRestrictionsManagingPackage(admin, packageName)) { + throw new NameNotFoundException(packageName); + } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 3ba5bd839d2d2..aed220dd57058 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -161,7 +161,7 @@ interface IDevicePolicyManager { void setApplicationRestrictions(in ComponentName who, in String packageName, in Bundle settings); Bundle getApplicationRestrictions(in ComponentName who, in String packageName); - void setApplicationRestrictionsManagingPackage(in ComponentName admin, in String packageName); + boolean setApplicationRestrictionsManagingPackage(in ComponentName admin, in String packageName); String getApplicationRestrictionsManagingPackage(in ComponentName admin); boolean isCallerApplicationRestrictionsManagingPackage(); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 53022533d69dc..c362c9c3ceb2a 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -6237,19 +6237,20 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } @Override - public void setApplicationRestrictionsManagingPackage(ComponentName admin, String packageName) { + public boolean setApplicationRestrictionsManagingPackage(ComponentName admin, + String packageName) { Preconditions.checkNotNull(admin, "ComponentName is null"); final int userHandle = mInjector.userHandleGetCallingUserId(); synchronized (this) { getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); if (packageName != null && !isPackageInstalledForUser(packageName, userHandle)) { - throw new IllegalArgumentException("Package " + packageName + " is not installed " - + "on the current user"); + return false; } DevicePolicyData policy = getUserData(userHandle); policy.mApplicationRestrictionsManagingPackage = packageName; saveSettingsLocked(userHandle); + return true; } } diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java index 6c2bdda3e21aa..e6963d52e88a6 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java @@ -1117,9 +1117,9 @@ public class DevicePolicyManagerTest extends DpmTestBase { dpm.setApplicationRestrictionsManagingPackage(admin1, nonExistAppRestrictionsManagerPackage); fail("Non-existent app set as app restriction manager."); - } catch (IllegalArgumentException expected) { + } catch (PackageManager.NameNotFoundException expected) { MoreAsserts.assertContainsRegex( - "is not installed on the current user", expected.getMessage()); + nonExistAppRestrictionsManagerPackage, expected.getMessage()); } // Let appRestrictionsManagerPackage manage app restrictions