diff options
author | Makoto Onuki <omakoto@google.com> | 2015-02-18 16:02:36 -0800 |
---|---|---|
committer | The Android Automerger <android-build@google.com> | 2015-02-18 20:57:25 -0800 |
commit | 2a7fdc4ea97649e497b94f0193af86fe6b5fa07a (patch) | |
tree | e73f362b2bc899d491f63aad12f9ed72221b2312 | |
parent | 2184a892dfbd94d0a098f795492d30ae74fc16b3 (diff) | |
download | ContactsProvider-lollipop-mr1-cts-release.tar.gz |
Don't use queryContentProviders to avoid "transaction too large" exceptionandroid-cts-5.1_r9android-cts-5.1_r8android-cts-5.1_r7android-cts-5.1_r6android-cts-5.1_r5android-cts-5.1_r4android-cts-5.1_r3android-cts-5.1_r28android-cts-5.1_r27android-cts-5.1_r26android-cts-5.1_r25android-cts-5.1_r24android-cts-5.1_r23android-cts-5.1_r22android-cts-5.1_r21android-cts-5.1_r20android-cts-5.1_r2android-cts-5.1_r19android-cts-5.1_r18android-cts-5.1_r17android-cts-5.1_r16android-cts-5.1_r15android-cts-5.1_r14android-cts-5.1_r13android-cts-5.1_r10android-cts-5.1_r1android-5.1.1_r9android-5.1.1_r8android-5.1.1_r7android-5.1.1_r6android-5.1.1_r4android-5.1.1_r38android-5.1.1_r37android-5.1.1_r36android-5.1.1_r35android-5.1.1_r34android-5.1.1_r33android-5.1.1_r30android-5.1.1_r3android-5.1.1_r29android-5.1.1_r26android-5.1.1_r25android-5.1.1_r24android-5.1.1_r23android-5.1.1_r20android-5.1.1_r2android-5.1.1_r19android-5.1.1_r18android-5.1.1_r16android-5.1.1_r15android-5.1.1_r14android-5.1.1_r13android-5.1.1_r10android-5.1.1_r1android-5.1.0_r5android-5.1.0_r4android-5.1.0_r3android-5.1.0_r1lollipop-mr1-releaselollipop-mr1-fi-releaselollipop-mr1-cts-release
Instead, use getInstalledPackages, which knows how to circumvent the binder
transaction size limit.
Bug 18261831
Change-Id: I2725af045c60a47bfce6eab966a5c745b6c17870
3 files changed, 22 insertions, 22 deletions
diff --git a/src/com/android/providers/contacts/ContactDirectoryManager.java b/src/com/android/providers/contacts/ContactDirectoryManager.java index f243e79e..530a31bc 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) { diff --git a/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java b/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java index be14f450..c5bc6f67 100644 --- a/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java +++ b/tests/src/com/android/providers/contacts/ContactDirectoryManagerTest.java @@ -122,6 +122,9 @@ public class ContactDirectoryManagerTest extends BaseContactsProvider2Test { public void testIsDirectoryProvider() { ProviderInfo provider = new ProviderInfo(); + // Null -- just return false. + assertFalse(ContactDirectoryManager.isDirectoryProvider(null)); + // No metadata assertFalse(ContactDirectoryManager.isDirectoryProvider(provider)); diff --git a/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java b/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java index 694f0f3c..a5aa7c7b 100644 --- a/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java +++ b/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java @@ -96,17 +96,4 @@ public class ContactsMockPackageManager extends MockPackageManager { public Resources getResourcesForApplication(String appPackageName) { return new ContactsMockResources(); } - - @Override - public List<ProviderInfo> queryContentProviders(String processName, int uid, int flags) { - final List<ProviderInfo> ret = Lists.newArrayList(); - if (mPackages == null) return ret; - for (PackageInfo packageInfo : mPackages) { - if (packageInfo.providers == null) continue; - for (ProviderInfo providerInfo : packageInfo.providers) { - ret.add(providerInfo); - } - } - return ret; - } } |