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

Issue 1812293002: Add new NTP layout with snippet cards and hide it behind a flag (Closed)

Created:
4 years, 9 months ago by May
Modified:
4 years, 8 months ago
CC:
dgn, Bernhard Bauer, chromium-reviews, mcwilliams, Marc Treib
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

Add new NTP layout with snippet cards and hide it behind a flag Swapping out the ScrollView in the current NTP for a RecyclerView for the new NTP with cards. The current NTP's content view will be preserved and added as a View in the new RecyclerView. The swapping will happen via a ViewStub that gets inflated at runtime, depending on the runtime switches. Mocks are here: https://folio.googleplex.com/chrome-ux/mocks/335-NTP-Zine/Zine/160225-ChromePlate Spec is here: https://folio.googleplex.com/chrome-ux/mocks/335-NTP-Zine/Zine/_UI%20Review#%2FSpec%20-%20zine.png%3Fz=width Video demos: Feature off: https://drive.google.com/open?id=0B1flmW1uZoFBWVZzVjZWRVotbjg Feature on: https://drive.google.com/open?id=0B1flmW1uZoFBT0pNU2tFc3FlSDg Known issues: Missing favicon, publisher Cards are not full width NTP background is not the right gradient Snap points are not yet implemented on new NTP Cards are not shown as a hint yet Search box jumps back down when scrolling between above the fold and the cards BUG=584352 This was continued in https://codereview.chromium.org/1833763002 .

Patch Set 1 #

Total comments: 91

Patch Set 2 : rebase + CR comments + added background color to new NTP #

Total comments: 41
Unified diffs Side-by-side diffs Delta from patch set Stats (+818 lines, -694 lines) Patch
M chrome/android/java/res/layout/new_tab_page.xml View 1 1 chunk +5 lines, -143 lines 0 comments Download
A chrome/android/java/res/layout/new_tab_page_layout.xml View 1 chunk +130 lines, -0 lines 0 comments Download
A chrome/android/java/res/layout/new_tab_page_recyclerview.xml View 1 1 chunk +13 lines, -0 lines 0 comments Download
A chrome/android/java/res/layout/new_tab_page_scrollview.xml View 1 1 chunk +19 lines, -0 lines 0 comments Download
M chrome/android/java/res/layout/new_tab_page_snippets_card.xml View 1 chunk +24 lines, -35 lines 0 comments Download
M chrome/android/java/res/values-sw600dp/dimens.xml View 1 1 chunk +0 lines, -1 line 0 comments Download
M chrome/android/java/res/values/colors.xml View 1 2 chunks +6 lines, -6 lines 0 comments Download
M chrome/android/java/res/values/dimens.xml View 1 1 chunk +2 lines, -2 lines 0 comments Download
M chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java View 1 3 chunks +7 lines, -9 lines 1 comment Download
A chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCardsManager.java View 1 1 chunk +150 lines, -0 lines 14 comments Download
M chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java View 1 5 chunks +27 lines, -0 lines 4 comments Download
M chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java View 1 17 chunks +86 lines, -42 lines 9 comments Download
A chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageViewHolder.java View 1 1 chunk +48 lines, -0 lines 2 comments Download
A chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java View 1 1 chunk +90 lines, -0 lines 5 comments Download
A chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticle.java View 1 1 chunk +119 lines, -0 lines 2 comments Download
M chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetCardItemViewHolder.java View 1 1 chunk +0 lines, -111 lines 1 comment Download
A + chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetCardViewHolder.java View 1 5 chunks +16 lines, -34 lines 0 comments Download
M chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetHeaderItemViewHolder.java View 1 1 chunk +0 lines, -46 lines 0 comments Download
A + chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetHeaderViewHolder.java View 1 2 chunks +5 lines, -15 lines 2 comments Download
D chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetListItemViewHolder.java View 1 chunk +0 lines, -46 lines 0 comments Download
D chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsAdapter.java View 1 chunk +0 lines, -71 lines 0 comments Download
M chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsBridge.java View 2 chunks +6 lines, -5 lines 0 comments Download
M chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetsManager.java View 1 3 chunks +51 lines, -123 lines 1 comment Download
M chrome/android/java/strings/android_chrome_strings.grd View 1 chunk +1 line, -4 lines 0 comments Download
M chrome/browser/android/ntp/ntp_snippets_bridge.cc View 3 chunks +5 lines, -1 line 0 comments Download
M tools/metrics/actions/actions.xml View 1 2 chunks +2 lines, -0 lines 0 comments Download
M tools/metrics/histograms/histograms.xml View 1 2 chunks +6 lines, -0 lines 0 comments Download

