11e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney/* 21e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * Copyright (C) 2009 The Android Open Source Project 31e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * 41e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * Licensed under the Apache License, Version 2.0 (the "License"); 51e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * you may not use this file except in compliance with the License. 61e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * You may obtain a copy of the License at 71e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * 81e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * http://www.apache.org/licenses/LICENSE-2.0 91e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * 101e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * Unless required by applicable law or agreed to in writing, software 111e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * distributed under the License is distributed on an "AS IS" BASIS, 121e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * See the License for the specific language governing permissions and 141e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * limitations under the License. 151e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney */ 161e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney 171e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinneypackage com.android.quicksearchbox.ui; 181e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney 1949fd8e0994577badc6194c2c3b5f771f2b793fe4Bjorn Bringertimport com.android.quicksearchbox.R; 2077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport com.android.quicksearchbox.SearchableSource; 2177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport com.android.quicksearchbox.Source; 225229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwoodimport com.android.quicksearchbox.Suggestion; 2349fd8e0994577badc6194c2c3b5f771f2b793fe4Bjorn Bringert 2477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.app.SearchableInfo; 251e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinneyimport android.content.Context; 261e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinneyimport android.net.Uri; 2777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.provider.ContactsContract; 2877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.text.TextUtils; 291e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinneyimport android.util.AttributeSet; 30c020c1844b0fb3a825e8a6fa6ad96288bc432fbcBjorn Bringertimport android.view.View; 311e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney 321e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney/** 331e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney * View for contacts appearing in the suggestions list. 341e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney */ 351e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinneypublic class ContactSuggestionView extends DefaultSuggestionView { 361e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney 3777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert private static final String VIEW_ID = "contact"; 385229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood 39c020c1844b0fb3a825e8a6fa6ad96288bc432fbcBjorn Bringert private ContactBadge mQuickContact; 401e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney 411e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney public ContactSuggestionView(Context context, AttributeSet attrs, int defStyle) { 421e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney super(context, attrs, defStyle); 431e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney } 441e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney 451e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney public ContactSuggestionView(Context context, AttributeSet attrs) { 461e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney super(context, attrs); 471e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney } 481e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney 491e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney public ContactSuggestionView(Context context) { 501e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney super(context); 511e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney } 521e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney 531e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney @Override 541e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney protected void onFinishInflate() { 551e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney super.onFinishInflate(); 56c020c1844b0fb3a825e8a6fa6ad96288bc432fbcBjorn Bringert mQuickContact = (ContactBadge) findViewById(R.id.icon1); 571e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney } 581e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney 591e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney @Override 605229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood public void bindAsSuggestion(Suggestion suggestion, String userQuery) { 615229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood super.bindAsSuggestion(suggestion, userQuery); 621e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney mQuickContact.assignContactUri(Uri.parse(suggestion.getSuggestionIntentDataString())); 63c020c1844b0fb3a825e8a6fa6ad96288bc432fbcBjorn Bringert mQuickContact.setExtraOnClickListener(new ContactBadgeClickListener()); 64c020c1844b0fb3a825e8a6fa6ad96288bc432fbcBjorn Bringert } 65c020c1844b0fb3a825e8a6fa6ad96288bc432fbcBjorn Bringert 66c020c1844b0fb3a825e8a6fa6ad96288bc432fbcBjorn Bringert private class ContactBadgeClickListener implements View.OnClickListener { 67c020c1844b0fb3a825e8a6fa6ad96288bc432fbcBjorn Bringert public void onClick(View v) { 687010c51b51c97fa43d7b24d2158ecbc1d064e0a6Bjorn Bringert onSuggestionQuickContactClicked(); 69c020c1844b0fb3a825e8a6fa6ad96288bc432fbcBjorn Bringert } 701e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney } 7177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 7277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public static class Factory extends SuggestionViewInflater { 7377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public Factory(Context context) { 7477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert super(VIEW_ID, ContactSuggestionView.class, R.layout.contact_suggestion, context); 7577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 7677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 7777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert @Override 7877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public boolean canCreateView(Suggestion suggestion) { 7977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert Source source = suggestion.getSuggestionSource(); 8077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (source instanceof SearchableSource) { 8177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert SearchableSource searchableSource = (SearchableSource) source; 8277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return isSearchableContacts(searchableSource.getSearchableInfo()); 8377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return false; 8577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 8777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected boolean isSearchableContacts(SearchableInfo searchable) { 8877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return TextUtils.equals(ContactsContract.AUTHORITY, searchable.getSuggestAuthority()); 8977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 9077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 911e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney}