Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(295)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGrid.java

Issue 2651673010: 🍝🏠 Refactor MostVisited UI management, extract it for reuse in Home. (Closed)
Patch Set: Rebase. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGrid.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGrid.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGrid.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ed212213b6a63f58cefa578367c707d9045161b
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGrid.java
@@ -0,0 +1,110 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.suggestions;
+
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ntp.ContextMenuManager;
+import org.chromium.chrome.browser.ntp.MostVisitedLayout;
+import org.chromium.chrome.browser.ntp.cards.ItemViewType;
+import org.chromium.chrome.browser.ntp.cards.NewTabPageViewHolder;
+import org.chromium.chrome.browser.ntp.cards.OptionalLeaf;
+
+/**
+ * The model and controller for a group of site suggestion tiles that will be rendered in a grid.
+ */
+public class TileGrid extends OptionalLeaf implements TileGroup.Observer {
+ private static final int MAX_TILES = 4;
+ private static final int MAX_ROWS = 1;
+
+ private final TileGroup mTileGroup;
+
+ public TileGrid(SuggestionsUiDelegate uiDelegate, ContextMenuManager contextMenuManager,
+ TileGroup.Delegate tileGroupDelegate) {
+ mTileGroup = new TileGroup(
+ uiDelegate, contextMenuManager, tileGroupDelegate, /* observer = */ this);
+ mTileGroup.startObserving(MAX_TILES);
+ }
+
+ @Override
+ @ItemViewType
+ protected int getItemViewType() {
+ return ItemViewType.TILE_GRID;
+ }
+
+ @Override
+ protected void onBindViewHolder(NewTabPageViewHolder holder) {
+ assert holder instanceof ViewHolder;
+ ((ViewHolder) holder).onBindViewHolder(mTileGroup);
+ }
+
+ @Override
+ public void onInitialTileDataLoaded() {
+ onTileDataChanged();
+ }
+
+ @Override
+ public void onTileDataChanged() {
+ notifyItemChanged(0);
+ setVisible(mTileGroup.getTiles().length != 0);
+ }
+
+ @Override
+ public void onTileCountChanged() {
+ onTileDataChanged();
+ }
+
+ @Override
+ public void onTileIconChanged(Tile tile) {
+ notifyItemChanged(0, new ViewHolder.UpdateIconViewCallback(tile));
+ }
+
+ @Override
+ public void onLoadTaskAdded() {}
+
+ @Override
+ public void onLoadTaskCompleted() {}
+
+ /**
+ * The {@code ViewHolder} for the {@link TileGrid}.
+ */
+ public static class ViewHolder extends NewTabPageViewHolder {
+ private final MostVisitedLayout mLayout;
+
+ public ViewHolder(ViewGroup parentView) {
+ super(LayoutInflater.from(parentView.getContext())
+ .inflate(R.layout.suggestions_site_tile_grid, parentView, false));
+ mLayout = (MostVisitedLayout) itemView;
+ }
+
+ public void onBindViewHolder(TileGroup tileGroup) {
+ mLayout.setMaxRows(MAX_ROWS);
+ tileGroup.renderTileViews(mLayout, /* trackLoadTasks = */ false);
+ }
+
+ public void updateIconView(Tile tile) {
+ mLayout.updateIconView(tile.getUrl(), tile.getIcon());
+ }
+
+ /**
+ * Callback to update the icon view for the view holder.
+ */
+ public static class UpdateIconViewCallback extends PartialBindCallback {
+ private final Tile mTile;
+
+ public UpdateIconViewCallback(Tile tile) {
+ mTile = tile;
+ }
+
+ @Override
+ public void onResult(NewTabPageViewHolder holder) {
+ assert holder instanceof ViewHolder;
+ ((ViewHolder) holder).updateIconView(mTile);
+ }
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698