// 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); } }