blob: fa63ad42da610621cfcf2eeb7e5b6e82e9ad25af [file] [log] [blame]
Jeff Sharkey3f177592009-05-18 15:23:12 -07001package com.android.contacts;
2
3import android.content.Context;
4import android.database.Cursor;
5
6import java.lang.ref.WeakReference;
7
8/**
9 * Slightly more abstract {@link android.content.AsyncQueryHandler} that helps
10 * keep a {@link WeakReference} back to a callback interface. Will properly
11 * close the completed query if the listener ceases to exist.
12 * <p>
13 * Using this pattern will help keep you from leaking a {@link Context}.
14 */
15public class AsyncQueryHandler extends android.content.AsyncQueryHandler {
16 private final WeakReference<QueryCompleteListener> mListener;
17
18 /**
19 * Interface to listen for completed queries.
20 */
21 public static interface QueryCompleteListener {
22 public void onQueryComplete(int token, Object cookie, Cursor cursor);
23 }
24
25 public AsyncQueryHandler(Context context, QueryCompleteListener listener) {
26 super(context.getContentResolver());
27 mListener = new WeakReference<QueryCompleteListener>(listener);
28 }
29
30 /** {@inheritDoc} */
31 @Override
32 protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
33 final QueryCompleteListener listener = mListener.get();
34 if (listener != null) {
35 listener.onQueryComplete(token, cookie, cursor);
36 } else {
37 cursor.close();
38 }
39 }
40}