Safecty checker improvements on DevicePolicyManagerService.

- Include mSafetyChecker on dump().
- Change OneTimeSafetyChecker so it's disabled after any operation.
- (Conditionally) log the mSafetyChecker used.

Bug: 172376923

Test: adb shell dumpsys device_policy | grep mSafetyChecker
Test: atest CtsDevicePolicyManagerTestCases:DeviceOwnerTest#testDevicePolicySafetyCheckerIntegration_allOperations,testDevicePolicySafetyCheckerIntegration_isSafeOperation,testDevicePolicySafetyCheckerIntegration_unsafeStateException \
  CtsDevicePolicyManagerTestCases:ProfileOwnerTest#testDevicePolicySafetyCheckerIntegration_allOperations,testDevicePolicySafetyCheckerIntegration_isSafeOperation,testDevicePolicySafetyCheckerIntegration_unsafeStateException

Change-Id: Ife936cea89c6e21a56454766ecb4b29b652bd584
This commit is contained in:
Felipe Leme
2021-02-18 15:02:32 -08:00
parent c3d7c80f3e
commit c1e6f21f8f
2 changed files with 22 additions and 5 deletions

View File

@@ -1138,6 +1138,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
@Override
public boolean isSafeOperation(@OperationSafetyReason int reason) {
if (VERBOSE_LOG) {
Slog.v(LOG_TAG, "checking isSafeOperation("
+ DevicePolicyManager.operationSafetyReasonToString(reason)
+ ") using mSafetyChecker " + mSafetyChecker);
}
return mSafetyChecker == null ? true : mSafetyChecker.isSafeOperation(reason);
}
@@ -9172,8 +9177,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
pw.printf("mIsWatch=%b\n", mIsWatch);
pw.printf("mIsAutomotive=%b\n", mIsAutomotive);
pw.printf("mHasTelephonyFeature=%b\n", mHasTelephonyFeature);
String safetyChecker = mSafetyChecker == null ? "N/A" : mSafetyChecker.getClass().getName();
pw.printf("mSafetyChecker=%b\n", safetyChecker);
pw.printf("mSafetyChecker=%s\n", mSafetyChecker);
pw.decreaseIndent();
}

View File

@@ -78,9 +78,9 @@ final class OneTimeSafetyChecker implements DevicePolicySafetyChecker {
Slog.i(TAG, "notifying " + reasonName + " is inactive");
dpmi.notifyUnsafeOperationStateChanged(this, reason, false);
Slog.i(TAG, "returning " + reasonName
+ " and restoring DevicePolicySafetyChecker to " + mRealSafetyChecker);
mService.setDevicePolicySafetyCheckerUnchecked(mRealSafetyChecker);
Slog.i(TAG, "returning " + reasonName);
disableSelf();
return reason;
}
@@ -89,6 +89,7 @@ final class OneTimeSafetyChecker implements DevicePolicySafetyChecker {
boolean safe = mReason != reason;
Slog.i(TAG, "isSafeOperation(" + operationSafetyReasonToString(reason) + "): " + safe);
disableSelf();
return safe;
}
@@ -96,4 +97,16 @@ final class OneTimeSafetyChecker implements DevicePolicySafetyChecker {
public void onFactoryReset(IResultReceiver callback) {
throw new UnsupportedOperationException();
}
private void disableSelf() {
Slog.i(TAG, "restoring DevicePolicySafetyChecker to " + mRealSafetyChecker);
mService.setDevicePolicySafetyCheckerUnchecked(mRealSafetyChecker);
}
@Override
public String toString() {
return "OneTimeSafetyChecker[id=" + System.identityHashCode(this)
+ ", reason=" + operationSafetyReasonToString(mReason)
+ ", operation=" + operationToString(mOperation) + ']';
}
}