Messages

Total messages: 24 (10 generated)
May
newt@ -- not to put undue pressure on you, but just FYI that I will ...
4 years, 9 months ago (2016-03-21 10:19:17 UTC) #5
mcwilliams
Just a few nits https://codereview.chromium.org/1812293002/diff/1/chrome/android/java/res/layout/new_tab_page_layout.xml File chrome/android/java/res/layout/new_tab_page_layout.xml (right): https://codereview.chromium.org/1812293002/diff/1/chrome/android/java/res/layout/new_tab_page_layout.xml#newcode1 chrome/android/java/res/layout/new_tab_page_layout.xml:1: <?xml version="1.0" encoding="utf-8"?> Is there ...
4 years, 9 months ago (2016-03-21 12:45:50 UTC) #8
Bernhard Bauer
https://codereview.chromium.org/1812293002/diff/1/chrome/android/java/res/layout/new_tab_page_layout.xml File chrome/android/java/res/layout/new_tab_page_layout.xml (right): https://codereview.chromium.org/1812293002/diff/1/chrome/android/java/res/layout/new_tab_page_layout.xml#newcode1 chrome/android/java/res/layout/new_tab_page_layout.xml:1: <?xml version="1.0" encoding="utf-8"?> On 2016/03/21 12:45:50, mcwilliams wrote: > ...
4 years, 9 months ago (2016-03-21 15:13:56 UTC) #10
newt (away)
Off to a good start! I think this is a solid approach for allowing us ...
4 years, 9 months ago (2016-03-23 05:29:39 UTC) #11
May
FYI -- added background color to the new NTP as well since it was trivial ...
4 years, 9 months ago (2016-03-23 19:22:58 UTC) #12
May
+rkaplow for histograms / actions OWNER. PTAL!
4 years, 9 months ago (2016-03-23 19:24:41 UTC) #13
May
+rkaplow for histograms / actions OWNER. PTAL!
4 years, 9 months ago (2016-03-23 19:25:14 UTC) #15
rkaplow
lgtm
4 years, 9 months ago (2016-03-23 21:19:42 UTC) #16
May
https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java File chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java (right): https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java#newcode129 chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java:129: int mostVisitedWidthSpec = To whoever takes over this CL: ...
4 years, 9 months ago (2016-03-24 07:21:20 UTC) #17
dgn
I got some layout issues when running this: https://goo.gl/photos/BxCkQs25vpABPkaW7 https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java File chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java (right): https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java#newcode20 chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java:20: ...
4 years, 9 months ago (2016-03-24 13:56:26 UTC) #19
newt (away)
https://codereview.chromium.org/1812293002/diff/1/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java File chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java (left): https://codereview.chromium.org/1812293002/diff/1/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java#oldcode139 chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java:139: public void focusableViewAvailable(View v) { On 2016/03/23 19:22:57, May ...
4 years, 9 months ago (2016-03-24 19:47:39 UTC) #20
dgn
I'm taking over the CL since May is OOO for a while. I uploaded a ...
4 years, 9 months ago (2016-03-25 16:29:20 UTC) #21
dgn
https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageViewHolder.java File chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageViewHolder.java (right): https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageViewHolder.java#newcode37 chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageViewHolder.java:37: protected void loadUrl(String url) { On 2016/03/25 16:29:20, dgn ...
4 years, 9 months ago (2016-03-25 16:31:25 UTC) #22
dgn
4 years, 8 months ago (2016-03-28 21:33:02 UTC) #23
Addressed comments on https://codereview.chromium.org/1833763002

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
File chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
(right):

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java:600:
mSnippetsManager = new SnippetsManager(mNewTabPageManager, mProfile);
How about checking here if the feature is enabled?
That would allow skipping the creation of the SnippetsManager (and Bridge, and
native stuff), and could allow loading a different layout directly, instead of
relying on a stub element in the new_tab_page layout.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
File
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCardsManager.java
(right):

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCardsManager.java:24:
public class NewTabPageCardsManager extends Adapter<NewTabPageViewHolder>
On 2016/03/24 19:47:38, newt wrote:
> I think NewTabPageAdapter is a better name here. The presentation as cards is
> secondary, and, in fact, some of the elements in this adapter (such as the
logo,
> fakebox, most visited sites, and the article headers) aren't cards at all.

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCardsManager.java:27:
* Describes the above the fold item
On 2016/03/24 19:47:38, newt wrote:
> This comment is rather vague. Could you make it more useful? In particular,
it'd
> be helpful to mention that these values are "view types" returned by
> ecyclerView.Adapter.getItemViewType().

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCardsManager.java:29:
public static final int SNIPPET_ITEM_ABOVE_THE_FOLD = 1;
On 2016/03/24 19:47:38, newt wrote:
> can these type constants be private?

