Re-activate backup service after cleaning a profile owner

Currently backup service is re-activated unconditionally when clearing
a device owner but not profile owner. With this CL it should be
re-activate in both cases.

NB: there are two bits of state related to backup service:
1. activated or deactivated: This is out of user control, but can be
   changed by the admin via DPM.setBackupServiceEnabled (this name is
   a bit misleading here).
2. enabled or disabled: this is controlled by the user via Settings
   and only available when backup service is activated (see 1.)

Bug: 143274029
Test: atest CtsAdminTestCases && adb shell bmgr enabled
Test: atest com.android.server.devicepolicy.DevicePolicyManagerTest
Change-Id: I6f11642abe544c7df265ed7e2ad466d47796e7f9
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 aeccfc5..f571411 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java
@@ -943,10 +943,6 @@
         verify(getServices().iactivityManager, times(1)).updateDeviceOwner(
                 eq(admin1.getPackageName()));
 
-        // TODO We should check if the caller has called clearCallerIdentity().
-        verify(getServices().ibackupManager, times(1)).setBackupServiceActive(
-                eq(UserHandle.USER_SYSTEM), eq(false));
-
         verify(mContext.spiedContext, times(1)).sendBroadcastAsUser(
                 MockUtils.checkIntentAction(DevicePolicyManager.ACTION_DEVICE_OWNER_CHANGED),
                 MockUtils.checkUserHandle(UserHandle.USER_SYSTEM));
@@ -1175,6 +1171,37 @@
         // TODO Check other calls.
     }
 
+    public void testDeviceOwnerBackupActivateDeactivate() throws Exception {
+        mContext.callerPermissions.add(permission.MANAGE_DEVICE_ADMINS);
+        mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);
+
+        // Set admin1 as a DA to the secondary user.
+        mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;
+        setUpPackageManagerForAdmin(admin1, DpmMockContext.CALLER_SYSTEM_USER_UID);
+        dpm.setActiveAdmin(admin1, /* replace =*/ false);
+        assertTrue(dpm.setDeviceOwner(admin1, "owner-name"));
+
+        verify(getServices().ibackupManager, times(1)).setBackupServiceActive(
+                eq(UserHandle.USER_SYSTEM), eq(false));
+
+        dpm.clearDeviceOwnerApp(admin1.getPackageName());
+
+        verify(getServices().ibackupManager, times(1)).setBackupServiceActive(
+                eq(UserHandle.USER_SYSTEM), eq(true));
+    }
+
+    public void testProfileOwnerBackupActivateDeactivate() throws Exception {
+        setAsProfileOwner(admin1);
+
+        verify(getServices().ibackupManager, times(1)).setBackupServiceActive(
+                eq(DpmMockContext.CALLER_USER_HANDLE), eq(false));
+
+        dpm.clearProfileOwner(admin1);
+
+        verify(getServices().ibackupManager, times(1)).setBackupServiceActive(
+                eq(DpmMockContext.CALLER_USER_HANDLE), eq(true));
+    }
+
     public void testClearDeviceOwner_fromDifferentUser() throws Exception {
         mContext.callerPermissions.add(permission.MANAGE_DEVICE_ADMINS);
         mContext.callerPermissions.add(permission.MANAGE_USERS);