Loading core/java/android/content/pm/IPackageManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,8 @@ interface IPackageManager { ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId); ResolveInfo findPersistentPreferredActivity(in Intent intent, int userId); boolean canForwardTo(in Intent intent, String resolvedType, int sourceUserId, int targetUserId); ParceledListSlice queryIntentActivities(in Intent intent, Loading services/core/java/com/android/server/pm/PackageManagerService.java +34 −5 Original line number Diff line number Diff line Loading @@ -3765,6 +3765,19 @@ public class PackageManagerService extends IPackageManager.Stub { return updateFlags(flags, userId); } /** * Update given intent when being used to request {@link ResolveInfo}. */ private Intent updateIntentForResolve(Intent intent) { if (intent.getSelector() != null) { intent = intent.getSelector(); } if (DEBUG_PREFERRED) { intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); } return intent; } /** * Update given flags when being used to request {@link ResolveInfo}. */ Loading Loading @@ -5148,6 +5161,26 @@ public class PackageManagerService extends IPackageManager.Stub { } } @Override public ResolveInfo findPersistentPreferredActivity(Intent intent, int userId) { if (!UserHandle.isSameApp(Binder.getCallingUid(), Process.SYSTEM_UID)) { throw new SecurityException( "findPersistentPreferredActivity can only be run by the system"); } if (!sUserManager.exists(userId)) { return null; } intent = updateIntentForResolve(intent); final String resolvedType = intent.resolveTypeIfNeeded(mContext.getContentResolver()); final int flags = updateFlagsForResolve(0, userId, intent); final List<ResolveInfo> query = queryIntentActivitiesInternal(intent, resolvedType, flags, userId); synchronized (mPackages) { return findPersistentPreferredActivityLP(intent, resolvedType, flags, query, false, userId); } } @Override public void setLastChosenActivity(Intent intent, String resolvedType, int flags, IntentFilter filter, int match, ComponentName activity) { Loading Loading @@ -5414,13 +5447,9 @@ public class PackageManagerService extends IPackageManager.Stub { boolean removeMatches, boolean debug, int userId) { if (!sUserManager.exists(userId)) return null; flags = updateFlagsForResolve(flags, userId, intent); intent = updateIntentForResolve(intent); // writer synchronized (mPackages) { if (intent.getSelector() != null) { intent = intent.getSelector(); } if (DEBUG_PREFERRED) intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); // Try to find a matching persistent preferred activity. ResolveInfo pri = findPersistentPreferredActivityLP(intent, resolvedType, flags, query, debug, userId); Loading Loading
core/java/android/content/pm/IPackageManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -138,6 +138,8 @@ interface IPackageManager { ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId); ResolveInfo findPersistentPreferredActivity(in Intent intent, int userId); boolean canForwardTo(in Intent intent, String resolvedType, int sourceUserId, int targetUserId); ParceledListSlice queryIntentActivities(in Intent intent, Loading
services/core/java/com/android/server/pm/PackageManagerService.java +34 −5 Original line number Diff line number Diff line Loading @@ -3765,6 +3765,19 @@ public class PackageManagerService extends IPackageManager.Stub { return updateFlags(flags, userId); } /** * Update given intent when being used to request {@link ResolveInfo}. */ private Intent updateIntentForResolve(Intent intent) { if (intent.getSelector() != null) { intent = intent.getSelector(); } if (DEBUG_PREFERRED) { intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); } return intent; } /** * Update given flags when being used to request {@link ResolveInfo}. */ Loading Loading @@ -5148,6 +5161,26 @@ public class PackageManagerService extends IPackageManager.Stub { } } @Override public ResolveInfo findPersistentPreferredActivity(Intent intent, int userId) { if (!UserHandle.isSameApp(Binder.getCallingUid(), Process.SYSTEM_UID)) { throw new SecurityException( "findPersistentPreferredActivity can only be run by the system"); } if (!sUserManager.exists(userId)) { return null; } intent = updateIntentForResolve(intent); final String resolvedType = intent.resolveTypeIfNeeded(mContext.getContentResolver()); final int flags = updateFlagsForResolve(0, userId, intent); final List<ResolveInfo> query = queryIntentActivitiesInternal(intent, resolvedType, flags, userId); synchronized (mPackages) { return findPersistentPreferredActivityLP(intent, resolvedType, flags, query, false, userId); } } @Override public void setLastChosenActivity(Intent intent, String resolvedType, int flags, IntentFilter filter, int match, ComponentName activity) { Loading Loading @@ -5414,13 +5447,9 @@ public class PackageManagerService extends IPackageManager.Stub { boolean removeMatches, boolean debug, int userId) { if (!sUserManager.exists(userId)) return null; flags = updateFlagsForResolve(flags, userId, intent); intent = updateIntentForResolve(intent); // writer synchronized (mPackages) { if (intent.getSelector() != null) { intent = intent.getSelector(); } if (DEBUG_PREFERRED) intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); // Try to find a matching persistent preferred activity. ResolveInfo pri = findPersistentPreferredActivityLP(intent, resolvedType, flags, query, debug, userId); Loading