summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Yurii Zubrytskyi <zyy@google.com> 2024-10-30 16:06:43 -0700
committer Yurii Zubrytskyi <zyy@google.com> 2024-10-30 16:11:52 -0700
commit78f5213f2ecece9605ffbc8432abcd256530e848 (patch)
treedf08bb79834e882aa398698c500ee8af675c3da4
parent8a61fdd070789bd652ac0c01345af096e31dbff4 (diff)
[res] Allow changing RRO state that target android
'android' resources don't have overlayable definition, so there's no way to enable or disable them for the apps that aren't root or system. This isn't intentional, and the CL enables it for the apps with the proper permission. Bug: 364035303 Flag: android.content.res.rro_control_for_android_no_overlayable Test: atest CtsHandleConfigChangeHostTests Change-Id: I6894f1d073f9e50eaaa70675ab9372dca1de5fdf
-rw-r--r--services/core/java/com/android/server/om/OverlayActorEnforcer.java9
1 files changed, 7 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/om/OverlayActorEnforcer.java b/services/core/java/com/android/server/om/OverlayActorEnforcer.java
index 015b7fd74211..38f39393a025 100644
--- a/services/core/java/com/android/server/om/OverlayActorEnforcer.java
+++ b/services/core/java/com/android/server/om/OverlayActorEnforcer.java
@@ -19,6 +19,7 @@ package com.android.server.om;
import android.annotation.NonNull;
import android.content.om.OverlayInfo;
import android.content.om.OverlayableInfo;
+import android.content.res.Flags;
import android.net.Uri;
import android.os.Process;
import android.text.TextUtils;
@@ -162,11 +163,15 @@ public class OverlayActorEnforcer {
return ActorState.UNABLE_TO_GET_TARGET_OVERLAYABLE;
}
- if (targetOverlayable == null) {
+ // Framework doesn't have <overlayable> declaration by design, and we still want to be able
+ // to enable its overlays from the packages with the permission.
+ if (targetOverlayable == null
+ && !(Flags.rroControlForAndroidNoOverlayable() && targetPackageName.equals(
+ "android"))) {
return ActorState.MISSING_OVERLAYABLE;
}
- String actor = targetOverlayable.actor;
+ final String actor = targetOverlayable == null ? null : targetOverlayable.actor;
if (TextUtils.isEmpty(actor)) {
// If there's no actor defined, fallback to the legacy permission check
try {