[Touchless]: Return backup icon if no icon is available for context menu
(cherry picked from commit 0063e7a725af029c3009b13b25895119a9d27b44)
Bug: 970373
Change-Id: I6316993dfa21e73ea5b6e6b46186d4f4c576aab2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1652082
Commit-Queue: Cathy Li <chili@chromium.org>
Reviewed-by: Justin DeWitt <dewittj@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#667743}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1653417
Reviewed-by: Cathy Li <chili@chromium.org>
Cr-Commit-Position: refs/branch-heads/3809@{#225}
Cr-Branched-From: d82dec1a818f378c464ba307ddd9c92133eac355-refs/heads/master@{#665002}
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionModel.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionModel.java
index d8ffa75..969b06b 100644
--- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionModel.java
+++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionModel.java
@@ -25,19 +25,23 @@
new PropertyModel.ReadableObjectPropertyKey<>();
static final PropertyModel.WritableObjectPropertyKey<Bitmap> ICON_KEY =
new PropertyModel.WritableObjectPropertyKey<>();
+ static final PropertyModel.ReadableObjectPropertyKey<Bitmap> DEFAULT_ICON_KEY =
+ new PropertyModel.ReadableObjectPropertyKey<>();
- static PropertyModel getSiteSuggestionModel(SiteSuggestion suggestion) {
+ static PropertyModel getSiteSuggestionModel(SiteSuggestion suggestion, Bitmap defaultIcon) {
String title = UrlUtilities.getDomainAndRegistry(suggestion.url, false);
if (TextUtils.isEmpty(title)) {
// Fallback to title.
title = suggestion.title;
}
return new PropertyModel
- .Builder(TITLE_KEY, URL_KEY, ICON_KEY, SOURCE_KEY, WHITELIST_ICON_PATH_KEY)
+ .Builder(TITLE_KEY, URL_KEY, ICON_KEY, SOURCE_KEY, WHITELIST_ICON_PATH_KEY,
+ DEFAULT_ICON_KEY)
.with(TITLE_KEY, title)
.with(URL_KEY, suggestion.url)
.with(SOURCE_KEY, suggestion.source)
.with(WHITELIST_ICON_PATH_KEY, suggestion.whitelistIconPath)
+ .with(DEFAULT_ICON_KEY, defaultIcon)
.build();
}
}
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsAdapter.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsAdapter.java
index b2533f4..9197ab0a 100644
--- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsAdapter.java
+++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsAdapter.java
@@ -17,7 +17,6 @@
import android.support.annotation.IntDef;
import android.support.annotation.Nullable;
import android.support.graphics.drawable.VectorDrawableCompat;
-import android.support.v7.widget.RecyclerView;
import android.view.ContextMenu;
import android.view.View;
import android.widget.TextView;
@@ -25,7 +24,6 @@
import org.chromium.chrome.browser.UrlConstants;
import org.chromium.chrome.browser.native_page.ContextMenuManager;
import org.chromium.chrome.browser.suggestions.SuggestionsNavigationDelegate;
-import org.chromium.chrome.browser.widget.RoundedIconGenerator;
import org.chromium.chrome.touchless.R;
import org.chromium.ui.modelutil.ForwardingListObservable;
import org.chromium.ui.modelutil.PropertyKey;
@@ -110,38 +108,34 @@
@Override
public Bitmap getIconBitmap() {
+ if (mSuggestion.get(SiteSuggestionModel.ICON_KEY) == null) {
+ return mSuggestion.get(SiteSuggestionModel.DEFAULT_ICON_KEY);
+ }
return mSuggestion.get(SiteSuggestionModel.ICON_KEY);
}
}
private PropertyModel mModel;
- private RoundedIconGenerator mIconGenerator;
private SuggestionsNavigationDelegate mNavDelegate;
private ContextMenuManager mContextMenuManager;
private SiteSuggestionsLayoutManager mLayoutManager;
private TextView mTitleView;
- private final RecyclerView mRecyclerView;
-
/**
* @param model the main property model coming from {@link SiteSuggestionsCoordinator}.
- * @param iconGenerator an icon generator for creating icons.
* @param navigationDelegate delegate for navigation controls
* @param contextMenuManager handles context menu creation
* @param layoutManager the layout manager controlling this recyclerview and adapter
* @param titleView the view to update site title when focus changes.
*/
- SiteSuggestionsAdapter(PropertyModel model, RoundedIconGenerator iconGenerator,
- SuggestionsNavigationDelegate navigationDelegate, ContextMenuManager contextMenuManager,
- SiteSuggestionsLayoutManager layoutManager, TextView titleView,
- RecyclerView recyclerView) {
+ SiteSuggestionsAdapter(PropertyModel model, SuggestionsNavigationDelegate navigationDelegate,
+ ContextMenuManager contextMenuManager, SiteSuggestionsLayoutManager layoutManager,
+ TextView titleView) {
mModel = model;
- mIconGenerator = iconGenerator;
mNavDelegate = navigationDelegate;
mContextMenuManager = contextMenuManager;
mLayoutManager = layoutManager;
mTitleView = titleView;
- mRecyclerView = recyclerView;
mModel.get(SUGGESTIONS_KEY).addObserver(this);
mModel.addObserver(this);
@@ -195,11 +189,10 @@
// Only update the icon for icon updates.
if (payload == SiteSuggestionModel.ICON_KEY) {
tile.updateIcon(item.get(SiteSuggestionModel.ICON_KEY),
- item.get(SiteSuggestionModel.TITLE_KEY));
+ item.get(SiteSuggestionModel.DEFAULT_ICON_KEY));
} else {
- tile.initialize(mIconGenerator);
tile.updateIcon(item.get(SiteSuggestionModel.ICON_KEY),
- item.get(SiteSuggestionModel.TITLE_KEY));
+ item.get(SiteSuggestionModel.DEFAULT_ICON_KEY));
SiteSuggestionInteractionDelegate interactionDelegate =
new SiteSuggestionInteractionDelegate(item);
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsCoordinator.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsCoordinator.java
index 57cb334f..f8d835cd 100644
--- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsCoordinator.java
+++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsCoordinator.java
@@ -73,9 +73,9 @@
RecyclerView recyclerView =
suggestionsView.findViewById(R.id.most_likely_launcher_recycler);
- SiteSuggestionsAdapter adapterDelegate = new SiteSuggestionsAdapter(model, iconGenerator,
+ SiteSuggestionsAdapter adapterDelegate = new SiteSuggestionsAdapter(model,
navigationDelegate, contextMenuManager, layoutManager,
- suggestionsView.findViewById(R.id.most_likely_web_title_text), recyclerView);
+ suggestionsView.findViewById(R.id.most_likely_web_title_text));
RecyclerViewAdapter<SiteSuggestionsViewHolderFactory.SiteSuggestionsViewHolder, PropertyKey>
adapter = new RecyclerViewAdapter<>(
@@ -98,7 +98,8 @@
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
- mMediator = new SiteSuggestionsMediator(model, profile, imageFetcher, iconSize);
+ mMediator =
+ new SiteSuggestionsMediator(model, profile, imageFetcher, iconGenerator, iconSize);
}
public void destroy() {
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsMediator.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsMediator.java
index 0c22dd26..acdf180 100644
--- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsMediator.java
+++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsMediator.java
@@ -19,6 +19,7 @@
import org.chromium.chrome.browser.suggestions.MostVisitedSites;
import org.chromium.chrome.browser.suggestions.SiteSuggestion;
import org.chromium.chrome.browser.suggestions.SuggestionsDependencyFactory;
+import org.chromium.chrome.browser.widget.RoundedIconGenerator;
import org.chromium.chrome.touchless.R;
import org.chromium.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyModel;
@@ -49,6 +50,7 @@
private ImageFetcher mImageFetcher;
private MostVisitedSites mMostVisitedSites;
private Profile mProfile;
+ private RoundedIconGenerator mDefaultIconGenerator;
private int mIconSize;
// Whether we should set focus to the data. Used to delay focus-setting until after loading
@@ -57,12 +59,13 @@
// Whether we have pending requests for suggestions.
private boolean mHasPendingRequests;
- SiteSuggestionsMediator(
- PropertyModel model, Profile profile, ImageFetcher imageFetcher, int minIconSize) {
+ SiteSuggestionsMediator(PropertyModel model, Profile profile, ImageFetcher imageFetcher,
+ RoundedIconGenerator iconGenerator, int minIconSize) {
mModel = model;
mImageFetcher = imageFetcher;
mIconSize = minIconSize;
mProfile = profile;
+ mDefaultIconGenerator = iconGenerator;
mHasPendingRequests = true;
mMostVisitedSites =
@@ -89,7 +92,8 @@
// Do not put duplicates.
if (urls.contains(suggestion.url)) continue;
- PropertyModel siteSuggestion = SiteSuggestionModel.getSiteSuggestionModel(suggestion);
+ PropertyModel siteSuggestion = SiteSuggestionModel.getSiteSuggestionModel(
+ suggestion, mDefaultIconGenerator.generateIconForText(suggestion.title));
modelList.add(siteSuggestion);
if (suggestion.whitelistIconPath.isEmpty()) {
makeIconRequest(siteSuggestion);
diff --git a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsTileView.java b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsTileView.java
index cdf1316..42519ff 100644
--- a/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsTileView.java
+++ b/chrome/android/touchless/java/src/org/chromium/chrome/browser/touchless/SiteSuggestionsTileView.java
@@ -11,7 +11,6 @@
import android.util.AttributeSet;
import org.chromium.chrome.browser.util.ViewUtils;
-import org.chromium.chrome.browser.widget.RoundedIconGenerator;
import org.chromium.chrome.browser.widget.tile.TileView;
import org.chromium.chrome.touchless.R;
@@ -21,8 +20,6 @@
public class SiteSuggestionsTileView extends TileView {
private final int mIconSizePx;
- // Used to generate textual icons.
- private RoundedIconGenerator mIconGenerator;
public SiteSuggestionsTileView(Context ctx, AttributeSet attrs) {
super(ctx, attrs);
@@ -30,33 +27,25 @@
}
/**
- * Initializes the icon generator and clears the model processor attached to this view.
- * @param generator The generator for icons.
- */
- public void initialize(RoundedIconGenerator generator) {
- mIconGenerator = generator;
- }
-
- /**
* Updates the icon in the tile.
*
* @param iconImage Bitmap icon to update.
- * @param text Text to generate scrabble text from.
+ * @param defaultIcon Default icon for the tile.
*/
- public void updateIcon(Bitmap iconImage, String text) {
- setIconDrawable(getDrawableForBitmap(iconImage, text));
+ public void updateIcon(Bitmap iconImage, Bitmap defaultIcon) {
+ setIconDrawable(getDrawableForBitmap(iconImage, defaultIcon));
}
/**
* Generates a Drawable from the Bitmap version of an icon.
*
* @param image The Bitmap image. Can be null.
- * @param text The text to generate a scrabble text from if the bitmap is null.
+ * @param defaultIcon Default icon for the tile.
* @return Drawable encapsulating either the scrabble tile or the bitmap.
*/
- public Drawable getDrawableForBitmap(Bitmap image, String text) {
+ public Drawable getDrawableForBitmap(Bitmap image, Bitmap defaultIcon) {
if (image == null) {
- return new BitmapDrawable(getResources(), mIconGenerator.generateIconForText(text));
+ return new BitmapDrawable(getResources(), defaultIcon);
}
return ViewUtils.createRoundedBitmapDrawable(
Bitmap.createScaledBitmap(image, mIconSizePx, mIconSizePx, false),