Merge "Fixed notifyUnsafeOperationStateChanged." into sc-dev
This commit is contained in:
@@ -7582,8 +7582,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|
||||
}
|
||||
|
||||
private void sendProfileOwnerCommand(String action, Bundle extras, @UserIdInt int userId) {
|
||||
sendActiveAdminCommand(action, extras, userId,
|
||||
mOwners.getProfileOwnerComponent(userId));
|
||||
sendActiveAdminCommand(action, extras, userId, mOwners.getProfileOwnerComponent(userId));
|
||||
}
|
||||
|
||||
private void sendActiveAdminCommand(String action, Bundle extras,
|
||||
@@ -12373,8 +12372,10 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|
||||
extras.putInt(DeviceAdminReceiver.EXTRA_OPERATION_SAFETY_REASON, reason);
|
||||
extras.putBoolean(DeviceAdminReceiver.EXTRA_OPERATION_SAFETY_STATE, isSafe);
|
||||
|
||||
sendDeviceOwnerCommand(DeviceAdminReceiver.ACTION_OPERATION_SAFETY_STATE_CHANGED,
|
||||
extras);
|
||||
if (mOwners.hasDeviceOwner()) {
|
||||
sendDeviceOwnerCommand(DeviceAdminReceiver.ACTION_OPERATION_SAFETY_STATE_CHANGED,
|
||||
extras);
|
||||
}
|
||||
for (int profileOwnerId : mOwners.getProfileOwnerKeys()) {
|
||||
sendProfileOwnerCommand(DeviceAdminReceiver.ACTION_OPERATION_SAFETY_STATE_CHANGED,
|
||||
extras, profileOwnerId);
|
||||
|
||||
@@ -23,6 +23,8 @@ import android.app.admin.DevicePolicyManager.DevicePolicyOperation;
|
||||
import android.app.admin.DevicePolicyManager.OperationSafetyReason;
|
||||
import android.app.admin.DevicePolicyManagerInternal;
|
||||
import android.app.admin.DevicePolicySafetyChecker;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Slog;
|
||||
|
||||
import com.android.internal.os.IResultReceiver;
|
||||
@@ -42,10 +44,15 @@ final class OneTimeSafetyChecker implements DevicePolicySafetyChecker {
|
||||
|
||||
private static final String TAG = OneTimeSafetyChecker.class.getSimpleName();
|
||||
|
||||
private static final long SELF_DESTRUCT_TIMEOUT_MS = 10_000;
|
||||
|
||||
private final DevicePolicyManagerService mService;
|
||||
private final DevicePolicySafetyChecker mRealSafetyChecker;
|
||||
private final @DevicePolicyOperation int mOperation;
|
||||
private final @OperationSafetyReason int mReason;
|
||||
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
||||
|
||||
private boolean mDone;
|
||||
|
||||
OneTimeSafetyChecker(DevicePolicyManagerService service,
|
||||
@DevicePolicyOperation int operation, @OperationSafetyReason int reason) {
|
||||
@@ -53,7 +60,11 @@ final class OneTimeSafetyChecker implements DevicePolicySafetyChecker {
|
||||
mOperation = operation;
|
||||
mReason = reason;
|
||||
mRealSafetyChecker = service.getDevicePolicySafetyChecker();
|
||||
Slog.i(TAG, "Saving real DevicePolicySafetyChecker as " + mRealSafetyChecker);
|
||||
Slog.i(TAG, "OneTimeSafetyChecker constructor: operation= " + operationToString(operation)
|
||||
+ ", reason=" + operationSafetyReasonToString(reason)
|
||||
+ ", realChecker=" + mRealSafetyChecker
|
||||
+ ", maxDuration=" + SELF_DESTRUCT_TIMEOUT_MS + "ms");
|
||||
mHandler.postDelayed(() -> selfDestruct(), SELF_DESTRUCT_TIMEOUT_MS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,8 +110,21 @@ final class OneTimeSafetyChecker implements DevicePolicySafetyChecker {
|
||||
}
|
||||
|
||||
private void disableSelf() {
|
||||
if (mDone) {
|
||||
Slog.w(TAG, "disableSelf(): already disabled");
|
||||
return;
|
||||
}
|
||||
Slog.i(TAG, "restoring DevicePolicySafetyChecker to " + mRealSafetyChecker);
|
||||
mService.setDevicePolicySafetyCheckerUnchecked(mRealSafetyChecker);
|
||||
mDone = true;
|
||||
}
|
||||
|
||||
private void selfDestruct() {
|
||||
if (mDone) return;
|
||||
|
||||
// Usually happens when a CTS failed before calling the DPM method that would clear it
|
||||
Slog.e(TAG, "Self destructing " + this + ", as it was not automatically disabled");
|
||||
disableSelf();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user