diff options
| -rw-r--r-- | services/core/java/com/android/server/policy/PermissionPolicyService.java | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java index e8546a768429..36c54572829a 100644 --- a/services/core/java/com/android/server/policy/PermissionPolicyService.java +++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java @@ -57,6 +57,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManagerInternal; import android.content.pm.PackageManagerInternal.PackageListObserver; import android.content.pm.PermissionInfo; +import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.os.Process; @@ -76,10 +77,12 @@ import android.util.Pair; import android.util.Slog; import android.util.SparseBooleanArray; +import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IAppOpsCallback; import com.android.internal.app.IAppOpsService; import com.android.internal.infra.AndroidFuture; +import com.android.internal.policy.AttributeCache; import com.android.internal.util.IntPair; import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.FgThread; @@ -1060,7 +1063,8 @@ public final class PermissionPolicyService extends SystemService { ActivityInterceptorInfo info) { super.onActivityLaunched(taskInfo, activityInfo, info); if (!shouldShowNotificationDialogOrClearFlags(taskInfo, - activityInfo.packageName, info.intent, info.checkedOptions, true)) { + activityInfo.packageName, info.intent, info.checkedOptions, true) + || isNoDisplayActivity(activityInfo)) { return; } UserHandle user = UserHandle.of(taskInfo.userId); @@ -1132,6 +1136,22 @@ public final class PermissionPolicyService extends SystemService { taskInfo, currPkg, intent, null, false); } + private boolean isNoDisplayActivity(@NonNull ActivityInfo aInfo) { + final int themeResource = aInfo.getThemeResource(); + if (themeResource == Resources.ID_NULL) { + return false; + } + + boolean noDisplay = false; + final AttributeCache.Entry ent = AttributeCache.instance() + .get(aInfo.packageName, themeResource, R.styleable.Window, 0); + if (ent != null) { + noDisplay = ent.array.getBoolean(R.styleable.Window_windowNoDisplay, false); + } + + return noDisplay; + } + /** * Determine if a particular task is in the proper state to show a system-triggered * permission prompt. A prompt can be shown if the task is just starting, or the task is |