ListSuggestionCursor.java revision 08ff0a7cb6b99db79508fa3124730eb81411bc56
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 2908ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert private static final int DEFAULT_CAPACITY = 16; 3008ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert 31fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert private final DataSetObservable mDataSetObservable = new DataSetObservable(); 32fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert 3393bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert private final ArrayList<Suggestion> mSuggestions; 343e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 3593bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert private int mPos = 0; 363e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 373e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public ListSuggestionCursor(String userQuery) { 3808ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert this(userQuery, DEFAULT_CAPACITY); 3993bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert } 4093bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert 4193bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert public ListSuggestionCursor(String userQuery, Suggestion...suggestions) { 4208ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert this(userQuery, suggestions.length); 4393bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert for (Suggestion suggestion : suggestions) { 4493bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert mSuggestions.add(suggestion); 4593bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert } 463e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 473e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 4808ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert public ListSuggestionCursor(String userQuery, int capacity) { 4908ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert super(userQuery); 5008ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert mSuggestions = new ArrayList<Suggestion>(capacity); 5108ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert } 5208ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert 533e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert /** 543e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * Adds a suggestion from another suggestion cursor. 553e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * 563e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * @param suggestionPos 573e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert * @return {@code true} if the suggestion was added. 583e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert */ 5993bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert public boolean add(Suggestion suggestion) { 6093bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert mSuggestions.add(suggestion); 613e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return true; 623e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 633e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 643e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public void close() { 653e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mSuggestions.clear(); 663e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 673e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 683e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public int getPosition() { 693e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mPos; 703e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 713e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 723e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public void moveTo(int pos) { 733e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert mPos = pos; 743e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 753e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 7687e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert public boolean moveToNext() { 7787e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert int size = mSuggestions.size(); 7887e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert if (mPos >= size) { 7987e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert // Already past the end 8087e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert return false; 8187e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert } 8287e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert mPos++; 8387e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert return mPos < size; 8487e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert } 8587e947cbd9f279a83337900ff8bbd5ab0a8dc455Bjorn Bringert 8694e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney public void removeRow() { 8794e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney mSuggestions.remove(mPos); 8894e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney } 8994e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney 9093bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert public void replaceRow(Suggestion suggestion) { 9193bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert mSuggestions.set(mPos, suggestion); 9294e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney } 9394e8a2be78530170f50e7895a558bf8011bbf8e8Bryan Mawhinney 943e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert public int getCount() { 953e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert return mSuggestions.size(); 963e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 973e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 9804a180b52fb4100a2f3747e795fb5d26e3207a4aBjorn Bringert @Override 9993bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert protected Suggestion current() { 10093bd2e70b8b08da1ec37fd0e990dac05551d2e90Bjorn Bringert return mSuggestions.get(mPos); 1013e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1023e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 103bf61e445cbe423cc2554b722b6dd38675015c36dBjorn Bringert @Override 104bf61e445cbe423cc2554b722b6dd38675015c36dBjorn Bringert public String toString() { 105bf61e445cbe423cc2554b722b6dd38675015c36dBjorn Bringert return "[" + getUserQuery() + "] " + mSuggestions; 106bf61e445cbe423cc2554b722b6dd38675015c36dBjorn Bringert } 107bf61e445cbe423cc2554b722b6dd38675015c36dBjorn Bringert 108fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert /** 109fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * Register an observer that is called when changes happen to this data set. 110fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * 111fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * @param observer gets notified when the data set changes. 112fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert */ 113fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert public void registerDataSetObserver(DataSetObserver observer) { 114fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert mDataSetObservable.registerObserver(observer); 115ca78085bb2127559e6f55276a307bfa857018ecaBjorn Bringert } 116ca78085bb2127559e6f55276a307bfa857018ecaBjorn Bringert 117fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert /** 118fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * Unregister an observer that has previously been registered with 119fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * {@link #registerDataSetObserver(DataSetObserver)} 120fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * 121fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert * @param observer the observer to unregister. 122fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert */ 123fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert public void unregisterDataSetObserver(DataSetObserver observer) { 124fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert mDataSetObservable.unregisterObserver(observer); 1253e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1263e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert 127fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert protected void notifyDataSetChanged() { 128fde948e69f59589cf0d217ea414af7947de600bbBjorn Bringert mDataSetObservable.notifyChanged(); 1293e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert } 1303e44ff1f2a204db3f479698cf0b3eab3d451dec2Bjorn Bringert} 131