177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert/* 277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Copyright (C) 2010 The Android Open Source Project 377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * 477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * you may not use this file except in compliance with the License. 677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * You may obtain a copy of the License at 777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * 877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * 1077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Unless required by applicable law or agreed to in writing, software 1177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 1277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * See the License for the specific language governing permissions and 1477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * limitations under the License. 1577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert */ 1677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 1777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertpackage com.android.quicksearchbox.ui; 1877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 1977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport com.android.quicksearchbox.R; 2077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport com.android.quicksearchbox.Suggestion; 2177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 2277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.content.Context; 2377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.text.TextUtils; 2477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.util.AttributeSet; 2577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.view.View; 2677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.widget.ImageView; 2777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.widget.RelativeLayout; 2877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.widget.TextView; 2977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 3077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert/** 3177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Base class for suggestion views. 3277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert */ 3377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertpublic abstract class BaseSuggestionView extends RelativeLayout implements SuggestionView { 3477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 3577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected TextView mText1; 3677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected TextView mText2; 3777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected ImageView mIcon1; 3877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected ImageView mIcon2; 3977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert private long mSuggestionId; 4077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert private SuggestionsAdapter<?> mAdapter; 4177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 4277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public BaseSuggestionView(Context context, AttributeSet attrs, int defStyle) { 4377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert super(context, attrs, defStyle); 4477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 4577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 4677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public BaseSuggestionView(Context context, AttributeSet attrs) { 4777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert super(context, attrs); 4877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 4977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 5077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public BaseSuggestionView(Context context) { 5177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert super(context); 5277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 5377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 5477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert @Override 5577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected void onFinishInflate() { 5677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert super.onFinishInflate(); 5777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mText1 = (TextView) findViewById(R.id.text1); 5877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mText2 = (TextView) findViewById(R.id.text2); 5977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mIcon1 = (ImageView) findViewById(R.id.icon1); 6077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mIcon2 = (ImageView) findViewById(R.id.icon2); 6177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 6277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 6377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public void bindAsSuggestion(Suggestion suggestion, String userQuery) { 6477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert setOnClickListener(new ClickListener()); 653bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert if (isFromHistory(suggestion)) { 663bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert setLongClickable(true); 673bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert setOnLongClickListener(new LongClickListener()); 683bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert } else { 693bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert setLongClickable(false); 703bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert setOnLongClickListener(null); 713bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert } 7277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 7377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 7477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public void bindAdapter(SuggestionsAdapter<?> adapter, long suggestionId) { 7577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mAdapter = adapter; 7677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mSuggestionId = suggestionId; 7777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 7877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 793bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert protected boolean isFromHistory(Suggestion suggestion) { 803bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert return suggestion.isSuggestionShortcut() || suggestion.isHistorySuggestion(); 8177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 8377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert /** 8477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Sets the first text line. 8577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert */ 8677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected void setText1(CharSequence text) { 8777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mText1.setText(text); 8877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 9077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert /** 9177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * Sets the second text line. 9277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert */ 9377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected void setText2(CharSequence text) { 9477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mText2.setText(text); 9577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (TextUtils.isEmpty(text)) { 9677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mText2.setVisibility(GONE); 9777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } else { 9877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mText2.setVisibility(VISIBLE); 9977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 10077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 10177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 10277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected void onSuggestionClicked() { 10377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (mAdapter != null) { 10477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mAdapter.onSuggestionClicked(mSuggestionId); 10577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 10677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 10777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 10877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected void onSuggestionQuickContactClicked() { 10977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (mAdapter != null) { 11077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mAdapter.onSuggestionQuickContactClicked(mSuggestionId); 11177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 11277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 11377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 11477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected void onRemoveFromHistoryClicked() { 11577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (mAdapter != null) { 11677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mAdapter.onSuggestionRemoveFromHistoryClicked(mSuggestionId); 11777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 11877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 11977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 12077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected void onSuggestionQueryRefineClicked() { 12177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (mAdapter != null) { 12277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mAdapter.onSuggestionQueryRefineClicked(mSuggestionId); 12377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 12477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 12577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 12677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert private class ClickListener implements OnClickListener { 12777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public void onClick(View v) { 12877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert onSuggestionClicked(); 12977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 13077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 13177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 1323bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert private class LongClickListener implements View.OnLongClickListener { 1333bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert public boolean onLongClick(View v) { 13477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert onRemoveFromHistoryClicked(); 1353bcf2de0b52d088a928f0efe962608baa9cc1e39Bjorn Bringert return true; 13677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 13777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 13877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 13977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert} 140