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