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) {
|
private void sendProfileOwnerCommand(String action, Bundle extras, @UserIdInt int userId) {
|
||||||
sendActiveAdminCommand(action, extras, userId,
|
sendActiveAdminCommand(action, extras, userId, mOwners.getProfileOwnerComponent(userId));
|
||||||
mOwners.getProfileOwnerComponent(userId));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendActiveAdminCommand(String action, Bundle extras,
|
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.putInt(DeviceAdminReceiver.EXTRA_OPERATION_SAFETY_REASON, reason);
|
||||||
extras.putBoolean(DeviceAdminReceiver.EXTRA_OPERATION_SAFETY_STATE, isSafe);
|
extras.putBoolean(DeviceAdminReceiver.EXTRA_OPERATION_SAFETY_STATE, isSafe);
|
||||||
|
|
||||||
sendDeviceOwnerCommand(DeviceAdminReceiver.ACTION_OPERATION_SAFETY_STATE_CHANGED,
|
if (mOwners.hasDeviceOwner()) {
|
||||||
extras);
|
sendDeviceOwnerCommand(DeviceAdminReceiver.ACTION_OPERATION_SAFETY_STATE_CHANGED,
|
||||||
|
extras);
|
||||||
|
}
|
||||||
for (int profileOwnerId : mOwners.getProfileOwnerKeys()) {
|
for (int profileOwnerId : mOwners.getProfileOwnerKeys()) {
|
||||||
sendProfileOwnerCommand(DeviceAdminReceiver.ACTION_OPERATION_SAFETY_STATE_CHANGED,
|
sendProfileOwnerCommand(DeviceAdminReceiver.ACTION_OPERATION_SAFETY_STATE_CHANGED,
|
||||||
extras, profileOwnerId);
|
extras, profileOwnerId);
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ import android.app.admin.DevicePolicyManager.DevicePolicyOperation;
|
|||||||
import android.app.admin.DevicePolicyManager.OperationSafetyReason;
|
import android.app.admin.DevicePolicyManager.OperationSafetyReason;
|
||||||
import android.app.admin.DevicePolicyManagerInternal;
|
import android.app.admin.DevicePolicyManagerInternal;
|
||||||
import android.app.admin.DevicePolicySafetyChecker;
|
import android.app.admin.DevicePolicySafetyChecker;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
|
|
||||||
import com.android.internal.os.IResultReceiver;
|
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 String TAG = OneTimeSafetyChecker.class.getSimpleName();
|
||||||
|
|
||||||
|
private static final long SELF_DESTRUCT_TIMEOUT_MS = 10_000;
|
||||||
|
|
||||||
private final DevicePolicyManagerService mService;
|
private final DevicePolicyManagerService mService;
|
||||||
private final DevicePolicySafetyChecker mRealSafetyChecker;
|
private final DevicePolicySafetyChecker mRealSafetyChecker;
|
||||||
private final @DevicePolicyOperation int mOperation;
|
private final @DevicePolicyOperation int mOperation;
|
||||||
private final @OperationSafetyReason int mReason;
|
private final @OperationSafetyReason int mReason;
|
||||||
|
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
||||||
|
|
||||||
|
private boolean mDone;
|
||||||
|
|
||||||
OneTimeSafetyChecker(DevicePolicyManagerService service,
|
OneTimeSafetyChecker(DevicePolicyManagerService service,
|
||||||
@DevicePolicyOperation int operation, @OperationSafetyReason int reason) {
|
@DevicePolicyOperation int operation, @OperationSafetyReason int reason) {
|
||||||
@@ -53,7 +60,11 @@ final class OneTimeSafetyChecker implements DevicePolicySafetyChecker {
|
|||||||
mOperation = operation;
|
mOperation = operation;
|
||||||
mReason = reason;
|
mReason = reason;
|
||||||
mRealSafetyChecker = service.getDevicePolicySafetyChecker();
|
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
|
@Override
|
||||||
@@ -99,8 +110,21 @@ final class OneTimeSafetyChecker implements DevicePolicySafetyChecker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void disableSelf() {
|
private void disableSelf() {
|
||||||
|
if (mDone) {
|
||||||
|
Slog.w(TAG, "disableSelf(): already disabled");
|
||||||
|
return;
|
||||||
|
}
|
||||||
Slog.i(TAG, "restoring DevicePolicySafetyChecker to " + mRealSafetyChecker);
|
Slog.i(TAG, "restoring DevicePolicySafetyChecker to " + mRealSafetyChecker);
|
||||||
mService.setDevicePolicySafetyCheckerUnchecked(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
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user