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. --- chrome/android/chrome_java_resources.gni | 1 + chrome/android/chrome_java_sources.gni | 1 + .../java/res/layout/new_tab_page_layout.xml | 7 ++ .../android/java/res/layout/ntp_shortcuts.xml | 65 +++++++++++++++++++ .../feedback/ChromeFeedbackCollector.java | 1 + .../feedback/SimplifiedNtpFeedbackSource.java | 38 +++++++++++ .../chrome/browser/ntp/NewTabPageLayout.java | 30 ++++++++- .../suggestions/SuggestionsConfig.java | 4 +- .../SuggestionsNavigationDelegate.java | 14 ++++ chrome/browser/about_flags.cc | 3 + chrome/browser/flag_descriptions.cc | 3 + chrome/browser/flag_descriptions.h | 3 + .../flags/android/chrome_feature_list.cc | 4 ++ .../flags/android/chrome_feature_list.h | 1 + .../browser/flags/ChromeFeatureList.java | 1 + components/ntp_snippets/features.cc | 6 +- .../variations/fieldtrial_testing_config.json | 18 +++++ 17 files changed, 196 insertions(+), 4 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 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 @@ -914,6 +914,7 @@ chrome_java_resources = [ "java/res/layout/new_tab_page_snippets_expandable_header.xml", "java/res/layout/new_tab_page_snippets_expandable_header_with_menu.xml", "java/res/layout/new_tab_page_tile_grid_placeholder.xml", + "java/res/layout/ntp_shortcuts.xml", "java/res/layout/omnibox_answer_suggestion.xml", "java/res/layout/omnibox_basic_suggestion.xml", "java/res/layout/omnibox_entity_suggestion.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 @@ -700,6 +700,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", 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 @@ -51,6 +51,13 @@ android:layout_marginTop="16dp" android:visibility="gone"/> + + + + + + + + + + + + + + + + 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 @@ -55,6 +55,7 @@ public class ChromeFeedbackCollector sources.add(new LowEndDeviceFeedbackSource()); sources.add(new IMEFeedbackSource()); sources.add(new PermissionFeedbackSource()); + sources.add(new SimplifiedNtpFeedbackSource()); sources.add(new FeedbackContextFeedbackSource(initParams.feedbackContext)); return sources; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feedback/SimplifiedNtpFeedbackSource.java b/chrome/android/java/src/org/chromium/chrome/browser/feedback/SimplifiedNtpFeedbackSource.java new file mode 100644 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/feedback/SimplifiedNtpFeedbackSource.java @@ -0,0 +1,38 @@ +// Copyright 2018 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.feedback; + +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.ntp.NewTabPageLayout; + +import java.util.HashMap; +import java.util.Map; + +/** + * Provides information about whether the simplified NTP is enabled for use in feedback reports. + */ +public class SimplifiedNtpFeedbackSource implements FeedbackSource { + private static final String SIMPLIFIED_NTP_KEY = "Simplified NTP"; + private static final String ENABLED_VALUE = "Enabled"; + private static final String DISABLED_VALUE = "Disabled"; + + private final HashMap 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/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 @@ -35,6 +35,7 @@ import org.chromium.chrome.browser.cryptids.ProbabilisticCryptidRenderer; import org.chromium.chrome.browser.explore_sites.ExperimentalExploreSitesSection; import org.chromium.chrome.browser.explore_sites.ExploreSitesBridge; import org.chromium.chrome.browser.feature_engagement.TrackerFactory; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.native_page.ContextMenuManager; import org.chromium.chrome.browser.ntp.LogoBridge.Logo; @@ -104,6 +105,8 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer private UiConfig mUiConfig; 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. @@ -264,6 +267,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer } mNoSearchLogoSpacer = findViewById(R.id.no_search_logo_spacer); + initializeShortcuts(); initializeSearchBoxTextView(); initializeVoiceSearchButton(); initializeLayoutChangeListener(); @@ -553,10 +557,16 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer * Updates the padding for the tile grid based on what is shown above it. */ private void updateTileGridPadding() { - // Set a bit more top padding on the tile grid if there is no logo. - int paddingTop = getResources().getDimensionPixelSize(shouldShowLogo() + int paddingTop; + if (mShortcutsView != null) { + // If the shortcuts view is visible, padding will be built into that view. + paddingTop = 0; + } else { + // Set a bit more top padding on the tile grid if there is no logo. + paddingTop = getResources().getDimensionPixelSize(shouldShowLogo() ? R.dimen.tile_grid_layout_padding_top : R.dimen.tile_grid_layout_no_logo_padding_top); + } mSiteSectionViewHolder.itemView.setPadding( 0, paddingTop, 0, mSiteSectionViewHolder.itemView.getPaddingBottom()); } @@ -954,6 +964,22 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer return iphCommandBuilder; } + 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. */ 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 @@ -51,7 +51,9 @@ public final class SuggestionsConfig { // The scroll to load feature does not work well for users who require accessibility mode. if (ChromeAccessibilityUtil.get().isAccessibilityEnabled()) return false; - return ChromeFeatureList.isEnabled(ChromeFeatureList.CONTENT_SUGGESTIONS_SCROLL_TO_LOAD); + return ChromeFeatureList.isEnabled(ChromeFeatureList.SIMPLIFIED_NTP) + && ChromeFeatureList.isEnabled( + ChromeFeatureList.CONTENT_SUGGESTIONS_SCROLL_TO_LOAD); } /** 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 @@ -16,6 +16,10 @@ import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.ui.base.PageTransition; import org.chromium.ui.mojom.WindowOpenDisposition; +import org.chromium.chrome.browser.bookmarks.BookmarkUtils; +import org.chromium.chrome.browser.download.DownloadUtils; +import org.chromium.chrome.browser.download.DownloadOpenSource; + /** * Extension of {@link NativePageNavigationDelegate} with suggestions-specific methods. */ @@ -35,6 +39,16 @@ public class SuggestionsNavigationDelegate extends NativePageNavigationDelegateI new LoadUrlParams(NEW_TAB_URL_HELP, PageTransition.AUTO_BOOKMARK)); } + public void navigateToBookmarks() { + //RecordUserAction.record("MobileNTPSwitchToBookmarks"); + BookmarkUtils.showBookmarkManager(mActivity); + } + + public void navigateToDownloadManager() { + //RecordUserAction.record("MobileNTPSwitchToDownloadManager"); + DownloadUtils.showDownloadManager(mActivity, null, DownloadOpenSource.NEW_TAB_PAGE); + } + /** * Opens the suggestions page without recording metrics. * diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc @@ -3571,6 +3571,9 @@ const FeatureEntry kFeatureEntries[] = { SINGLE_VALUE_TYPE_AND_VALUE( switches::kForceShowUpdateMenuItemCustomSummary, "Custom Summary")}, + {"simplified-ntp", flag_descriptions::kSimplifiedNtpName, + flag_descriptions::kSimplifiedNtpDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kSimplifiedNTP)}, {"force-show-update-menu-badge", flag_descriptions::kUpdateMenuBadgeName, flag_descriptions::kUpdateMenuBadgeDescription, kOsAndroid, SINGLE_VALUE_TYPE(switches::kForceShowUpdateMenuBadge)}, diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc @@ -3148,6 +3148,9 @@ const char kStartSurfaceAndroidDescription[] = "Enable showing the start surface when launching Chrome via the " "launcher."; +const char kSimplifiedNtpName[] = "Simplified NTP"; +const char kSimplifiedNtpDescription[] = "Show a simplified New Tab Page."; + const char kStrictSiteIsolationName[] = "Strict site isolation"; const char kStrictSiteIsolationDescription[] = "Security mode that enables site isolation for all sites (SitePerProcess). " diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h @@ -1825,6 +1825,9 @@ extern const char kSiteIsolationForPasswordSitesDescription[]; extern const char kSmartSuggestionForLargeDownloadsName[]; extern const char kSmartSuggestionForLargeDownloadsDescription[]; +extern const char kSimplifiedNtpName[]; +extern const char kSimplifiedNtpDescription[]; + extern const char kStartSurfaceAndroidName[]; extern const char kStartSurfaceAndroidDescription[]; 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 @@ -186,6 +186,7 @@ const base::Feature* kFeaturesExposedToJava[] = { &kNewPhotoPicker, &kNotificationSuspender, &kOfflineIndicatorV2, + &kSimplifiedNTP, &kOmniboxSpareRenderer, &kPayWithGoogleV1, &kPhotoPickerVideoSupport, @@ -548,6 +549,9 @@ const base::Feature kNotificationSuspender{"NotificationSuspender", const base::Feature kOfflineIndicatorV2{"OfflineIndicatorV2", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kSimplifiedNTP{"SimplifiedNTP", + base::FEATURE_ENABLED_BY_DEFAULT}; + const base::Feature kOmniboxSpareRenderer{"OmniboxSpareRenderer", base::FEATURE_DISABLED_BY_DEFAULT}; diff --git a/chrome/browser/flags/android/chrome_feature_list.h b/chrome/browser/flags/android/chrome_feature_list.h --- a/chrome/browser/flags/android/chrome_feature_list.h +++ b/chrome/browser/flags/android/chrome_feature_list.h @@ -92,6 +92,7 @@ extern const base::Feature kLanguagesPreference; extern const base::Feature kNewPhotoPicker; extern const base::Feature kNotificationSuspender; extern const base::Feature kOfflineIndicatorV2; +extern const base::Feature kSimplifiedNTP; extern const base::Feature kOmniboxSpareRenderer; extern const base::Feature kPayWithGoogleV1; extern const base::Feature kPhotoPickerVideoSupport; 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 @@ -322,6 +322,7 @@ public abstract class ChromeFeatureList { public static final String LOOKALIKE_NAVIGATION_URL_SUGGESTIONS_UI = "LookalikeUrlNavigationSuggestionsUI"; public static final String MARK_HTTP_AS = "MarkHttpAs"; + public static final String SIMPLIFIED_NTP = "SimplifiedNTP"; public static final String MESSAGES_FOR_ANDROID_INFRASTRUCTURE = "MessagesForAndroidInfrastructure"; public static final String MOBILE_IDENTITY_CONSISTENCY = "MobileIdentityConsistency"; diff --git a/components/ntp_snippets/features.cc b/components/ntp_snippets/features.cc --- a/components/ntp_snippets/features.cc +++ b/components/ntp_snippets/features.cc @@ -13,13 +13,17 @@ #include "components/ntp_snippets/category_rankers/constant_category_ranker.h" #include "components/variations/variations_associated_data.h" +#if defined(OS_ANDROID) +#include "chrome/browser/flags/android/chrome_feature_list.h" +#endif // OS_ANDROID + namespace ntp_snippets { namespace { // All platforms proxy for whether the simplified NTP is enabled. bool IsSimplifiedNtpEnabled() { #if defined(OS_ANDROID) - return true; + return base::FeatureList::IsEnabled(chrome::android::kSimplifiedNTP); #else return false; #endif // OS_ANDROID diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json @@ -6736,6 +6736,24 @@ ] } ], + "SimplifiedNTP": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_NoScrollToLoad", + "enable_features": [ + "SimplifiedNTP" + ], + "disable_features": [ + "ContentSuggestionsScrollToLoad" + ] + } + ] + } + ], "TabGroupsYourTabsTogether": [ { "platforms": [ -- 2.17.1