diff options
| author | Mehdi Alizadeh <mett@google.com> | 2019-01-25 00:37:26 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-01-25 00:37:26 +0000 |
| commit | c8dfe98014eb3f54985495ef86a2c0dbdf776a95 (patch) | |
| tree | 82aa7ffcd55177b88050039c067eb3025ddea8ab /core | |
| parent | a91b6af73a5c2b7474862639bfbc7011e50e21f1 (diff) | |
| parent | 85fd3d5c8b8190e9ea54f29ec0a9a4faf963a37b (diff) | |
Merge "Use old API only if no share targets are published"
Diffstat (limited to 'core')
| -rw-r--r-- | core/java/android/content/pm/IShortcutService.aidl | 2 | ||||
| -rw-r--r-- | core/java/android/content/pm/ShortcutManager.java | 17 | ||||
| -rw-r--r-- | core/java/com/android/internal/app/ChooserActivity.java | 6 |
3 files changed, 25 insertions, 0 deletions
diff --git a/core/java/android/content/pm/IShortcutService.aidl b/core/java/android/content/pm/IShortcutService.aidl index c702b16c97f6..276853d3b860 100644 --- a/core/java/android/content/pm/IShortcutService.aidl +++ b/core/java/android/content/pm/IShortcutService.aidl @@ -76,4 +76,6 @@ interface IShortcutService { // System API used by framework's ShareSheet (ChooserActivity) ParceledListSlice getShareTargets(String packageName, in IntentFilter filter, int userId); + + boolean hasShareTargets(String packageName, String packageToCheck, int userId); }
\ No newline at end of file diff --git a/core/java/android/content/pm/ShortcutManager.java b/core/java/android/content/pm/ShortcutManager.java index 4f7acd96aa6b..849fd03eacb3 100644 --- a/core/java/android/content/pm/ShortcutManager.java +++ b/core/java/android/content/pm/ShortcutManager.java @@ -635,4 +635,21 @@ public class ShortcutManager { } }; } + + /** + * Used by framework's ShareSheet (ChooserActivity.java) to check if a given package has share + * target definitions in it's resources. + * + * @param packageName Package to check for share targets. + * @return True if the package has any share target definitions, False otherwise. + * @hide + */ + public boolean hasShareTargets(@NonNull String packageName) { + try { + return mService.hasShareTargets(mContext.getPackageName(), packageName, + injectMyUserId()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } } diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index 30137e3893ff..42acb09d50d6 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -513,6 +513,7 @@ public class ChooserActivity extends ResolverActivity { void queryTargetServices(ChooserListAdapter adapter) { final PackageManager pm = getPackageManager(); + ShortcutManager sm = (ShortcutManager) getSystemService(ShortcutManager.class); int targetsToQuery = 0; for (int i = 0, N = adapter.getDisplayResolveInfoCount(); i < N; i++) { final DisplayResolveInfo dri = adapter.getDisplayResolveInfo(i); @@ -522,6 +523,11 @@ public class ChooserActivity extends ResolverActivity { continue; } final ActivityInfo ai = dri.getResolveInfo().activityInfo; + if (USE_SHORTCUT_MANAGER_FOR_DIRECT_TARGETS + && sm.hasShareTargets(ai.packageName)) { + // Share targets will be queried from ShortcutManager + continue; + } final Bundle md = ai.metaData; final String serviceName = md != null ? convertServiceName(ai.packageName, md.getString(ChooserTargetService.META_DATA_NAME)) : null; |
