diff options
author | Xin Li <delphij@google.com> | 2021-02-21 09:39:53 -0800 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2021-02-21 09:39:53 -0800 |
commit | be473bf819b8570945b0d238beaaa2fa63e60c02 (patch) | |
tree | addad6a0ab92967c35ca90cf4056940be91be73a /services/devicepolicy | |
parent | 6cc86364fb326b3fead32008e076147e57755e98 (diff) | |
parent | 3078660c4eb37fb00ad1e69cc695bd20f1ee7440 (diff) |
Merge ab/7061308 into stage.
Bug: 180401296
Merged-In: I4bf82035631ccff6d5a6144d6d9b1d203b076851
Change-Id: I1b5f3a672a55eaabba0f5389bab110b395553559
Diffstat (limited to 'services/devicepolicy')
-rw-r--r-- | services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java | 61 |
1 files changed, 50 insertions, 11 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 9caef13acc8e..eaaa8ee92d62 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -125,6 +125,7 @@ import android.app.ActivityThread; import android.app.AlarmManager; import android.app.AppGlobals; import android.app.AppOpsManager; +import android.app.AppOpsManager.Mode; import android.app.BroadcastOptions; import android.app.IActivityManager; import android.app.IActivityTaskManager; @@ -643,6 +644,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { final boolean mIsWatch; /** + * Whether or not this device is an automotive. + */ + private final boolean mIsAutomotive; + + /** * Whether this device has the telephony feature. */ final boolean mHasTelephonyFeature; @@ -2573,6 +2579,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { .hasSystemFeature(PackageManager.FEATURE_WATCH); mHasTelephonyFeature = mInjector.getPackageManager() .hasSystemFeature(PackageManager.FEATURE_TELEPHONY); + mIsAutomotive = mInjector.getPackageManager() + .hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE); mBackgroundHandler = BackgroundThread.getHandler(); // Needed when mHasFeature == false, because it controls the certificate warning text. @@ -6086,9 +6094,16 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { // Require authentication for the device or profile if (userToLock == UserHandle.USER_ALL) { - // Power off the display - mInjector.powerManagerGoToSleep(SystemClock.uptimeMillis(), - PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN, 0); + if (mIsAutomotive) { + if (VERBOSE_LOG) { + Slog.v(LOG_TAG, "lockNow(): not powering off display on automotive" + + " build"); + } + } else { + // Power off the display + mInjector.powerManagerGoToSleep(SystemClock.uptimeMillis(), + PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN, 0); + } mInjector.getIWindowManager().lockNow(null); } else { mInjector.getTrustManager().setDeviceLockedForUser(userToLock, true); @@ -12825,6 +12840,28 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { public ComponentName getProfileOwnerAsUser(int userHandle) { return DevicePolicyManagerService.this.getProfileOwnerAsUser(userHandle); } + + @Override + public boolean supportsResetOp(int op) { + return op == AppOpsManager.OP_INTERACT_ACROSS_PROFILES + && LocalServices.getService(CrossProfileAppsInternal.class) != null; + } + + @Override + public void resetOp(int op, String packageName, @UserIdInt int userId) { + if (op != AppOpsManager.OP_INTERACT_ACROSS_PROFILES) { + throw new IllegalArgumentException("Unsupported op for DPM reset: " + op); + } + LocalServices.getService(CrossProfileAppsInternal.class) + .setInteractAcrossProfilesAppOp( + packageName, findInteractAcrossProfilesResetMode(packageName), userId); + } + + private @Mode int findInteractAcrossProfilesResetMode(String packageName) { + return getDefaultCrossProfilePackages().contains(packageName) + ? AppOpsManager.MODE_ALLOWED + : AppOpsManager.opToDefaultMode(AppOpsManager.OP_INTERACT_ACROSS_PROFILES); + } } private Intent createShowAdminSupportIntent(ComponentName admin, int userId) { @@ -14447,15 +14484,17 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } enforceProfileOrDeviceOwner(admin); - synchronized (getLockObject()) { - try { - IBackupManager ibm = mInjector.getIBackupManager(); - return ibm != null && ibm.isBackupServiceActive( - mInjector.userHandleGetCallingUserId()); - } catch (RemoteException e) { - throw new IllegalStateException("Failed requesting backup service state.", e); + final int userId = mInjector.userHandleGetCallingUserId(); + return mInjector.binderWithCleanCallingIdentity(() -> { + synchronized (getLockObject()) { + try { + IBackupManager ibm = mInjector.getIBackupManager(); + return ibm != null && ibm.isBackupServiceActive(userId); + } catch (RemoteException e) { + throw new IllegalStateException("Failed requesting backup service state.", e); + } } - } + }); } @Override |