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