| 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);
|
| + }
|
| + }
|
| + }
|
| +}
|
|
|