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}