From 970417c7d3e33ccbd6918e28d9bc5da24651f5b3 Mon Sep 17 00:00:00 2001 From: Jose Lima Date: Thu, 10 Apr 2014 10:42:19 -0700 Subject: [PATCH] Added getLeanbackLaunchIntentForPackage() Change-Id: I23be3bfa59be812a915adc37e08fdf59be8ad90f --- api/current.txt | 2 ++ .../android/app/ApplicationPackageManager.java | 18 ++++++++++ core/java/android/content/pm/PackageManager.java | 40 ++++++++++++++++------ .../src/android/test/mock/MockPackageManager.java | 6 ++++ 4 files changed, 55 insertions(+), 11 deletions(-) diff --git a/api/current.txt b/api/current.txt index 1edb97ded026..b0e8142865d7 100644 --- a/api/current.txt +++ b/api/current.txt @@ -7263,6 +7263,7 @@ package android.content.pm { method public abstract java.lang.String getInstallerPackageName(java.lang.String); method public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; method public abstract android.content.Intent getLaunchIntentForPackage(java.lang.String); + method public abstract android.content.Intent getLeanbackLaunchIntentForPackage(java.lang.String); method public abstract java.lang.String getNameForUid(int); method public android.content.pm.PackageInfo getPackageArchiveInfo(java.lang.String, int); method public abstract int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; @@ -24262,6 +24263,7 @@ package android.test.mock { method public java.lang.String getInstallerPackageName(java.lang.String); method public android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException; method public android.content.Intent getLaunchIntentForPackage(java.lang.String); + method public android.content.Intent getLeanbackLaunchIntentForPackage(java.lang.String); method public java.lang.String getNameForUid(int); method public int[] getPackageGids(java.lang.String) throws android.content.pm.PackageManager.NameNotFoundException; method public android.content.pm.PackageInfo getPackageInfo(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException; diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 6f53df4efb0d..010988e6da52 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -129,6 +129,24 @@ final class ApplicationPackageManager extends PackageManager { } @Override + public Intent getLeanbackLaunchIntentForPackage(String packageName) { + // Try to find a main leanback_launcher activity. + Intent intentToResolve = new Intent(Intent.ACTION_MAIN); + intentToResolve.addCategory(Intent.CATEGORY_LEANBACK_LAUNCHER); + intentToResolve.setPackage(packageName); + List ris = queryIntentActivities(intentToResolve, 0); + + if (ris == null || ris.size() <= 0) { + return null; + } + Intent intent = new Intent(intentToResolve); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setClassName(ris.get(0).activityInfo.packageName, + ris.get(0).activityInfo.name); + return intent; + } + + @Override public int[] getPackageGids(String packageName) throws NameNotFoundException { try { diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 34a6f1d0d726..e3a036227311 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -970,6 +970,7 @@ public abstract class PackageManager { * @hide * @deprecated */ + @Deprecated @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_NFC_HCE = "android.hardware.nfc.hce"; @@ -1266,6 +1267,7 @@ public abstract class PackageManager { * something like a DPAD, not through touch or mouse. * @deprecated use {@link #FEATURE_LEANBACK} instead. */ + @Deprecated @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_TELEVISION = "android.hardware.type.television"; @@ -1455,17 +1457,33 @@ public abstract class PackageManager { public abstract Intent getLaunchIntentForPackage(String packageName); /** - * Return an array of all of the secondary group-ids that have been - * assigned to a package. - * - *

Throws {@link NameNotFoundException} if a package with the given - * name cannot be found on the system. - * + * Return a "good" intent to launch a front-door Leanback 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_LEANBACK_LAUNCHER}, or + * return null if no main leanback activities are found. + *

+ * Throws {@link NameNotFoundException} if a package with the given name + * cannot be found on the system. + * + * @param packageName The name of the package to inspect. + * @return Returns either a fully-qualified Intent that can be used to launch + * the main Leanback activity in the package, or null if the package + * does not contain such an activity. + */ + public abstract Intent getLeanbackLaunchIntentForPackage(String packageName); + + /** + * Return an array of all of the secondary group-ids that have been assigned + * to a package. + *

+ * Throws {@link NameNotFoundException} if a package with the given name + * cannot be found on the system. + * * @param packageName The full name (i.e. com.google.apps.contacts) of the - * desired package. - * - * @return Returns an int array of the assigned gids, or null if there - * are none. + * desired package. + * @return Returns an int array of the assigned gids, or null if there are + * none. */ public abstract int[] getPackageGids(String packageName) throws NameNotFoundException; @@ -2449,7 +2467,7 @@ public abstract class PackageManager { /** * Return the generic icon for an activity that is used when no specific * icon is defined. - * + * * @return Drawable Image of the icon. */ public abstract Drawable getDefaultActivityIcon(); diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java index c1305bc8446d..89c951bdb2c4 100644 --- a/test-runner/src/android/test/mock/MockPackageManager.java +++ b/test-runner/src/android/test/mock/MockPackageManager.java @@ -80,6 +80,12 @@ public class MockPackageManager extends PackageManager { } @Override + public Intent getLeanbackLaunchIntentForPackage(String packageName) { + throw new UnsupportedOperationException(); + } + + @Override + public int[] getPackageGids(String packageName) throws NameNotFoundException { throw new UnsupportedOperationException(); } -- 2.11.0