When adding a bookmark, use the same database entry as the history item.
Fix for buganizer issue 1659694. Prior to this change, the user could
visit http://cuil.com, and then bookmark http://www.cuil.com, and the
bookmark would be stored in the database as a separate entry. This
results in the bookmark claiming to have been visited long ago. Now,
the two are stored as one entry, clearing up disagreements about
number of visits and last visited date.
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index cf3fe70..f773d06 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -48,9 +48,11 @@
private Bundle mMap;
private static final String[] mProjection =
- { "_id", "url", "bookmark", "created", "title", "visits" };
- private static final String WHERE_CLAUSE = "url = ?";
- private final String[] SELECTION_ARGS = new String[1];
+ { "_id", "url", "bookmark", "created", "title", "visits" };
+ private static final String WHERE_CLAUSE
+ = "url = ? OR url = ? OR url = ? OR url = ?";
+ private static final String WHERE_CLAUSE_SECURE = "url = ? OR url = ?";
+ private String[] SELECTION_ARGS;
private View.OnClickListener mSaveBookmark = new View.OnClickListener() {
public void onClick(View v) {
@@ -153,11 +155,35 @@
} else {
// Want to append to the beginning of the list
long creationTime = new Date().getTime();
- SELECTION_ARGS[0] = url;
+ // First we check to see if the user has already visited this
+ // site. They may have bookmarked it in a different way from
+ // how it's stored in the database, so allow different combos
+ // to map to the same url.
+ boolean secure = false;
+ if (url.startsWith("http://")) {
+ url = url.substring(7);
+ } else if (url.startsWith("https://")) {
+ url = url.substring(8);
+ secure = true;
+ }
+ if (url.startsWith("www.")) {
+ url = url.substring(4);
+ }
+ if (secure) {
+ SELECTION_ARGS = new String[2];
+ SELECTION_ARGS[0] = "https://" + url;
+ SELECTION_ARGS[1] = "https://www." + url;
+ } else {
+ SELECTION_ARGS = new String[4];
+ SELECTION_ARGS[0] = url;
+ SELECTION_ARGS[1] = "www." + url;
+ SELECTION_ARGS[2] = "http://" + url;
+ SELECTION_ARGS[3] = "http://" + SELECTION_ARGS[1];
+ }
ContentResolver cr = getContentResolver();
Cursor c = cr.query(Browser.BOOKMARKS_URI,
mProjection,
- WHERE_CLAUSE,
+ secure ? WHERE_CLAUSE_SECURE : WHERE_CLAUSE,
SELECTION_ARGS,
null);
ContentValues map = new ContentValues();
@@ -186,6 +212,7 @@
cr.update(Browser.BOOKMARKS_URI, map,
"_id = " + c.getInt(0), null);
matchedTitle = true;
+ break;
}
}
if (!matchedTitle) {