779 lines
39 KiB
Diff
779 lines
39 KiB
Diff
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_layout.xml | 13 +-
|
|
.../java/res/layout/new_tab_page_layout.xml | 7 +
|
|
.../android/java/res/layout/ntp_shortcuts.xml | 65 ++++++
|
|
chrome/android/java/res/values/attrs.xml | 4 +
|
|
chrome/android/java/res/values/dimens.xml | 2 +
|
|
.../feedback/ChromeFeedbackCollector.java | 1 +
|
|
.../feedback/SimplifiedNtpFeedbackSource.java | 38 ++++
|
|
.../identity_disc/IdentityDiscController.java | 5 +-
|
|
.../NativePageNavigationDelegateImpl.java | 2 +-
|
|
.../chrome/browser/ntp/NewTabPageLayout.java | 25 ++-
|
|
.../SuggestionsNavigationDelegate.java | 17 ++
|
|
.../mostvisited/MostVisitedSitesBridge.java | 2 +-
|
|
.../tile/MostVisitedTilesCoordinator.java | 10 +-
|
|
.../tile/MostVisitedTilesGridLayout.java | 194 ++++++++++++++++++
|
|
.../tile/MostVisitedTilesMediator.java | 9 +-
|
|
.../engagement/important_sites_util.cc | 2 +-
|
|
.../flags/android/chrome_feature_list.cc | 1 +
|
|
.../browser/flags/ChromeFeatureList.java | 5 +-
|
|
.../history/core/browser/top_sites_impl.h | 2 +-
|
|
.../Restore-Simplified-NTP-launch.inc | 12 ++
|
|
.../Restore-Simplified-NTP-launch.inc | 6 +
|
|
.../Restore-Simplified-NTP-launch.inc | 1 +
|
|
24 files changed, 396 insertions(+), 30 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
|
|
@@ -538,6 +538,7 @@ chrome_java_resources = [
|
|
"java/res/layout/new_tab_page_layout.xml",
|
|
"java/res/layout/new_tab_page_tile_grid_placeholder.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
|
|
@@ -623,6 +623,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",
|
|
@@ -1054,6 +1055,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_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.
|
|
-->
|
|
|
|
-<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
|
+<org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesGridLayout
|
|
+ xmlns:android="http://schemas.android.com/apk/res/android"
|
|
+ android:id="@+id/mv_tiles_layout"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
- android:scrollbars="none">
|
|
-
|
|
- <org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesLayout
|
|
- android:id="@+id/mv_tiles_layout"
|
|
- android:layout_width="wrap_content"
|
|
- android:layout_height="match_parent"
|
|
- android:orientation="horizontal" />
|
|
-</HorizontalScrollView>
|
|
+ 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
|
|
@@ -38,6 +38,13 @@ found in the LICENSE file.
|
|
android:layout_marginTop="16dp"
|
|
android:visibility="gone"/>
|
|
|
|
+ <ViewStub
|
|
+ android:id="@+id/shortcuts_stub"
|
|
+ android:layout_width="match_parent"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:inflatedId="@+id/shortcuts"
|
|
+ android:layout="@layout/ntp_shortcuts" />
|
|
+
|
|
<!-- Middle spacer -->
|
|
<View
|
|
android:id="@+id/ntp_middle_spacer"
|
|
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 @@
|
|
+<?xml version="1.0" encoding="utf-8"?>
|
|
+<!-- 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. -->
|
|
+
|
|
+<LinearLayout
|
|
+ xmlns:android="http://schemas.android.com/apk/res/android"
|
|
+ xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
+ android:id="@+id/shortcuts"
|
|
+ android:layout_width="match_parent"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:paddingStart="16dp"
|
|
+ android:paddingEnd="16dp"
|
|
+ android:baselineAligned="false"
|
|
+ android:gravity="center"
|
|
+ android:orientation="horizontal" >
|
|
+
|
|
+ <FrameLayout
|
|
+ android:id="@+id/bookmarks_button"
|
|
+ android:layout_width="0dp"
|
|
+ android:layout_weight="1"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:minHeight="48dp"
|
|
+ android:background="?attr/selectableItemBackground"
|
|
+ android:paddingTop="4dp"
|
|
+ android:paddingBottom="4dp" >
|
|
+
|
|
+ <org.chromium.components.browser_ui.widget.text.TextViewWithCompoundDrawables
|
|
+ android:layout_width="wrap_content"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:gravity="center"
|
|
+ android:layout_gravity="center"
|
|
+ android:drawablePadding="8dp"
|
|
+ android:drawableStart="@drawable/btn_star_filled"
|
|
+ android:text="@string/menu_bookmarks"
|
|
+ android:textAppearance="@style/TextAppearance.TextSmall.Secondary"
|
|
+ app:drawableHeight="20sp"
|
|
+ app:drawableWidth="20sp"
|
|
+ app:chromeDrawableTint="@color/default_icon_color_light" />
|
|
+ </FrameLayout>
|
|
+
|
|
+ <FrameLayout
|
|
+ android:id="@+id/downloads_button"
|
|
+ android:layout_width="0dp"
|
|
+ android:layout_weight="1"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:minHeight="48dp"
|
|
+ android:background="?attr/selectableItemBackground"
|
|
+ android:paddingTop="4dp"
|
|
+ android:paddingBottom="4dp" >
|
|
+
|
|
+ <org.chromium.components.browser_ui.widget.text.TextViewWithCompoundDrawables
|
|
+ android:layout_width="wrap_content"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:gravity="center"
|
|
+ android:layout_gravity="center"
|
|
+ android:drawablePadding="8dp"
|
|
+ android:drawableStart="@drawable/ic_file_download_white_24dp"
|
|
+ android:text="@string/menu_downloads"
|
|
+ android:textAppearance="@style/TextAppearance.TextSmall.Secondary"
|
|
+ app:drawableHeight="20sp"
|
|
+ app:drawableWidth="20sp"
|
|
+ app:chromeDrawableTint="@color/default_icon_color_light" />
|
|
+ </FrameLayout>
|
|
+</LinearLayout>
|
|
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.
|
|
<attr name="emptyErrorMessage" format="string" />
|
|
</declare-styleable>
|
|
|
|
+ <declare-styleable name="MostVisitedTilesGridLayout">
|
|
+ <attr name="minHorizontalSpacing" format="dimension"/>
|
|
+ </declare-styleable>
|
|
+
|
|
<declare-styleable name="ExploreSitesTileView">
|
|
<attr name="iconCornerRadius" format="dimension"/>
|
|
</declare-styleable>
|
|
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
|
|
@@ -127,6 +127,8 @@ found in the LICENSE file.
|
|
<dimen name="find_in_page_popup_margin_end">62dp</dimen>
|
|
|
|
<!-- NTP dimensions -->
|
|
+ <dimen name="tile_grid_layout_vertical_spacing">6dp</dimen>
|
|
+ <dimen name="tile_grid_layout_min_horizontal_spacing">4dp</dimen>
|
|
<dimen name="tile_layout_no_logo_top_margin">20dp</dimen>
|
|
<dimen name="mvt_container_lateral_margin">@dimen/signin_promo_lateral_paddings</dimen>
|
|
<dimen name="mvt_container_top_padding">17dp</dimen>
|
|
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
|
|
@@ -63,6 +63,7 @@ public class ChromeFeedbackCollector extends FeedbackCollector<ChromeFeedbackCol
|
|
sources.add(new LowEndDeviceFeedbackSource());
|
|
sources.add(new IMEFeedbackSource());
|
|
sources.add(new PermissionFeedbackSource());
|
|
+ sources.add(new SimplifiedNtpFeedbackSource());
|
|
sources.add(new FeedbackContextFeedbackSource(initParams.feedbackContext));
|
|
sources.add(
|
|
new AutoDarkFeedbackSource(initParams.profile, activity, new GURL(initParams.url)));
|
|
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<String, String> mMap;
|
|
+
|
|
+ SimplifiedNtpFeedbackSource() {
|
|
+ mMap = new HashMap<String, String>(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<String, String> 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
|
|
@@ -153,7 +153,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/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
|
|
@@ -30,7 +30,7 @@ import java.util.List;
|
|
|
|
/** {@link NativePageNavigationDelegate} implementation. */
|
|
public class NativePageNavigationDelegateImpl implements NativePageNavigationDelegate {
|
|
- private final Profile mProfile;
|
|
+ protected final Profile mProfile;
|
|
private final TabGroupCreationDialogManager mTabGroupCreationDialogManager;
|
|
|
|
protected final TabModelSelector mTabModelSelector;
|
|
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
|
|
@@ -15,6 +15,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.LinearLayout;
|
|
@@ -32,6 +33,7 @@ import org.chromium.chrome.R;
|
|
import org.chromium.chrome.browser.feed.FeedSurfaceScrollDelegate;
|
|
import org.chromium.chrome.browser.flags.ChromeFeatureList;
|
|
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;
|
|
@@ -89,6 +91,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.
|
|
@@ -101,7 +105,7 @@ public class NewTabPageLayout extends LinearLayout {
|
|
*/
|
|
private boolean mHasShownView;
|
|
|
|
- private boolean mSearchProviderHasLogo = true;
|
|
+ private boolean mSearchProviderHasLogo = false;
|
|
private boolean mSearchProviderIsGoogle;
|
|
private boolean mShowingNonStandardGoogleLogo;
|
|
|
|
@@ -272,6 +276,7 @@ public class NewTabPageLayout extends LinearLayout {
|
|
initializeLogoCoordinator(searchProviderHasLogo, searchProviderIsGoogle);
|
|
initializeMostVisitedTilesCoordinator(
|
|
mProfile, lifecycleDispatcher, tileGroupDelegate, touchEnabledDelegate);
|
|
+ initializeShortcuts();
|
|
initializeSearchBoxTextView();
|
|
initializeVoiceSearchButton();
|
|
initializeLensButton();
|
|
@@ -610,7 +615,7 @@ public class NewTabPageLayout extends LinearLayout {
|
|
&& mInitialized) {
|
|
return;
|
|
}
|
|
- mSearchProviderHasLogo = hasLogo;
|
|
+ mSearchProviderHasLogo = false;
|
|
mSearchProviderIsGoogle = isGoogle;
|
|
|
|
if (!mSearchProviderIsGoogle) {
|
|
@@ -945,6 +950,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/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
|
|
@@ -18,6 +18,11 @@ import org.chromium.chrome.browser.ui.native_page.NativePageHost;
|
|
import org.chromium.content_public.browser.LoadUrlParams;
|
|
import org.chromium.ui.base.PageTransition;
|
|
|
|
+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. */
|
|
public class SuggestionsNavigationDelegate extends NativePageNavigationDelegateImpl {
|
|
public SuggestionsNavigationDelegate(
|
|
@@ -30,6 +35,18 @@ public class SuggestionsNavigationDelegate extends NativePageNavigationDelegateI
|
|
super(activity, profile, host, tabModelSelector, tabGroupCreationDialogManager, tab);
|
|
}
|
|
|
|
+ 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/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSitesBridge.java
|
|
@@ -21,7 +21,7 @@ public class MostVisitedSitesBridge implements MostVisitedSites {
|
|
* 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 = 12 * 2;
|
|
|
|
private long mNativeMostVisitedSitesBridge;
|
|
|
|
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
|
|
@@ -38,7 +38,7 @@ public class MostVisitedTilesCoordinator implements ConfigurationChangedObserver
|
|
private final MostVisitedTilesMediator mMediator;
|
|
private final WindowAndroid mWindowAndroid;
|
|
private final UiConfig mUiConfig;
|
|
- private final PropertyModelChangeProcessor mModelChangeProcessor;
|
|
+ private PropertyModelChangeProcessor mModelChangeProcessor;
|
|
private TileRenderer mRenderer;
|
|
private ContextMenuManager mContextMenuManager;
|
|
private OfflinePageBridge mOfflinePageBridge;
|
|
@@ -66,17 +66,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);
|
|
- mModelChangeProcessor =
|
|
- 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,194 @@
|
|
+// 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.ntp.FeedPositionUtils;
|
|
+import org.chromium.chrome.browser.suggestions.SiteSuggestion;
|
|
+import org.chromium.ui.base.DeviceFormFactor;
|
|
+
|
|
+/** 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;
|
|
+
|
|
+ /**
|
|
+ * 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<Integer, Integer> 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<Integer, Integer> 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;
|
|
+ }
|
|
+}
|
|
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
|
|
@@ -12,6 +12,7 @@ import static org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesPrope
|
|
|
|
import android.content.res.Configuration;
|
|
import android.content.res.Resources;
|
|
+import android.view.ViewGroup;
|
|
import android.view.ViewStub;
|
|
|
|
import androidx.annotation.Nullable;
|
|
@@ -37,7 +38,7 @@ public class MostVisitedTilesMediator implements TileGroup.Observer, TemplateUrl
|
|
|
|
private final Resources mResources;
|
|
private final UiConfig mUiConfig;
|
|
- private final MostVisitedTilesLayout mMvTilesLayout;
|
|
+ private final ViewGroup mMvTilesLayout;
|
|
private final ViewStub mNoMvPlaceholderStub;
|
|
private final PropertyModel mModel;
|
|
private final boolean mIsTablet;
|
|
@@ -59,7 +60,7 @@ public class MostVisitedTilesMediator implements TileGroup.Observer, TemplateUrl
|
|
public MostVisitedTilesMediator(
|
|
Resources resources,
|
|
UiConfig uiConfig,
|
|
- MostVisitedTilesLayout mvTilesLayout,
|
|
+ ViewGroup mvTilesLayout,
|
|
ViewStub noMvPlaceholderStub,
|
|
TileRenderer renderer,
|
|
PropertyModel propertyModel,
|
|
@@ -166,8 +167,8 @@ public class MostVisitedTilesMediator implements TileGroup.Observer, TemplateUrl
|
|
}
|
|
|
|
public void destroy() {
|
|
- if (mMvTilesLayout != null) {
|
|
- mMvTilesLayout.destroy();
|
|
+ if (mMvTilesLayout instanceof MostVisitedTilesLayout) {
|
|
+ ((MostVisitedTilesLayout)mMvTilesLayout).destroy();
|
|
}
|
|
|
|
if (mTileGroup != null) {
|
|
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
|
|
@@ -66,7 +66,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
|
|
@@ -247,6 +247,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
|
|
&kGtsCloseTabAnimation,
|
|
&kIncognitoReauthenticationForAndroid,
|
|
&kIncognitoScreenshot,
|
|
+ &kSimplifiedNTP,
|
|
&kLensOnQuickActionSearchWidget,
|
|
&kLogoPolish,
|
|
&kLogoPolishAnimationKillSwitch,
|
|
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
|
|
@@ -360,6 +360,7 @@ public abstract class ChromeFeatureList {
|
|
public static final String MAYLAUNCHURL_USES_SEPARATE_STORAGE_PARTITION =
|
|
"MayLaunchUrlUsesSeparateStoragePartition";
|
|
public static final String MESSAGES_FOR_ANDROID_ADS_BLOCKED = "MessagesForAndroidAdsBlocked";
|
|
+ public static final String SIMPLIFIED_NTP = "SimplifiedNTP";
|
|
public static final String SEARCH_READY_OMNIBOX = "SearchReadyOmnibox";
|
|
public static final String MOST_VISITED_TILES_SELECT_EXISTING_TAB =
|
|
"MostVisitedTilesSelectExistingTab";
|
|
@@ -650,7 +651,7 @@ public abstract class ChromeFeatureList {
|
|
public static final CachedFlag sLogoPolish = newCachedFlag(LOGO_POLISH, true);
|
|
public static final CachedFlag sLogoPolishAnimationKillSwitch =
|
|
newCachedFlag(LOGO_POLISH_ANIMATION_KILL_SWITCH, 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 sMostVisitedTilesSelectExistingTab =
|
|
newCachedFlag(MOST_VISITED_TILES_SELECT_EXISTING_TAB, false);
|
|
public static final CachedFlag sMultiInstanceApplicationStatusCleanup =
|
|
@@ -684,7 +685,7 @@ public abstract class ChromeFeatureList {
|
|
newCachedFlag(SMALLER_TAB_STRIP_TITLE_LIMIT, true);
|
|
public static final CachedFlag sStartSurfaceReturnTime =
|
|
newCachedFlag(START_SURFACE_RETURN_TIME, true);
|
|
- public static final CachedFlag sSurfacePolish = newCachedFlag(SURFACE_POLISH, true);
|
|
+ public static final CachedFlag sSurfacePolish = newCachedFlag(SURFACE_POLISH, false);
|
|
public static final CachedFlag sSurfacePolishForToolbarKillSwitch =
|
|
newCachedFlag(SURFACE_POLISH_FOR_TOOLBAR_KILL_SWITCH, true);
|
|
public static final CachedFlag sTabDragDropAsWindowAndroid =
|
|
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/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,6 @@
|
|
+CROMITE_FEATURE(kSimplifiedNTP,
|
|
+ "SimplifiedNTP",
|
|
+ base::FEATURE_ENABLED_BY_DEFAULT);
|
|
+
|
|
+SET_CROMITE_FEATURE_DISABLED(kSurfacePolish);
|
|
+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);
|
|
--
|