Merge "fixed bookmarks widget bug http://b/issue?id=2942821 added check for null intent when service is started"
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index e144f99..f380711 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -706,13 +706,17 @@
url = smartUrlFilter(url);
final ContentResolver cr = mResolver;
final String newUrl = url;
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... unused) {
- Browser.updateVisitedHistory(cr, newUrl, false);
- return null;
- }
- }.execute();
+ if (mTabControl == null
+ || mTabControl.getCurrentWebView() == null
+ || !mTabControl.getCurrentWebView().isPrivateBrowsingEnabled()) {
+ new AsyncTask<Void, Void, Void>() {
+ @Override
+ protected Void doInBackground(Void... unused) {
+ Browser.updateVisitedHistory(cr, newUrl, false);
+ return null;
+ }
+ }.execute();
+ }
String searchSource = "&source=android-" + GOOGLE_SEARCH_SOURCE_SUGGEST + "&";
if (url.contains(searchSource)) {
String source = null;
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 973d0f7..5825525 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -51,8 +51,8 @@
static final String TABLE_SEARCHES = "searches";
static final String TABLE_SYNC_STATE = "syncstate";
- static final String DEFAULT_HISTORY_SORT = History.DATE_LAST_VISITED + " DESC";
-
+ static final String DEFAULT_SORT_HISTORY = History.DATE_LAST_VISITED + " DESC";
+
static final int BOOKMARKS = 1000;
static final int BOOKMARKS_ID = 1001;
static final int BOOKMARKS_FOLDER = 1002;
@@ -77,9 +77,9 @@
static final UriMatcher URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
static final HashMap<String, String> BOOKMARKS_PROJECTION_MAP = new HashMap<String, String>();
- static final HashMap<String, String> OTHER_BOOKMARKS_PROJECTION_MAP = new HashMap<String, String>();
+ static final HashMap<String, String> OTHER_BOOKMARKS_PROJECTION_MAP =
+ new HashMap<String, String>();
static final HashMap<String, String> HISTORY_PROJECTION_MAP = new HashMap<String, String>();
- static final HashMap<String, String> SEARCHES_PROJECTION_MAP = new HashMap<String, String>();
static final HashMap<String, String> SYNC_STATE_PROJECTION_MAP = new HashMap<String, String>();
static {
@@ -493,7 +493,7 @@
}
case HISTORY: {
if (sortOrder == null) {
- sortOrder = DEFAULT_HISTORY_SORT;
+ sortOrder = DEFAULT_SORT_HISTORY;
}
qb.setProjectionMap(HISTORY_PROJECTION_MAP);
qb.setTables(TABLE_HISTORY);
@@ -511,7 +511,7 @@
+ (selection == null ? "" : " AND (" + selection + ")");
return mSyncHelper.query(db, projection, selectionWithId, selectionArgs, sortOrder);
}
-
+
default: {
throw new UnsupportedOperationException("Unknown URL " + uri.toString());
}
@@ -643,24 +643,15 @@
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
switch (match) {
case BOOKMARKS_ID: {
- // Mark the bookmark dirty if the caller isn't a sync adapter
- if (!callerIsSyncAdapter) {
- values = new ContentValues(values);
- values.put(Bookmarks.DIRTY, 1);
- }
selection = DatabaseUtils.concatenateWhere(selection,
TABLE_BOOKMARKS + "._id=?");
selectionArgs = DatabaseUtils.appendSelectionArgs(selectionArgs,
new String[] { Long.toString(ContentUris.parseId(uri)) });
- return db.update(TABLE_BOOKMARKS, values, selection, selectionArgs);
+ // fall through
}
-
case BOOKMARKS: {
- if (!callerIsSyncAdapter) {
- values = new ContentValues(values);
- values.put(Bookmarks.DIRTY, 1);
- }
- return updateBookmarksInTransaction(values, selection, selectionArgs);
+ return updateBookmarksInTransaction(values, selection, selectionArgs,
+ callerIsSyncAdapter);
}
case HISTORY_ID: {
@@ -704,15 +695,25 @@
* Does a query to find the matching bookmarks and updates each one with the provided values.
*/
private int updateBookmarksInTransaction(ContentValues values, String selection,
- String[] selectionArgs) {
+ String[] selectionArgs, boolean callerIsSyncAdapter) {
int count = 0;
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
- Cursor cursor = query(Bookmarks.CONTENT_URI, new String[] { Bookmarks._ID },
+ Cursor cursor = query(Bookmarks.CONTENT_URI,
+ new String[] { Bookmarks._ID, Bookmarks.VERSION },
selection, selectionArgs, null);
try {
String[] args = new String[1];
+ // Mark the bookmark dirty if the caller isn't a sync adapter
+ if (!callerIsSyncAdapter) {
+ values = new ContentValues(values);
+ values.put(Bookmarks.DIRTY, 1);
+ }
while (cursor.moveToNext()) {
args[0] = cursor.getString(0);
+ if (!callerIsSyncAdapter) {
+ // increase the local version for non-sync changes
+ values.put(Bookmarks.VERSION, cursor.getLong(1) + 1);
+ }
count += db.update(TABLE_BOOKMARKS, values, "_id=?", args);
}
} finally {