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}