ListSuggestionCursor.java revision fde948e69f59589cf0d217ea414af7947de600bb
13e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert/*
23e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Copyright (C) 2009 The Android Open Source Project
33e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert *
43e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
53e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * you may not use this file except in compliance with the License.
63e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * You may obtain a copy of the License at
73e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert *
83e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert *      http://www.apache.org/licenses/LICENSE-2.0
93e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert *
103e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Unless required by applicable law or agreed to in writing, software
113e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS,
123e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * See the License for the specific language governing permissions and
143e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * limitations under the License.
153e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */
163e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
173e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertpackage com.android.quicksearchbox;
183e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
19fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringertimport android.database.DataSetObservable;
20fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringertimport android.database.DataSetObserver;
213e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
223e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertimport java.util.ArrayList;
233e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
243e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert/**
253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * A SuggestionCursor that is backed by a list of SuggestionPosition objects.
263e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * This cursor does not own the SuggestionCursors that the SuggestionPosition
273e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * objects refer to.
283e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert *
293e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */
303e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringertpublic class ListSuggestionCursor extends AbstractSuggestionCursor {
313e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
32fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    private final DataSetObservable mDataSetObservable = new DataSetObservable();
33fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert
343e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    private final ArrayList<SuggestionPosition> mSuggestions;
353e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
363e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    private int mPos;
373e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
383e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public ListSuggestionCursor(String userQuery) {
393e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        super(userQuery);
403e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        mSuggestions = new ArrayList<SuggestionPosition>();
413e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        mPos = 0;
423e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
433e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
443e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    /**
453e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert     * Adds a suggestion from another suggestion cursor.
463e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert     *
473e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert     * @param suggestionPos
483e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert     * @return {@code true} if the suggestion was added.
493e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert     */
503e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public boolean add(SuggestionPosition suggestionPos) {
513e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        mSuggestions.add(suggestionPos);
523e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        return true;
533e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
543e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
553e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public void close() {
563e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        mSuggestions.clear();
573e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
583e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
593e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public int getPosition() {
603e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        return mPos;
613e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
623e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
633e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public void moveTo(int pos) {
643e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        mPos = pos;
653e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
663e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
6794e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney    public void removeRow() {
6894e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney        mSuggestions.remove(mPos);
6994e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney    }
7094e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney
7194e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney    public void replaceRow(SuggestionPosition suggestionPos) {
7294e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney        mSuggestions.set(mPos, suggestionPos);
7394e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney    }
7494e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney
753e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public int getCount() {
763e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        return mSuggestions.size();
773e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
783e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
79fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    protected SuggestionCursor current() {
80fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        return mSuggestions.get(mPos).current();
813e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
823e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
83fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    /**
84fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert     * Register an observer that is called when changes happen to this data set.
85fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert     *
86fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert     * @param observer gets notified when the data set changes.
87fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert     */
88fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    public void registerDataSetObserver(DataSetObserver observer) {
89fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        mDataSetObservable.registerObserver(observer);
90ca78085bb2127559e6f55276a307bfa857018ecaBjorn Bringert    }
91ca78085bb2127559e6f55276a307bfa857018ecaBjorn Bringert
92fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    /**
93fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert     * Unregister an observer that has previously been registered with
94fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert     * {@link #registerDataSetObserver(DataSetObserver)}
95fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert     *
96fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert     * @param observer the observer to unregister.
97fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert     */
98fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    public void unregisterDataSetObserver(DataSetObserver observer) {
99fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        mDataSetObservable.unregisterObserver(observer);
1003e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
1013e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
102fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    protected void notifyDataSetChanged() {
103fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        mDataSetObservable.notifyChanged();
1043e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
1053e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
106fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    public String getShortcutId() {
107fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        return current().getShortcutId();
1083e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
1093e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
1103e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public String getSuggestionDisplayQuery() {
1113e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        return current().getSuggestionDisplayQuery();
1123e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
1133e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
1143e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public String getSuggestionFormat() {
1153e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        return current().getSuggestionFormat();
1163e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
1173e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
1183e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public String getSuggestionIcon1() {
1193e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        return current().getSuggestionIcon1();
1203e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
1213e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
1223e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public String getSuggestionIcon2() {
1233e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        return current().getSuggestionIcon2();
1243e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
1253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
126fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    public String getSuggestionIntentAction() {
127fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        return current().getSuggestionIntentAction();
12894e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney    }
12994e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney
130fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    public String getSuggestionIntentDataString() {
131fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        return current().getSuggestionIntentDataString();
1323e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
1333e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
13494e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney    public String getSuggestionIntentExtraData() {
13594e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney        return current().getSuggestionIntentExtraData();
13694e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney    }
13794e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney
138fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    public String getSuggestionKey() {
139fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        return current().getSuggestionKey();
140fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    }
141fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert
142fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    public String getSuggestionLogType() {
143fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        return current().getSuggestionLogType();
144fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    }
145fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert
146fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    public String getSuggestionQuery() {
147fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        return current().getSuggestionQuery();
148fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    }
149fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert
150fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    public Source getSuggestionSource() {
151fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        return current().getSuggestionSource();
1521e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney    }
1531e938ea2f5edefab446b9562b316bc5dc72adebbBryan Mawhinney
1543e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public String getSuggestionText1() {
1553e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        return current().getSuggestionText1();
1563e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
1573e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
1583e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    public String getSuggestionText2() {
1593e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert        return current().getSuggestionText2();
1603e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert    }
1613e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert
162fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert    public boolean isSpinnerWhileRefreshing() {
163fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert        return current().isSpinnerWhileRefreshing();
164782dd228e78e9294692d639597f96c26283968bbBjorn Bringert    }
1653e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert}
166