summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt4
-rw-r--r--api/system-current.txt4
-rw-r--r--api/test-current.txt4
-rw-r--r--core/java/android/content/Intent.java8
-rw-r--r--core/java/android/content/pm/PackageManager.java30
-rw-r--r--core/java/android/content/pm/RegisteredServicesCache.java2
-rw-r--r--services/core/java/com/android/server/MountService.java4
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java13
-rw-r--r--services/core/java/com/android/server/net/NetworkPolicyManagerService.java3
-rw-r--r--services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java2
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java88
-rw-r--r--services/core/java/com/android/server/pm/Settings.java12
-rw-r--r--services/core/java/com/android/server/policy/ShortcutManager.java6
-rw-r--r--services/java/com/android/server/SystemServer.java1
-rw-r--r--telecomm/java/android/telecom/DefaultDialerManager.java7
15 files changed, 124 insertions, 64 deletions
diff --git a/api/current.txt b/api/current.txt
index 19c1f8efbd98..878e7ce8c7b0 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -9567,7 +9567,6 @@ package android.content.pm {
field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
field public static final int GET_DISABLED_COMPONENTS = 512; // 0x200
field public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 32768; // 0x8000
- field public static final int GET_ENCRYPTION_UNAWARE_COMPONENTS = 262144; // 0x40000
field public static final int GET_GIDS = 256; // 0x100
field public static final int GET_INSTRUMENTATION = 16; // 0x10
field public static final int GET_INTENT_FILTERS = 32; // 0x20
@@ -9583,6 +9582,9 @@ package android.content.pm {
field public static final int GET_URI_PERMISSION_PATTERNS = 2048; // 0x800
field public static final int MATCH_ALL = 131072; // 0x20000
field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000
+ field public static final int MATCH_ENCRYPTION_AWARE_AND_UNAWARE = 786432; // 0xc0000
+ field public static final int MATCH_ENCRYPTION_AWARE_ONLY = 524288; // 0x80000
+ field public static final int MATCH_ENCRYPTION_UNAWARE_ONLY = 262144; // 0x40000
field public static final long MAXIMUM_VERIFICATION_TIMEOUT = 3600000L; // 0x36ee80L
field public static final int PERMISSION_DENIED = -1; // 0xffffffff
field public static final int PERMISSION_GRANTED = 0; // 0x0
diff --git a/api/system-current.txt b/api/system-current.txt
index 93d3e2470ae6..8fd6774696d8 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -9883,7 +9883,6 @@ package android.content.pm {
field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
field public static final int GET_DISABLED_COMPONENTS = 512; // 0x200
field public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 32768; // 0x8000
- field public static final int GET_ENCRYPTION_UNAWARE_COMPONENTS = 262144; // 0x40000
field public static final int GET_GIDS = 256; // 0x100
field public static final int GET_INSTRUMENTATION = 16; // 0x10
field public static final int GET_INTENT_FILTERS = 32; // 0x20
@@ -9936,6 +9935,9 @@ package android.content.pm {
field public static final int MASK_PERMISSION_FLAGS = 255; // 0xff
field public static final int MATCH_ALL = 131072; // 0x20000
field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000
+ field public static final int MATCH_ENCRYPTION_AWARE_AND_UNAWARE = 786432; // 0xc0000
+ field public static final int MATCH_ENCRYPTION_AWARE_ONLY = 524288; // 0x80000
+ field public static final int MATCH_ENCRYPTION_UNAWARE_ONLY = 262144; // 0x40000
field public static final long MAXIMUM_VERIFICATION_TIMEOUT = 3600000L; // 0x36ee80L
field public static final int PERMISSION_DENIED = -1; // 0xffffffff
field public static final int PERMISSION_GRANTED = 0; // 0x0
diff --git a/api/test-current.txt b/api/test-current.txt
index 2c9788bf4c00..104a894fc1fb 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -9567,7 +9567,6 @@ package android.content.pm {
field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
field public static final int GET_DISABLED_COMPONENTS = 512; // 0x200
field public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 32768; // 0x8000
- field public static final int GET_ENCRYPTION_UNAWARE_COMPONENTS = 262144; // 0x40000
field public static final int GET_GIDS = 256; // 0x100
field public static final int GET_INSTRUMENTATION = 16; // 0x10
field public static final int GET_INTENT_FILTERS = 32; // 0x20
@@ -9583,6 +9582,9 @@ package android.content.pm {
field public static final int GET_URI_PERMISSION_PATTERNS = 2048; // 0x800
field public static final int MATCH_ALL = 131072; // 0x20000
field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000
+ field public static final int MATCH_ENCRYPTION_AWARE_AND_UNAWARE = 786432; // 0xc0000
+ field public static final int MATCH_ENCRYPTION_AWARE_ONLY = 524288; // 0x80000
+ field public static final int MATCH_ENCRYPTION_UNAWARE_ONLY = 262144; // 0x40000
field public static final long MAXIMUM_VERIFICATION_TIMEOUT = 3600000L; // 0x36ee80L
field public static final int PERMISSION_DENIED = -1; // 0xffffffff
field public static final int PERMISSION_GRANTED = 0; // 0x0
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 9973fafefb3c..0f3ca10c8fa4 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -4168,6 +4168,14 @@ public class Intent implements Parcelable, Cloneable {
public static final int FLAG_GRANT_PREFIX_URI_PERMISSION = 0x00000080;
/**
+ * Internal flag used to indicate that a system component has done their
+ * homework and verified their encryption-aware behavior.
+ *
+ * @hide
+ */
+ public static final int FLAG_DEBUG_ENCRYPTION_TRIAGED = 0x00000100;
+
+ /**
* If set, the new activity is not kept in the history stack. As soon as
* the user navigates away from it, the activity is finished. This may also
* be set with the {@link android.R.styleable#AndroidManifestActivity_noHistory
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 3235bcff1eaf..1882f8dd7dc1 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -47,10 +47,8 @@ import android.os.Handler;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
-import android.provider.Settings;
import android.util.AndroidException;
-import android.util.Log;
import com.android.internal.util.ArrayUtils;
import java.io.File;
@@ -236,21 +234,33 @@ public abstract class PackageManager {
public static final int MATCH_ALL = 0x00020000;
/**
- * {@link PackageInfo} flag: include components which aren't encryption
+ * {@link PackageInfo} flag: include only components which are encryption
+ * unaware in the returned info, regardless of the current user state.
+ */
+ public static final int MATCH_ENCRYPTION_UNAWARE_ONLY = 0x00040000;
+
+ /**
+ * {@link PackageInfo} flag: include only components which are encryption
* aware in the returned info, regardless of the current user state.
*/
- public static final int GET_ENCRYPTION_UNAWARE_COMPONENTS = 0x00040000;
+ public static final int MATCH_ENCRYPTION_AWARE_ONLY = 0x00080000;
/**
- * {@link PackageInfo} flag: return components that are marked as
- * {@link ComponentInfo#encryptionAware}, unless
- * {@link #GET_ENCRYPTION_UNAWARE_COMPONENTS} is also specified.
- * <p>
- * This flag is for internal use only.
+ * {@link PackageInfo} flag: include both encryption aware and unaware
+ * components in the returned info, regardless of the current user state.
+ */
+ public static final int MATCH_ENCRYPTION_AWARE_AND_UNAWARE = MATCH_ENCRYPTION_AWARE_ONLY
+ | MATCH_ENCRYPTION_UNAWARE_ONLY;
+
+ /**
+ * {@link PackageInfo} flag: use the default encryption matching behavior
+ * based on user state. Internal flag used to indicate that a system
+ * component has done their homework and verified their encryption-aware
+ * behavior.
*
* @hide
*/
- public static final int MATCH_ENCRYPTION_AWARE_ONLY = 0x00080000;
+ public static final int MATCH_ENCRYPTION_DEFAULT = 0x00100000;
/**
* Flag for {@link addCrossProfileIntentFilter}: if this flag is set:
diff --git a/core/java/android/content/pm/RegisteredServicesCache.java b/core/java/android/content/pm/RegisteredServicesCache.java
index a413f36cc91f..bb28bde6bb6f 100644
--- a/core/java/android/content/pm/RegisteredServicesCache.java
+++ b/core/java/android/content/pm/RegisteredServicesCache.java
@@ -365,7 +365,7 @@ public abstract class RegisteredServicesCache<V> {
protected List<ResolveInfo> queryIntentServices(int userId) {
final PackageManager pm = mContext.getPackageManager();
return pm.queryIntentServicesAsUser(new Intent(mInterfaceName),
- PackageManager.GET_META_DATA | PackageManager.GET_ENCRYPTION_UNAWARE_COMPONENTS,
+ PackageManager.GET_META_DATA | PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE,
userId);
}
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index 487c273a69ee..ad829d04e579 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -807,8 +807,8 @@ class MountService extends IMountService.Stub
// System user does not have media provider, so skip.
if (user.isSystemOnly()) continue;
- final ProviderInfo provider =
- mPms.resolveContentProvider(MediaStore.AUTHORITY, 0, user.id);
+ final ProviderInfo provider = mPms.resolveContentProvider(MediaStore.AUTHORITY,
+ PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE, user.id);
if (provider != null) {
final IActivityManager am = ActivityManagerNative.getDefault();
try {
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index de0a23aa723f..552db7ddd3cd 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -3590,6 +3590,7 @@ public final class ActivityManagerService extends ActivityManagerNative
Intent getHomeIntent() {
Intent intent = new Intent(mTopAction, mTopData != null ? Uri.parse(mTopData) : null);
intent.setComponent(mTopComponent);
+ intent.addFlags(Intent.FLAG_DEBUG_ENCRYPTION_TRIAGED);
if (mFactoryTest != FactoryTest.FACTORY_TEST_LOW_LEVEL) {
intent.addCategory(Intent.CATEGORY_HOME);
}
@@ -9786,9 +9787,10 @@ public final class ActivityManagerService extends ActivityManagerNative
private final List<ProviderInfo> generateApplicationProvidersLocked(ProcessRecord app) {
List<ProviderInfo> providers = null;
try {
- ParceledListSlice<ProviderInfo> slice = AppGlobals.getPackageManager().
- queryContentProviders(app.processName, app.uid,
- STOCK_PM_FLAGS | PackageManager.GET_URI_PERMISSION_PATTERNS);
+ ParceledListSlice<ProviderInfo> slice = AppGlobals.getPackageManager()
+ .queryContentProviders(app.processName, app.uid,
+ STOCK_PM_FLAGS | PackageManager.GET_URI_PERMISSION_PATTERNS
+ | PackageManager.MATCH_ENCRYPTION_DEFAULT);
providers = slice != null ? slice.getList() : null;
} catch (RemoteException ex) {
}
@@ -16995,6 +16997,9 @@ public final class ActivityManagerService extends ActivityManagerNative
private List<ResolveInfo> collectReceiverComponents(Intent intent, String resolvedType,
int callingUid, int[] users) {
+ // TODO: come back and remove this assumption to triage all broadcasts
+ int pmFlags = STOCK_PM_FLAGS | PackageManager.MATCH_ENCRYPTION_DEFAULT;
+
List<ResolveInfo> receivers = null;
try {
HashSet<ComponentName> singleUserReceivers = null;
@@ -17007,7 +17012,7 @@ public final class ActivityManagerService extends ActivityManagerNative
continue;
}
List<ResolveInfo> newReceivers = AppGlobals.getPackageManager()
- .queryIntentReceivers(intent, resolvedType, STOCK_PM_FLAGS, user);
+ .queryIntentReceivers(intent, resolvedType, pmFlags, user);
if (user != UserHandle.USER_SYSTEM && newReceivers != null) {
// If this is not the system user, we need to check for
// any receivers that should be filtered out.
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 2ac0ba6fe765..1997e40e610e 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -2187,7 +2187,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
// update rules for all installed applications
final List<UserInfo> users = mUserManager.getUsers();
final List<ApplicationInfo> apps = pm.getInstalledApplications(
- PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_DISABLED_COMPONENTS);
+ PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_DISABLED_COMPONENTS
+ | PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE);
for (UserInfo user : users) {
for (ApplicationInfo app : apps) {
diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index 073b4f03da99..f604bb781452 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -57,7 +57,7 @@ final class DefaultPermissionGrantPolicy {
private static final String TAG = "DefaultPermGrantPolicy"; // must be <= 23 chars
private static final boolean DEBUG = false;
- private static final int DEFAULT_FLAGS = PackageManager.GET_ENCRYPTION_UNAWARE_COMPONENTS;
+ private static final int DEFAULT_FLAGS = PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE;
private static final String AUDIO_MIME_TYPE = "audio/mpeg";
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index dfb01eb1c99b..4b77923d48db 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -54,10 +54,10 @@ import static android.content.pm.PackageManager.INSTALL_FORWARD_LOCK;
import static android.content.pm.PackageManager.INSTALL_INTERNAL;
import static android.content.pm.PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS;
+import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
-import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK;
import static android.content.pm.PackageManager.MATCH_ALL;
import static android.content.pm.PackageManager.MOVE_FAILED_DOESNT_EXIST;
import static android.content.pm.PackageManager.MOVE_FAILED_INTERNAL_ERROR;
@@ -71,6 +71,7 @@ import static android.os.Process.SYSTEM_UID;
import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER;
import static android.system.OsConstants.O_CREAT;
import static android.system.OsConstants.O_RDWR;
+
import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_MANAGED_PROFILE;
import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_PARENT;
import static com.android.internal.content.NativeLibraryHelper.LIB64_DIR_NAME;
@@ -105,8 +106,9 @@ import android.content.ServiceConnection;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.AppsQueryHelper;
-import android.content.pm.EphemeralResolveInfo;
import android.content.pm.EphemeralApplicationInfo;
+import android.content.pm.EphemeralResolveInfo;
+import android.content.pm.EphemeralResolveInfo.EphemeralResolveIntentInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.IOnPermissionsChangeListener;
import android.content.pm.IPackageDataObserver;
@@ -145,15 +147,14 @@ import android.content.pm.UserInfo;
import android.content.pm.VerificationParams;
import android.content.pm.VerifierDeviceIdentity;
import android.content.pm.VerifierInfo;
-import android.content.pm.EphemeralResolveInfo.EphemeralResolveIntentInfo;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.hardware.display.DisplayManager;
import android.net.Uri;
-import android.os.Debug;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
+import android.os.Debug;
import android.os.Environment;
import android.os.Environment.UserEnvironment;
import android.os.FileUtils;
@@ -204,15 +205,9 @@ import android.util.SparseIntArray;
import android.util.Xml;
import android.view.Display;
-import com.android.internal.annotations.GuardedBy;
-import dalvik.system.DexFile;
-import dalvik.system.VMRuntime;
-
-import libcore.io.IoUtils;
-import libcore.util.EmptyArray;
-
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.IMediaContainerService;
import com.android.internal.app.ResolverActivity;
import com.android.internal.content.NativeLibraryHelper;
@@ -237,6 +232,12 @@ import com.android.server.pm.Settings.DatabaseVersion;
import com.android.server.pm.Settings.VersionInfo;
import com.android.server.storage.DeviceStorageMonitorInternal;
+import dalvik.system.DexFile;
+import dalvik.system.VMRuntime;
+
+import libcore.io.IoUtils;
+import libcore.util.EmptyArray;
+
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
@@ -307,6 +308,7 @@ public class PackageManagerService extends IPackageManager.Stub {
private static final boolean DEBUG_DEXOPT = false;
private static final boolean DEBUG_ABI_SELECTION = false;
private static final boolean DEBUG_EPHEMERAL = false;
+ private static final boolean DEBUG_ENCRYPTION_AWARE = false;
static final boolean CLEAR_RUNTIME_PERMISSIONS_ON_UPGRADE = false;
@@ -3183,9 +3185,35 @@ public class PackageManagerService extends IPackageManager.Stub {
* Augment the given flags depending on current user running state. This is
* purposefully done before acquiring {@link #mPackages} lock.
*/
- private int augmentFlagsForUser(int flags, int userId) {
- if (!isUserKeyUnlocked(userId)) {
- flags |= PackageManager.MATCH_ENCRYPTION_AWARE_ONLY;
+ private int augmentFlagsForUser(int flags, int userId, Object cookie) {
+ if (cookie instanceof Intent) {
+ // If intent claims to be triaged, then we're fine with default
+ // matching behavior below
+ final Intent intent = (Intent) cookie;
+ if ((intent.getFlags() & Intent.FLAG_DEBUG_ENCRYPTION_TRIAGED) != 0) {
+ flags |= PackageManager.MATCH_ENCRYPTION_DEFAULT;
+ }
+ }
+
+ if ((flags & (PackageManager.MATCH_ENCRYPTION_UNAWARE_ONLY
+ | PackageManager.MATCH_ENCRYPTION_AWARE_ONLY)) != 0) {
+ // Caller expressed an opinion about what components they want to
+ // see, so fall through and give them what they want
+ } else {
+ // Caller expressed no opinion, so match based on user state
+ if (isUserKeyUnlocked(userId)) {
+ flags |= PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE;
+ } else {
+ flags |= PackageManager.MATCH_ENCRYPTION_AWARE_ONLY;
+
+ // If we have a system caller that hasn't done their homework to
+ // decide they want this default behavior, yell at them
+ if (DEBUG_ENCRYPTION_AWARE && (Binder.getCallingUid() == Process.SYSTEM_UID)
+ && ((flags & PackageManager.MATCH_ENCRYPTION_DEFAULT) == 0)) {
+ Log.v(TAG, "Caller hasn't been triaged for FBE; they asked about " + cookie,
+ new Throwable());
+ }
+ }
}
return flags;
}
@@ -3193,7 +3221,7 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public ActivityInfo getActivityInfo(ComponentName component, int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, component);
enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "get activity info");
synchronized (mPackages) {
PackageParser.Activity a = mActivities.mActivities.get(component);
@@ -3238,7 +3266,7 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public ActivityInfo getReceiverInfo(ComponentName component, int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, component);
enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "get receiver info");
synchronized (mPackages) {
PackageParser.Activity a = mReceivers.mActivities.get(component);
@@ -3257,7 +3285,7 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public ServiceInfo getServiceInfo(ComponentName component, int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, component);
enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "get service info");
synchronized (mPackages) {
PackageParser.Service s = mServices.mServices.get(component);
@@ -3276,7 +3304,7 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public ProviderInfo getProviderInfo(ComponentName component, int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, component);
enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "get provider info");
synchronized (mPackages) {
PackageParser.Provider p = mProviders.mProviders.get(component);
@@ -4401,7 +4429,7 @@ public class PackageManagerService extends IPackageManager.Stub {
public ResolveInfo resolveIntent(Intent intent, String resolvedType,
int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, intent);
enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "resolve intent");
List<ResolveInfo> query = queryIntentActivities(intent, resolvedType, flags, userId);
final ResolveInfo bestChoice =
@@ -4659,7 +4687,7 @@ public class PackageManagerService extends IPackageManager.Stub {
List<ResolveInfo> query, int priority, boolean always,
boolean removeMatches, boolean debug, int userId) {
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, intent);
// writer
synchronized (mPackages) {
if (intent.getSelector() != null) {
@@ -4858,7 +4886,7 @@ public class PackageManagerService extends IPackageManager.Stub {
public List<ResolveInfo> queryIntentActivities(Intent intent,
String resolvedType, int flags, int userId) {
if (!sUserManager.exists(userId)) return Collections.emptyList();
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, intent);
enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, "query intent activities");
ComponentName comp = intent.getComponent();
if (comp == null) {
@@ -5342,7 +5370,7 @@ public class PackageManagerService extends IPackageManager.Stub {
Intent[] specifics, String[] specificTypes, Intent intent,
String resolvedType, int flags, int userId) {
if (!sUserManager.exists(userId)) return Collections.emptyList();
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, intent);
enforceCrossUserPermission(Binder.getCallingUid(), userId, false,
false, "query intent activity options");
final String resultsAction = intent.getAction();
@@ -5515,7 +5543,7 @@ public class PackageManagerService extends IPackageManager.Stub {
public List<ResolveInfo> queryIntentReceivers(Intent intent, String resolvedType, int flags,
int userId) {
if (!sUserManager.exists(userId)) return Collections.emptyList();
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, intent);
ComponentName comp = intent.getComponent();
if (comp == null) {
if (intent.getSelector() != null) {
@@ -5552,7 +5580,7 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public ResolveInfo resolveService(Intent intent, String resolvedType, int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, intent);
List<ResolveInfo> query = queryIntentServices(intent, resolvedType, flags, userId);
if (query != null) {
if (query.size() >= 1) {
@@ -5568,7 +5596,7 @@ public class PackageManagerService extends IPackageManager.Stub {
public List<ResolveInfo> queryIntentServices(Intent intent, String resolvedType, int flags,
int userId) {
if (!sUserManager.exists(userId)) return Collections.emptyList();
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, intent);
ComponentName comp = intent.getComponent();
if (comp == null) {
if (intent.getSelector() != null) {
@@ -5606,7 +5634,7 @@ public class PackageManagerService extends IPackageManager.Stub {
public List<ResolveInfo> queryIntentContentProviders(
Intent intent, String resolvedType, int flags, int userId) {
if (!sUserManager.exists(userId)) return Collections.emptyList();
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, intent);
ComponentName comp = intent.getComponent();
if (comp == null) {
if (intent.getSelector() != null) {
@@ -5723,7 +5751,7 @@ public class PackageManagerService extends IPackageManager.Stub {
public ParceledListSlice<PackageInfo> getPackagesHoldingPermissions(
String[] permissions, int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, null);
final boolean listUninstalled = (flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0;
// writer
@@ -5751,7 +5779,7 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public ParceledListSlice<ApplicationInfo> getInstalledApplications(int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, null);
final boolean listUninstalled = (flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0;
// writer
@@ -5894,7 +5922,7 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public ProviderInfo resolveContentProvider(String name, int flags, int userId) {
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, name);
// reader
synchronized (mPackages) {
final PackageParser.Provider provider = mProvidersByAuthority.get(name);
@@ -5946,7 +5974,7 @@ public class PackageManagerService extends IPackageManager.Stub {
final int userId = processName != null ? UserHandle.getUserId(uid)
: UserHandle.getCallingUserId();
if (!sUserManager.exists(userId)) return null;
- flags = augmentFlagsForUser(flags, userId);
+ flags = augmentFlagsForUser(flags, userId, processName);
ArrayList<ProviderInfo> finalList = null;
// reader
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index da1e5468a649..5612aba6ebf5 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -3837,13 +3837,11 @@ final class Settings {
}
private boolean isVisibleLPr(ComponentInfo componentInfo, int flags) {
- if ((flags & PackageManager.GET_ENCRYPTION_UNAWARE_COMPONENTS) != 0) {
- return true;
- }
- if ((flags & PackageManager.MATCH_ENCRYPTION_AWARE_ONLY) != 0) {
- return componentInfo.encryptionAware;
- }
- return true;
+ final boolean matchUnaware = ((flags & PackageManager.MATCH_ENCRYPTION_UNAWARE_ONLY) != 0)
+ && !componentInfo.encryptionAware;
+ final boolean matchAware = ((flags & PackageManager.MATCH_ENCRYPTION_AWARE_ONLY) != 0)
+ && componentInfo.encryptionAware;
+ return matchUnaware || matchAware;
}
String getInstallerPackageNameLPr(String packageName) {
diff --git a/services/core/java/com/android/server/policy/ShortcutManager.java b/services/core/java/com/android/server/policy/ShortcutManager.java
index 76f56bc5bcc6..990862431799 100644
--- a/services/core/java/com/android/server/policy/ShortcutManager.java
+++ b/services/core/java/com/android/server/policy/ShortcutManager.java
@@ -128,13 +128,15 @@ class ShortcutManager {
ActivityInfo info = null;
ComponentName componentName = new ComponentName(packageName, className);
try {
- info = packageManager.getActivityInfo(componentName, 0);
+ info = packageManager.getActivityInfo(componentName,
+ PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE);
} catch (PackageManager.NameNotFoundException e) {
String[] packages = packageManager.canonicalToCurrentPackageNames(
new String[] { packageName });
componentName = new ComponentName(packages[0], className);
try {
- info = packageManager.getActivityInfo(componentName, 0);
+ info = packageManager.getActivityInfo(componentName,
+ PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE);
} catch (PackageManager.NameNotFoundException e1) {
Log.w(TAG, "Unable to add bookmark: " + packageName
+ "/" + className, e);
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 3db8376e5fca..0bbd23e0d80e 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -1322,6 +1322,7 @@ public final class SystemServer {
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.android.systemui",
"com.android.systemui.SystemUIService"));
+ intent.addFlags(Intent.FLAG_DEBUG_ENCRYPTION_TRIAGED);
//Slog.d(TAG, "Starting service: " + intent);
context.startServiceAsUser(intent, UserHandle.SYSTEM);
}
diff --git a/telecomm/java/android/telecom/DefaultDialerManager.java b/telecomm/java/android/telecom/DefaultDialerManager.java
index 5852b8eeffff..27ee804bebd4 100644
--- a/telecomm/java/android/telecom/DefaultDialerManager.java
+++ b/telecomm/java/android/telecom/DefaultDialerManager.java
@@ -155,7 +155,8 @@ public class DefaultDialerManager {
// Get the list of apps registered for the DIAL intent with empty scheme
Intent intent = new Intent(Intent.ACTION_DIAL);
- List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(intent, 0);
+ List<ResolveInfo> resolveInfoList = packageManager.queryIntentActivities(intent,
+ PackageManager.MATCH_ENCRYPTION_DEFAULT);
List<String> packageNames = new ArrayList<>();
@@ -207,8 +208,8 @@ public class DefaultDialerManager {
}
final List<String> result = new ArrayList<>();
- final List<ResolveInfo> resolveInfoList =
- context.getPackageManager().queryIntentActivities(intent, 0);
+ final List<ResolveInfo> resolveInfoList = context.getPackageManager()
+ .queryIntentActivities(intent, PackageManager.MATCH_ENCRYPTION_DEFAULT);
final int length = resolveInfoList.size();
for (int i = 0; i < length; i++) {
final ActivityInfo info = resolveInfoList.get(i).activityInfo;