summaryrefslogtreecommitdiff
path: root/services/devicepolicy
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2021-02-21 09:39:53 -0800
committerXin Li <delphij@google.com>2021-02-21 09:39:53 -0800
commitbe473bf819b8570945b0d238beaaa2fa63e60c02 (patch)
treeaddad6a0ab92967c35ca90cf4056940be91be73a /services/devicepolicy
parent6cc86364fb326b3fead32008e076147e57755e98 (diff)
parent3078660c4eb37fb00ad1e69cc695bd20f1ee7440 (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.java61
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