| // Copyright 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.chrome.browser; |
| |
| import android.app.SearchManager; |
| import android.content.Intent; |
| import android.database.AbstractCursor; |
| import android.database.Cursor; |
| import android.provider.BaseColumns; |
| import android.provider.Browser.BookmarkColumns; |
| |
| import org.chromium.chrome.R; |
| |
| /** |
| * For bookmarks/history suggestions, wrap the cursor returned in one that can feed |
| * the data back to global search in the format it wants. |
| */ |
| class ChromeBrowserProviderSuggestionsCursor extends AbstractCursor { |
| |
| private static final String[] COLS = new String [] { |
| BaseColumns._ID, |
| SearchManager.SUGGEST_COLUMN_INTENT_ACTION, |
| SearchManager.SUGGEST_COLUMN_INTENT_DATA, |
| SearchManager.SUGGEST_COLUMN_TEXT_1, |
| SearchManager.SUGGEST_COLUMN_TEXT_2, |
| SearchManager.SUGGEST_COLUMN_TEXT_2_URL, |
| SearchManager.SUGGEST_COLUMN_ICON_1, |
| SearchManager.SUGGEST_COLUMN_LAST_ACCESS_HINT |
| }; |
| |
| private static final int COLUMN_ID = 0; |
| private static final int COLUMN_SUGGEST_INTENT_ACTION = 1; |
| private static final int COLUMN_SUGGEST_INTENT_DATA = 2; |
| private static final int COLUMN_SUGGEST_TEXT_1 = 3; |
| private static final int COLUMN_SUGGEST_TEXT_2 = 4; |
| private static final int COLUMN_SUGGEST_TEXT_2_URL = 5; |
| private static final int COLUMN_SUGGEST_ICON_1 = 6; |
| private static final int COLUMN_SUGGEST_LAST_ACCESS_HINT = 7; |
| |
| private final Cursor mCursor; |
| |
| public ChromeBrowserProviderSuggestionsCursor(Cursor c) { |
| mCursor = c; |
| } |
| |
| @Override |
| public String[] getColumnNames() { |
| return COLS; |
| } |
| |
| @Override |
| public int getCount() { |
| return mCursor.getCount(); |
| } |
| |
| @Override |
| public String getString(int column) { |
| switch (column) { |
| case COLUMN_ID: |
| return mCursor.getString(mCursor.getColumnIndex(BookmarkColumns._ID)); |
| case COLUMN_SUGGEST_INTENT_ACTION: |
| return Intent.ACTION_VIEW; |
| case COLUMN_SUGGEST_INTENT_DATA: |
| return mCursor.getString(mCursor.getColumnIndex(BookmarkColumns.URL)); |
| case COLUMN_SUGGEST_TEXT_1: |
| return mCursor.getString(mCursor.getColumnIndex(BookmarkColumns.TITLE)); |
| case COLUMN_SUGGEST_TEXT_2: |
| case COLUMN_SUGGEST_TEXT_2_URL: |
| return mCursor.getString(mCursor.getColumnIndex(BookmarkColumns.URL)); |
| case COLUMN_SUGGEST_ICON_1: |
| // This is the icon displayed to the left of the result in QSB. |
| return Integer.toString(R.mipmap.app_icon); |
| case COLUMN_SUGGEST_LAST_ACCESS_HINT: |
| // After clearing history, the Chrome bookmarks database will have a last access |
| // time of 0 for all bookmarks. In the Android provider, this will yield a negative |
| // last access time. A negative last access time will cause global search to discard |
| // the result, so fix it up before we return it. |
| long lastAccess = mCursor.getLong( |
| mCursor.getColumnIndex(BookmarkColumns.DATE)); |
| return lastAccess < 0 ? "0" : "" + lastAccess; |
| default: |
| throw new UnsupportedOperationException(); |
| } |
| } |
| |
| @Override |
| public boolean isNull(int c) { |
| return mCursor.isNull(c); |
| } |
| |
| @Override |
| public long getLong(int c) { |
| switch (c) { |
| case 7: |
| // See comments above in getString() re. negative last access times. |
| long lastAccess = mCursor.getLong( |
| mCursor.getColumnIndex(BookmarkColumns.DATE)); |
| return lastAccess < 0 ? 0 : lastAccess; |
| default: |
| throw new UnsupportedOperationException(); |
| } |
| } |
| |
| @Override |
| public short getShort(int c) { |
| throw new UnsupportedOperationException(); |
| } |
| |
| @Override |
| public double getDouble(int c) { |
| throw new UnsupportedOperationException(); |
| } |
| |
| @Override |
| public int getInt(int c) { |
| throw new UnsupportedOperationException(); |
| } |
| |
| @Override |
| public float getFloat(int c) { |
| throw new UnsupportedOperationException(); |
| } |
| |
| @Override |
| public boolean onMove(int oldPosition, int newPosition) { |
| return mCursor.moveToPosition(newPosition); |
| } |
| } |