Chromium Code Reviews| 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..04a2e04df6b72577f16afd7a23944dbbe4e357d3 |
| --- /dev/null |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGrid.java |
| @@ -0,0 +1,97 @@ |
| +// 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.Leaf; |
| +import org.chromium.chrome.browser.ntp.cards.NewTabPageViewHolder; |
| +import org.chromium.chrome.browser.ntp.cards.NewTabPageViewHolder.PartialBindCallback; |
| + |
| +/** |
| + * The model and controller for a group of site suggestion tiles that will be rendered in a grid. |
| + */ |
| +public class TileGrid extends Leaf implements TileGroup.Observer { |
|
dgn
2017/01/31 18:21:35
what if the user removes all the tiles? do we stil
Michael van Ouwerkerk
2017/02/03 12:37:48
It was rendering with 0 height so the user wouldn'
|
| + 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() { |
| + notifyItemChanged(0); |
| + } |
| + |
| + @Override |
| + public void onTileDataChanged() { |
| + notifyItemChanged(0); |
| + } |
| + |
| + @Override |
| + public void onTileCountChanged() {} |
|
dgn
2017/01/31 18:21:35
why no notification here?
Michael van Ouwerkerk
2017/02/03 12:37:48
Done.
|
| + |
| + @Override |
| + public void onTileIconChanged(final Tile tile) { |
| + notifyItemChanged(0, new PartialBindCallback() { |
| + @Override |
| + public void onResult(NewTabPageViewHolder holder) { |
| + assert holder instanceof ViewHolder; |
| + ((ViewHolder) holder).updateIconView(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()); |
| + } |
| + } |
| +} |