blob: 7e929c55b544d8776c3a1fe3a2bd527cf35d6e38 [file] [log] [blame]
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.quicksearchbox;
import android.app.SearchManager;
import android.database.AbstractCursor;
import android.database.CursorIndexOutOfBoundsException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class SuggestionCursorBackedCursor extends AbstractCursor {
// This array also used in CursorBackedSuggestionExtras to avoid duplication.
public static final String[] COLUMNS = {
"_id", // 0, This will contain the row number. CursorAdapter, used by SuggestionsAdapter,
// used by SearchDialog, expects an _id column.
SearchManager.SUGGEST_COLUMN_TEXT_1, // 1
SearchManager.SUGGEST_COLUMN_TEXT_2, // 2
SearchManager.SUGGEST_COLUMN_TEXT_2_URL, // 3
SearchManager.SUGGEST_COLUMN_ICON_1, // 4
SearchManager.SUGGEST_COLUMN_ICON_2, // 5
SearchManager.SUGGEST_COLUMN_INTENT_ACTION, // 6
SearchManager.SUGGEST_COLUMN_INTENT_DATA, // 7
SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA, // 8
SearchManager.SUGGEST_COLUMN_QUERY, // 9
SearchManager.SUGGEST_COLUMN_FORMAT, // 10
SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, // 11
SearchManager.SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING, // 12
};
private static final int COLUMN_INDEX_ID = 0;
private static final int COLUMN_INDEX_TEXT1 = 1;
private static final int COLUMN_INDEX_TEXT2 = 2;
private static final int COLUMN_INDEX_TEXT2_URL = 3;
private static final int COLUMN_INDEX_ICON1 = 4;
private static final int COLUMN_INDEX_ICON2 = 5;
private static final int COLUMN_INDEX_INTENT_ACTION = 6;
private static final int COLUMN_INDEX_INTENT_DATA = 7;
private static final int COLUMN_INDEX_INTENT_EXTRA_DATA = 8;
private static final int COLUMN_INDEX_QUERY = 9;
private static final int COLUMN_INDEX_FORMAT = 10;
private static final int COLUMN_INDEX_SHORTCUT_ID = 11;
private static final int COLUMN_INDEX_SPINNER_WHILE_REFRESHING = 12;
private final SuggestionCursor mCursor;
private ArrayList<String> mExtraColumns;
public SuggestionCursorBackedCursor(SuggestionCursor cursor) {
mCursor = cursor;
}
@Override
public void close() {
super.close();
mCursor.close();
}
@Override
public String[] getColumnNames() {
Collection<String> extraColumns = mCursor.getExtraColumns();
if (extraColumns != null) {
ArrayList<String> allColumns = new ArrayList<String>(COLUMNS.length +
extraColumns.size());
mExtraColumns = new ArrayList<String>(extraColumns);
allColumns.addAll(Arrays.asList(COLUMNS));
allColumns.addAll(mExtraColumns);
return allColumns.toArray(new String[allColumns.size()]);
} else {
return COLUMNS;
}
}
@Override
public int getCount() {
return mCursor.getCount();
}
private Suggestion get() {
mCursor.moveTo(getPosition());
return mCursor;
}
private String getExtra(int columnIdx) {
int extraColumn = columnIdx - COLUMNS.length;
SuggestionExtras extras = get().getExtras();
if (extras != null) {
return extras.getExtra(mExtraColumns.get(extraColumn));
} else {
return null;
}
}
@Override
public int getInt(int column) {
if (column == COLUMN_INDEX_ID) {
return getPosition();
} else {
try {
return Integer.valueOf(getString(column));
} catch (NumberFormatException e) {
return 0;
}
}
}
@Override
public String getString(int column) {
if (column < COLUMNS.length) {
switch (column) {
case COLUMN_INDEX_ID:
return String.valueOf(getPosition());
case COLUMN_INDEX_TEXT1:
return get().getSuggestionText1();
case COLUMN_INDEX_TEXT2:
return get().getSuggestionText2();
case COLUMN_INDEX_TEXT2_URL:
return get().getSuggestionText2Url();
case COLUMN_INDEX_ICON1:
return get().getSuggestionIcon1();
case COLUMN_INDEX_ICON2:
return get().getSuggestionIcon2();
case COLUMN_INDEX_INTENT_ACTION:
return get().getSuggestionIntentAction();
case COLUMN_INDEX_INTENT_DATA:
return get().getSuggestionIntentDataString();
case COLUMN_INDEX_INTENT_EXTRA_DATA:
return get().getSuggestionIntentExtraData();
case COLUMN_INDEX_QUERY:
return get().getSuggestionQuery();
case COLUMN_INDEX_FORMAT:
return get().getSuggestionFormat();
case COLUMN_INDEX_SHORTCUT_ID:
return get().getShortcutId();
case COLUMN_INDEX_SPINNER_WHILE_REFRESHING:
return String.valueOf(get().isSpinnerWhileRefreshing());
default:
throw new CursorIndexOutOfBoundsException("Requested column " + column
+ " of " + COLUMNS.length);
}
} else {
return getExtra(column);
}
}
@Override
public long getLong(int column) {
try {
return Long.valueOf(getString(column));
} catch (NumberFormatException e) {
return 0;
}
}
@Override
public boolean isNull(int column) {
return getString(column) == null;
}
@Override
public short getShort(int column) {
try {
return Short.valueOf(getString(column));
} catch (NumberFormatException e) {
return 0;
}
}
@Override
public double getDouble(int column) {
try {
return Double.valueOf(getString(column));
} catch (NumberFormatException e) {
return 0;
}
}
@Override
public float getFloat(int column) {
try {
return Float.valueOf(getString(column));
} catch (NumberFormatException e) {
return 0;
}
}
}