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