Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.ntp; | 5 package org.chromium.chrome.browser.ntp; |
| 6 | 6 |
| 7 import android.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
| 8 import android.content.Context; | 8 import android.content.Context; |
| 9 import android.content.res.Configuration; | 9 import android.content.res.Configuration; |
| 10 import android.graphics.Canvas; | 10 import android.graphics.Canvas; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 69 * Experiment parameter for the maximum number of tile suggestion rows to sh ow. | 69 * Experiment parameter for the maximum number of tile suggestion rows to sh ow. |
| 70 */ | 70 */ |
| 71 private static final String PARAM_NTP_MAX_TILE_ROWS = "ntp_max_tile_rows"; | 71 private static final String PARAM_NTP_MAX_TILE_ROWS = "ntp_max_tile_rows"; |
| 72 | 72 |
| 73 /** | 73 /** |
| 74 * Experiment parameter for the number of tile title lines to show. | 74 * Experiment parameter for the number of tile title lines to show. |
| 75 */ | 75 */ |
| 76 private static final String PARAM_NTP_TILE_TITLE_LINES = "ntp_tile_title_lin es"; | 76 private static final String PARAM_NTP_TILE_TITLE_LINES = "ntp_tile_title_lin es"; |
| 77 | 77 |
| 78 /** | 78 /** |
| 79 * The maximum number of tiles to try and fit in a row. On smaller screens, there may not be | 79 * Experiment parameter for whether to use the condensed tile layout on smal l screens. |
| 80 * enough space to fit all of them. | |
| 81 */ | 80 */ |
| 82 private static final int MAX_TILE_COLUMNS = 4; | 81 private static final String PARAM_NTP_CONDENSED_TILE_LAYOUT_FOR_SMALL_SCREEN S_ENABLED = |
| 82 "ntp_condensed_tile_layout_for_small_screens_enabled"; | |
|
Alexei Svitkine (slow)
2017/02/27 15:56:27
Nit: This param name is awfully long. Can you find
Michael van Ouwerkerk
2017/02/27 16:53:57
Done. We can do without the "ntp" part if you pref
| |
| 83 | |
| 84 /** | |
| 85 * Experiment parameter for whether to use the condensed tile layout on larg e screens. | |
| 86 */ | |
| 87 private static final String PARAM_NTP_CONDENSED_TILE_LAYOUT_FOR_LARGE_SCREEN S_ENABLED = | |
| 88 "ntp_condensed_tile_layout_for_large_screens_enabled"; | |
| 83 | 89 |
| 84 private NewTabPageRecyclerView mRecyclerView; | 90 private NewTabPageRecyclerView mRecyclerView; |
| 85 | 91 |
| 86 private NewTabPageLayout mNewTabPageLayout; | 92 private NewTabPageLayout mNewTabPageLayout; |
| 87 private LogoView mSearchProviderLogoView; | 93 private LogoView mSearchProviderLogoView; |
| 88 private View mSearchBoxView; | 94 private View mSearchBoxView; |
| 89 private ImageView mVoiceSearchButton; | 95 private ImageView mVoiceSearchButton; |
| 90 private TileGridLayout mTileGridLayout; | 96 private TileGridLayout mTileGridLayout; |
| 91 private View mTileGridPlaceholder; | 97 private View mTileGridPlaceholder; |
| 92 private View mNoSearchLogoSpacer; | 98 private View mNoSearchLogoSpacer; |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 227 public void onDestroy() { | 233 public void onDestroy() { |
| 228 mActivity.getWindowAndroid().removeContextMenuCloseListener(mCon textMenuManager); | 234 mActivity.getWindowAndroid().removeContextMenuCloseListener(mCon textMenuManager); |
| 229 } | 235 } |
| 230 }); | 236 }); |
| 231 | 237 |
| 232 OfflinePageBridge offlinePageBridge = | 238 OfflinePageBridge offlinePageBridge = |
| 233 OfflinePageBridge.getForProfile(Profile.getLastUsedProfile()); | 239 OfflinePageBridge.getForProfile(Profile.getLastUsedProfile()); |
| 234 | 240 |
| 235 mTileGridLayout = (TileGridLayout) mNewTabPageLayout.findViewById(R.id.t ile_grid_layout); | 241 mTileGridLayout = (TileGridLayout) mNewTabPageLayout.findViewById(R.id.t ile_grid_layout); |
| 236 mTileGridLayout.setMaxRows(getMaxTileRows(searchProviderHasLogo)); | 242 mTileGridLayout.setMaxRows(getMaxTileRows(searchProviderHasLogo)); |
| 243 mTileGridLayout.setMaxColumns(getMaxTileColumns()); | |
| 237 mTileGroup = new TileGroup(mActivity, mManager, mContextMenuManager, mTi leGroupDelegate, | 244 mTileGroup = new TileGroup(mActivity, mManager, mContextMenuManager, mTi leGroupDelegate, |
| 238 /* observer = */ this, offlinePageBridge, getTileTitleLines()); | 245 /* observer = */ this, offlinePageBridge, getTileTitleLines()); |
| 239 | 246 |
| 240 mSearchProviderLogoView = | 247 mSearchProviderLogoView = |
| 241 (LogoView) mNewTabPageLayout.findViewById(R.id.search_provider_l ogo); | 248 (LogoView) mNewTabPageLayout.findViewById(R.id.search_provider_l ogo); |
| 242 mSearchBoxView = mNewTabPageLayout.findViewById(R.id.search_box); | 249 mSearchBoxView = mNewTabPageLayout.findViewById(R.id.search_box); |
| 243 mNoSearchLogoSpacer = mNewTabPageLayout.findViewById(R.id.no_search_logo _spacer); | 250 mNoSearchLogoSpacer = mNewTabPageLayout.findViewById(R.id.no_search_logo _spacer); |
| 244 | 251 |
| 245 initializeSearchBoxTextView(); | 252 initializeSearchBoxTextView(); |
| 246 initializeVoiceSearchButton(); | 253 initializeVoiceSearchButton(); |
| 247 | 254 |
| 248 mNewTabPageLayout.addOnLayoutChangeListener(this); | 255 mNewTabPageLayout.addOnLayoutChangeListener(this); |
| 249 setSearchProviderHasLogo(searchProviderHasLogo); | 256 setSearchProviderHasLogo(searchProviderHasLogo); |
| 250 | 257 |
| 251 mTileGroup.startObserving(getMaxTileRows(searchProviderHasLogo) * MAX_TI LE_COLUMNS); | 258 mTileGroup.startObserving(getMaxTileRows(searchProviderHasLogo) * getMax TileColumns()); |
| 252 | 259 |
| 253 // Set up snippets | 260 // Set up snippets |
| 254 NewTabPageAdapter newTabPageAdapter = new NewTabPageAdapter(mManager, mN ewTabPageLayout, | 261 NewTabPageAdapter newTabPageAdapter = new NewTabPageAdapter(mManager, mN ewTabPageLayout, |
| 255 mUiConfig, offlinePageBridge, mContextMenuManager, /* tileGroupD elegate = */ null); | 262 mUiConfig, offlinePageBridge, mContextMenuManager, /* tileGroupD elegate = */ null); |
| 256 mRecyclerView.setAdapter(newTabPageAdapter); | 263 mRecyclerView.setAdapter(newTabPageAdapter); |
| 257 | 264 |
| 258 int scrollOffset; | 265 int scrollOffset; |
| 259 if (CardsVariationParameters.isScrollBelowTheFoldEnabled()) { | 266 if (CardsVariationParameters.isScrollBelowTheFoldEnabled()) { |
| 260 scrollPosition = newTabPageAdapter.getFirstHeaderPosition(); | 267 scrollPosition = newTabPageAdapter.getFirstHeaderPosition(); |
| 261 scrollOffset = getResources().getDimensionPixelSize(R.dimen.ntp_sear ch_box_height); | 268 scrollOffset = getResources().getDimensionPixelSize(R.dimen.ntp_sear ch_box_height); |
| (...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 798 private static int getMaxTileRows(boolean searchProviderHasLogo) { | 805 private static int getMaxTileRows(boolean searchProviderHasLogo) { |
| 799 int defaultValue = 2; | 806 int defaultValue = 2; |
| 800 if (!ChromeFeatureList.isEnabled(ChromeFeatureList.NTP_CONDENSED_LAYOUT) | 807 if (!ChromeFeatureList.isEnabled(ChromeFeatureList.NTP_CONDENSED_LAYOUT) |
| 801 && !searchProviderHasLogo) { | 808 && !searchProviderHasLogo) { |
| 802 defaultValue = 3; | 809 defaultValue = 3; |
| 803 } | 810 } |
| 804 return ChromeFeatureList.getFieldTrialParamByFeatureAsInt( | 811 return ChromeFeatureList.getFieldTrialParamByFeatureAsInt( |
| 805 ChromeFeatureList.NTP_CONDENSED_LAYOUT, PARAM_NTP_MAX_TILE_ROWS, defaultValue); | 812 ChromeFeatureList.NTP_CONDENSED_LAYOUT, PARAM_NTP_MAX_TILE_ROWS, defaultValue); |
| 806 } | 813 } |
| 807 | 814 |
| 815 /** | |
| 816 * Determines The maximum number of tiles to try and fit in a row. On smalle r screens, there | |
| 817 * may not be enough space to fit all of them. | |
| 818 */ | |
| 819 private int getMaxTileColumns() { | |
| 820 if (!mUiConfig.getCurrentDisplayStyle().isSmall() | |
| 821 && ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean( | |
| 822 ChromeFeatureList.NTP_CONDENSED_TILE_LAYOUT, | |
| 823 PARAM_NTP_CONDENSED_TILE_LAYOUT_FOR_LARGE_SCREENS_ENA BLED, false)) { | |
| 824 return 5; | |
| 825 } | |
| 826 return 4; | |
| 827 } | |
| 828 | |
| 808 private static int getTileTitleLines() { | 829 private static int getTileTitleLines() { |
| 809 int defaultValue = 2; | 830 int defaultValue = 2; |
| 810 if (ChromeFeatureList.isEnabled(ChromeFeatureList.NTP_CONDENSED_LAYOUT)) { | 831 if (ChromeFeatureList.isEnabled(ChromeFeatureList.NTP_CONDENSED_LAYOUT)) { |
| 811 defaultValue = 1; | 832 defaultValue = 1; |
| 812 } | 833 } |
| 813 return ChromeFeatureList.getFieldTrialParamByFeatureAsInt( | 834 return ChromeFeatureList.getFieldTrialParamByFeatureAsInt( |
| 814 ChromeFeatureList.NTP_CONDENSED_LAYOUT, PARAM_NTP_TILE_TITLE_LIN ES, defaultValue); | 835 ChromeFeatureList.NTP_CONDENSED_LAYOUT, PARAM_NTP_TILE_TITLE_LIN ES, defaultValue); |
| 815 } | 836 } |
| 816 | 837 |
| 838 private boolean shouldUseCondensedTileLayout() { | |
| 839 if (mUiConfig.getCurrentDisplayStyle().isSmall()) { | |
| 840 return ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean( | |
| 841 ChromeFeatureList.NTP_CONDENSED_TILE_LAYOUT, | |
| 842 PARAM_NTP_CONDENSED_TILE_LAYOUT_FOR_SMALL_SCREENS_ENABLED, f alse); | |
| 843 } | |
| 844 return ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean( | |
| 845 ChromeFeatureList.NTP_CONDENSED_TILE_LAYOUT, | |
| 846 PARAM_NTP_CONDENSED_TILE_LAYOUT_FOR_LARGE_SCREENS_ENABLED, false ); | |
|
Alexei Svitkine (slow)
2017/02/27 15:56:27
Nit: Maybe make a helper function in this file tha
Michael van Ouwerkerk
2017/02/27 16:53:57
I'm not sure another helper function would help mu
| |
| 847 } | |
| 848 | |
| 817 @Override | 849 @Override |
| 818 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | 850 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { |
| 819 if (mNewTabPageLayout != null) { | 851 if (mNewTabPageLayout != null) { |
| 820 mNewTabPageLayout.setParentViewportHeight(MeasureSpec.getSize(height MeasureSpec)); | 852 mNewTabPageLayout.setParentViewportHeight(MeasureSpec.getSize(height MeasureSpec)); |
| 821 } | 853 } |
| 822 super.onMeasure(widthMeasureSpec, heightMeasureSpec); | 854 super.onMeasure(widthMeasureSpec, heightMeasureSpec); |
| 823 | 855 |
| 824 mRecyclerView.updatePeekingCardAndHeader(); | 856 mRecyclerView.updatePeekingCardAndHeader(); |
| 825 } | 857 } |
| 826 | 858 |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 848 | 880 |
| 849 /** @return the context menu manager. */ | 881 /** @return the context menu manager. */ |
| 850 public ContextMenuManager getContextMenuManager() { | 882 public ContextMenuManager getContextMenuManager() { |
| 851 return mContextMenuManager; | 883 return mContextMenuManager; |
| 852 } | 884 } |
| 853 | 885 |
| 854 // TileGroup.Observer interface. | 886 // TileGroup.Observer interface. |
| 855 | 887 |
| 856 @Override | 888 @Override |
| 857 public void onTileDataChanged() { | 889 public void onTileDataChanged() { |
| 858 mTileGroup.renderTileViews(mTileGridLayout, !mLoadHasCompleted); | 890 mTileGroup.renderTileViews( |
| 891 mTileGridLayout, !mLoadHasCompleted, shouldUseCondensedTileLayou t()); | |
| 859 mSnapshotTileGridChanged = true; | 892 mSnapshotTileGridChanged = true; |
| 860 | 893 |
| 861 // The page contents are initially hidden; otherwise they'll be drawn ce ntered on the page | 894 // The page contents are initially hidden; otherwise they'll be drawn ce ntered on the page |
| 862 // before the tiles are available and then jump upwards to make space on ce the tiles are | 895 // before the tiles are available and then jump upwards to make space on ce the tiles are |
| 863 // available. | 896 // available. |
| 864 if (mNewTabPageLayout.getVisibility() != View.VISIBLE) { | 897 if (mNewTabPageLayout.getVisibility() != View.VISIBLE) { |
| 865 mNewTabPageLayout.setVisibility(View.VISIBLE); | 898 mNewTabPageLayout.setVisibility(View.VISIBLE); |
| 866 } | 899 } |
| 867 } | 900 } |
| 868 | 901 |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 889 @Override | 922 @Override |
| 890 public void onLoadTaskAdded() { | 923 public void onLoadTaskAdded() { |
| 891 mPendingLoadTasks++; | 924 mPendingLoadTasks++; |
| 892 } | 925 } |
| 893 | 926 |
| 894 @Override | 927 @Override |
| 895 public void onLoadTaskCompleted() { | 928 public void onLoadTaskCompleted() { |
| 896 loadTaskCompleted(); | 929 loadTaskCompleted(); |
| 897 } | 930 } |
| 898 } | 931 } |
| OLD | NEW |