From d9746307047d4fa80e0f256759add0567b680e00 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 23 Apr 2013 12:40:23 -0700 Subject: [PATCH] Use a single content provider client for all cat queries --- .../commons/CategorizationFragment.java | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/commons/src/main/java/org/wikimedia/commons/CategorizationFragment.java b/commons/src/main/java/org/wikimedia/commons/CategorizationFragment.java index d85c28fe3..5ed0b6c87 100644 --- a/commons/src/main/java/org/wikimedia/commons/CategorizationFragment.java +++ b/commons/src/main/java/org/wikimedia/commons/CategorizationFragment.java @@ -4,10 +4,7 @@ import android.app.Activity; import android.content.ContentProviderClient; import android.content.Context; import android.database.Cursor; -import android.os.AsyncTask; -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; +import android.os.*; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -51,6 +48,8 @@ public class CategorizationFragment extends SherlockFragment{ private HashMap> categoriesCache; + private ContentProviderClient client; + public static class CategoryItem implements Parcelable { public String name; public boolean selected; @@ -132,15 +131,20 @@ public class CategorizationFragment extends SherlockFragment{ ArrayList items = new ArrayList(); // fixme add a limit? // fixme sort by last_used descending? - Cursor cursor = getActivity().getContentResolver().query( - CategoryContentProvider.BASE_URI, - Category.Table.ALL_FIELDS, - null, - new String[]{}, - null); - while (cursor.moveToNext()) { - Category cat = Category.fromCursor(cursor); - items.add(cat.getName()); + try { + Cursor cursor = client.query( + CategoryContentProvider.BASE_URI, + Category.Table.ALL_FIELDS, + null, + new String[]{}, + null); + while (cursor.moveToNext()) { + Category cat = Category.fromCursor(cursor); + items.add(cat.getName()); + } + } catch (RemoteException e) { + // faaaail + throw new RuntimeException(e); } return items; } @@ -256,15 +260,8 @@ public class CategorizationFragment extends SherlockFragment{ Category cat = lookupCategory(name); cat.incTimesUsed(); - ContentProviderClient client = getActivity().getContentResolver().acquireContentProviderClient(CategoryContentProvider.AUTHORITY); - if (client == null) { - // explode - throw new RuntimeException("wtf"); - } cat.setContentProviderClient(client); cat.save(); - cat.setContentProviderClient(null); - client.release(); } @Override @@ -340,6 +337,14 @@ public class CategorizationFragment extends SherlockFragment{ super.onCreate(savedInstanceState); setHasOptionsMenu(true); getActivity().setTitle(R.string.categories_activity_title); + client = getActivity().getContentResolver().acquireContentProviderClient(CategoryContentProvider.AUTHORITY); + } + + @Override + public void onDestroy() { + client.release(); + client = null; + super.onDestroy(); } @Override