summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/compat/PlatformCompat.java19
-rw-r--r--services/core/java/com/android/server/pm/SaferIntentUtils.java6
2 files changed, 23 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/compat/PlatformCompat.java b/services/core/java/com/android/server/compat/PlatformCompat.java
index 22b85d45d15e..a9fe8cb01b3a 100644
--- a/services/core/java/com/android/server/compat/PlatformCompat.java
+++ b/services/core/java/com/android/server/compat/PlatformCompat.java
@@ -248,6 +248,25 @@ public class PlatformCompat extends IPlatformCompat.Stub {
return enabled;
}
+ /**
+ * Internal version of {@link #isChangeEnabledByUid(long, int)}.
+ *
+ * <p>Does not perform costly permission check and logging.
+ */
+ public boolean isChangeEnabledByUidInternalNoLogging(long changeId, int uid) {
+ String[] packages = mContext.getPackageManager().getPackagesForUid(uid);
+ if (packages == null || packages.length == 0) {
+ return mCompatConfig.defaultChangeIdValue(changeId);
+ }
+ boolean enabled = true;
+ final int userId = UserHandle.getUserId(uid);
+ for (String packageName : packages) {
+ final var appInfo = getApplicationInfo(packageName, userId);
+ enabled &= isChangeEnabledInternalNoLogging(changeId, appInfo);
+ }
+ return enabled;
+ }
+
@Override
@EnforcePermission(OVERRIDE_COMPAT_CHANGE_CONFIG)
public void setOverrides(CompatibilityChangeConfig overrides, String packageName) {
diff --git a/services/core/java/com/android/server/pm/SaferIntentUtils.java b/services/core/java/com/android/server/pm/SaferIntentUtils.java
index 8175321ea293..9a7ba0f082ea 100644
--- a/services/core/java/com/android/server/pm/SaferIntentUtils.java
+++ b/services/core/java/com/android/server/pm/SaferIntentUtils.java
@@ -104,6 +104,7 @@ public class SaferIntentUtils {
@Disabled
private static final long ENFORCE_INTENTS_TO_MATCH_INTENT_FILTERS = 161252188;
+ @Nullable
private static ParsedMainComponent infoToComponent(
ComponentInfo info, ComponentResolverApi resolver, boolean isReceiver) {
if (info instanceof ActivityInfo) {
@@ -186,7 +187,7 @@ public class SaferIntentUtils {
}
boolean isChangeEnabled(long changeId) {
- return platformCompat == null || platformCompat.isChangeEnabledByUidInternal(
+ return platformCompat == null || platformCompat.isChangeEnabledByUidInternalNoLogging(
changeId, callingUid);
}
@@ -233,7 +234,8 @@ public class SaferIntentUtils {
}
final ParsedMainComponent comp = infoToComponent(
resolveInfo.getComponentInfo(), resolver, args.isReceiver);
- if (!comp.getIntents().isEmpty() && args.intent.getAction() == null) {
+ if (comp != null && !comp.getIntents().isEmpty()
+ && args.intent.getAction() == null) {
match = false;
}
} else if (c instanceof IntentFilter) {