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 |