diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/app/ApplicationPackageManager.java | 13 | ||||
| -rw-r--r-- | core/java/android/content/Intent.java | 8 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 15 |
3 files changed, 34 insertions, 2 deletions
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 4048e6596cfc..49d522440fc4 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -222,9 +222,18 @@ public class ApplicationPackageManager extends PackageManager { @Override public Intent getLeanbackLaunchIntentForPackage(String packageName) { - // Try to find a main leanback_launcher activity. + return getLaunchIntentForPackageAndCategory(packageName, Intent.CATEGORY_LEANBACK_LAUNCHER); + } + + @Override + public Intent getCarLaunchIntentForPackage(String packageName) { + return getLaunchIntentForPackageAndCategory(packageName, Intent.CATEGORY_CAR_LAUNCHER); + } + + private Intent getLaunchIntentForPackageAndCategory(String packageName, String category) { + // Try to find a main launcher activity for the given categories. Intent intentToResolve = new Intent(Intent.ACTION_MAIN); - intentToResolve.addCategory(Intent.CATEGORY_LEANBACK_LAUNCHER); + intentToResolve.addCategory(category); intentToResolve.setPackage(packageName); List<ResolveInfo> ris = queryIntentActivities(intentToResolve, 0); diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 6e9970980e96..4b847dd4f6b5 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -3927,6 +3927,14 @@ public class Intent implements Parcelable, Cloneable { @SdkConstant(SdkConstantType.INTENT_CATEGORY) public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER"; /** + * Indicates the preferred entry-point activity when an application is launched from a Car + * launcher. If not present, Car launcher can optionally use {@link #CATEGORY_LAUNCHER} as a + * fallback, or exclude the application entirely. + * @hide + */ + @SdkConstant(SdkConstantType.INTENT_CATEGORY) + public static final String CATEGORY_CAR_LAUNCHER = "android.intent.category.CAR_LAUNCHER"; + /** * Indicates a Leanback settings activity to be displayed in the Leanback launcher. * @hide */ diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index deb8dfb11094..0d27c256bd90 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -3044,6 +3044,21 @@ public abstract class PackageManager { public abstract @Nullable Intent getLeanbackLaunchIntentForPackage(@NonNull String packageName); /** + * Return a "good" intent to launch a front-door Car activity in a + * package, for use for example to implement an "open" button when browsing + * through packages. The current implementation will look for a main + * activity in the category {@link Intent#CATEGORY_CAR_LAUNCHER}, or + * return null if no main car activities are found. + * + * @param packageName The name of the package to inspect. + * @return Returns either a fully-qualified Intent that can be used to launch + * the main Car activity in the package, or null if the package + * does not contain such an activity. + * @hide + */ + public abstract @Nullable Intent getCarLaunchIntentForPackage(@NonNull String packageName); + + /** * Return an array of all of the POSIX secondary group IDs that have been * assigned to the given package. * <p> |
