SuggestionCursorBackedCursor.java revision 93bd2e70b8b08da1ec37fd0e990dac05551d2e90
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
22public 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