JoinContactLoader.java revision e124722daa8a4b31308d53e3f0457c3b66a20ae5
1146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project/*
2146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Copyright (C) 2010 The Android Open Source Project
3146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project *
4146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * you may not use this file except in compliance with the License.
6146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * You may obtain a copy of the License at
7146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project *
8146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project *
10146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * See the License for the specific language governing permissions and
14146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * limitations under the License.
15146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project */
16146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectpackage com.android.contacts.list;
17146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
18146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.Context;
19a27a886892fe3ec5edbc63c0b58e0a988623011aRoboErikimport android.content.CursorLoader;
20e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chanimport android.database.Cursor;
21d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chanimport android.database.MatrixCursor;
22d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chanimport android.net.Uri;
23d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan
2450f10944eddba97e6730bbdc7545672d0eeec08cRoboErik/**
25146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * A specialized loader for the Join Contacts UI.  It executes two queries:
26146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * join suggestions and (optionally) the full contact list.
27e8aa59d4575d712601a133a9263acc23adbc8c17Michael Chan */
28092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErikpublic class JoinContactLoader extends CursorLoader {
29ff6be831fc682374be6b78c13ecf5daca81f86d9Michael Chan
30a144f86b41170e8ee7fe8d966cc51c5fc90cd44aErik    private boolean mLoadSuggestionsAndAllContact;
31bbb5b556996dfe989ef5267bfb3ba707bb740070RoboErik    private String[] mProjection;
321ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik    private Uri mSuggestionUri;
33d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan    private MatrixCursor mSuggestionsCursor;
344bd4a5ccc3efcc282964e789e1e81577c64561c9Isaac Katzenelson
35eb10fa8bee049e0052b5cb53dcfbdaccef9f2740Erik    public JoinContactLoader(Context context) {
3675f53668f94c3ced9d3cc8583d7e45ce725ff9deSara Ting        super(context, null, null, null, null, null);
3729190975b9238dd6841f822f82f2fb83b0557f36Daisuke Miyakawa    }
38146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
391ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik    public void setLoadSuggestionsAndAllContacts(boolean flag) {
4050f10944eddba97e6730bbdc7545672d0eeec08cRoboErik        mLoadSuggestionsAndAllContact = flag;
4150f10944eddba97e6730bbdc7545672d0eeec08cRoboErik    }
42636269c7220a2b12e090cab43a91eb34922eb61fAndy McFadden
43146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project    public void setSuggestionUri(Uri uri) {
4482400dd70331df7885dd59b809c4bc0667046320Isaac Katzenelson        this.mSuggestionUri = uri;
45092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErik    }
4656adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi
471427657d0bf7e69b831aa495828f67b45b69fd99Erik    @Override
48092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErik    public void setProjection(String[] projection) {
4982400dd70331df7885dd59b809c4bc0667046320Isaac Katzenelson        super.setProjection(projection);
50092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErik        this.mProjection = projection;
511ef7f3ae2831dce8fa5e350f78ac4258c1a0a605Erik    }
5275f53668f94c3ced9d3cc8583d7e45ce725ff9deSara Ting
53ff6be831fc682374be6b78c13ecf5daca81f86d9Michael Chan    public Cursor getSuggestionsCursor() {
5475f53668f94c3ced9d3cc8583d7e45ce725ff9deSara Ting        return mSuggestionsCursor;
5556adc7b3f9e62ada7f3708c5c7228e8ac5af1755Takaoka G. Tadashi    }
56146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project
57092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErik    @Override
583dc5e908a825b879978ba523d9099dc2255da9a5Erik    public Cursor loadInBackground() {
59bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan        // First execute the suggestions query, then call super.loadInBackground
60bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan        // to load the entire list
61bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan        mSuggestionsCursor = loadSuggestions();
6279f228124de7d98146ca526d743436f6419e2365Erik        if (!mLoadSuggestionsAndAllContact && mSuggestionsCursor.getCount() != 0) {
6379f228124de7d98146ca526d743436f6419e2365Erik            // In case we only need suggestions, send "0" as the search query, which
6479f228124de7d98146ca526d743436f6419e2365Erik            // will always return an empty cursor (but we can still register to
6579f228124de7d98146ca526d743436f6419e2365Erik            // listen for changes on it).
6679f228124de7d98146ca526d743436f6419e2365Erik            setSelection("0");
6779f228124de7d98146ca526d743436f6419e2365Erik            setSelectionArgs(null);
687b92da258a480284dcc15a518ea570072329a31dErik        }
697b92da258a480284dcc15a518ea570072329a31dErik        return super.loadInBackground();
707b92da258a480284dcc15a518ea570072329a31dErik    }
717b92da258a480284dcc15a518ea570072329a31dErik
727b92da258a480284dcc15a518ea570072329a31dErik    /**
737b92da258a480284dcc15a518ea570072329a31dErik     * Loads join suggestions into a MatrixCursor.
747b92da258a480284dcc15a518ea570072329a31dErik     */
757b92da258a480284dcc15a518ea570072329a31dErik    private MatrixCursor loadSuggestions() {
7679f228124de7d98146ca526d743436f6419e2365Erik        Cursor cursor = getContext().getContentResolver().query(mSuggestionUri, mProjection,
772aeb8d988aa4b65d3402374832613ab977e009dcMichael Chan                null, null, null);
782aeb8d988aa4b65d3402374832613ab977e009dcMichael Chan        try {
79ff6be831fc682374be6b78c13ecf5daca81f86d9Michael Chan            MatrixCursor matrix = new MatrixCursor(mProjection);
80d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan            Object[] row = new Object[mProjection.length];
81d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan            while (cursor.moveToNext()) {
82d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan                for (int i = 0; i < row.length; i++) {
834ba19dfbd8eccc5a22c3e064a9810336ef73f658RoboErik                    row[i] = cursor.getString(i);
84275232dae58bb24e3360a779ada9d24601a99bcfErik                }
85981874e61ecf29a96a77601a3172b2503b6537eeErik                matrix.addRow(row);
86e6109c584d27a6c25df1819a5c6ec444e789ce61Isaac Katzenelson            }
874ecf0648e68bc9339a3d64745008a4617f7beddaIsaac Katzenelson            return matrix;
88981874e61ecf29a96a77601a3172b2503b6537eeErik        } finally {
89f9411fefba89504c90a7bd8da5472cac538e916aMichael Chan            cursor.close();
90f9411fefba89504c90a7bd8da5472cac538e916aMichael Chan        }
914acb2fd087308dea146b8b10f5278c59df387680RoboErik    }
92092caec951caa0fabcd51729678e3ddcd6ca2f03RoboErik}