diff options
| -rw-r--r-- | core/java/android/app/admin/DevicePolicyManager.java | 21 | ||||
| -rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java | 59 |
2 files changed, 44 insertions, 36 deletions
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 9247486dff40..9c6410a37e62 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -9335,12 +9335,18 @@ public class DevicePolicyManager { } /** - * Allows the device owner to enable or disable the backup service. + * Allows the device owner or profile owner to enable or disable the backup service. * - * <p> Backup service manages all backup and restore mechanisms on the device. Setting this to - * false will prevent data from being backed up or restored. + * <p> Each user has its own backup service which manages the backup and restore mechanisms in + * that user. Disabling the backup service will prevent data from being backed up or restored. * - * <p> Backup service is off by default when device owner is present. + * <p> Device owner calls this API to control backup services across all users on the device. + * Profile owner can use this API to enable or disable the profile's backup service. However, + * for a managed profile its backup functionality is only enabled if both the device owner + * and the profile owner have enabled the backup service. + * + * <p> By default, backup service is disabled on a device with device owner, and within a + * managed profile. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param enabled {@code true} to enable the backup service, {@code false} to disable it. @@ -9356,7 +9362,12 @@ public class DevicePolicyManager { } /** - * Return whether the backup service is enabled by the device owner. + * Return whether the backup service is enabled by the device owner or profile owner for the + * current user, as previously set by {@link #setBackupServiceEnabled(ComponentName, boolean)}. + * + * <p> Whether the backup functionality is actually enabled or not depends on settings from both + * the current user and the device owner, please see + * {@link #setBackupServiceEnabled(ComponentName, boolean)} for details. * * <p> Backup service manages all backup and restore mechanisms on the device. * diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 76ae5ccd4eeb..07e2a8bfe781 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -7652,18 +7652,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } // Shutting down backup manager service permanently. - long ident = mInjector.binderClearCallingIdentity(); - try { - if (mInjector.getIBackupManager() != null) { - mInjector.getIBackupManager() - .setBackupServiceActive(UserHandle.USER_SYSTEM, false); - } - } catch (RemoteException e) { - throw new IllegalStateException("Failed deactivating backup service.", e); - } finally { - mInjector.binderRestoreCallingIdentity(ident); - } - + toggleBackupServiceActive(UserHandle.USER_SYSTEM, /* makeActive= */ false); if (isAdb()) { // Log device owner provisioning was started using adb. MetricsLogger.action(mContext, PROVISIONING_ENTRY_POINT_ADB, LOG_TAG_DEVICE_OWNER); @@ -7691,7 +7680,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { saveUserRestrictionsLocked(userId); } - ident = mInjector.binderClearCallingIdentity(); + long ident = mInjector.binderClearCallingIdentity(); try { // TODO Send to system too? sendOwnerChangedBroadcast(DevicePolicyManager.ACTION_DEVICE_OWNER_CHANGED, userId); @@ -7948,6 +7937,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { .write(); } + // Shutting down backup manager service permanently. + toggleBackupServiceActive(userHandle, /* makeActive= */ false); + mOwners.setProfileOwner(who, ownerName, userHandle); mOwners.writeProfileOwner(userHandle); Slog.i(LOG_TAG, "Profile owner set: " + who + " on user " + userHandle); @@ -7971,6 +7963,22 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } + + private void toggleBackupServiceActive(int userId, boolean makeActive) { + long ident = mInjector.binderClearCallingIdentity(); + try { + if (mInjector.getIBackupManager() != null) { + mInjector.getIBackupManager() + .setBackupServiceActive(userId, makeActive); + } + } catch (RemoteException e) { + throw new IllegalStateException("Failed deactivating backup service.", e); + } finally { + mInjector.binderRestoreCallingIdentity(ident); + } + + } + @Override public void clearProfileOwner(ComponentName who) { if (!mHasFeature) { @@ -12704,22 +12712,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { return; } Preconditions.checkNotNull(admin); - synchronized (getLockObject()) { - getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER); - } - - final long ident = mInjector.binderClearCallingIdentity(); - try { - IBackupManager ibm = mInjector.getIBackupManager(); - if (ibm != null) { - ibm.setBackupServiceActive(UserHandle.USER_SYSTEM, enabled); - } - } catch (RemoteException e) { - throw new IllegalStateException( - "Failed " + (enabled ? "" : "de") + "activating backup service.", e); - } finally { - mInjector.binderRestoreCallingIdentity(ident); - } + enforceProfileOrDeviceOwner(admin); + int userId = mInjector.userHandleGetCallingUserId(); + toggleBackupServiceActive(userId, enabled); } @Override @@ -12728,11 +12723,13 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { if (!mHasFeature) { return true; } + + enforceProfileOrDeviceOwner(admin); synchronized (getLockObject()) { try { - getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER); IBackupManager ibm = mInjector.getIBackupManager(); - return ibm != null && ibm.isBackupServiceActive(UserHandle.USER_SYSTEM); + return ibm != null && ibm.isBackupServiceActive( + mInjector.userHandleGetCallingUserId()); } catch (RemoteException e) { throw new IllegalStateException("Failed requesting backup service state.", e); } |