It needs to be used at least by NewTabPageListItem's subclasses. I could make it
protected in there, maybe? I don't think it changes much at that point though.
I'll revisit after the SnippetsManager refactoring.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCardsManager.java:57:
static class AboveTheFoldListItem implements NewTabPageListItem {
On 2016/03/24 19:47:38, newt wrote:
> make this class and the class below private, if possible

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCardsManager.java:66:
static class NewTabPageAboveTheFoldViewHolder extends NewTabPageViewHolder {
On 2016/03/24 19:47:38, newt wrote:
> this name should parallel the class name above.

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCardsManager.java:80:
private List<NewTabPageListItem> mNewTabPageListItems;
On 2016/03/24 19:47:38, newt wrote:
> might as well make this final too

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCardsManager.java:93:
mNewTabPageAboveTheFoldItem = new AboveTheFoldListItem();
On 2016/03/24 19:47:38, newt wrote:
> Likewise, this member variable name should match the class name
> (AboveTheFoldListItem). In general, avoid creating multiple different
> terminologies for the same item unless there's a good reason for it.

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
File
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java
(right):

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java:87:
public void setMostVisitedWidth(int width) {
On 2016/03/24 19:47:39, newt wrote:
> As mentioned in NewTabPageView, this method should not exist.

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java:129:
int mostVisitedWidthSpec =
On 2016/03/24 07:21:20, May wrote:
> To whoever takes over this CL: This (line 129 - 136) should be an if
> (mMostVisitedWidth > 0) block. 

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
File chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java
(right):

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java:355:
if (!ChromeFeatureList.isEnabled(ChromeFeatureList.NTP_SNIPPETS)) {
On 2016/03/24 19:47:39, newt wrote:
> better: if (mScrollView != null)

We have mAreSnippetsEnabled for that, right? Isn't it clearer to use it? We
probably want it to crash is somehow mScrollView turns out to be created with
enabledSnippets

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java:468:
if (mAreSnippetsEnabled) {
On 2016/03/24 19:47:39, newt wrote:
> lines 468-478 need more de-duplication. The only difference between the two
part
> is "mRecyclerView.getHeight()" and "mScrollView.getHeight()"; extract that
> difference and remove the duplication.

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java:770:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
On 2016/03/24 19:47:39, newt wrote:
> This method should be deleted and the remainder of the logic in it should also
> be moved to NewTabPageLayout. In particular,
mContentView.setMostVisitedWidth()
> should not exist; that's the subtle timing dependency that I mentioned should
be
> removed.

Done. I'm not familiar with the layout mechanisms though. In which cases do we
run into those timing dependencies? I'd expect the measurements to happen on the
UI thread only and not have race conditions...

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
File
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java
(right):

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabRecyclerView.java:20:
public class NewTabRecyclerView extends RecyclerView {
On 2016/03/24 19:47:39, newt wrote:
> On 2016/03/24 13:56:26, dgn wrote:
> > s/NewTabRecyclerView/NewTabPageRecyclerView ? Is the [Page] missing on
> purpose?
> 
> This name parallels NewTabScrollView, but is inconsistent with all the other
> NewTabPage* classes. I'd suggest adding "Page" to this class name and to
> NewTabScrollView, for consistency with everything else.

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
File
chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticle.java
(right):

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticle.java:27:
private static final int FADE_IN_ANIMATION_TIME_MS = 500;
On 2016/03/24 19:47:39, newt wrote:
> 300ms would be more standard

Done.

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
File
chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetHeaderViewHolder.java
(right):

https://codereview.chromium.org/1812293002/diff/20001/chrome/android/java/src...
chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetHeaderViewHolder.java:35:
public void onBindViewHolder(NewTabPageListItem snippetItem) {}
On 2016/03/24 19:47:39, newt wrote:
> why are we no longer setting the header text here?

The string is now directly provided in new_tab_page_snippets_header.xml

Powered by Google App Engine
This is Rietveld 408576698