summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers/contacts/ContactDirectoryManager.java
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2015-02-18 16:02:36 -0800
committerMakoto Onuki <omakoto@google.com>2015-02-18 18:06:00 -0800
commit6522ca932caf4a4921115a2a3d13068c2357084c (patch)
treee73f362b2bc899d491f63aad12f9ed72221b2312 /src/com/android/providers/contacts/ContactDirectoryManager.java
parent0f6927a6946350dcb3031baa9ce1c7575f48307e (diff)
downloadpackages_providers_ContactsProvider-6522ca932caf4a4921115a2a3d13068c2357084c.zip
packages_providers_ContactsProvider-6522ca932caf4a4921115a2a3d13068c2357084c.tar.gz
packages_providers_ContactsProvider-6522ca932caf4a4921115a2a3d13068c2357084c.tar.bz2
Don't use queryContentProviders to avoid "transaction too large" exception
Instead, use getInstalledPackages, which knows how to circumvent the binder transaction size limit. Bug 18261831 Change-Id: I2725af045c60a47bfce6eab966a5c745b6c17870
Diffstat (limited to 'src/com/android/providers/contacts/ContactDirectoryManager.java')
-rw-r--r--src/com/android/providers/contacts/ContactDirectoryManager.java28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/com/android/providers/contacts/ContactDirectoryManager.java b/src/com/android/providers/contacts/ContactDirectoryManager.java
index f243e79..530a31b 100644
--- a/src/com/android/providers/contacts/ContactDirectoryManager.java
+++ b/src/com/android/providers/contacts/ContactDirectoryManager.java
@@ -199,6 +199,7 @@ public class ContactDirectoryManager {
@VisibleForTesting
static boolean isDirectoryProvider(ProviderInfo provider) {
+ if (provider == null) return false;
Bundle metaData = provider.metaData;
if (metaData == null) return false;
@@ -213,17 +214,26 @@ public class ContactDirectoryManager {
static Set<String> getDirectoryProviderPackages(PackageManager pm) {
final Set<String> ret = Sets.newHashSet();
- // Note to 3rd party developers:
- // queryContentProviders() is a public API but this method doesn't officially support
- // the GET_META_DATA flag. Don't use it in your app.
- final List<ProviderInfo> providers = pm.queryContentProviders(null, 0,
- PackageManager.GET_META_DATA);
- if (providers == null) {
+ final List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_PROVIDERS
+ | PackageManager.GET_META_DATA);
+ if (packages == null) {
return ret;
}
- for (ProviderInfo provider : providers) {
- if (isDirectoryProvider(provider)) {
- ret.add(provider.packageName);
+ for (PackageInfo packageInfo : packages) {
+ if (DEBUG) {
+ Log.d(TAG, "package=" + packageInfo.packageName);
+ }
+ if (packageInfo.providers == null) {
+ continue;
+ }
+ for (ProviderInfo provider : packageInfo.providers) {
+ if (DEBUG) {
+ Log.d(TAG, "provider=" + provider.authority);
+ }
+ if (isDirectoryProvider(provider)) {
+ Log.d(TAG, "Found " + provider.authority);
+ ret.add(provider.packageName);
+ }
}
}
if (DEBUG) {