From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Sat, 7 Nov 2020 23:51:29 +0100 Subject: Restore Simplified NTP launch This reverts commit 4d0e4483c5f77c66a8b6193e8a3bec5d0624d6ad. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- chrome/android/chrome_java_resources.gni | 1 + chrome/android/chrome_java_sources.gni | 2 + .../java/res/layout/mv_tiles_container.xml | 2 +- .../java/res/layout/mv_tiles_layout.xml | 13 +- .../java/res/layout/new_tab_page_layout.xml | 7 + .../new_tab_page_tile_grid_placeholder.xml | 8 +- .../android/java/res/layout/ntp_shortcuts.xml | 65 ++++ chrome/android/java/res/values/attrs.xml | 4 + chrome/android/java/res/values/dimens.xml | 2 + .../chrome/browser/ChromeTabbedActivity.java | 3 +- .../browser/TabbedModeTabDelegateFactory.java | 9 +- .../feedback/ChromeFeedbackCollector.java | 1 + .../feedback/SimplifiedNtpFeedbackSource.java | 38 +++ .../identity_disc/IdentityDiscController.java | 5 +- .../native_page/NativePageFactory.java | 19 +- .../NativePageNavigationDelegateImpl.java | 2 +- .../chrome/browser/ntp/NewTabPage.java | 8 +- .../chrome/browser/ntp/NewTabPageLayout.java | 29 +- .../suggestions/SuggestionsConfig.java | 2 +- .../SuggestionsNavigationDelegate.java | 27 +- .../tile/MostVisitedTilesCoordinator.java | 6 +- .../tile/MostVisitedTilesGridLayout.java | 287 ++++++++++++++++++ .../tile/MostVisitedTilesMediator.java | 5 +- .../tile/TileDragDelegateImpl.java | 6 +- .../suggestions/tile/TileRenderer.java | 8 +- .../suggestions/tile/TilesLinearLayout.java | 2 +- .../engagement/important_sites_util.cc | 2 +- .../flags/android/chrome_feature_list.cc | 1 + .../browser/flags/ChromeFeatureList.java | 3 +- .../client_util/HomeModulesRankingHelper.java | 1 + .../history/core/browser/top_sites_impl.h | 2 +- components/ntp_tiles/custom_links_store.cc | 2 - .../Restore-Simplified-NTP-launch.inc | 12 + .../Restore-Simplified-NTP-launch.inc | 5 + .../Restore-Simplified-NTP-launch.inc | 1 + 35 files changed, 537 insertions(+), 53 deletions(-) create mode 100644 chrome/android/java/res/layout/ntp_shortcuts.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/feedback/SimplifiedNtpFeedbackSource.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesGridLayout.java create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Restore-Simplified-NTP-launch.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Restore-Simplified-NTP-launch.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/Restore-Simplified-NTP-launch.inc diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni @@ -555,6 +555,7 @@ chrome_java_resources = [ "java/res/layout/new_tab_page_tile_grid_placeholder.xml", "java/res/layout/one_line_list_item.xml", "java/res/layout/open_full_chrome_history_header.xml", + "java/res/layout/ntp_shortcuts.xml", "java/res/layout/optional_toolbar_button.xml", "java/res/layout/os_version_unsupported_text.xml", "java/res/layout/other_forms_of_history_dialog.xml", diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni @@ -590,6 +590,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/feedback/FeedFeedbackCollector.java", "java/src/org/chromium/chrome/browser/feedback/HelpAndFeedbackLauncherImpl.java", "java/src/org/chromium/chrome/browser/feedback/ScreenshotTask.java", + "java/src/org/chromium/chrome/browser/feedback/SimplifiedNtpFeedbackSource.java", "java/src/org/chromium/chrome/browser/findinpage/FindToolbar.java", "java/src/org/chromium/chrome/browser/findinpage/FindToolbarManager.java", "java/src/org/chromium/chrome/browser/findinpage/FindToolbarObserver.java", @@ -1002,6 +1003,7 @@ chrome_java_sources = [ "java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesMetadataUtils.java", "java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesCoordinator.java", "java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesLayout.java", + "java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesGridLayout.java", "java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesMediator.java", "java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesProperties.java", "java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesViewBinder.java", diff --git a/chrome/android/java/res/layout/mv_tiles_container.xml b/chrome/android/java/res/layout/mv_tiles_container.xml --- a/chrome/android/java/res/layout/mv_tiles_container.xml +++ b/chrome/android/java/res/layout/mv_tiles_container.xml @@ -31,7 +31,7 @@ found in the LICENSE file. diff --git a/chrome/android/java/res/layout/mv_tiles_layout.xml b/chrome/android/java/res/layout/mv_tiles_layout.xml --- a/chrome/android/java/res/layout/mv_tiles_layout.xml +++ b/chrome/android/java/res/layout/mv_tiles_layout.xml @@ -5,14 +5,9 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> - - - - + android:layout_gravity="center_horizontal" /> diff --git a/chrome/android/java/res/layout/new_tab_page_layout.xml b/chrome/android/java/res/layout/new_tab_page_layout.xml --- a/chrome/android/java/res/layout/new_tab_page_layout.xml +++ b/chrome/android/java/res/layout/new_tab_page_layout.xml @@ -37,6 +37,13 @@ found in the LICENSE file. android:layout_marginTop="16dp" android:visibility="gone"/> + + - \ No newline at end of file + diff --git a/chrome/android/java/res/layout/ntp_shortcuts.xml b/chrome/android/java/res/layout/ntp_shortcuts.xml new file mode 100644 --- /dev/null +++ b/chrome/android/java/res/layout/ntp_shortcuts.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + diff --git a/chrome/android/java/res/values/attrs.xml b/chrome/android/java/res/values/attrs.xml --- a/chrome/android/java/res/values/attrs.xml +++ b/chrome/android/java/res/values/attrs.xml @@ -15,6 +15,10 @@ found in the LICENSE file. + + + + diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml @@ -126,6 +126,8 @@ found in the LICENSE file. 62dp + 6dp + 4dp 20dp @dimen/signin_promo_lateral_paddings 17dp diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java @@ -3042,7 +3042,8 @@ public class ChromeTabbedActivity extends ChromeActivity { getToolbarManager().getTabStripHeightSupplier(), mModuleRegistrySupplier, mEdgeToEdgeControllerSupplier, - getStartupMetricsTracker()); + getStartupMetricsTracker(), + mBookmarkManagerOpenerSupplier); } return mTabDelegateFactory; } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/TabbedModeTabDelegateFactory.java @@ -15,6 +15,7 @@ import org.chromium.base.supplier.OneshotSupplier; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.tab_activity_glue.ActivityTabWebContentsDelegateAndroid; +import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.compositor.CompositorViewHolder; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator; @@ -82,6 +83,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { private final OneshotSupplier mModuleRegistrySupplier; private final ObservableSupplier mEdgeToEdgeControllerSupplier; private final StartupMetricsTracker mStartupMetricsTracker; + private final ObservableSupplier mBookmarkManagerOpenerSupplier; private NativePageFactory mNativePageFactory; @@ -111,7 +113,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { @NonNull ObservableSupplier tabStripHeightSupplier, @NonNull OneshotSupplier moduleRegistrySupplier, @NonNull ObservableSupplier edgeToEdgeControllerSupplier, - StartupMetricsTracker startupMetricsTracker) { + StartupMetricsTracker startupMetricsTracker, + @NonNull ObservableSupplier bookmarkManagerOpenerSupplier) { mActivity = activity; mAppBrowserControlsVisibilityDelegate = appBrowserControlsVisibilityDelegate; mShareDelegateSupplier = shareDelegateSupplier; @@ -138,6 +141,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { mModuleRegistrySupplier = moduleRegistrySupplier; mEdgeToEdgeControllerSupplier = edgeToEdgeControllerSupplier; mStartupMetricsTracker = startupMetricsTracker; + mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier; } @Override @@ -204,7 +208,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory { mTabStripHeightSupplier, mModuleRegistrySupplier, mEdgeToEdgeControllerSupplier, - mStartupMetricsTracker); + mStartupMetricsTracker, + mBookmarkManagerOpenerSupplier); } return mNativePageFactory.createNativePage(url, candidatePage, tab, pdfInfo); } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java --- a/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollector.java @@ -68,6 +68,7 @@ public class ChromeFeedbackCollector extends FeedbackCollector mMap; + + SimplifiedNtpFeedbackSource() { + mMap = new HashMap(1); + + boolean isEnabled = ChromeFeatureList.isEnabled(ChromeFeatureList.SIMPLIFIED_NTP); + if (!isEnabled) { + mMap.put(SIMPLIFIED_NTP_KEY, DISABLED_VALUE); + } else { + mMap.put(SIMPLIFIED_NTP_KEY, ENABLED_VALUE); + } + } + + @Override + public Map getFeedback() { + return mMap; + } +} diff --git a/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java b/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java --- a/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java @@ -167,7 +167,10 @@ public class IdentityDiscController mButtonData.setButtonSpec( buttonSpecWithDrawableAndDescription(mButtonData.getButtonSpec(), email)); - mButtonData.setCanShow(true); + if (email == null) + mButtonData.setCanShow(false); + else + mButtonData.setCanShow(true); } private ButtonSpec buttonSpecWithDrawableAndDescription( diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java --- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java @@ -22,6 +22,7 @@ import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor; import org.chromium.chrome.browser.app.ChromeActivity; import org.chromium.chrome.browser.app.download.home.DownloadPage; import org.chromium.chrome.browser.bookmarks.BookmarkPage; +import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener; import org.chromium.chrome.browser.browser_controls.BrowserControlsMarginSupplier; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.fullscreen.BrowserControlsManager; @@ -78,6 +79,7 @@ public class NativePageFactory { private final OneshotSupplier mModuleRegistrySupplier; private final ObservableSupplier mEdgeToEdgeControllerSupplier; private final StartupMetricsTracker mStartupMetricsTracker; + private final ObservableSupplier mBookmarkManagerOpenerSupplier; private NewTabPageCreationTracker mNewTabPageCreationTracker; private NativePageBuilder mNativePageBuilder; @@ -100,7 +102,8 @@ public class NativePageFactory { @NonNull ObservableSupplier tabStripHeightSupplier, @NonNull OneshotSupplier moduleRegistrySupplier, @NonNull ObservableSupplier edgeToEdgeControllerSupplier, - @NonNull StartupMetricsTracker startupMetricsTracker) { + @NonNull StartupMetricsTracker startupMetricsTracker, + @NonNull ObservableSupplier bookmarkManagerOpenerSupplier) { mActivity = activity; mBottomSheetController = sheetController; mBrowserControlsManager = browserControlsManager; @@ -118,6 +121,7 @@ public class NativePageFactory { mModuleRegistrySupplier = moduleRegistrySupplier; mEdgeToEdgeControllerSupplier = edgeToEdgeControllerSupplier; mStartupMetricsTracker = startupMetricsTracker; + mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier; } private NativePageBuilder getBuilder() { @@ -141,7 +145,8 @@ public class NativePageFactory { mTabStripHeightSupplier, mModuleRegistrySupplier, mEdgeToEdgeControllerSupplier, - mStartupMetricsTracker); + mStartupMetricsTracker, + mBookmarkManagerOpenerSupplier); } return mNativePageBuilder; } @@ -174,9 +179,10 @@ public class NativePageFactory { private final OneshotSupplier mModuleRegistrySupplier; private final ObservableSupplier mEdgeToEdgeControllerSupplier; private final StartupMetricsTracker mStartupMetricsTracker; + private final ObservableSupplier mBookmarkManagerOpenerSupplier; public NativePageBuilder( - Activity activity, + ChromeActivity activity, Supplier newTabPageCreationTracker, BottomSheetController sheetController, BrowserControlsManager browserControlsManager, @@ -193,7 +199,8 @@ public class NativePageFactory { ObservableSupplier tabStripHeightSupplier, OneshotSupplier moduleRegistrySupplier, ObservableSupplier edgeToEdgeControllerSupplier, - StartupMetricsTracker startupMetricsTracker) { + StartupMetricsTracker startupMetricsTracker, + @NonNull ObservableSupplier bookmarkManagerOpenerSupplier) { mActivity = activity; mNewTabPageCreationTracker = newTabPageCreationTracker; mBottomSheetController = sheetController; @@ -212,6 +219,7 @@ public class NativePageFactory { mModuleRegistrySupplier = moduleRegistrySupplier; mEdgeToEdgeControllerSupplier = edgeToEdgeControllerSupplier; mStartupMetricsTracker = startupMetricsTracker; + mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier; } protected NativePage buildNewTabPage(Tab tab, String url) { @@ -245,7 +253,8 @@ public class NativePageFactory { mTabStripHeightSupplier, mModuleRegistrySupplier, mEdgeToEdgeControllerSupplier, - mStartupMetricsTracker); + mStartupMetricsTracker, + mBookmarkManagerOpenerSupplier); } protected NativePage buildBookmarksPage(Tab tab) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageNavigationDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageNavigationDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageNavigationDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageNavigationDelegateImpl.java @@ -25,7 +25,7 @@ import org.chromium.ui.mojom.WindowOpenDisposition; /** {@link NativePageNavigationDelegate} implementation. */ public class NativePageNavigationDelegateImpl implements NativePageNavigationDelegate { - private final Profile mProfile; + protected final Profile mProfile; protected final TabModelSelector mTabModelSelector; protected final Tab mTab; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java @@ -117,6 +117,9 @@ import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; import org.chromium.url.GURL; +import androidx.annotation.NonNull; +import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener; + import java.util.List; /** Provides functionality when the user interacts with the NTP. */ @@ -481,7 +484,8 @@ public class NewTabPage ObservableSupplier tabStripHeightSupplier, OneshotSupplier moduleRegistrySupplier, ObservableSupplier edgeToEdgeControllerSupplier, - StartupMetricsTracker startupMetricsTracker) { + StartupMetricsTracker startupMetricsTracker, + @NonNull ObservableSupplier bookmarkManagerOpenerSupplier) { mConstructedTimeNs = System.nanoTime(); TraceEvent.begin(TAG); @@ -505,7 +509,7 @@ public class NewTabPage SuggestionsNavigationDelegate navigationDelegate = new SuggestionsNavigationDelegate( - activity, profile, nativePageHost, tabModelSelector, mTab); + activity, profile, nativePageHost, tabModelSelector, mTab, bookmarkManagerOpenerSupplier); mNewTabPageManager = new NewTabPageManagerImpl( navigationDelegate, profile, nativePageHost, snackbarManager); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageLayout.java @@ -14,6 +14,7 @@ import android.text.Editable; import android.util.AttributeSet; import android.view.DragEvent; import android.view.LayoutInflater; +import android.view.ViewStub; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -33,6 +34,7 @@ import org.chromium.base.supplier.ObservableSupplier; import org.chromium.chrome.R; import org.chromium.chrome.browser.feed.FeedSurfaceScrollDelegate; import org.chromium.chrome.browser.lens.LensEntryPoint; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.lens.LensMetrics; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.logo.LogoBridge.Logo; @@ -48,7 +50,7 @@ import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesCoordinator; import org.chromium.chrome.browser.suggestions.tile.TileGroup; import org.chromium.chrome.browser.suggestions.tile.TileGroup.Delegate; -import org.chromium.chrome.browser.suggestions.tile.TilesLinearLayout; +import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesGridLayout; import org.chromium.chrome.browser.tab_ui.InvalidationAwareThumbnailProvider; import org.chromium.chrome.browser.ui.native_page.TouchEnabledDelegate; import org.chromium.chrome.browser.util.BrowserUiUtils; @@ -90,6 +92,8 @@ public class NewTabPageLayout extends LinearLayout private @Nullable DisplayStyleObserver mDisplayStyleObserver; private CallbackController mCallbackController = new CallbackController(); + private ViewGroup mShortcutsView; + /** * Whether the tiles shown in the layout have finished loading. * With {@link #mHasShownView}, it's one of the 2 flags used to track initialisation progress. @@ -102,7 +106,7 @@ public class NewTabPageLayout extends LinearLayout */ private boolean mHasShownView; - private boolean mSearchProviderHasLogo = true; + private boolean mSearchProviderHasLogo = false; private boolean mSearchProviderIsGoogle; private boolean mShowingNonStandardGoogleLogo; @@ -256,6 +260,7 @@ public class NewTabPageLayout extends LinearLayout initializeMostVisitedTilesCoordinator( mProfile, lifecycleDispatcher, tileGroupDelegate, touchEnabledDelegate); initializeDseIconView(searchProviderIsGoogle); + initializeShortcuts(); initializeSearchBoxTextView(); initializeVoiceSearchButton(); initializeLensButton(); @@ -553,7 +558,7 @@ public class NewTabPageLayout extends LinearLayout if (mInitialTileNum == null) { mInitialTileNum = - ((TilesLinearLayout) findViewById(R.id.mv_tiles_layout)).getTileCount(); + ((MostVisitedTilesGridLayout) findViewById(R.id.mv_tiles_layout)).getTileCount(); } int currentOrientation = getResources().getConfiguration().orientation; @@ -621,7 +626,7 @@ public class NewTabPageLayout extends LinearLayout && mInitialized) { return; } - mSearchProviderHasLogo = hasLogo; + mSearchProviderHasLogo = false; mSearchProviderIsGoogle = isGoogle; if (!mSearchProviderIsGoogle) { @@ -948,6 +953,22 @@ public class NewTabPageLayout extends LinearLayout return mMostVisitedTilesCoordinator; } + private void initializeShortcuts() { + if (!ChromeFeatureList.isEnabled(ChromeFeatureList.SIMPLIFIED_NTP)) { + return; + } + + ViewStub shortcutsStub = findViewById(R.id.shortcuts_stub); + mShortcutsView = (ViewGroup) shortcutsStub.inflate(); + + mShortcutsView.findViewById(R.id.bookmarks_button) + .setOnClickListener(view -> mManager.getNavigationDelegate().navigateToBookmarks()); + + mShortcutsView.findViewById(R.id.downloads_button) + .setOnClickListener( + view -> mManager.getNavigationDelegate().navigateToDownloadManager()); + } + /** Makes the Search Box and Logo as wide as Most Visited. */ private void unifyElementWidths() { View searchBoxView = getSearchBoxView(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsConfig.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsConfig.java --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsConfig.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsConfig.java @@ -24,7 +24,7 @@ public final class SuggestionsConfig { * Maximum number of tiles that is explicitly supported. UMA relies on this value, so even if * the UI supports it, getting more can raise unexpected issues. */ - public static final int MAX_TILE_COUNT = 12; + public static final int MAX_TILE_COUNT = 24; /** Maximum number of custom tiles supported. In C++ backend this is `kMaxNumCustomLinks`. */ public static final int MAX_NUM_CUSTOM_LINKS = 8; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsNavigationDelegate.java @@ -22,16 +22,41 @@ import org.chromium.ui.base.PageTransition; import org.chromium.ui.mojom.WindowOpenDisposition; import org.chromium.url.GURL; +import androidx.annotation.NonNull; +import org.chromium.base.supplier.ObservableSupplier; +import org.chromium.chrome.browser.bookmarks.BookmarkUtils; +import org.chromium.chrome.browser.download.DownloadUtils; +import org.chromium.chrome.browser.download.DownloadOpenSource; +import org.chromium.chrome.browser.profiles.OtrProfileId; +import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener; + /** Extension of {@link NativePageNavigationDelegate} with suggestions-specific methods. */ public class SuggestionsNavigationDelegate extends NativePageNavigationDelegateImpl { + private final @NonNull ObservableSupplier mBookmarkManagerOpenerSupplier; + public SuggestionsNavigationDelegate( Activity activity, Profile profile, NativePageHost host, TabModelSelector tabModelSelector, - Tab tab) { + Tab tab, + @NonNull ObservableSupplier bookmarkManagerOpenerSupplier) { super(activity, profile, host, tabModelSelector, tab); + mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier; + } + + public void navigateToBookmarks() { + mBookmarkManagerOpenerSupplier.get() + .showBookmarkManager(mActivity, mTab.getProfile()); + } + + public void navigateToDownloadManager() { + OtrProfileId otrProfileID = null; + if (mProfile != null && mTab != null && mTab.isIncognito()) { + otrProfileID = mProfile.getOtrProfileId(); + } + DownloadUtils.showDownloadManager(mActivity, mTab, otrProfileID, DownloadOpenSource.NEW_TAB_PAGE); } /** diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesCoordinator.java @@ -65,15 +65,11 @@ public class MostVisitedTilesCoordinator implements ConfigurationChangedObserver mWindowAndroid = windowAndroid; ((ViewStub) mvTilesContainerLayout.findViewById(R.id.mv_tiles_layout_stub)).inflate(); - MostVisitedTilesLayout tilesLayout = + MostVisitedTilesGridLayout tilesLayout = mvTilesContainerLayout.findViewById(R.id.mv_tiles_layout); mUiConfig = new UiConfig(tilesLayout); PropertyModel propertyModel = new PropertyModel(MostVisitedTilesProperties.ALL_KEYS); - PropertyModelChangeProcessor.create( - propertyModel, - new MostVisitedTilesViewBinder.ViewHolder(mvTilesContainerLayout, tilesLayout), - MostVisitedTilesViewBinder::bind); mRenderer = new TileRenderer( mActivity, SuggestionsConfig.getTileStyle(mUiConfig), TITLE_LINES, null); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesGridLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesGridLayout.java new file mode 100644 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesGridLayout.java @@ -0,0 +1,287 @@ +// Copyright 2015 The Chromium Authors +// 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.tile; + +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.util.Pair; +import android.view.View; +import android.widget.FrameLayout; + +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; + +import org.chromium.base.MathUtils; +import org.chromium.base.library_loader.LibraryLoader; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.suggestions.SiteSuggestion; +import org.chromium.components.browser_ui.widget.tile.TileView; +import org.chromium.ui.base.DeviceFormFactor; + +import java.util.ArrayList; +import java.util.List; + +/** A layout that arranges tiles in a grid. */ +public class MostVisitedTilesGridLayout extends FrameLayout { + private final int mMinHorizontalSpacing; + private final int mMaxHorizontalSpacing; + private final int mMaxWidth; + + private int mVerticalSpacing; + private int mMaxRows = 4; + private int mMaxColumns = 4; + + private List mTileList = new ArrayList(); + + /** + * Constructor for inflating from XML. + * + * @param context The view context in which this item will be shown. + * @param attrs The attributes of the XML tag that is inflating the view. + */ + public MostVisitedTilesGridLayout(Context context, AttributeSet attrs) { + super(context, attrs); + + Resources res = getResources(); + mVerticalSpacing = + getResources().getDimensionPixelOffset(getGridMVTVerticalSpacingResourcesId()); + TypedArray styledAttrs = + context.obtainStyledAttributes(attrs, R.styleable.MostVisitedTilesGridLayout); + mMinHorizontalSpacing = + styledAttrs.getDimensionPixelOffset( + R.styleable.MostVisitedTilesGridLayout_minHorizontalSpacing, + res.getDimensionPixelOffset( + R.dimen.tile_grid_layout_min_horizontal_spacing)); + styledAttrs.recycle(); + mMaxHorizontalSpacing = Integer.MAX_VALUE; + mMaxWidth = Integer.MAX_VALUE; + } + + /** Sets the maximum number of rows to display. Any items that don't fit will be hidden. */ + public void setMaxRows(int rows) { + mMaxRows = rows; + } + + /** Sets the maximum number of columns to display. Any items that don't fit will be hidden. */ + public void setMaxColumns(int columns) { + mMaxColumns = columns; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int totalWidth = Math.min(MeasureSpec.getSize(widthMeasureSpec), mMaxWidth); + int childCount = getChildCount(); + if (childCount == 0) { + setMeasuredDimension(totalWidth, resolveSize(0, heightMeasureSpec)); + return; + } + + // Measure the children. We don't use the ViewGroup.measureChildren() method here because + // it only measures visible children. In a situation where a child is invisible before + // this measurement and we decide to show it after the measurement, it will not have its + // dimensions and will not be displayed. + for (int i = 0; i < childCount; i++) { + measureChild(getChildAt(i), MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); + } + + // Determine the number of columns that will fit. + int childHeight = getChildAt(0).getMeasuredHeight(); + int childWidth = getChildAt(0).getMeasuredWidth(); + int numColumns = + MathUtils.clamp( + (totalWidth + mMinHorizontalSpacing) / (childWidth + mMinHorizontalSpacing), + 1, + mMaxColumns); + + // Determine how much padding to use between and around the tiles. + int gridWidthMinusColumns = Math.max(0, totalWidth - numColumns * childWidth); + Pair gridProperties = + computeHorizontalDimensions(gridWidthMinusColumns, numColumns); + int gridStart = gridProperties.first; + int horizontalSpacing = gridProperties.second; + + // Limit the number of rows to mMaxRows. + int visibleChildCount = Math.min(childCount, mMaxRows * numColumns); + + // Arrange the visible children in a grid. + int numRows = (visibleChildCount + numColumns - 1) / numColumns; + int paddingTop = getPaddingTop(); + boolean isRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL; + + for (int i = 0; i < visibleChildCount; i++) { + View child = getChildAt(i); + child.setVisibility(View.VISIBLE); + int row = i / numColumns; + int column = i % numColumns; + int childTop = row * (childHeight + mVerticalSpacing); + int childStart = gridStart + (column * (childWidth + horizontalSpacing)); + MarginLayoutParams layoutParams = (MarginLayoutParams) child.getLayoutParams(); + layoutParams.setMargins(isRtl ? 0 : childStart, childTop, isRtl ? childStart : 0, 0); + child.setLayoutParams(layoutParams); + } + + // Hide any extra children in case there are more than needed for the maximum number of + // rows. + for (int i = visibleChildCount; i < childCount; i++) { + getChildAt(i).setVisibility(View.GONE); + } + + int totalHeight = + paddingTop + + getPaddingBottom() + + numRows * childHeight + + (numRows - 1) * mVerticalSpacing; + + setMeasuredDimension(totalWidth, resolveSize(totalHeight, heightMeasureSpec)); + } + + /** + * @param availableWidth The space available to spread between and around the tiles. + * @param numColumns The number of columns to be organised. + * @return The [gridStart, horizontalSpacing] pair of dimensions. + */ + @VisibleForTesting + Pair computeHorizontalDimensions(int availableWidth, int numColumns) { + int gridStart; + float horizontalSpacing; + + // Identically sized spacers are added both between and around the tiles. + int spacerCount = numColumns + 1; + horizontalSpacing = (float) availableWidth / spacerCount; + gridStart = Math.round(horizontalSpacing); + + if (horizontalSpacing < mMinHorizontalSpacing + || horizontalSpacing > mMaxHorizontalSpacing) { + // Ensure column spacing isn't greater than mMaxHorizontalSpacing. + long gridSidePadding = availableWidth - (long) mMaxHorizontalSpacing * (numColumns - 1); + if (gridSidePadding > 0) { + horizontalSpacing = mMaxHorizontalSpacing; + gridStart = (int) (gridSidePadding / 2); + } else { + horizontalSpacing = (float) availableWidth / Math.max(1, numColumns - 1); + gridStart = 0; + } + } + int screenWidth = getResources().getDisplayMetrics().widthPixels; + int screenHeight = getResources().getDisplayMetrics().heightPixels; + String logMessage = + "|horizontalSpacing| = " + + horizontalSpacing + + " |numColumns| = " + + numColumns + + " |availableWidth| = " + + availableWidth + + " |screenWidth| = " + + screenWidth + + " |screenHeight| = " + + screenHeight + + "."; + assert horizontalSpacing >= mMinHorizontalSpacing + : "Horizontal spacing shouldn't be smaller than minimal horizontal spacing: " + + logMessage; + assert horizontalSpacing <= mMaxHorizontalSpacing + : "Horizontal spacing shouldn't be larger than maximal horizontal spacing: " + + logMessage; + + return Pair.create(gridStart, Math.round(horizontalSpacing)); + } + + // TODO(crbug.com/40226731): Remove this method when the Feed position experiment is cleaned up. + private int getGridMVTVerticalSpacingResourcesId() { + return R.dimen.tile_grid_layout_vertical_spacing; + } + + @Override + public void removeAllViews() { + mTileList.clear(); + super.removeAllViews(); + } + + /** + * Updates the start margin of all children except the first, to control spacing between. + * + * @param margin The margin to set. + */ + void setIntervalMargins(int margin) { + int childCount = getChildCount(); + for (int i = 1; i < childCount; i++) { + updateViewStartMargin(getChildAt(i), margin); + } + } + + /** + * Updates the start (end) margin the first (last) child, to control spacing around content. + * + * @param margin The margin to set. + */ + void setEdgeMargins(int margin) { + int childCount = getChildCount(); + if (childCount > 0) { + updateViewStartMargin(getChildAt(0), margin); + updateViewEndMargin(getChildAt(childCount - 1), margin); + } + } + + /** + * Specialized addView() for tiles. + * + * @param tileView The tile View to add. + */ + public void addTile(TileView tileView) { + super.addView(tileView); + mTileList.add(tileView); + } + + public void addNonTileViewWithWidth(View view, float widthDp) { + super.addView(view); + } + + /** + * Specialized getChildCount() for tiles. + * + * @return The count of TileView children, added from addTile(). + */ + public int getTileCount() { + return mTileList.size(); + } + + /** + * Specialized getChildAt() for tiles. + * + * @return The (index+1)-th TileView added via addTile(). + */ + public TileView getTileAt(int index) { + return mTileList.get(index); + } + + private void updateViewStartMargin(View view, int newStartMargin) { + MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams(); + if (newStartMargin != layoutParams.getMarginStart()) { + layoutParams.setMarginStart(newStartMargin); + view.setLayoutParams(layoutParams); + } + } + + private void updateViewEndMargin(View view, int newEndMargin) { + MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams(); + if (newEndMargin != layoutParams.getMarginEnd()) { + layoutParams.setMarginEnd(newEndMargin); + view.setLayoutParams(layoutParams); + } + } + + void destroy() { + for (int i = 0; i < getTileCount(); i++) { + TileView tileView = getTileAt(i); + tileView.setOnClickListener(null); + tileView.setOnCreateContextMenuListener(null); + } + removeAllViews(); + } +} diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesMediator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/MostVisitedTilesMediator.java @@ -36,7 +36,7 @@ public class MostVisitedTilesMediator implements TileGroup.Observer, TemplateUrl private final Resources mResources; private final UiConfig mUiConfig; - private final MostVisitedTilesLayout mMvTilesLayout; + private final MostVisitedTilesGridLayout mMvTilesLayout; private final ViewStub mNoMvPlaceholderStub; private final PropertyModel mModel; private final boolean mIsTablet; @@ -58,7 +58,7 @@ public class MostVisitedTilesMediator implements TileGroup.Observer, TemplateUrl public MostVisitedTilesMediator( Resources resources, UiConfig uiConfig, - MostVisitedTilesLayout mvTilesLayout, + MostVisitedTilesGridLayout mvTilesLayout, ViewStub noMvPlaceholderStub, TileRenderer renderer, PropertyModel propertyModel, @@ -164,7 +164,6 @@ public class MostVisitedTilesMediator implements TileGroup.Observer, TemplateUrl @Override public void onCustomTileCreation(Tile tile) { - mMvTilesLayout.ensureTileIsInViewOnNextLayout(tile.getIndex()); } public void onConfigurationChanged() { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileDragDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileDragDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileDragDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileDragDelegateImpl.java @@ -64,7 +64,7 @@ class TileDragDelegateImpl implements TileGroup.TileDragDelegate, TileDragSessio private static final float DOMINATE_TRESHOLD_RATIO = 0.4f; // Parent container for dragged tiles. - private final MostVisitedTilesLayout mMvTilesLayout; + private final MostVisitedTilesGridLayout mMvTilesLayout; private final float mTileWidthPx; @@ -85,7 +85,7 @@ class TileDragDelegateImpl implements TileGroup.TileDragDelegate, TileDragSessio // Runnable to cancel tile movement that might not have completed yet, due to animation. private @Nullable Runnable mPendingChangeCanceller; - public TileDragDelegateImpl(MostVisitedTilesLayout mvTilesLayout) { + public TileDragDelegateImpl(MostVisitedTilesGridLayout mvTilesLayout) { mMvTilesLayout = mvTilesLayout; Resources res = mMvTilesLayout.getResources(); mTileWidthPx = res.getDimensionPixelSize(R.dimen.tile_view_width); @@ -187,7 +187,7 @@ class TileDragDelegateImpl implements TileGroup.TileDragDelegate, TileDragSessio @Override public SiteSuggestion getTileViewData(TileView view) { - return mMvTilesLayout.getTileViewData(view); + return null; } private void cancelPendingChange() { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileRenderer.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileRenderer.java --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileRenderer.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TileRenderer.java @@ -171,7 +171,7 @@ public class TileRenderer { */ public void renderTileSection( List sectionTiles, - TilesLinearLayout parent, + MostVisitedTilesGridLayout parent, TileGroup.TileSetupDelegate setupDelegate) { try (TraceEvent e = TraceEvent.scoped("TileRenderer.renderTileSection")) { // Map the old tile views by url so they can be reused later. @@ -238,7 +238,7 @@ public class TileRenderer { */ @VisibleForTesting SuggestionsTileView buildTileView( - Tile tile, TilesLinearLayout parent, TileGroup.TileSetupDelegate setupDelegate) { + Tile tile, MostVisitedTilesGridLayout parent, TileGroup.TileSetupDelegate setupDelegate) { SuggestionsTileView tileView = (SuggestionsTileView) LayoutInflater.from(parent.getContext()) @@ -315,7 +315,7 @@ public class TileRenderer { return tileView; } - View buildDivider(TilesLinearLayout parent) { + View buildDivider(MostVisitedTilesGridLayout parent) { return (View) LayoutInflater.from(parent.getContext()) .inflate(R.layout.suggestions_tile_vertical_divider, parent, false); @@ -336,7 +336,7 @@ public class TileRenderer { } TileView buildAddCustomLinksButton( - TilesLinearLayout parent, TileGroup.TileSetupDelegate setupDelegate) { + MostVisitedTilesGridLayout parent, TileGroup.TileSetupDelegate setupDelegate) { Resources res = mContext.getResources(); String title = res.getString(R.string.most_visited_add_new); Drawable plusIcon = diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TilesLinearLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TilesLinearLayout.java --- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TilesLinearLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/tile/TilesLinearLayout.java @@ -24,7 +24,7 @@ import java.util.List; * #getChildCount()} and {@link #getChildAt()}. */ @NullMarked -public class TilesLinearLayout extends LinearLayout { +class TilesLinearLayout extends LinearLayout { private final List mTileList = new ArrayList(); protected float mNonTileViewsTotalWidthDp; diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/engagement/important_sites_util.cc --- a/chrome/browser/engagement/important_sites_util.cc +++ b/chrome/browser/engagement/important_sites_util.cc @@ -60,7 +60,7 @@ static const int kTimesIgnoredForSuppression = 3; // These are the maximum # of bookmarks we can use as signals. If the user has // <= kMaxBookmarks, then we just use those bookmarks. Otherwise we filter all // bookmarks on site engagement > 0, sort, and trim to kMaxBookmarks. -static const int kMaxBookmarks = 5; +static const int kMaxBookmarks = 4 * 4 + 2; // We need this to be a macro, as the histogram macros cache their pointers // after the first call, so when we change the uma name we check fail if we're diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc @@ -311,6 +311,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kIncognitoScreenshot, &kInstanceSwitcherV2, &kKeyboardEscBackNavigation, + &kSimplifiedNTP, &kLensOnQuickActionSearchWidget, &kMagicStackAndroid, &kMayLaunchUrlUsesSeparateStoragePartition, diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java @@ -434,6 +434,7 @@ public abstract class ChromeFeatureList { "MayLaunchUrlUsesSeparateStoragePartition"; public static final String MINI_ORIGIN_BAR = "MiniOriginBar"; public static final String MOST_VISITED_TILES_CUSTOMIZATION = "MostVisitedTilesCustomization"; + public static final String SIMPLIFIED_NTP = "SimplifiedNTP"; public static final String SEARCH_READY_OMNIBOX = "SearchReadyOmnibox"; public static final String MOST_VISITED_TILES_RESELECT = "MostVisitedTilesReselect"; public static final String MULTI_INSTANCE_APPLICATION_STATUS_CLEANUP = @@ -823,7 +824,7 @@ public abstract class ChromeFeatureList { /* defaultValueInTests= */ true); public static final CachedFlag sLockBackPressHandlerAtStart = newCachedFlag(LOCK_BACK_PRESS_HANDLER_AT_START, true); - public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, true); + public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, false); public static final CachedFlag sMiniOriginBar = newCachedFlag(MINI_ORIGIN_BAR, false, true); public static final CachedFlag sMostVisitedTilesCustomization = newCachedFlag(MOST_VISITED_TILES_CUSTOMIZATION, false); diff --git a/chrome/browser/segmentation_platform/android/java/src/org/chromium/chrome/browser/segmentation_platform/client_util/HomeModulesRankingHelper.java b/chrome/browser/segmentation_platform/android/java/src/org/chromium/chrome/browser/segmentation_platform/client_util/HomeModulesRankingHelper.java --- a/chrome/browser/segmentation_platform/android/java/src/org/chromium/chrome/browser/segmentation_platform/client_util/HomeModulesRankingHelper.java +++ b/chrome/browser/segmentation_platform/android/java/src/org/chromium/chrome/browser/segmentation_platform/client_util/HomeModulesRankingHelper.java @@ -32,6 +32,7 @@ public final class HomeModulesRankingHelper { Profile profile, InputContext freshnessAndEphemeralInputs, Callback> callback) { + if ((true)) return; HomeModulesRankingHelperJni.get() .getClassificationResult( profile, diff --git a/components/history/core/browser/top_sites_impl.h b/components/history/core/browser/top_sites_impl.h --- a/components/history/core/browser/top_sites_impl.h +++ b/components/history/core/browser/top_sites_impl.h @@ -40,7 +40,7 @@ class TopSitesImplTest; struct SitesAndQueriesRequest; // How many top sites to store in the cache. -static constexpr size_t kTopSitesNumber = 10; +static constexpr size_t kTopSitesNumber = 4 * 4 + 2; // This class allows requests for most visited urls on any thread. All other // methods must be invoked on the UI thread. All mutations to internal state diff --git a/components/ntp_tiles/custom_links_store.cc b/components/ntp_tiles/custom_links_store.cc --- a/components/ntp_tiles/custom_links_store.cc +++ b/components/ntp_tiles/custom_links_store.cc @@ -63,8 +63,6 @@ std::vector CustomLinksStore::RetrieveLinks() { if (!has_recorded_first_load_stats) { has_recorded_first_load_stats = true; - ntp_tiles::metrics::RecordNumberOfCustomTilesOnFirstNtp( - static_cast(links.size())); } return links; diff --git a/cromite_flags/chrome/browser/about_flags_cc/Restore-Simplified-NTP-launch.inc b/cromite_flags/chrome/browser/about_flags_cc/Restore-Simplified-NTP-launch.inc new file mode 100644 --- /dev/null +++ b/cromite_flags/chrome/browser/about_flags_cc/Restore-Simplified-NTP-launch.inc @@ -0,0 +1,12 @@ +#if BUILDFLAG(IS_ANDROID) + +#ifdef FLAG_SECTION + + {"simplified-ntp", + "Simplified NTP", + "Show a simplified New Tab Page.", kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kSimplifiedNTP)}, + +#endif + +#endif diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Restore-Simplified-NTP-launch.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Restore-Simplified-NTP-launch.inc new file mode 100644 --- /dev/null +++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Restore-Simplified-NTP-launch.inc @@ -0,0 +1,5 @@ +CROMITE_FEATURE(kSimplifiedNTP, + "SimplifiedNTP", + base::FEATURE_ENABLED_BY_DEFAULT); + +SET_CROMITE_FEATURE_DISABLED(kMagicStackAndroid); diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/Restore-Simplified-NTP-launch.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/Restore-Simplified-NTP-launch.inc new file mode 100644 --- /dev/null +++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/Restore-Simplified-NTP-launch.inc @@ -0,0 +1 @@ +BASE_DECLARE_FEATURE(kSimplifiedNTP); --