Fixes bug 2018090 in browser Website Settings.
Browser Website settings menu now correctly distinguishes origins at the same host.
diff --git a/src/com/android/browser/WebsiteSettingsActivity.java b/src/com/android/browser/WebsiteSettingsActivity.java
index 4a9eb55..f91879f 100644
--- a/src/com/android/browser/WebsiteSettingsActivity.java
+++ b/src/com/android/browser/WebsiteSettingsActivity.java
@@ -40,6 +40,7 @@
import android.widget.TextView;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;
@@ -116,19 +117,36 @@
clear();
// Get the list of origins we want to display
- HashMap<String, Site> uris = new HashMap<String, Site>();
Set origins = WebStorage.getInstance().getOrigins();
+ Set sites = new HashSet<Site>();
if (origins != null) {
Iterator<String> iter = origins.iterator();
while (iter.hasNext()) {
String origin = iter.next();
Site site = new Site(origin);
- uris.put(Uri.parse(origin).getHost(), site);
+ sites.add(site);
}
}
- // Check the bookmark db -- if one of our origin matches,
- // we set its title and favicon
+ // Create a map from host to origin. This is used to add metadata
+ // (title, icon) for this origin from the bookmarks DB.
+ HashMap hosts = new HashMap<String, Set<Site> >();
+ Iterator<Site> sitesIter = sites.iterator();
+ while (sitesIter.hasNext()) {
+ Site site = sitesIter.next();
+ String host = Uri.parse(site.getOrigin()).getHost();
+ Set hostSites = null;
+ if (hosts.containsKey(host)) {
+ hostSites = (Set) hosts.get(host);
+ } else {
+ hostSites = new HashSet<Site>();
+ hosts.put(host, hostSites);
+ }
+ hostSites.add(site);
+ }
+
+ // Check the bookmark DB. If we have data for a host used by any of
+ // our origins, use it to set their title and favicon
Cursor c = getContext().getContentResolver().query(Browser.BOOKMARKS_URI,
new String[] { Browser.BookmarkColumns.URL, Browser.BookmarkColumns.TITLE,
Browser.BookmarkColumns.FAVICON }, "bookmark = 1", null, null);
@@ -140,13 +158,18 @@
do {
String url = c.getString(urlIndex);
String host = Uri.parse(url).getHost();
- if (uris.containsKey(host)) {
+ if (hosts.containsKey(host)) {
String title = c.getString(titleIndex);
- Site site = uris.get(host);
- site.setTitle(title);
+ Bitmap bmp = null;
byte[] data = c.getBlob(faviconIndex);
if (data != null) {
- Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
+ bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
+ }
+ Set matchingSites = (Set) hosts.get(host);
+ sitesIter = matchingSites.iterator();
+ while (sitesIter.hasNext()) {
+ Site site = sitesIter.next();
+ site.setTitle(title);
if (bmp != null) {
site.setIcon(bmp);
}
@@ -156,11 +179,9 @@
}
// We can now simply populate our array with Site instances
- Set keys = uris.keySet();
- Iterator iter = keys.iterator();
- while (iter.hasNext()) {
- String origin = (String) iter.next();
- Site site = uris.get(origin);
+ sitesIter = sites.iterator();
+ while (sitesIter.hasNext()) {
+ Site site = sitesIter.next();
add(site);
}