Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa27045a authored by Leon Scroggins's avatar Leon Scroggins
Browse files

Use AsyncTask to update the history in the background.

Part of http://b/issue?id=2485421

Change-Id: Iccb2c3fc22e14eb1eb88d98ebb4499df14ffb511
parent e179c1d1
Loading
Loading
Loading
Loading
+63 −34
Original line number Diff line number Diff line
@@ -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();
        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 {
            Cursor c = getVisitedLike(cr, url);
                c = getVisitedLike(mContentResolver, mUrl);
                /* We should only get one answer that is exactly the same. */
                if (c.moveToFirst()) {
                    ContentValues map = new ContentValues();
                if (real) {
                    if (mReal) {
                        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);
                    map.put(BookmarkColumns.DATE, mNow);
                    String[] projection = new String[]
                            { Integer.valueOf(c.getInt(0)).toString() };
                    mContentResolver.update(BOOKMARKS_URI, map, "_id = ?",
                            projection);
                } else {
                truncateHistory(cr);
                    truncateHistory(mContentResolver);
                    ContentValues map = new ContentValues();
                    int visits;
                    int user_entered;
                if (real) {
                    if (mReal) {
                        visits = 1;
                        user_entered = 0;
                    } else {
                        visits = 0;
                        user_entered = 1;
                    }
                map.put(BookmarkColumns.URL, url);
                    map.put(BookmarkColumns.URL, mUrl);
                    map.put(BookmarkColumns.VISITS, visits);
                map.put(BookmarkColumns.DATE, now);
                    map.put(BookmarkColumns.DATE, mNow);
                    map.put(BookmarkColumns.BOOKMARK, 0);
                map.put(BookmarkColumns.TITLE, url);
                    map.put(BookmarkColumns.TITLE, mUrl);
                    map.put(BookmarkColumns.CREATED, 0);
                    map.put(BookmarkColumns.USER_ENTERED, user_entered);
                cr.insert(BOOKMARKS_URI, map);
                    mContentResolver.insert(BOOKMARKS_URI, map);
                }
            c.deactivate();
            } catch (IllegalStateException e) {
            return;
                Log.e(LOGTAG, "updateVisitedHistory", e);
            } finally {
                if (c != null) c.close();
            }
            return null;
        }
    }