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.QsbApplication; 2077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport com.android.quicksearchbox.R; 2177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport com.android.quicksearchbox.Suggestion; 2277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport com.android.quicksearchbox.SuggestionFormatter; 2377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 2477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.content.Context; 2577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.util.AttributeSet; 2677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.view.KeyEvent; 2777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertimport android.view.View; 2877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 2977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert/** 3077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert * View for web search suggestions. 3177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert */ 3277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringertpublic class WebSearchSuggestionView extends BaseSuggestionView { 3377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 3477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert private static final String VIEW_ID = "web_search"; 3577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 3677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert private final SuggestionFormatter mSuggestionFormatter; 3777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 3877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public WebSearchSuggestionView(Context context, AttributeSet attrs) { 3977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert super(context, attrs); 4077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mSuggestionFormatter = QsbApplication.get(context).getSuggestionFormatter(); 4177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 4277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 4377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert @Override 4477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert protected void onFinishInflate() { 4577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert super.onFinishInflate(); 4677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert KeyListener keyListener = new KeyListener(); 4777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert setOnKeyListener(keyListener); 4877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mIcon2.setOnKeyListener(keyListener); 4977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mIcon2.setOnClickListener(new View.OnClickListener() { 5077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public void onClick(View v) { 5177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert onSuggestionQueryRefineClicked(); 5277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 5377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert }); 5477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert mIcon2.setFocusable(true); 5577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 5677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 5777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert @Override 5877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public void bindAsSuggestion(Suggestion suggestion, String userQuery) { 5977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert super.bindAsSuggestion(suggestion, userQuery); 6077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 6177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert CharSequence text1 = mSuggestionFormatter.formatSuggestion(userQuery, 6277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert suggestion.getSuggestionText1()); 6377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert setText1(text1); 64ba46e3e010f777b6531face8fec018d54710df48Bjorn Bringert setIsHistorySuggestion(suggestion.isHistorySuggestion()); 65ba46e3e010f777b6531face8fec018d54710df48Bjorn Bringert } 66ba46e3e010f777b6531face8fec018d54710df48Bjorn Bringert 67ba46e3e010f777b6531face8fec018d54710df48Bjorn Bringert private void setIsHistorySuggestion(boolean isHistory) { 68ba46e3e010f777b6531face8fec018d54710df48Bjorn Bringert if (isHistory) { 6943996e713327ab5e7e2e36f91b0b153d9d4d1137Justin Ho mIcon1.setImageResource(R.drawable.ic_history_suggestion); 70ba46e3e010f777b6531face8fec018d54710df48Bjorn Bringert mIcon1.setVisibility(VISIBLE); 71ba46e3e010f777b6531face8fec018d54710df48Bjorn Bringert } else { 72ba46e3e010f777b6531face8fec018d54710df48Bjorn Bringert mIcon1.setVisibility(INVISIBLE); 73ba46e3e010f777b6531face8fec018d54710df48Bjorn Bringert } 7477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 7577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 7677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert private class KeyListener implements View.OnKeyListener { 7777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public boolean onKey(View v, int keyCode, KeyEvent event) { 7877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert boolean consumed = false; 7977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (event.getAction() == KeyEvent.ACTION_DOWN) { 8077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT && v != mIcon2) { 8177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert consumed = mIcon2.requestFocus(); 8277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT && v == mIcon2) { 8377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert consumed = requestFocus(); 8477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return consumed; 8777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 8977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 9077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public static class Factory extends SuggestionViewInflater { 9177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 9277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public Factory(Context context) { 9377909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert super(VIEW_ID, WebSearchSuggestionView.class, R.layout.web_search_suggestion, context); 9477909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 9577909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 9677909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert @Override 9777909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert public boolean canCreateView(Suggestion suggestion) { 9877909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert return suggestion.isWebSearchSuggestion(); 9977909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 10077909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert } 10177909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert 10277909685887bd6db7454b73cf274afc3aca2f58dBjorn Bringert} 103