diff options
author | Piotr Jastrzebski <haaawk@google.com> | 2012-10-01 17:03:38 +0100 |
---|---|---|
committer | Piotr Jastrzebski <haaawk@google.com> | 2012-10-02 15:22:37 +0100 |
commit | e2da2ba9d7b7fdb43901fcce5d605bade82bc4b1 (patch) | |
tree | 10b16ec471a38b3a1369b3c2db59b2ccd3afe580 | |
parent | f4c7588927f130acb0427e368ba355ed8c50cb3c (diff) | |
download | ApplicationsProvider-e2da2ba9d7b7fdb43901fcce5d605bade82bc4b1.tar.gz |
Cancellation of queries for search suggestions.
Using CancellableSignal to enable cancellation of queries for search
suggestions.
Search App needs this change to cancel queries for search suggestions which are
no longer valid due to some user action.
Change-Id: Iad5aaccd322142cd7917722a2eda8207604050d7
-rw-r--r-- | src/com/android/providers/applications/ApplicationsProvider.java | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/com/android/providers/applications/ApplicationsProvider.java b/src/com/android/providers/applications/ApplicationsProvider.java index a7fa1b9..128fe2f 100644 --- a/src/com/android/providers/applications/ApplicationsProvider.java +++ b/src/com/android/providers/applications/ApplicationsProvider.java @@ -42,6 +42,7 @@ import android.database.DatabaseUtils; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; +import android.os.CancellationSignal; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; @@ -238,13 +239,12 @@ public class ApplicationsProvider extends ContentProvider { // END ASYC UPDATE CODE // ---------- - /** * Creates an in-memory database for storing application info. */ private void createDatabase() { mDb = SQLiteDatabase.create(null); - mDb.execSQL("CREATE TABLE IF NOT EXISTS " + APPLICATIONS_TABLE + " ("+ + mDb.execSQL("CREATE TABLE IF NOT EXISTS " + APPLICATIONS_TABLE + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + NAME + " TEXT COLLATE LOCALIZED," + DESCRIPTION + " description TEXT," + @@ -272,13 +272,13 @@ public class ApplicationsProvider extends ContentProvider { APPLICATIONS_TABLE + " " + "BEGIN " + "DELETE FROM applicationsLookup WHERE source = new." + _ID + ";" + - "SELECT _TOKENIZE('applicationsLookup', new." + _ID + ", new." + NAME + ", ' ', 1);" + - "END"); + "SELECT _TOKENIZE('applicationsLookup', new." + _ID + ", new." + NAME + ", ' ', 1);" + + "END"); mDb.execSQL("CREATE TRIGGER applicationsLookup_insert AFTER INSERT ON " + APPLICATIONS_TABLE + " " + "BEGIN " + - "SELECT _TOKENIZE('applicationsLookup', new." + _ID + ", new." + NAME + ", ' ', 1);" + - "END"); + "SELECT _TOKENIZE('applicationsLookup', new." + _ID + ", new." + NAME + ", ' ', 1);" + + "END"); mDb.execSQL("CREATE TRIGGER applicationsLookup_delete DELETE ON " + APPLICATIONS_TABLE + " " + "BEGIN " + @@ -304,13 +304,19 @@ public class ApplicationsProvider extends ContentProvider { } } + @Override + public Cursor query(Uri uri, String[] projectionIn, String selection, + String[] selectionArgs, String sortOrder) { + return query(uri, projectionIn, selection, selectionArgs, sortOrder, null); + } + /** * Queries for a given search term and returns a cursor containing * suggestions ordered by best match. */ @Override public Cursor query(Uri uri, String[] projectionIn, String selection, - String[] selectionArgs, String sortOrder) { + String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal) { if (DBG) Log.d(TAG, "query(" + uri + ")"); if (!TextUtils.isEmpty(selection)) { @@ -332,7 +338,7 @@ public class ApplicationsProvider extends ContentProvider { if (uri.getQueryParameter(REFRESH_STATS) != null) { updateUsageStats(); } - return getSuggestions(query, projectionIn); + return getSuggestions(query, projectionIn, cancellationSignal); } case SHORTCUT_REFRESH: { String shortcutId = null; @@ -346,14 +352,15 @@ public class ApplicationsProvider extends ContentProvider { if (uri.getPathSegments().size() > 1) { query = uri.getLastPathSegment().toLowerCase(); } - return getSearchResults(query, projectionIn); + return getSearchResults(query, projectionIn, cancellationSignal); } default: throw new IllegalArgumentException("URL " + uri + " doesn't support querying."); } } - private Cursor getSuggestions(String query, String[] projectionIn) { + private Cursor getSuggestions(String query, String[] projectionIn, + CancellationSignal cancellationSignal) { Map<String, String> projectionMap = sSearchSuggestionsProjectionMap; // No zero-query suggestions or launch times except for global search, // to avoid leaking info about apps that have been used. @@ -362,7 +369,7 @@ public class ApplicationsProvider extends ContentProvider { } else if (TextUtils.isEmpty(query)) { return null; } - return searchApplications(query, projectionIn, projectionMap); + return searchApplications(query, projectionIn, projectionMap, cancellationSignal); } /** @@ -386,12 +393,13 @@ public class ApplicationsProvider extends ContentProvider { return cursor; } - private Cursor getSearchResults(String query, String[] projectionIn) { - return searchApplications(query, projectionIn, sSearchProjectionMap); + private Cursor getSearchResults(String query, String[] projectionIn, + CancellationSignal cancellationSignal) { + return searchApplications(query, projectionIn, sSearchProjectionMap, cancellationSignal); } private Cursor searchApplications(String query, String[] projectionIn, - Map<String, String> columnMap) { + Map<String, String> columnMap, CancellationSignal cancelationSignal) { final boolean zeroQuery = TextUtils.isEmpty(query); SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); qb.setTables(APPLICATIONS_LOOKUP_JOIN); @@ -409,7 +417,8 @@ public class ApplicationsProvider extends ContentProvider { } // don't return duplicates when there are two matching tokens for an app String groupBy = APPLICATIONS_TABLE + "." + _ID; - Cursor cursor = qb.query(mDb, projectionIn, null, null, groupBy, null, orderBy); + Cursor cursor = qb.query(mDb, projectionIn, null, null, groupBy, null, orderBy, null, + cancelationSignal); if (DBG) Log.d(TAG, "Returning " + cursor.getCount() + " results for " + query); return cursor; } @@ -604,7 +613,6 @@ public class ApplicationsProvider extends ContentProvider { } else { mDb.delete(APPLICATIONS_TABLE, PACKAGE + " = ?", new String[] { packageName }); } - } @Override @@ -691,5 +699,4 @@ public class ApplicationsProvider extends ContentProvider { return (PackageManager.PERMISSION_GRANTED == getContext().checkCallingPermission(android.Manifest.permission.GLOBAL_SEARCH)); } - } |