summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Elliot Sisteron <elliotsisteron@google.com> 2022-11-24 19:13:18 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-11-24 19:13:18 +0000
commit2b004288df161d58f15165f12ff54a6d989f49cf (patch)
treec6eada27284568eeb46fc9df7cf8ed4cd21cd307
parente4d814650a6752c1f2106456dbb2050f85bb39ff (diff)
parent2b8a1b5b66473c7403df432f0cf4fcf3fc7c5ef4 (diff)
Merge "Handle static safety sources package name."
-rw-r--r--service/java/com/android/safetycenter/PendingIntentFactory.java20
-rw-r--r--service/java/com/android/safetycenter/SafetyCenterDataFactory.java17
-rw-r--r--tests/cts/safetycenter/src/android/safetycenter/cts/testing/SafetySourceCtsData.kt23
3 files changed, 45 insertions, 15 deletions
diff --git a/service/java/com/android/safetycenter/PendingIntentFactory.java b/service/java/com/android/safetycenter/PendingIntentFactory.java
index 11afb12cf..6ae9df608 100644
--- a/service/java/com/android/safetycenter/PendingIntentFactory.java
+++ b/service/java/com/android/safetycenter/PendingIntentFactory.java
@@ -26,6 +26,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.ResolveInfoFlags;
import android.content.res.Resources;
import android.os.Binder;
import android.os.UserHandle;
@@ -34,7 +35,6 @@ import android.util.Log;
import androidx.annotation.RequiresApi;
-import com.android.permission.util.PackageUtils;
import com.android.safetycenter.resources.SafetyCenterResourcesContext;
import java.util.Arrays;
@@ -92,8 +92,7 @@ final class PendingIntentFactory {
if (packageContext == null) {
return null;
}
- Intent intent =
- createIntent(sourceId, intentAction, packageName, userId, isQuietModeEnabled);
+ Intent intent = createIntent(packageContext, sourceId, intentAction, isQuietModeEnabled);
if (intent == null) {
return null;
}
@@ -208,10 +207,9 @@ final class PendingIntentFactory {
@Nullable
private Intent createIntent(
+ @NonNull Context packageContext,
@NonNull String sourceId,
@NonNull String intentAction,
- @NonNull String packageName,
- @UserIdInt int userId,
boolean isQuietModeEnabled) {
Intent intent = new Intent(intentAction);
@@ -231,11 +229,11 @@ final class PendingIntentFactory {
if (isQuietModeEnabled) {
return intent;
}
- if (intentResolves(intent, userId)) {
+ if (intentResolves(packageContext, intent)) {
return intent;
}
- intent.setPackage(packageName);
- if (intentResolves(intent, userId)) {
+ intent.setPackage(packageContext.getPackageName());
+ if (intentResolves(packageContext, intent)) {
return intent;
}
return null;
@@ -249,8 +247,10 @@ final class PendingIntentFactory {
.contains(sourceId);
}
- private boolean intentResolves(@NonNull Intent intent, @UserIdInt int userId) {
- return !PackageUtils.queryUnfilteredIntentActivitiesAsUser(intent, 0, userId, mContext)
+ private static boolean intentResolves(@NonNull Context packageContext, @NonNull Intent intent) {
+ return !packageContext
+ .getPackageManager()
+ .queryIntentActivities(intent, ResolveInfoFlags.of(0))
.isEmpty();
}
diff --git a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java
index 0bfc463f7..734273a3d 100644
--- a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java
+++ b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java
@@ -687,7 +687,7 @@ final class SafetyCenterDataFactory {
case SafetySource.SAFETY_SOURCE_TYPE_STATIC:
return toDefaultSafetyCenterEntry(
safetySource,
- defaultPackageName,
+ getStaticSourcePackageNameOrDefault(safetySource, defaultPackageName),
SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNSPECIFIED,
SafetyCenterEntry.SEVERITY_UNSPECIFIED_ICON_TYPE_NO_ICON,
userId,
@@ -868,7 +868,7 @@ final class SafetyCenterDataFactory {
case SafetySource.SAFETY_SOURCE_TYPE_STATIC:
return toDefaultSafetyCenterStaticEntry(
safetySource,
- defaultPackageName,
+ getStaticSourcePackageNameOrDefault(safetySource, defaultPackageName),
userId,
isUserManaged,
isManagedUserRunning);
@@ -934,6 +934,19 @@ final class SafetyCenterDataFactory {
return safetySourceData.getStatus();
}
+ @NonNull
+ private static String getStaticSourcePackageNameOrDefault(
+ @NonNull SafetySource safetySource, @NonNull String defaultPackageName) {
+ if (!SdkLevel.isAtLeastU()) {
+ return defaultPackageName;
+ }
+ String sourcePackageName = safetySource.getOptionalPackageName();
+ if (sourcePackageName == null) {
+ return defaultPackageName;
+ }
+ return sourcePackageName;
+ }
+
@SafetyCenterStatus.OverallSeverityLevel
private static int toSafetyCenterStatusOverallSeverityLevel(
@SafetySourceData.SeverityLevel int safetySourceSeverityLevel) {
diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SafetySourceCtsData.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SafetySourceCtsData.kt
index 7d4a70166..99a123b53 100644
--- a/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SafetySourceCtsData.kt
+++ b/tests/cts/safetycenter/src/android/safetycenter/cts/testing/SafetySourceCtsData.kt
@@ -20,6 +20,7 @@ import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.content.Intent.FLAG_RECEIVER_FOREGROUND
+import android.content.pm.PackageManager.ResolveInfoFlags
import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE
import android.safetycenter.SafetyEvent
import android.safetycenter.SafetySourceData
@@ -40,6 +41,7 @@ import android.safetycenter.cts.testing.SafetySourceIntentHandler.Companion.EXTR
import android.safetycenter.cts.testing.SafetySourceIntentHandler.Companion.EXTRA_SOURCE_ISSUE_ACTION_ID
import android.safetycenter.cts.testing.SafetySourceIntentHandler.Companion.EXTRA_SOURCE_ISSUE_ID
import androidx.annotation.RequiresApi
+import java.lang.IllegalStateException
import kotlin.math.max
/**
@@ -590,8 +592,23 @@ class SafetySourceCtsData(private val context: Context) {
}
/** Returns a [PendingIntent] that redirects to [intent]. */
- fun createRedirectPendingIntent(context: Context, intent: Intent): PendingIntent =
- PendingIntent.getActivity(
- context, 0 /* requestCode */, intent, PendingIntent.FLAG_IMMUTABLE)
+ fun createRedirectPendingIntent(context: Context, intent: Intent): PendingIntent {
+ val explicitIntent = Intent(intent).setPackage(context.packageName)
+ val redirectIntent =
+ if (intentResolves(context, intent)) {
+ intent
+ } else if (intentResolves(context, explicitIntent)) {
+ explicitIntent
+ } else {
+ throw IllegalStateException("Intent doesn't resolve")
+ }
+ return PendingIntent.getActivity(
+ context, 0 /* requestCode */, redirectIntent, PendingIntent.FLAG_IMMUTABLE)
+ }
+
+ private fun intentResolves(context: Context, intent: Intent): Boolean =
+ context.packageManager
+ .queryIntentActivities(intent, ResolveInfoFlags.of(0))
+ .isNotEmpty()
}
}