Bug 1265708 - Post: query topsites metadata by URL without ref too r?sebastian
MozReview-Commit-ID: KzbKJjRm4Za
--- a/mobile/android/base/java/org/mozilla/gecko/home/TopSitesPanel.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/TopSitesPanel.java
@@ -31,16 +31,17 @@ import org.mozilla.gecko.home.HomeContex
import org.mozilla.gecko.home.HomePager.OnUrlOpenListener;
import org.mozilla.gecko.home.PinSiteDialog.OnSiteSelectedListener;
import org.mozilla.gecko.home.TopSitesGridView.OnEditPinnedSiteListener;
import org.mozilla.gecko.home.TopSitesGridView.TopSitesGridContextMenuInfo;
import org.mozilla.gecko.restrictions.Restrictable;
import org.mozilla.gecko.restrictions.Restrictions;
import org.mozilla.gecko.util.StringUtils;
import org.mozilla.gecko.util.ThreadUtils;
+import org.mozilla.gecko.util.URLUtils;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.os.Bundle;
@@ -807,31 +808,41 @@ public class TopSitesPanel extends HomeF
@Override
public Map<String, ThumbnailInfo> loadInBackground() {
final Map<String, ThumbnailInfo> thumbnails = new HashMap<String, ThumbnailInfo>();
if (mUrls == null || mUrls.size() == 0) {
return thumbnails;
}
+ // We need to query metadata based on the URL without any refs, hence we create a new
+ // mapping and list of these URLs (we need to preserve the original URL for display purposes)
+ final Map<String, String> queryURLs = new HashMap<>();
+ for (final String pageURL : mUrls) {
+ queryURLs.put(pageURL, URLUtils.stripRefFromURL(pageURL));
+ }
+
// Query the DB for tile images.
final ContentResolver cr = getContext().getContentResolver();
- final Map<String, Map<String, Object>> metadata = mDB.getURLMetadata().getForURLs(cr, mUrls, COLUMNS);
+ // Use the stripped URLs for querying the DB
+ final Map<String, Map<String, Object>> metadata = mDB.getURLMetadata().getForURLs(cr, queryURLs.values(), COLUMNS);
// Keep a list of urls that don't have tiles images. We'll use thumbnails for them instead.
final List<String> thumbnailUrls = new ArrayList<String>();
- for (String url : mUrls) {
- ThumbnailInfo info = ThumbnailInfo.fromMetadata(metadata.get(url));
+ for (final String pageURL : mUrls) {
+ final String queryURL = queryURLs.get(pageURL);
+
+ ThumbnailInfo info = ThumbnailInfo.fromMetadata(metadata.get(queryURL));
if (info == null) {
// If we didn't find metadata, we'll look for a thumbnail for this url.
- thumbnailUrls.add(url);
+ thumbnailUrls.add(pageURL);
continue;
}
- thumbnails.put(url, info);
+ thumbnails.put(pageURL, info);
}
if (thumbnailUrls.size() == 0) {
return thumbnails;
}
// Query the DB for tile thumbnails.
final Cursor cursor = mDB.getThumbnailsForUrls(cr, thumbnailUrls);