summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nate Myren <ntmyren@google.com> 2022-04-21 15:33:47 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-04-21 15:33:47 +0000
commit2ca8b4def9560addca170171e033b45cb2203d3c (patch)
tree50c2a944f1170efaa410066148334aae6580f28a
parent6cfc6da01bd167973c06d6c2967ab2b58a8cab68 (diff)
parent35a88760b7e72067ee273a84da7ce0e9aad1892c (diff)
Merge "Do not show the notification prompt on noDisplay activities" into tm-dev
-rw-r--r--services/core/java/com/android/server/policy/PermissionPolicyService.java22
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 32e7a6a81096..89ac9e773906 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.Handler;
@@ -78,10 +79,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;
@@ -1064,7 +1067,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);
@@ -1139,6 +1143,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