root/chrome/android/java/src/org/chromium/chrome/browser/ChromeBrowserProviderSuggestionsCursor.java

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. getColumnNames
  2. getCount
  3. getString
  4. isNull
  5. getLong
  6. getShort
  7. getDouble
  8. getInt
  9. getFloat
  10. onMove

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

/* [<][>][^][v][top][bottom][index][help] */