ListSuggestionCursor.java revision 93bd2e70b8b08da1ec37fd0e990dac05551d2e90
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/** 2593bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert * A SuggestionCursor that is backed by a list of Suggestions. 263e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 2704a180b52fb4100a2f3747e795fb5d26e3207a4aBjorn Bringertpublic class ListSuggestionCursor extends AbstractSuggestionCursorWrapper { 283e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 29fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert private final DataSetObservable mDataSetObservable = new DataSetObservable(); 30fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert 3193bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert private final ArrayList<Suggestion> mSuggestions; 323e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3393bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert private int mPos = 0; 343e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 353e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public ListSuggestionCursor(String userQuery) { 363e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert super(userQuery); 3793bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert mSuggestions = new ArrayList<Suggestion>(); 3893bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert } 3993bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert 4093bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert public ListSuggestionCursor(String userQuery, Suggestion...suggestions) { 4193bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert super(userQuery); 4293bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert mSuggestions = new ArrayList<Suggestion>(suggestions.length); 4393bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert for (Suggestion suggestion : suggestions) { 4493bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert mSuggestions.add(suggestion); 4593bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert } 463e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 473e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 483e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 493e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Adds a suggestion from another suggestion cursor. 503e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * 513e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * @param suggestionPos 523e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * @return {@code true} if the suggestion was added. 533e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 5493bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert public boolean add(Suggestion suggestion) { 5593bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert mSuggestions.add(suggestion); 563e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return true; 573e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 583e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 593e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public void close() { 603e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mSuggestions.clear(); 613e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 623e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 633e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public int getPosition() { 643e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mPos; 653e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 663e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 673e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public void moveTo(int pos) { 683e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mPos = pos; 693e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 703e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 7187e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert public boolean moveToNext() { 7287e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert int size = mSuggestions.size(); 7387e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert if (mPos >= size) { 7487e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert // Already past the end 7587e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert return false; 7687e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert } 7787e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert mPos++; 7887e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert return mPos < size; 7987e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert } 8087e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert 8194e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney public void removeRow() { 8294e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney mSuggestions.remove(mPos); 8394e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney } 8494e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney 8593bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert public void replaceRow(Suggestion suggestion) { 8693bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert mSuggestions.set(mPos, suggestion); 8794e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney } 8894e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney 893e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public int getCount() { 903e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mSuggestions.size(); 913e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 923e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 9304a180b52fb4100a2f3747e795fb5d26e3207a4aBjorn Bringert @Override 9493bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert protected Suggestion current() { 9593bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert return mSuggestions.get(mPos); 963e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 973e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 98bf61e445cbe423cc2554b722b6dd38675015c36dBjorn Bringert @Override 99bf61e445cbe423cc2554b722b6dd38675015c36dBjorn Bringert public String toString() { 100bf61e445cbe423cc2554b722b6dd38675015c36dBjorn Bringert return "[" + getUserQuery() + "] " + mSuggestions; 101bf61e445cbe423cc2554b722b6dd38675015c36dBjorn Bringert } 102bf61e445cbe423cc2554b722b6dd38675015c36dBjorn Bringert 103fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert /** 104fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * Register an observer that is called when changes happen to this data set. 105fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * 106fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * @param observer gets notified when the data set changes. 107fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert */ 108fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert public void registerDataSetObserver(DataSetObserver observer) { 109fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert mDataSetObservable.registerObserver(observer); 110ca78085bb2127559e6f55276a307bfa857018ecaBjorn Bringert } 111ca78085bb2127559e6f55276a307bfa857018ecaBjorn Bringert 112fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert /** 113fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * Unregister an observer that has previously been registered with 114fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * {@link #registerDataSetObserver(DataSetObserver)} 115fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * 116fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * @param observer the observer to unregister. 117fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert */ 118fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert public void unregisterDataSetObserver(DataSetObserver observer) { 119fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert mDataSetObservable.unregisterObserver(observer); 1203e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1213e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 122fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert protected void notifyDataSetChanged() { 123fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert mDataSetObservable.notifyChanged(); 1243e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert} 126