summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/provider/Browser.java97
1 files changed, 63 insertions, 34 deletions
diff --git a/core/java/android/provider/Browser.java b/core/java/android/provider/Browser.java
index f32fb5a2ec57..85efea345b36 100644
--- a/core/java/android/provider/Browser.java
+++ b/core/java/android/provider/Browser.java
@@ -23,6 +23,7 @@ import android.content.Intent;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.net.Uri;
+import android.os.AsyncTask;
import android.util.Log;
import android.webkit.WebIconDatabase;
@@ -275,43 +276,71 @@ public class Browser {
public static final void updateVisitedHistory(ContentResolver cr,
String url, boolean real) {
long now = new Date().getTime();
- try {
- Cursor c = getVisitedLike(cr, url);
- /* We should only get one answer that is exactly the same. */
- if (c.moveToFirst()) {
- ContentValues map = new ContentValues();
- if (real) {
- map.put(BookmarkColumns.VISITS, c
- .getInt(HISTORY_PROJECTION_VISITS_INDEX) + 1);
- } else {
- map.put(BookmarkColumns.USER_ENTERED, 1);
- }
- map.put(BookmarkColumns.DATE, now);
- cr.update(BOOKMARKS_URI, map, "_id = " + c.getInt(0), null);
- } else {
- truncateHistory(cr);
- ContentValues map = new ContentValues();
- int visits;
- int user_entered;
- if (real) {
- visits = 1;
- user_entered = 0;
+ new UpdateVisitedHistory(cr, url, real, now).execute();
+ }
+
+ /**
+ * Runnable to perform the update in a separate thread.
+ */
+ private static class UpdateVisitedHistory extends AsyncTask<Void, Void, Void> {
+ private final ContentResolver mContentResolver;
+ private final String mUrl;
+ private final boolean mReal;
+ private final long mNow;
+
+ public UpdateVisitedHistory(ContentResolver cr, String url,
+ boolean real, long now) {
+ mContentResolver = cr;
+ mUrl = url;
+ mReal = real;
+ mNow = now;
+ }
+
+ protected Void doInBackground(Void... unused) {
+ Cursor c = null;
+ try {
+ c = getVisitedLike(mContentResolver, mUrl);
+ /* We should only get one answer that is exactly the same. */
+ if (c.moveToFirst()) {
+ ContentValues map = new ContentValues();
+ if (mReal) {
+ map.put(BookmarkColumns.VISITS, c
+ .getInt(HISTORY_PROJECTION_VISITS_INDEX) + 1);
+ } else {
+ map.put(BookmarkColumns.USER_ENTERED, 1);
+ }
+ map.put(BookmarkColumns.DATE, mNow);
+ String[] projection = new String[]
+ { Integer.valueOf(c.getInt(0)).toString() };
+ mContentResolver.update(BOOKMARKS_URI, map, "_id = ?",
+ projection);
} else {
- visits = 0;
- user_entered = 1;
+ truncateHistory(mContentResolver);
+ ContentValues map = new ContentValues();
+ int visits;
+ int user_entered;
+ if (mReal) {
+ visits = 1;
+ user_entered = 0;
+ } else {
+ visits = 0;
+ user_entered = 1;
+ }
+ map.put(BookmarkColumns.URL, mUrl);
+ map.put(BookmarkColumns.VISITS, visits);
+ map.put(BookmarkColumns.DATE, mNow);
+ map.put(BookmarkColumns.BOOKMARK, 0);
+ map.put(BookmarkColumns.TITLE, mUrl);
+ map.put(BookmarkColumns.CREATED, 0);
+ map.put(BookmarkColumns.USER_ENTERED, user_entered);
+ mContentResolver.insert(BOOKMARKS_URI, map);
}
- map.put(BookmarkColumns.URL, url);
- map.put(BookmarkColumns.VISITS, visits);
- map.put(BookmarkColumns.DATE, now);
- map.put(BookmarkColumns.BOOKMARK, 0);
- map.put(BookmarkColumns.TITLE, url);
- map.put(BookmarkColumns.CREATED, 0);
- map.put(BookmarkColumns.USER_ENTERED, user_entered);
- cr.insert(BOOKMARKS_URI, map);
+ } catch (IllegalStateException e) {
+ Log.e(LOGTAG, "updateVisitedHistory", e);
+ } finally {
+ if (c != null) c.close();
}
- c.deactivate();
- } catch (IllegalStateException e) {
- return;
+ return null;
}
}