summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Android Build Coastguard Worker <android-build-coastguard-worker@google.com> 2022-06-18 21:19:53 +0000
committer Android Build Coastguard Worker <android-build-coastguard-worker@google.com> 2022-06-18 21:19:53 +0000
commit1ff65e46cc1a2d34576e1fb42e01c151722d80e7 (patch)
tree3369d8e33e34ee62b583166e65aac85be9533983
parenta4cc8726cc4bad52247557557f921532ae62060b (diff)
parent6c0ca16d0b9ddb0dca2ae6016d9b0b438cc834b8 (diff)
Snap for 8742898 from 6c0ca16d0b9ddb0dca2ae6016d9b0b438cc834b8 to tm-release
Change-Id: I3ef922fa951492bc3d1aff936072732c2cc83ccb
-rw-r--r--services/core/java/com/android/server/devicestate/DeviceState.java11
-rw-r--r--services/core/java/com/android/server/pm/ComputerEngine.java17
-rw-r--r--services/core/java/com/android/server/policy/DeviceStateProviderImpl.java4
3 files changed, 29 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/devicestate/DeviceState.java b/services/core/java/com/android/server/devicestate/DeviceState.java
index 78d55b92eb80..f8d4b8fffd03 100644
--- a/services/core/java/com/android/server/devicestate/DeviceState.java
+++ b/services/core/java/com/android/server/devicestate/DeviceState.java
@@ -18,6 +18,7 @@ package com.android.server.devicestate;
import static android.hardware.devicestate.DeviceStateManager.MAXIMUM_DEVICE_STATE;
import static android.hardware.devicestate.DeviceStateManager.MINIMUM_DEVICE_STATE;
+import static android.view.Display.DEFAULT_DISPLAY;
import android.annotation.IntDef;
import android.annotation.IntRange;
@@ -48,9 +49,16 @@ public final class DeviceState {
*/
public static final int FLAG_CANCEL_OVERRIDE_REQUESTS = 1 << 0;
+ /**
+ * Flag that indicates this device state is inaccessible for applications to be placed in. This
+ * could be a device-state where the {@link DEFAULT_DISPLAY} is not enabled.
+ */
+ public static final int FLAG_APP_INACCESSIBLE = 1 << 1;
+
/** @hide */
@IntDef(prefix = {"FLAG_"}, flag = true, value = {
FLAG_CANCEL_OVERRIDE_REQUESTS,
+ FLAG_APP_INACCESSIBLE
})
@Retention(RetentionPolicy.SOURCE)
public @interface DeviceStateFlags {}
@@ -97,7 +105,8 @@ public final class DeviceState {
@Override
public String toString() {
- return "DeviceState{" + "identifier=" + mIdentifier + ", name='" + mName + '\'' + '}';
+ return "DeviceState{" + "identifier=" + mIdentifier + ", name='" + mName + '\''
+ + ", app_accessible=" + !hasFlag(FLAG_APP_INACCESSIBLE) + "}";
}
@Override
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 30de9ba638cc..259ca655d2b9 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -2686,7 +2686,7 @@ public class ComputerEngine implements Computer {
if (Process.isSdkSandboxUid(callingUid)) {
int clientAppUid = Process.getAppUidForSdkSandboxUid(callingUid);
// SDK sandbox should be able to see it's client app
- if (clientAppUid == UserHandle.getUid(userId, ps.getAppId())) {
+ if (ps != null && clientAppUid == UserHandle.getUid(userId, ps.getAppId())) {
return false;
}
}
@@ -2698,7 +2698,7 @@ public class ComputerEngine implements Computer {
final boolean callerIsInstantApp = instantAppPkgName != null;
if (ps == null) {
// pretend the application exists, but, needs to be filtered
- return callerIsInstantApp;
+ return callerIsInstantApp || Process.isSdkSandboxUid(callingUid);
}
// if the target and caller are the same application, don't filter
if (isCallerSameApp(ps.getPackageName(), callingUid)) {
@@ -3089,6 +3089,19 @@ public class ComputerEngine implements Computer {
}
public boolean filterAppAccess(int uid, int callingUid) {
+ if (Process.isSdkSandboxUid(uid)) {
+ // Sdk sandbox instance should be able to see itself.
+ if (callingUid == uid) {
+ return false;
+ }
+ final int clientAppUid = Process.getAppUidForSdkSandboxUid(uid);
+ // Client app of this sdk sandbox process should be able to see it.
+ if (clientAppUid == uid) {
+ return false;
+ }
+ // Nobody else should be able to see the sdk sandbox process.
+ return true;
+ }
final int userId = UserHandle.getUserId(uid);
final int appId = UserHandle.getAppId(uid);
final Object setting = mSettings.getSettingBase(appId);
diff --git a/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java b/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java
index 17a5fd07f920..9b7d19a725d1 100644
--- a/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java
+++ b/services/core/java/com/android/server/policy/DeviceStateProviderImpl.java
@@ -95,6 +95,7 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider,
private static final String DATA_CONFIG_FILE_PATH = "system/devicestate/";
private static final String CONFIG_FILE_NAME = "device_state_configuration.xml";
private static final String FLAG_CANCEL_OVERRIDE_REQUESTS = "FLAG_CANCEL_OVERRIDE_REQUESTS";
+ private static final String FLAG_APP_INACCESSIBLE = "FLAG_APP_INACCESSIBLE";
/** Interface that allows reading the device state configuration. */
interface ReadableConfig {
@@ -145,6 +146,9 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider,
case FLAG_CANCEL_OVERRIDE_REQUESTS:
flags |= DeviceState.FLAG_CANCEL_OVERRIDE_REQUESTS;
break;
+ case FLAG_APP_INACCESSIBLE:
+ flags |= DeviceState.FLAG_APP_INACCESSIBLE;
+ break;
default:
Slog.w(TAG, "Parsed unknown flag with name: "
+ configFlagString);