Loading api/current.xml +34 −4 Original line number Original line Diff line number Diff line Loading @@ -36138,8 +36138,6 @@ > > <parameter name="packageName" type="java.lang.String"> <parameter name="packageName" type="java.lang.String"> </parameter> </parameter> <exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException"> </exception> </method> </method> <method name="getNameForUid" <method name="getNameForUid" return="java.lang.String" return="java.lang.String" Loading Loading @@ -36567,6 +36565,23 @@ <parameter name="flags" type="int"> <parameter name="flags" type="int"> </parameter> </parameter> </method> </method> <method name="resolveActivity" return="android.content.pm.ResolveInfo" abstract="true" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="intent" type="android.content.Intent"> </parameter> <parameter name="flags" type="int"> </parameter> <parameter name="packageName" type="java.lang.String"> </parameter> </method> <method name="resolveContentProvider" <method name="resolveContentProvider" return="android.content.pm.ProviderInfo" return="android.content.pm.ProviderInfo" abstract="true" abstract="true" Loading Loading @@ -114689,8 +114704,6 @@ > > <parameter name="packageName" type="java.lang.String"> <parameter name="packageName" type="java.lang.String"> </parameter> </parameter> <exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException"> </exception> </method> </method> <method name="getNameForUid" <method name="getNameForUid" return="java.lang.String" return="java.lang.String" Loading Loading @@ -115100,6 +115113,23 @@ </parameter> </parameter> <parameter name="flags" type="int"> <parameter name="flags" type="int"> </parameter> </parameter> <parameter name="packageName" type="java.lang.String"> </parameter> </method> <method name="resolveActivity" return="android.content.pm.ResolveInfo" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="intent" type="android.content.Intent"> </parameter> <parameter name="flags" type="int"> </parameter> </method> </method> <method name="resolveContentProvider" <method name="resolveContentProvider" return="android.content.pm.ProviderInfo" return="android.content.pm.ProviderInfo" core/java/android/app/ApplicationContext.java +31 −30 Original line number Original line Diff line number Diff line Loading @@ -1535,42 +1535,30 @@ class ApplicationContext extends Context { throw new NameNotFoundException(packageName); throw new NameNotFoundException(packageName); } } public Intent getLaunchIntentForPackage(String packageName) @Override throws NameNotFoundException { public Intent getLaunchIntentForPackage(String packageName) { // First see if the package has an INFO activity; the existence of // First see if the package has an INFO activity; the existence of // such an activity is implied to be the desired front-door for the // such an activity is implied to be the desired front-door for the // overall package (such as if it has multiple launcher entries). // overall package (such as if it has multiple launcher entries). Intent intent = getLaunchIntentForPackageCategory(this, packageName, Intent intentToResolve = new Intent(Intent.ACTION_MAIN); Intent.CATEGORY_INFO); intentToResolve.addCategory(Intent.CATEGORY_INFO); if (intent != null) { ResolveInfo resolveInfo = resolveActivity(intentToResolve, 0, packageName); return intent; } // Otherwise, try to find a main launcher activity. // Otherwise, try to find a main launcher activity. return getLaunchIntentForPackageCategory(this, packageName, if (resolveInfo == null) { Intent.CATEGORY_LAUNCHER); // reuse the intent instance intentToResolve.removeCategory(Intent.CATEGORY_INFO); intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER); resolveInfo = resolveActivity(intentToResolve, 0, packageName); } if (resolveInfo == null) { return null; } } // XXX This should be implemented as a call to the package manager, // to reduce the work needed. static Intent getLaunchIntentForPackageCategory(PackageManager pm, String packageName, String category) { Intent intent = new Intent(Intent.ACTION_MAIN); Intent intent = new Intent(Intent.ACTION_MAIN); intent.setClassName(packageName, resolveInfo.activityInfo.name); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Intent intentToResolve = new Intent(Intent.ACTION_MAIN, null); intentToResolve.addCategory(category); final List<ResolveInfo> apps = pm.queryIntentActivities(intentToResolve, 0); // I wish there were a way to directly get the "main" activity of a // package but ... for (ResolveInfo app : apps) { if (app.activityInfo.packageName.equals(packageName)) { intent.setClassName(packageName, app.activityInfo.name); return intent; return intent; } } } return null; } @Override @Override public int[] getPackageGids(String packageName) public int[] getPackageGids(String packageName) Loading Loading @@ -1808,6 +1796,19 @@ class ApplicationContext extends Context { } } } } @Override public ResolveInfo resolveActivity(Intent intent, int flags, String packageName) { try { return mPM.resolveIntentForPackage( intent, intent.resolveTypeIfNeeded(mContext.getContentResolver()), flags, packageName); } catch (RemoteException e) { throw new RuntimeException("Package manager has died", e); } } @Override @Override public List<ResolveInfo> queryIntentActivities(Intent intent, public List<ResolveInfo> queryIntentActivities(Intent intent, int flags) { int flags) { Loading core/java/android/content/pm/IPackageManager.aidl +3 −0 Original line number Original line Diff line number Diff line Loading @@ -81,6 +81,9 @@ interface IPackageManager { ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags); ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags); ResolveInfo resolveIntentForPackage(in Intent intent, String resolvedType, int flags, String packageName); List<ResolveInfo> queryIntentActivities(in Intent intent, List<ResolveInfo> queryIntentActivities(in Intent intent, String resolvedType, int flags); String resolvedType, int flags); Loading core/java/android/content/pm/PackageManager.java +19 −3 Original line number Original line Diff line number Diff line Loading @@ -563,8 +563,7 @@ public abstract class PackageManager { * launch the main activity in the package, or null if the package does * launch the main activity in the package, or null if the package does * not contain such an activity. * not contain such an activity. */ */ public abstract Intent getLaunchIntentForPackage(String packageName) public abstract Intent getLaunchIntentForPackage(String packageName); throws NameNotFoundException; /** /** * Return an array of all of the secondary group-ids that have been * Return an array of all of the secondary group-ids that have been Loading Loading @@ -970,6 +969,23 @@ public abstract class PackageManager { */ */ public abstract ResolveInfo resolveActivity(Intent intent, int flags); public abstract ResolveInfo resolveActivity(Intent intent, int flags); /** * Resolve the intent restricted to a package. * {@see #resolveActivity} * * @param intent An intent containing all of the desired specification * (action, data, type, category, and/or component). * @param flags Additional option flags. The most important is * MATCH_DEFAULT_ONLY, to limit the resolution to only * those activities that support the CATEGORY_DEFAULT. * @param packageName Restrict the intent resolution to this package. * * @return Returns a ResolveInfo containing the final activity intent that * was determined to be the best action. Returns null if no * matching activity was found. */ public abstract ResolveInfo resolveActivity(Intent intent, int flags, String packageName); /** /** * Retrieve all activities that can be performed for the given intent. * Retrieve all activities that can be performed for the given intent. * * Loading services/java/com/android/server/IntentResolver.java +17 −0 Original line number Original line Diff line number Diff line Loading @@ -163,6 +163,23 @@ public class IntentResolver<F extends IntentFilter, R extends Object> { return Collections.unmodifiableSet(mFilters); return Collections.unmodifiableSet(mFilters); } } public List<R> queryIntentFromList(Intent intent, String resolvedType, boolean defaultOnly, ArrayList<ArrayList<F>> listCut) { ArrayList<R> resultList = new ArrayList<R>(); final boolean debug = localLOGV || ((intent.getFlags() & Intent.FLAG_DEBUG_LOG_RESOLUTION) != 0); final String scheme = intent.getScheme(); int N = listCut.size(); for (int i = 0; i < N; ++i) { buildResolveList(intent, debug, defaultOnly, resolvedType, scheme, listCut.get(i), resultList); } sortResults(resultList); return resultList; } public List<R> queryIntent(ContentResolver resolver, Intent intent, public List<R> queryIntent(ContentResolver resolver, Intent intent, String resolvedType, boolean defaultOnly) { String resolvedType, boolean defaultOnly) { String scheme = intent.getScheme(); String scheme = intent.getScheme(); Loading Loading
api/current.xml +34 −4 Original line number Original line Diff line number Diff line Loading @@ -36138,8 +36138,6 @@ > > <parameter name="packageName" type="java.lang.String"> <parameter name="packageName" type="java.lang.String"> </parameter> </parameter> <exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException"> </exception> </method> </method> <method name="getNameForUid" <method name="getNameForUid" return="java.lang.String" return="java.lang.String" Loading Loading @@ -36567,6 +36565,23 @@ <parameter name="flags" type="int"> <parameter name="flags" type="int"> </parameter> </parameter> </method> </method> <method name="resolveActivity" return="android.content.pm.ResolveInfo" abstract="true" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="intent" type="android.content.Intent"> </parameter> <parameter name="flags" type="int"> </parameter> <parameter name="packageName" type="java.lang.String"> </parameter> </method> <method name="resolveContentProvider" <method name="resolveContentProvider" return="android.content.pm.ProviderInfo" return="android.content.pm.ProviderInfo" abstract="true" abstract="true" Loading Loading @@ -114689,8 +114704,6 @@ > > <parameter name="packageName" type="java.lang.String"> <parameter name="packageName" type="java.lang.String"> </parameter> </parameter> <exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException"> </exception> </method> </method> <method name="getNameForUid" <method name="getNameForUid" return="java.lang.String" return="java.lang.String" Loading Loading @@ -115100,6 +115113,23 @@ </parameter> </parameter> <parameter name="flags" type="int"> <parameter name="flags" type="int"> </parameter> </parameter> <parameter name="packageName" type="java.lang.String"> </parameter> </method> <method name="resolveActivity" return="android.content.pm.ResolveInfo" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="intent" type="android.content.Intent"> </parameter> <parameter name="flags" type="int"> </parameter> </method> </method> <method name="resolveContentProvider" <method name="resolveContentProvider" return="android.content.pm.ProviderInfo" return="android.content.pm.ProviderInfo"
core/java/android/app/ApplicationContext.java +31 −30 Original line number Original line Diff line number Diff line Loading @@ -1535,42 +1535,30 @@ class ApplicationContext extends Context { throw new NameNotFoundException(packageName); throw new NameNotFoundException(packageName); } } public Intent getLaunchIntentForPackage(String packageName) @Override throws NameNotFoundException { public Intent getLaunchIntentForPackage(String packageName) { // First see if the package has an INFO activity; the existence of // First see if the package has an INFO activity; the existence of // such an activity is implied to be the desired front-door for the // such an activity is implied to be the desired front-door for the // overall package (such as if it has multiple launcher entries). // overall package (such as if it has multiple launcher entries). Intent intent = getLaunchIntentForPackageCategory(this, packageName, Intent intentToResolve = new Intent(Intent.ACTION_MAIN); Intent.CATEGORY_INFO); intentToResolve.addCategory(Intent.CATEGORY_INFO); if (intent != null) { ResolveInfo resolveInfo = resolveActivity(intentToResolve, 0, packageName); return intent; } // Otherwise, try to find a main launcher activity. // Otherwise, try to find a main launcher activity. return getLaunchIntentForPackageCategory(this, packageName, if (resolveInfo == null) { Intent.CATEGORY_LAUNCHER); // reuse the intent instance intentToResolve.removeCategory(Intent.CATEGORY_INFO); intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER); resolveInfo = resolveActivity(intentToResolve, 0, packageName); } if (resolveInfo == null) { return null; } } // XXX This should be implemented as a call to the package manager, // to reduce the work needed. static Intent getLaunchIntentForPackageCategory(PackageManager pm, String packageName, String category) { Intent intent = new Intent(Intent.ACTION_MAIN); Intent intent = new Intent(Intent.ACTION_MAIN); intent.setClassName(packageName, resolveInfo.activityInfo.name); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Intent intentToResolve = new Intent(Intent.ACTION_MAIN, null); intentToResolve.addCategory(category); final List<ResolveInfo> apps = pm.queryIntentActivities(intentToResolve, 0); // I wish there were a way to directly get the "main" activity of a // package but ... for (ResolveInfo app : apps) { if (app.activityInfo.packageName.equals(packageName)) { intent.setClassName(packageName, app.activityInfo.name); return intent; return intent; } } } return null; } @Override @Override public int[] getPackageGids(String packageName) public int[] getPackageGids(String packageName) Loading Loading @@ -1808,6 +1796,19 @@ class ApplicationContext extends Context { } } } } @Override public ResolveInfo resolveActivity(Intent intent, int flags, String packageName) { try { return mPM.resolveIntentForPackage( intent, intent.resolveTypeIfNeeded(mContext.getContentResolver()), flags, packageName); } catch (RemoteException e) { throw new RuntimeException("Package manager has died", e); } } @Override @Override public List<ResolveInfo> queryIntentActivities(Intent intent, public List<ResolveInfo> queryIntentActivities(Intent intent, int flags) { int flags) { Loading
core/java/android/content/pm/IPackageManager.aidl +3 −0 Original line number Original line Diff line number Diff line Loading @@ -81,6 +81,9 @@ interface IPackageManager { ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags); ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags); ResolveInfo resolveIntentForPackage(in Intent intent, String resolvedType, int flags, String packageName); List<ResolveInfo> queryIntentActivities(in Intent intent, List<ResolveInfo> queryIntentActivities(in Intent intent, String resolvedType, int flags); String resolvedType, int flags); Loading
core/java/android/content/pm/PackageManager.java +19 −3 Original line number Original line Diff line number Diff line Loading @@ -563,8 +563,7 @@ public abstract class PackageManager { * launch the main activity in the package, or null if the package does * launch the main activity in the package, or null if the package does * not contain such an activity. * not contain such an activity. */ */ public abstract Intent getLaunchIntentForPackage(String packageName) public abstract Intent getLaunchIntentForPackage(String packageName); throws NameNotFoundException; /** /** * Return an array of all of the secondary group-ids that have been * Return an array of all of the secondary group-ids that have been Loading Loading @@ -970,6 +969,23 @@ public abstract class PackageManager { */ */ public abstract ResolveInfo resolveActivity(Intent intent, int flags); public abstract ResolveInfo resolveActivity(Intent intent, int flags); /** * Resolve the intent restricted to a package. * {@see #resolveActivity} * * @param intent An intent containing all of the desired specification * (action, data, type, category, and/or component). * @param flags Additional option flags. The most important is * MATCH_DEFAULT_ONLY, to limit the resolution to only * those activities that support the CATEGORY_DEFAULT. * @param packageName Restrict the intent resolution to this package. * * @return Returns a ResolveInfo containing the final activity intent that * was determined to be the best action. Returns null if no * matching activity was found. */ public abstract ResolveInfo resolveActivity(Intent intent, int flags, String packageName); /** /** * Retrieve all activities that can be performed for the given intent. * Retrieve all activities that can be performed for the given intent. * * Loading
services/java/com/android/server/IntentResolver.java +17 −0 Original line number Original line Diff line number Diff line Loading @@ -163,6 +163,23 @@ public class IntentResolver<F extends IntentFilter, R extends Object> { return Collections.unmodifiableSet(mFilters); return Collections.unmodifiableSet(mFilters); } } public List<R> queryIntentFromList(Intent intent, String resolvedType, boolean defaultOnly, ArrayList<ArrayList<F>> listCut) { ArrayList<R> resultList = new ArrayList<R>(); final boolean debug = localLOGV || ((intent.getFlags() & Intent.FLAG_DEBUG_LOG_RESOLUTION) != 0); final String scheme = intent.getScheme(); int N = listCut.size(); for (int i = 0; i < N; ++i) { buildResolveList(intent, debug, defaultOnly, resolvedType, scheme, listCut.get(i), resultList); } sortResults(resultList); return resultList; } public List<R> queryIntent(ContentResolver resolver, Intent intent, public List<R> queryIntent(ContentResolver resolver, Intent intent, String resolvedType, boolean defaultOnly) { String resolvedType, boolean defaultOnly) { String scheme = intent.getScheme(); String scheme = intent.getScheme(); Loading