ChromeBrowserProviderSuggestionsCursor.java revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.chrome.browser; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.app.SearchManager; 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.Intent; 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.database.AbstractCursor; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.database.Cursor; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.provider.BaseColumns; 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.provider.Browser.BookmarkColumns; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.chrome.R; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * For bookmarks/history suggestions, wrap the cursor returned in one that can feed 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the data back to global search in the format it wants. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeBrowserProviderSuggestionsCursor extends AbstractCursor { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String[] COLS = new String [] { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BaseColumns._ID, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchManager.SUGGEST_COLUMN_INTENT_ACTION, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchManager.SUGGEST_COLUMN_INTENT_DATA, 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchManager.SUGGEST_COLUMN_TEXT_1, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchManager.SUGGEST_COLUMN_TEXT_2, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchManager.SUGGEST_COLUMN_TEXT_2_URL, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchManager.SUGGEST_COLUMN_ICON_1, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchManager.SUGGEST_COLUMN_LAST_ACCESS_HINT 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final int COLUMN_ID = 0; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final int COLUMN_SUGGEST_INTENT_ACTION = 1; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final int COLUMN_SUGGEST_INTENT_DATA = 2; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final int COLUMN_SUGGEST_TEXT_1 = 3; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final int COLUMN_SUGGEST_TEXT_2 = 4; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final int COLUMN_SUGGEST_TEXT_2_URL = 5; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final int COLUMN_SUGGEST_ICON_1 = 6; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final int COLUMN_SUGGEST_LAST_ACCESS_HINT = 7; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private final Cursor mCursor; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ChromeBrowserProviderSuggestionsCursor(Cursor c) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mCursor = c; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public String[] getColumnNames() { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return COLS; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public int getCount() { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mCursor.getCount(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public String getString(int column) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (column) { 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case COLUMN_ID: 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return mCursor.getString(mCursor.getColumnIndex(BookmarkColumns._ID)); 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case COLUMN_SUGGEST_INTENT_ACTION: 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return Intent.ACTION_VIEW; 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case COLUMN_SUGGEST_INTENT_DATA: 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return mCursor.getString(mCursor.getColumnIndex(BookmarkColumns.URL)); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case COLUMN_SUGGEST_TEXT_1: 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return mCursor.getString(mCursor.getColumnIndex(BookmarkColumns.TITLE)); 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case COLUMN_SUGGEST_TEXT_2: 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case COLUMN_SUGGEST_TEXT_2_URL: 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return mCursor.getString(mCursor.getColumnIndex(BookmarkColumns.URL)); 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case COLUMN_SUGGEST_ICON_1: 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // This is the icon displayed to the left of the result in QSB. 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return Integer.toString(R.mipmap.app_icon); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case COLUMN_SUGGEST_LAST_ACCESS_HINT: 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // After clearing history, the Chrome bookmarks database will have a last access 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // time of 0 for all bookmarks. In the Android provider, this will yield a negative 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // last access time. A negative last access time will cause global search to discard 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // the result, so fix it up before we return it. 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) long lastAccess = mCursor.getLong( 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mCursor.getColumnIndex(BookmarkColumns.DATE)); 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return lastAccess < 0 ? "0" : "" + lastAccess; 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) default: 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) throw new UnsupportedOperationException(); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean isNull(int c) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mCursor.isNull(c); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public long getLong(int c) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (c) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case 7: 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See comments above in getString() re. negative last access times. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long lastAccess = mCursor.getLong( 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mCursor.getColumnIndex(BookmarkColumns.DATE)); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lastAccess < 0 ? 0 : lastAccess; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throw new UnsupportedOperationException(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public short getShort(int c) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throw new UnsupportedOperationException(); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public double getDouble(int c) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throw new UnsupportedOperationException(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public int getInt(int c) { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throw new UnsupportedOperationException(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public float getFloat(int c) { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throw new UnsupportedOperationException(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public boolean onMove(int oldPosition, int newPosition) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return mCursor.moveToPosition(newPosition); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 131