1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.quicksearchbox; 17 18 import android.app.SearchManager; 19 import android.database.AbstractCursor; 20 import android.database.CursorIndexOutOfBoundsException; 21 22 public class SuggestionCursorBackedCursor extends AbstractCursor { 23 24 private static final String[] COLUMNS = { 25 "_id", // 0, This will contain the row number. CursorAdapter, used by SuggestionsAdapter, 26 // used by SearchDialog, expects an _id column. 27 SearchManager.SUGGEST_COLUMN_TEXT_1, // 1 28 SearchManager.SUGGEST_COLUMN_TEXT_2, // 2 29 SearchManager.SUGGEST_COLUMN_TEXT_2_URL, // 3 30 SearchManager.SUGGEST_COLUMN_ICON_1, // 4 31 SearchManager.SUGGEST_COLUMN_ICON_2, // 5 32 SearchManager.SUGGEST_COLUMN_INTENT_ACTION, // 6 33 SearchManager.SUGGEST_COLUMN_INTENT_DATA, // 7 34 SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA, // 8 35 SearchManager.SUGGEST_COLUMN_QUERY, // 9 36 SearchManager.SUGGEST_COLUMN_FORMAT, // 10 37 SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, // 11 38 SearchManager.SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING, // 12 39 }; 40 41 private static final int COLUMN_INDEX_ID = 0; 42 private static final int COLUMN_INDEX_TEXT1 = 1; 43 private static final int COLUMN_INDEX_TEXT2 = 2; 44 private static final int COLUMN_INDEX_TEXT2_URL = 3; 45 private static final int COLUMN_INDEX_ICON1 = 4; 46 private static final int COLUMN_INDEX_ICON2 = 5; 47 private static final int COLUMN_INDEX_INTENT_ACTION = 6; 48 private static final int COLUMN_INDEX_INTENT_DATA = 7; 49 private static final int COLUMN_INDEX_INTENT_EXTRA_DATA = 8; 50 private static final int COLUMN_INDEX_QUERY = 9; 51 private static final int COLUMN_INDEX_FORMAT = 10; 52 private static final int COLUMN_INDEX_SHORTCUT_ID = 11; 53 private static final int COLUMN_INDEX_SPINNER_WHILE_REFRESHING = 12; 54 55 private final SuggestionCursor mCursor; 56 57 public SuggestionCursorBackedCursor(SuggestionCursor cursor) { 58 mCursor = cursor; 59 } 60 61 @Override 62 public String[] getColumnNames() { 63 return COLUMNS; 64 } 65 66 @Override 67 public int getCount() { 68 return mCursor.getCount(); 69 } 70 71 private Suggestion get() { 72 mCursor.moveTo(getPosition()); 73 return mCursor; 74 } 75 76 @Override 77 public int getInt(int column) { 78 switch (column) { 79 case COLUMN_INDEX_ID: 80 return getPosition(); 81 default: 82 throw new CursorIndexOutOfBoundsException("Requested column " + column 83 + " of " + COLUMNS.length); 84 } 85 } 86 87 @Override 88 public String getString(int column) { 89 switch (column) { 90 case COLUMN_INDEX_ID: 91 return String.valueOf(getPosition()); 92 case COLUMN_INDEX_TEXT1: 93 return get().getSuggestionText1(); 94 case COLUMN_INDEX_TEXT2: 95 return get().getSuggestionText2(); 96 case COLUMN_INDEX_TEXT2_URL: 97 return get().getSuggestionText2Url(); 98 case COLUMN_INDEX_ICON1: 99 return get().getSuggestionIcon1(); 100 case COLUMN_INDEX_ICON2: 101 return get().getSuggestionIcon2(); 102 case COLUMN_INDEX_INTENT_ACTION: 103 return get().getSuggestionIntentAction(); 104 case COLUMN_INDEX_INTENT_DATA: 105 return get().getSuggestionIntentDataString(); 106 case COLUMN_INDEX_INTENT_EXTRA_DATA: 107 return get().getSuggestionIntentExtraData(); 108 case COLUMN_INDEX_QUERY: 109 return get().getSuggestionQuery(); 110 case COLUMN_INDEX_FORMAT: 111 return get().getSuggestionFormat(); 112 case COLUMN_INDEX_SHORTCUT_ID: 113 return get().getShortcutId(); 114 case COLUMN_INDEX_SPINNER_WHILE_REFRESHING: 115 return String.valueOf(get().isSpinnerWhileRefreshing()); 116 default: 117 throw new CursorIndexOutOfBoundsException("Requested column " + column 118 + " of " + COLUMNS.length); 119 } 120 } 121 122 @Override 123 public long getLong(int column) { 124 return getInt(column); 125 } 126 127 @Override 128 public boolean isNull(int column) { 129 return getString(column) == null; 130 } 131 132 @Override 133 public short getShort(int column) { 134 throw new UnsupportedOperationException(); 135 } 136 137 @Override 138 public double getDouble(int column) { 139 throw new UnsupportedOperationException(); 140 } 141 142 @Override 143 public float getFloat(int column) { 144 throw new UnsupportedOperationException(); 145 } 146 147 } 148