SuggestionCursorBackedCursor.java revision 5229b06f00d20aac76cd8519b37f2a579d61c54f
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 */ 16package com.android.quicksearchbox; 17 18import android.app.SearchManager; 19import android.database.AbstractCursor; 20import android.database.CursorIndexOutOfBoundsException; 21 22import java.util.ArrayList; 23import java.util.Arrays; 24import java.util.Collection; 25 26public class SuggestionCursorBackedCursor extends AbstractCursor { 27 28 // This array also used in CursorBackedSuggestionExtras to avoid duplication. 29 public static final String[] COLUMNS = { 30 "_id", // 0, This will contain the row number. CursorAdapter, used by SuggestionsAdapter, 31 // used by SearchDialog, expects an _id column. 32 SearchManager.SUGGEST_COLUMN_TEXT_1, // 1 33 SearchManager.SUGGEST_COLUMN_TEXT_2, // 2 34 SearchManager.SUGGEST_COLUMN_TEXT_2_URL, // 3 35 SearchManager.SUGGEST_COLUMN_ICON_1, // 4 36 SearchManager.SUGGEST_COLUMN_ICON_2, // 5 37 SearchManager.SUGGEST_COLUMN_INTENT_ACTION, // 6 38 SearchManager.SUGGEST_COLUMN_INTENT_DATA, // 7 39 SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA, // 8 40 SearchManager.SUGGEST_COLUMN_QUERY, // 9 41 SearchManager.SUGGEST_COLUMN_FORMAT, // 10 42 SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, // 11 43 SearchManager.SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING, // 12 44 }; 45 46 private static final int COLUMN_INDEX_ID = 0; 47 private static final int COLUMN_INDEX_TEXT1 = 1; 48 private static final int COLUMN_INDEX_TEXT2 = 2; 49 private static final int COLUMN_INDEX_TEXT2_URL = 3; 50 private static final int COLUMN_INDEX_ICON1 = 4; 51 private static final int COLUMN_INDEX_ICON2 = 5; 52 private static final int COLUMN_INDEX_INTENT_ACTION = 6; 53 private static final int COLUMN_INDEX_INTENT_DATA = 7; 54 private static final int COLUMN_INDEX_INTENT_EXTRA_DATA = 8; 55 private static final int COLUMN_INDEX_QUERY = 9; 56 private static final int COLUMN_INDEX_FORMAT = 10; 57 private static final int COLUMN_INDEX_SHORTCUT_ID = 11; 58 private static final int COLUMN_INDEX_SPINNER_WHILE_REFRESHING = 12; 59 60 private final SuggestionCursor mCursor; 61 private ArrayList<String> mExtraColumns; 62 63 public SuggestionCursorBackedCursor(SuggestionCursor cursor) { 64 mCursor = cursor; 65 } 66 67 @Override 68 public String[] getColumnNames() { 69 Collection<String> extraColumns = mCursor.getExtraColumns(); 70 if (extraColumns != null) { 71 ArrayList<String> allColumns = new ArrayList<String>(COLUMNS.length + 72 extraColumns.size()); 73 mExtraColumns = new ArrayList<String>(extraColumns); 74 allColumns.addAll(Arrays.asList(COLUMNS)); 75 allColumns.addAll(mExtraColumns); 76 return allColumns.toArray(new String[allColumns.size()]); 77 } else { 78 return COLUMNS; 79 } 80 } 81 82 @Override 83 public int getCount() { 84 return mCursor.getCount(); 85 } 86 87 private Suggestion get() { 88 mCursor.moveTo(getPosition()); 89 return mCursor; 90 } 91 92 private String getExtra(int columnIdx) { 93 int extraColumn = columnIdx - COLUMNS.length; 94 SuggestionExtras extras = get().getExtras(); 95 if (extras != null) { 96 return extras.getExtra(mExtraColumns.get(extraColumn)); 97 } else { 98 return null; 99 } 100 } 101 102 @Override 103 public int getInt(int column) { 104 if (column == COLUMN_INDEX_ID) { 105 return getPosition(); 106 } else { 107 try { 108 return Integer.valueOf(getString(column)); 109 } catch (NumberFormatException e) { 110 return 0; 111 } 112 } 113 } 114 115 @Override 116 public String getString(int column) { 117 if (column < COLUMNS.length) { 118 switch (column) { 119 case COLUMN_INDEX_ID: 120 return String.valueOf(getPosition()); 121 case COLUMN_INDEX_TEXT1: 122 return get().getSuggestionText1(); 123 case COLUMN_INDEX_TEXT2: 124 return get().getSuggestionText2(); 125 case COLUMN_INDEX_TEXT2_URL: 126 return get().getSuggestionText2Url(); 127 case COLUMN_INDEX_ICON1: 128 return get().getSuggestionIcon1(); 129 case COLUMN_INDEX_ICON2: 130 return get().getSuggestionIcon2(); 131 case COLUMN_INDEX_INTENT_ACTION: 132 return get().getSuggestionIntentAction(); 133 case COLUMN_INDEX_INTENT_DATA: 134 return get().getSuggestionIntentDataString(); 135 case COLUMN_INDEX_INTENT_EXTRA_DATA: 136 return get().getSuggestionIntentExtraData(); 137 case COLUMN_INDEX_QUERY: 138 return get().getSuggestionQuery(); 139 case COLUMN_INDEX_FORMAT: 140 return get().getSuggestionFormat(); 141 case COLUMN_INDEX_SHORTCUT_ID: 142 return get().getShortcutId(); 143 case COLUMN_INDEX_SPINNER_WHILE_REFRESHING: 144 return String.valueOf(get().isSpinnerWhileRefreshing()); 145 default: 146 throw new CursorIndexOutOfBoundsException("Requested column " + column 147 + " of " + COLUMNS.length); 148 } 149 } else { 150 return getExtra(column); 151 } 152 } 153 154 @Override 155 public long getLong(int column) { 156 try { 157 return Long.valueOf(getString(column)); 158 } catch (NumberFormatException e) { 159 return 0; 160 } 161 } 162 163 @Override 164 public boolean isNull(int column) { 165 return getString(column) == null; 166 } 167 168 @Override 169 public short getShort(int column) { 170 try { 171 return Short.valueOf(getString(column)); 172 } catch (NumberFormatException e) { 173 return 0; 174 } 175 } 176 177 @Override 178 public double getDouble(int column) { 179 try { 180 return Double.valueOf(getString(column)); 181 } catch (NumberFormatException e) { 182 return 0; 183 } 184 } 185 186 @Override 187 public float getFloat(int column) { 188 try { 189 return Float.valueOf(getString(column)); 190 } catch (NumberFormatException e) { 191 return 0; 192 } 193 } 194} 195