summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorMehdi Alizadeh <mett@google.com>2019-01-25 00:37:26 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-01-25 00:37:26 +0000
commitc8dfe98014eb3f54985495ef86a2c0dbdf776a95 (patch)
tree82aa7ffcd55177b88050039c067eb3025ddea8ab /core
parenta91b6af73a5c2b7474862639bfbc7011e50e21f1 (diff)
parent85fd3d5c8b8190e9ea54f29ec0a9a4faf963a37b (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.aidl2
-rw-r--r--core/java/android/content/pm/ShortcutManager.java17
-rw-r--r--core/java/com/android/internal/app/ChooserActivity.java6
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;