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 +++++++++++ .../NativePageNavigationDelegateImpl.java | 4 +- .../chrome/browser/ntp/NewTabPageLayout.java | 30 ++++++++- .../suggestions/SuggestionsConfig.java | 4 +- .../SuggestionsNavigationDelegate.java | 17 +++++ 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 +++++ 18 files changed, 201 insertions(+), 6 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 @@ -685,6 +685,7 @@ chrome_java_resources = [ "java/res/layout/new_tab_page_multi_feed_header.xml", "java/res/layout/new_tab_page_section_tab.xml", "java/res/layout/new_tab_page_tile_grid_placeholder.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 @@ -588,6 +588,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 @@ -56,6 +56,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/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 @@ -26,9 +26,9 @@ import org.chromium.ui.mojom.WindowOpenDisposition; */ public class NativePageNavigationDelegateImpl implements NativePageNavigationDelegate { private static final String TAG = "PageNavDelegate"; - private final Profile mProfile; + protected final Profile mProfile; private final TabModelSelector mTabModelSelector; - private final Tab mTab; + protected final Tab mTab; protected final Activity mActivity; protected final NativePageHost mHost; 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 @@ -37,6 +37,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.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.native_page.ContextMenuManager; @@ -117,6 +118,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. @@ -282,6 +285,7 @@ public class NewTabPageLayout extends LinearLayout implements TileGroup.Observer mNoSearchLogoSpacer = findViewById(R.id.no_search_logo_spacer); initializeSearchBoxBackground(); + initializeShortcuts(); initializeSearchBoxTextView(); initializeVoiceSearchButton(); initializeLensButton(); @@ -595,10 +599,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.getItemView().setPadding( 0, paddingTop, 0, mSiteSectionViewHolder.getItemView().getPaddingBottom()); } @@ -987,6 +997,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,11 @@ 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; +import org.chromium.chrome.browser.profiles.OTRProfileID; + /** * Extension of {@link NativePageNavigationDelegate} with suggestions-specific methods. */ @@ -35,6 +40,18 @@ public class SuggestionsNavigationDelegate extends NativePageNavigationDelegateI new LoadUrlParams(NEW_TAB_URL_HELP, PageTransition.AUTO_BOOKMARK)); } + public void navigateToBookmarks() { + BookmarkUtils.showBookmarkManager(mActivity, mTab.isIncognito()); + } + + 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); + } + /** * 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 @@ -3875,6 +3875,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 @@ -3452,6 +3452,9 @@ const char kSharingHubLinkToggleName[] = "Sharing Hub Link Toggle"; const char kSharingHubLinkToggleDescription[] = "Enable the link toggle in the Sharing Hub."; +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 @@ -1968,6 +1968,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 @@ -220,6 +220,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kEnhancedProtectionPromoCard, &kExperimentsForAgsa, &kExploreSites, + &kSimplifiedNTP, &kFocusOmniboxInIncognitoTabIntents, &kGoogleLensSdkIntent, &kHandleMediaIntents, @@ -652,6 +653,9 @@ const base::Feature kOfflineIndicatorV2{"OfflineIndicatorV2", const base::Feature kOfflineMeasurementsBackgroundTask{ "OfflineMeasurementsBackgroundTask", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kSimplifiedNTP{"SimplifiedNTP", + base::FEATURE_ENABLED_BY_DEFAULT}; + const base::Feature kPageAnnotationsService{"PageAnnotationsService", 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 @@ -109,6 +109,7 @@ extern const base::Feature kNewWindowAppMenu; extern const base::Feature kOfflineIndicatorV2; extern const base::Feature kOfflineMeasurementsBackgroundTask; extern const base::Feature kPageAnnotationsService; +extern const base::Feature kSimplifiedNTP; extern const base::Feature kProbabilisticCryptidRenderer; extern const base::Feature kQuickActionSearchWidgetAndroid; extern const base::Feature kReachedCodeProfiler; 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 @@ -396,6 +396,7 @@ public abstract class ChromeFeatureList { public static final String MARK_HTTP_AS = "MarkHttpAs"; public static final String MESSAGES_FOR_ANDROID_CHROME_SURVEY = "MessagesForAndroidChromeSurvey"; + public static final String SIMPLIFIED_NTP = "SimplifiedNTP"; public static final String MESSAGES_FOR_ANDROID_INFRASTRUCTURE = "MessagesForAndroidInfrastructure"; public static final String MESSAGES_FOR_ANDROID_READER_MODE = "MessagesForAndroidReaderMode"; 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 @@ -4059,6 +4059,24 @@ ] } ], + "SimplifiedNTP": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled_NoScrollToLoad", + "enable_features": [ + "SimplifiedNTP" + ], + "disable_features": [ + "ContentSuggestionsScrollToLoad" + ] + } + ] + } + ], "HelpAppLauncherSearch": [ { "platforms": [ -- 2.17.1