Merge "Make getPersonalAppsSuspensionReasons more robust." into rvc-dev am: c8d5a68525

Change-Id: I8aa7b5e5fe3959f733fba34a56bbca75526bc62e
This commit is contained in:
Pavel Grafov
2020-05-11 19:34:36 +00:00
committed by Automerger Merge Worker
3 changed files with 34 additions and 11 deletions

View File

@@ -984,6 +984,10 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
// (ACTION_DATE_CHANGED), or when manual clock adjustment is made
// (ACTION_TIME_CHANGED)
updateSystemUpdateFreezePeriodsRecord(/* saveIfChanged */ true);
final int userId = getManagedUserId(UserHandle.USER_SYSTEM);
if (userId >= 0) {
updatePersonalAppsSuspension(userId, mUserManager.isUserUnlocked(userId));
}
} else if (ACTION_PROFILE_OFF_DEADLINE.equals(action)) {
Slog.i(LOG_TAG, "Profile off deadline alarm was triggered");
final int userId = getManagedUserId(UserHandle.USER_SYSTEM);
@@ -15912,15 +15916,12 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
false /* parent */);
// DO shouldn't be able to use this method.
enforceProfileOwnerOfOrganizationOwnedDevice(admin);
final DevicePolicyData userData =
getUserData(getProfileParentId(mInjector.userHandleGetCallingUserId()));
if (!userData.mAppsSuspended) {
return PERSONAL_APPS_NOT_SUSPENDED;
} else {
final long deadline = admin.mProfileOffDeadline;
return makeSuspensionReasons(admin.mSuspendPersonalApps,
deadline != 0 && System.currentTimeMillis() > deadline);
}
final long deadline = admin.mProfileOffDeadline;
final int result = makeSuspensionReasons(admin.mSuspendPersonalApps,
deadline != 0 && mInjector.systemCurrentTimeMillis() > deadline);
Slog.d(LOG_TAG, String.format("getPersonalAppsSuspendedReasons user: %d; result: %d",
mInjector.userHandleGetCallingUserId(), result));
return result;
}
}
@@ -16033,8 +16034,12 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
int profileUserId, ActiveAdmin profileOwner, boolean unlocked) {
final long now = mInjector.systemCurrentTimeMillis();
if (profileOwner.mProfileOffDeadline != 0 && now > profileOwner.mProfileOffDeadline) {
// Profile off deadline is already reached.
Slog.i(LOG_TAG, "Profile off deadline has been reached.");
Slog.i(LOG_TAG, "Profile off deadline has been reached, unlocked: " + unlocked);
if (profileOwner.mProfileOffDeadline != -1) {
// Move the deadline far to the past so that it cannot be rolled back by TZ change.
profileOwner.mProfileOffDeadline = -1;
saveSettingsLocked(profileUserId);
}
return PROFILE_OFF_DEADLINE_REACHED;
}
boolean shouldSaveSettings = false;

View File

@@ -6441,6 +6441,16 @@ public class DevicePolicyManagerTest extends DpmTestBase {
verify(mContext.spiedContext).startActivityAsUser(
MockUtils.checkIntentAction(ACTION_CHECK_POLICY_COMPLIANCE),
MockUtils.checkUserHandle(CALLER_USER_HANDLE));
// Verify that correct suspension reason is reported to the DPC.
mContext.binder.callingUid = DpmMockContext.CALLER_UID;
assertThat(dpm.getPersonalAppsSuspendedReasons(admin1))
.isEqualTo(DevicePolicyManager.PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT);
// Verify that rolling time back doesn't change the status.
dpms.mMockInjector.setSystemCurrentTimeMillis(PROFILE_OFF_START);
assertThat(dpm.getPersonalAppsSuspendedReasons(admin1))
.isEqualTo(DevicePolicyManager.PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT);
}
private void sendBroadcastWithUser(String action, int userHandle) throws Exception {

View File

@@ -226,6 +226,14 @@ public class MockSystemServices {
uh.userType = type;
uh.profileGroupId = profileGroupId;
when(userManager.getUserInfo(eq(userId))).thenReturn(uh);
// Ensure there are no duplicate UserInfo records.
// TODO: fix tests so that this is not needed.
for (int i = 0; i < mUserInfos.size(); i++) {
if (mUserInfos.get(i).id == userId) {
mUserInfos.remove(i);
break;
}
}
mUserInfos.add(uh);
when(userManager.getUsers()).thenReturn(mUserInfos);
when(userManager.getUsers(anyBoolean())).thenReturn(mUserInfos);