summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2015-02-19 20:26:52 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-02-19 20:26:52 +0000
commitddd1e137585848bc58823e4f6e997ccf61b1b244 (patch)
tree5aa8d2b3c131a90033086fe2b22d1fd91b8ef9ca /src/com/android/providers
parent148374fdbe3d723c7485e149afcfed314b2814e0 (diff)
parent6278612a04f0e79a30fbb4f35befeb61e9190db3 (diff)
downloadpackages_providers_ContactsProvider-ddd1e137585848bc58823e4f6e997ccf61b1b244.zip
packages_providers_ContactsProvider-ddd1e137585848bc58823e4f6e997ccf61b1b244.tar.gz
packages_providers_ContactsProvider-ddd1e137585848bc58823e4f6e997ccf61b1b244.tar.bz2
am 6278612a: am a435c434: am 463d577c: am 6522ca93: Don\'t use queryContentProviders to avoid "transaction too large" exception
* commit '6278612a04f0e79a30fbb4f35befeb61e9190db3': Don't use queryContentProviders to avoid "transaction too large" exception
Diffstat (limited to 'src/com/android/providers')
-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) {