1690 lines
85 KiB
Diff
1690 lines
85 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 | 8 +
|
|
chrome/android/chrome_java_sources.gni | 2 +
|
|
.../ic_most_visited_placeholder.png | Bin 0 -> 1273 bytes
|
|
.../ic_most_visited_placeholder.png | Bin 0 -> 718 bytes
|
|
.../ic_most_visited_placeholder.png | Bin 0 -> 1519 bytes
|
|
.../ic_most_visited_placeholder.png | Bin 0 -> 2335 bytes
|
|
.../ic_most_visited_placeholder.png | Bin 0 -> 4034 bytes
|
|
.../java/res/layout/mv_tiles_container.xml | 39 +++
|
|
.../java/res/layout/mv_tiles_layout.xml | 11 +-
|
|
.../java/res/layout/new_tab_page_layout.xml | 7 +
|
|
.../new_tab_page_tile_grid_placeholder.xml | 43 +++
|
|
.../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 | 12 +-
|
|
.../feedback/ChromeFeedbackCollector.java | 1 +
|
|
.../feedback/SimplifiedNtpFeedbackSource.java | 38 +++
|
|
.../identity_disc/IdentityDiscController.java | 2 +-
|
|
.../native_page/NativePageFactory.java | 20 +-
|
|
.../NativePageNavigationDelegateImpl.java | 2 +-
|
|
.../chrome/browser/ntp/NewTabPage.java | 8 +-
|
|
.../browser/ntp/NewTabPageCoordinator.java | 28 +-
|
|
.../ntp/search/SearchBoxViewBinder.java | 1 +
|
|
.../suggestions/SuggestionsConfig.java | 2 +-
|
|
.../SuggestionsNavigationDelegate.java | 27 +-
|
|
.../tile/MostVisitedTilesCoordinator.java | 8 +-
|
|
.../tile/MostVisitedTilesGridLayout.java | 287 ++++++++++++++++++
|
|
.../tile/MostVisitedTilesMediator.java | 12 +-
|
|
.../tile/TileDragDelegateImpl.java | 18 +-
|
|
.../suggestions/tile/TileRenderer.java | 12 +-
|
|
.../suggestions/tile/TilesLinearLayout.java | 2 +-
|
|
.../engagement/important_sites_util.cc | 2 +-
|
|
.../flags/android/chrome_feature_list.cc | 1 +
|
|
.../browser/flags/ChromeFeatureList.java | 1 +
|
|
.../chrome_most_visited_sites_factory.cc | 4 -
|
|
.../client_util/HomeModulesRankingHelper.java | 1 +
|
|
.../strings/android_chrome_strings.grd | 6 +
|
|
.../core/browser/top_sites_constants.h | 2 +-
|
|
components/ntp_tiles/custom_links_store.cc | 2 -
|
|
components/omnibox/common/omnibox_features.cc | 2 +
|
|
components/search_engines/template_url.h | 4 +-
|
|
.../Restore-Simplified-NTP-launch.inc | 12 +
|
|
.../Restore-Simplified-NTP-launch.inc | 6 +
|
|
.../Restore-Simplified-NTP-launch.inc | 1 +
|
|
45 files changed, 641 insertions(+), 67 deletions(-)
|
|
create mode 100644 chrome/android/java/res/drawable-hdpi/ic_most_visited_placeholder.png
|
|
create mode 100644 chrome/android/java/res/drawable-mdpi/ic_most_visited_placeholder.png
|
|
create mode 100644 chrome/android/java/res/drawable-xhdpi/ic_most_visited_placeholder.png
|
|
create mode 100644 chrome/android/java/res/drawable-xxhdpi/ic_most_visited_placeholder.png
|
|
create mode 100644 chrome/android/java/res/drawable-xxxhdpi/ic_most_visited_placeholder.png
|
|
create mode 100644 chrome/android/java/res/layout/mv_tiles_container.xml
|
|
create mode 100644 chrome/android/java/res/layout/new_tab_page_tile_grid_placeholder.xml
|
|
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
|
|
@@ -53,6 +53,11 @@ chrome_java_resources = [
|
|
"java/res/drawable-hdpi/ic_exit_to_app_white_24dp.png",
|
|
"java/res/drawable-hdpi/ic_file_download_white_24dp.png",
|
|
"java/res/drawable-hdpi/ic_link_grey600_36dp.png",
|
|
+ "java/res/drawable-hdpi/ic_most_visited_placeholder.png",
|
|
+ "java/res/drawable-mdpi/ic_most_visited_placeholder.png",
|
|
+ "java/res/drawable-xhdpi/ic_most_visited_placeholder.png",
|
|
+ "java/res/drawable-xxhdpi/ic_most_visited_placeholder.png",
|
|
+ "java/res/drawable-xxxhdpi/ic_most_visited_placeholder.png",
|
|
"java/res/drawable-hdpi/ic_phone_googblue_36dp.png",
|
|
"java/res/drawable-hdpi/ic_photo_camera.png",
|
|
"java/res/drawable-hdpi/ic_place_googblue_36dp.png",
|
|
@@ -553,6 +558,7 @@ chrome_java_resources = [
|
|
"java/res/layout/manage_space_activity.xml",
|
|
"java/res/layout/material_tooltip.xml",
|
|
"java/res/layout/multiline_spinner_item.xml",
|
|
+ "java/res/layout/mv_tiles_container.xml",
|
|
"java/res/layout/mv_tiles_layout.xml",
|
|
"java/res/layout/navigation_bubble.xml",
|
|
"java/res/layout/navigation_sheet.xml",
|
|
@@ -561,8 +567,10 @@ chrome_java_resources = [
|
|
"java/res/layout/new_background_tab_animation_tab_switcher_icon.xml",
|
|
"java/res/layout/new_custom_tab_toolbar.xml",
|
|
"java/res/layout/new_tab_page_incognito.xml",
|
|
+ "java/res/layout/new_tab_page_tile_grid_placeholder.xml",
|
|
"java/res/layout/new_tab_page_layout.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
|
|
@@ -660,6 +660,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",
|
|
@@ -1111,6 +1112,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/drawable-hdpi/ic_most_visited_placeholder.png b/chrome/android/java/res/drawable-hdpi/ic_most_visited_placeholder.png
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..3d71af1433341fc4552e9b6c7a96cd6911bcffeb
|
|
GIT binary patch
|
|
literal 1273
|
|
zcmV<V1P1$wP)<h;3K|Lk000e1NJLTq00341003491ONa4|6i$m000EQNkl<ZcmdQ{
|
|
zu}d6j6n{1;G&vA*xL_kBYjr8sV~bnPTvEtE$P$}07DwP#u(a_01S=uh*$8(<K(bv_
|
|
z4y^`nci!*a3VX17kb@vLDU8@8qD1t#%f4@R5;Ixdoo{9xf3MjY_WS0?H*em1zaK>b
|
|
zNh8lQSdvZDup|3&{2}(SgPLq&iD!_PG+j2_TbRT$cICf|1G`wpq<f3H4;kQTR9jN}
|
|
z_d~QIUFB&Rpl$*8WDO^02)xFM%%M;om9&%E=%XI$+30gpk}i*;Aahv3>ofm9ku}_-
|
|
zxFHYVe)7<FQp8kgnA$*T7*kTjyH8fT@*utp&7$Hz=v3BuVzrk##A+{3$U08_eJXC2
|
|
zqDHA7i+&y+$~+H}1$a>A<*=FGSS<BZbl`F9nXPevS?4B2fIq&*EDpR~_jsJ5K=B$c
|
|
z_%H3b-H8TI7|)w~^Fr|&*#Sec<q>@)V-y2q46i)GTNtA7;7qgN<C$}vVuEuW&zg;c
|
|
zGZYTx`|?(|I6{G91`0S*!f(s>!+limmFgReP!}NI;*CD<J&$*Ms)nj;^KI%9__k~t
|
|
zx*eS^XS@WcIVtKQoD^y%8QRWW40)f`wxQZxy58yTVyLaUDqAL3trEZ@8BFfVRvUGf
|
|
z7rY8ELYD-L;K;Oz3u}PaPkyFL1PUID@$<)(J<|f{l405e_Rbk`uxJ{qeYdjjYNiQe
|
|
zvE{t#4S{2n0LYjbAY074sF=x$5&|=kq4Gt+V&+vIq=bM6y?Hk%evG!lEF}n-HCipG
|
|
zSXHp73P=o`n@0S6ri5ipZ$71j0Z;W1*UnfLIB6)>PV*Hn@bco2qE+6Ws?RX+@z%8R
|
|
zU#AX%dRxX(g)AWJ+RLV?31bBDL=wsJgfX3bd(F5jtG(gK@?-a#&jU}C=wEvE2zAuM
|
|
zCc|p4adA9L50kpFZWfAch5~T!ek?j});pV!kfN@iG>=@?i>aiN#gwjJHW#W3O2hGx
|
|
zRevkP8TS#YsD^oerD3BT)U`IIC6OIj`JNy0!%}~ctN~~APMt!)GfdNjyl%2$OV*4*
|
|
zoQs9*imuHQ|DvqtVj+8gN;Bl|@ML99_nsjv=_Z9Z$OZ%T@G=KWB%6&N<<TUQEsyHz
|
|
zP4aAov@Kb_!#U2CZ;;~muQ+!$@FYB0uL#r#JB=Ss%9d<v*neP7O4sg?>^FXF^d*_>
|
|
zMxVa@eUjsbETf(zlcgS&vd349>=jCbEA@dzQ@UE9d_&9D9YfZ>bVbt?T7Yv#DHyW$
|
|
zO~G%sNha&J+lU4k?OJZu&GHX_{^Z_uvyDJrhnU|CS^GgInh{aKKL#d&s7FM9_)aoe
|
|
zZ}^T-*0|rPaQR0L@e);yUxQ>VWQ~Pjw5YQ-g3*)W2_@@G@z_j`VDMu@*23h7**>yY
|
|
z3ch`0Va!>OwJ_%5wLF9I!rJmou9+<J0W<mk_U)JkKp+UBs0lEFC9rTd&Jqa)>jEv5
|
|
z(=64o$^7JO%)IY9(_gD*dg=iJyOvO=9qbN89nG){UpOKTdmI5{Cos^1qEZlqX2AO%
|
|
z@jh!f8Jpnb5J|09UiU7N%E!KZMok3j_4NN-68c{eRYV_+DxxP*1tC|#gg}_YiXE@b
|
|
jEHDo)+h=gu{t7N%^^-?s9Fd&I00000NkvXXu0mjfGY4n(
|
|
|
|
literal 0
|
|
HcmV?d00001
|
|
|
|
diff --git a/chrome/android/java/res/drawable-mdpi/ic_most_visited_placeholder.png b/chrome/android/java/res/drawable-mdpi/ic_most_visited_placeholder.png
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..f057df12978c838312853d20a9a700a9a2aaf821
|
|
GIT binary patch
|
|
literal 718
|
|
zcmV;<0x|uGP)<h;3K|Lk000e1NJLTq0021v0021%1ONa4CJ{>x0007&Nkl<ZcwWVs
|
|
zKWidE7{=cSiJg^=U0RFuUY|M<yYoB5R<yDZ@dMZ--{5Qv1hz>bh}q}4Ua?PMqbOvt
|
|
z+xQ;r1%`0(oLzUa&s5s{nA!K=JR|m+l>9pS9C5}a-VoxAOU^h#->*+flCDr@4-4w2
|
|
z_5S%c7VM#%2JH+r@B^~tBbt5{<#Ex=i+K5Q5oN!MCLg)|024JiljOn;=Mikp!L-uJ
|
|
z$w75;(+US%N8mYblHo4#6ya8A3@^k=!wWRHqEhjM%ecU6Y^dC!>lGxHyaKx1QL({w
|
|
z9N-;7Dt;x6!%2xlDni^@;qK4zK;<57IZ0@9PsPLi`ElSg6~W7`oUE5y1XMg9fkr!g
|
|
z^{*rq`B!|U;^DvFkcz+n(||@hy*nJGA@{aNYJa@kBgFOBdAOnaElFK|i;B$`c^W1D
|
|
zP@E`AnWukCn{t<WKQMW^qkb-fXPi^f6=y=1%DE}{f*O@8uiy^p6}Y0JW{|(BXoypx
|
|
zK?O|%R<4hA3+ka|+hw?>el&6Rs2qs6MT&4hWiJ9?L7i4?kYE2}i=9@eSVRF#<+hV^
|
|
zkL={QrA|uX*Qp$dBuCm~IimV?L7$4I9nyf3A<?9w|Cd}%f{Y(Vel<E#&ZsCmN1Ak;
|
|
z376Dy(Gq!3cF1v&%B3Kndin1`dU+}WLCALzw@4%I5q|$J-!k}?u_E>`Do(_jymX8-
|
|
zc^SL<n0!oJeN2sYkK`lO|7kjj<M1(^#Pmz&$d?~fEK-;X%(9*e%<SV5X=a}cCcF&h
|
|
z*bJui4DKY^-Mq~G67BSXXq)?GmbYm4UO~o=NcO&uakox2D*Tplx2!!p4qbbA?wv~a
|
|
zer(3Bb8>Hebii95S$OMNz91xhCkYTDNcK+h2fYj#{p3=OZvX%Q07*qoM6N<$f{avI
|
|
AQ2+n{
|
|
|
|
literal 0
|
|
HcmV?d00001
|
|
|
|
diff --git a/chrome/android/java/res/drawable-xhdpi/ic_most_visited_placeholder.png b/chrome/android/java/res/drawable-xhdpi/ic_most_visited_placeholder.png
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..12e3d77ef68c092977975d7ac8e777304250b20d
|
|
GIT binary patch
|
|
literal 1519
|
|
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
|
|
VYD9idM-c!3002ovPDHLkV1iD~y2t<k
|
|
|
|
literal 0
|
|
HcmV?d00001
|
|
|
|
diff --git a/chrome/android/java/res/drawable-xxhdpi/ic_most_visited_placeholder.png b/chrome/android/java/res/drawable-xxhdpi/ic_most_visited_placeholder.png
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..3ce230c9b20b858ed2da0117abc52f15b9b80d5a
|
|
GIT binary patch
|
|
literal 2335
|
|
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
|
|
APXGV_
|
|
|
|
literal 0
|
|
HcmV?d00001
|
|
|
|
diff --git a/chrome/android/java/res/drawable-xxxhdpi/ic_most_visited_placeholder.png b/chrome/android/java/res/drawable-xxxhdpi/ic_most_visited_placeholder.png
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..14b205657b6b7a46bc64c09f3277daffd5998ef9
|
|
GIT binary patch
|
|
literal 4034
|
|
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
|
|
|
|
literal 0
|
|
HcmV?d00001
|
|
|
|
diff --git a/chrome/android/java/res/layout/mv_tiles_container.xml b/chrome/android/java/res/layout/mv_tiles_container.xml
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/chrome/android/java/res/layout/mv_tiles_container.xml
|
|
@@ -0,0 +1,39 @@
|
|
+<?xml version="1.0" encoding="utf-8"?>
|
|
+<!--
|
|
+Copyright 2023 The Chromium Authors
|
|
+Use of this source code is governed by a BSD-style license that can be
|
|
+found in the LICENSE file.
|
|
+-->
|
|
+
|
|
+<!-- A site suggestion tile. -->
|
|
+<FrameLayout android:layout_width="match_parent"
|
|
+ android:layout_height="wrap_content"
|
|
+ xmlns:android="http://schemas.android.com/apk/res/android"
|
|
+ xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
+ android:id="@+id/mv_tiles_container"
|
|
+ android:visibility="gone"
|
|
+ android:orientation="vertical"
|
|
+ android:layout_gravity="center_horizontal"
|
|
+ android:layout_marginTop="@dimen/mvt_container_top_margin"
|
|
+ android:layout_marginLeft="@dimen/mvt_container_lateral_margin"
|
|
+ android:layout_marginRight="@dimen/mvt_container_lateral_margin"
|
|
+ android:paddingTop="@dimen/mvt_container_top_padding"
|
|
+ android:paddingBottom="@dimen/mvt_container_bottom_padding"
|
|
+ android:background="@drawable/home_surface_ui_background"
|
|
+ app:layout_scrollFlags="scroll">
|
|
+
|
|
+ <ViewStub
|
|
+ android:id="@+id/mv_tiles_layout_stub"
|
|
+ android:layout_width="wrap_content"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:layout="@layout/mv_tiles_layout" />
|
|
+
|
|
+ <!-- Site suggestion tile grid placeholder -->
|
|
+ <ViewStub
|
|
+ android:id="@+id/mv_tiles_placeholder_stub"
|
|
+ android:layout_gravity="center_horizontal"
|
|
+ android:layout_width="match_parent"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:inflatedId="@+id/tile_grid_placeholder"
|
|
+ android:layout="@layout/new_tab_page_tile_grid_placeholder" />
|
|
+</FrameLayout>
|
|
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
|
|
@@ -13,9 +13,10 @@ found in the LICENSE file.
|
|
android:paddingBottom="@dimen/mvt_container_bottom_padding"
|
|
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" />
|
|
+<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:layout_gravity="center_horizontal" />
|
|
</HorizontalScrollView>
|
|
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
|
|
@@ -42,6 +42,13 @@ found in the LICENSE file.
|
|
/>
|
|
|
|
<!-- Most Visited Tiles -->
|
|
+ <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" />
|
|
+
|
|
<ViewStub
|
|
android:id="@+id/mv_tiles_layout_stub"
|
|
android:inflatedId="@+id/mv_tiles_container"
|
|
diff --git a/chrome/android/java/res/layout/new_tab_page_tile_grid_placeholder.xml b/chrome/android/java/res/layout/new_tab_page_tile_grid_placeholder.xml
|
|
new file mode 100644
|
|
--- /dev/null
|
|
+++ b/chrome/android/java/res/layout/new_tab_page_tile_grid_placeholder.xml
|
|
@@ -0,0 +1,43 @@
|
|
+<?xml version="1.0" encoding="utf-8"?>
|
|
+<!--
|
|
+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.
|
|
+-->
|
|
+
|
|
+<!-- The view shown when there are no most visited items in document mode:
|
|
+ "Nothing to see here..." -->
|
|
+<LinearLayout
|
|
+ xmlns:android="http://schemas.android.com/apk/res/android"
|
|
+ xmlns:tools="http://schemas.android.com/tools"
|
|
+ android:layout_width="match_parent"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:gravity="center"
|
|
+ android:padding="16dp"
|
|
+ android:orientation="vertical">
|
|
+
|
|
+ <ImageView
|
|
+ android:layout_width="match_parent"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:layout_marginBottom="15dp"
|
|
+ tools:ignore="ContentDescription"
|
|
+ android:src="@drawable/ic_most_visited_placeholder" />
|
|
+
|
|
+ <TextView
|
|
+ android:layout_width="match_parent"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:layout_marginBottom="8dp"
|
|
+ android:color="#c8c8c8"
|
|
+ android:gravity="center_horizontal"
|
|
+ android:text="@string/most_visited_placeholder_title"
|
|
+ android:textSize="16sp" />
|
|
+
|
|
+ <TextView
|
|
+ android:layout_width="match_parent"
|
|
+ android:layout_height="wrap_content"
|
|
+ android:color="#c8c8c8"
|
|
+ android:gravity="center_horizontal"
|
|
+ android:text="@string/most_visited_placeholder_summary"
|
|
+ android:textSize="12sp" />
|
|
+
|
|
+</LinearLayout>
|
|
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/ic_star_filled_24dp"
|
|
+ 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
|
|
@@ -125,6 +125,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_top_padding">17dp</dimen>
|
|
<dimen name="mvt_container_bottom_padding">22dp</dimen>
|
|
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
|
|
@@ -3738,7 +3738,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt
|
|
getStartupMetricsTracker(),
|
|
mRootUiCoordinator.getExclusiveAccessManager(),
|
|
mBackPressManager,
|
|
- mRecentlyClosedEntriesManager);
|
|
+ mRecentlyClosedEntriesManager,
|
|
+ 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
|
|
@@ -14,6 +14,7 @@ import org.chromium.build.annotations.Nullable;
|
|
import org.chromium.chrome.browser.app.ChromeActivity;
|
|
import org.chromium.chrome.browser.app.tab_activity_glue.ActivityTabWebContentsDelegateAndroid;
|
|
import org.chromium.chrome.browser.back_press.BackPressManager;
|
|
+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;
|
|
@@ -56,6 +57,8 @@ import org.chromium.ui.modaldialog.ModalDialogManager;
|
|
import java.util.List;
|
|
import java.util.function.Supplier;
|
|
|
|
+import androidx.annotation.NonNull;
|
|
+
|
|
/**
|
|
* {@link TabDelegateFactory} class to be used in all {@link Tab} instances owned by a {@link
|
|
* ChromeTabbedActivity}.
|
|
@@ -89,6 +92,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory {
|
|
private final TopInsetProvider mTopInsetProvider;
|
|
private final StartupMetricsTracker mStartupMetricsTracker;
|
|
private final @Nullable ExclusiveAccessManager mExclusiveAccessManager;
|
|
+ private final MonotonicObservableSupplier<BookmarkManagerOpener> mBookmarkManagerOpenerSupplier;
|
|
+
|
|
private @Nullable NativePageFactory mNativePageFactory;
|
|
private final BackPressManager mBackPressManager;
|
|
private final RecentlyClosedEntriesManager mRecentlyClosedEntriesManager;
|
|
@@ -122,7 +127,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory {
|
|
StartupMetricsTracker startupMetricsTracker,
|
|
@Nullable ExclusiveAccessManager exclusiveAccessManager,
|
|
BackPressManager backPressManager,
|
|
- RecentlyClosedEntriesManager recentlyClosedEntriesManager) {
|
|
+ RecentlyClosedEntriesManager recentlyClosedEntriesManager,
|
|
+ @NonNull MonotonicObservableSupplier<BookmarkManagerOpener> bookmarkManagerOpenerSupplier) {
|
|
mActivity = activity;
|
|
mAppBrowserControlsVisibilityDelegate = appBrowserControlsVisibilityDelegate;
|
|
mShareDelegateSupplier = shareDelegateSupplier;
|
|
@@ -152,6 +158,7 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory {
|
|
mExclusiveAccessManager = exclusiveAccessManager;
|
|
mBackPressManager = backPressManager;
|
|
mRecentlyClosedEntriesManager = recentlyClosedEntriesManager;
|
|
+ mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier;
|
|
}
|
|
|
|
@Override
|
|
@@ -224,7 +231,8 @@ public class TabbedModeTabDelegateFactory implements TabDelegateFactory {
|
|
mTopInsetProvider,
|
|
mStartupMetricsTracker,
|
|
mBackPressManager,
|
|
- mRecentlyClosedEntriesManager);
|
|
+ mRecentlyClosedEntriesManager,
|
|
+ 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
|
|
@@ -70,6 +70,7 @@ public class ChromeFeedbackCollector extends FeedbackCollector<ChromeFeedbackCol
|
|
sources.add(new IMEFeedbackSource());
|
|
sources.add(new OmniboxFeedbackSource());
|
|
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
|
|
@@ -204,7 +204,7 @@ public class IdentityDiscController
|
|
|
|
mButtonData.setButtonSpec(
|
|
buttonSpecWithDrawableAndDescription(mButtonData.getButtonSpec(), profileData));
|
|
- mButtonData.setCanShow(true);
|
|
+ mButtonData.setCanShow(false);
|
|
}
|
|
|
|
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
|
|
@@ -17,6 +17,7 @@ import android.graphics.Rect;
|
|
import android.view.View;
|
|
|
|
import androidx.annotation.VisibleForTesting;
|
|
+import androidx.annotation.NonNull;
|
|
|
|
import org.chromium.base.lifetime.Destroyable;
|
|
import org.chromium.base.metrics.RecordUserAction;
|
|
@@ -33,6 +34,7 @@ import org.chromium.chrome.browser.app.ChromeActivity;
|
|
import org.chromium.chrome.browser.app.download.home.DownloadPage;
|
|
import org.chromium.chrome.browser.back_press.BackPressManager;
|
|
import org.chromium.chrome.browser.bookmarks.BookmarkPage;
|
|
+import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener;
|
|
import org.chromium.chrome.browser.browser_controls.BrowserControlsMarginAdapter;
|
|
import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
|
|
import org.chromium.chrome.browser.contextual_tasks.ContextualTasksNativePage;
|
|
@@ -102,6 +104,7 @@ public class NativePageFactory {
|
|
private final MonotonicObservableSupplier<EdgeToEdgeController> mEdgeToEdgeControllerSupplier;
|
|
private final TopInsetProvider mTopInsetProvider;
|
|
private final StartupMetricsTracker mStartupMetricsTracker;
|
|
+ private final MonotonicObservableSupplier<BookmarkManagerOpener> mBookmarkManagerOpenerSupplier;
|
|
private @Nullable NewTabPageCreationTracker mNewTabPageCreationTracker;
|
|
|
|
private @Nullable NativePageBuilder mNativePageBuilder;
|
|
@@ -129,7 +132,8 @@ public class NativePageFactory {
|
|
TopInsetProvider topInsetProvider,
|
|
StartupMetricsTracker startupMetricsTracker,
|
|
BackPressManager backPressManager,
|
|
- RecentlyClosedEntriesManager recentlyClosedEntriesManager) {
|
|
+ RecentlyClosedEntriesManager recentlyClosedEntriesManager,
|
|
+ MonotonicObservableSupplier<BookmarkManagerOpener> bookmarkManagerOpenerSupplier) {
|
|
mActivity = activity;
|
|
mBottomSheetController = sheetController;
|
|
mBrowserControlsManager = browserControlsManager;
|
|
@@ -150,6 +154,7 @@ public class NativePageFactory {
|
|
mStartupMetricsTracker = startupMetricsTracker;
|
|
mBackPressManager = backPressManager;
|
|
mRecentlyClosedEntriesManager = recentlyClosedEntriesManager;
|
|
+ mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier;
|
|
}
|
|
|
|
private NativePageBuilder getBuilder() {
|
|
@@ -176,7 +181,8 @@ public class NativePageFactory {
|
|
mTopInsetProvider,
|
|
mStartupMetricsTracker,
|
|
mBackPressManager,
|
|
- mRecentlyClosedEntriesManager);
|
|
+ mRecentlyClosedEntriesManager,
|
|
+ mBookmarkManagerOpenerSupplier);
|
|
}
|
|
return mNativePageBuilder;
|
|
}
|
|
@@ -213,9 +219,10 @@ public class NativePageFactory {
|
|
private final StartupMetricsTracker mStartupMetricsTracker;
|
|
private final BackPressManager mBackPressManager;
|
|
private final RecentlyClosedEntriesManager mRecentlyClosedEntriesManager;
|
|
+ private final MonotonicObservableSupplier<BookmarkManagerOpener> mBookmarkManagerOpenerSupplier;
|
|
|
|
public NativePageBuilder(
|
|
- Activity activity,
|
|
+ ChromeActivity activity,
|
|
Supplier<NewTabPageCreationTracker> newTabPageCreationTracker,
|
|
BottomSheetController sheetController,
|
|
BrowserControlsManager browserControlsManager,
|
|
@@ -235,7 +242,8 @@ public class NativePageFactory {
|
|
TopInsetProvider topInsetProvider,
|
|
StartupMetricsTracker startupMetricsTracker,
|
|
BackPressManager backPressManager,
|
|
- RecentlyClosedEntriesManager recentlyClosedEntriesManager) {
|
|
+ RecentlyClosedEntriesManager recentlyClosedEntriesManager,
|
|
+ MonotonicObservableSupplier<BookmarkManagerOpener> bookmarkManagerOpenerSupplier) {
|
|
mActivity = activity;
|
|
mNewTabPageCreationTracker = newTabPageCreationTracker;
|
|
mBottomSheetController = sheetController;
|
|
@@ -257,6 +265,7 @@ public class NativePageFactory {
|
|
mStartupMetricsTracker = startupMetricsTracker;
|
|
mBackPressManager = backPressManager;
|
|
mRecentlyClosedEntriesManager = recentlyClosedEntriesManager;
|
|
+ mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier;
|
|
}
|
|
|
|
protected NativePage buildNewTabPage(Tab tab, String url) {
|
|
@@ -299,7 +308,8 @@ public class NativePageFactory {
|
|
mModuleRegistrySupplier,
|
|
mEdgeToEdgeControllerSupplier,
|
|
mTopInsetProvider,
|
|
- 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
|
|
@@ -28,7 +28,7 @@ import org.chromium.ui.mojom.WindowOpenDisposition;
|
|
/** {@link NativePageNavigationDelegate} implementation. */
|
|
@NullMarked
|
|
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
|
|
@@ -110,6 +110,9 @@ import org.chromium.ui.base.DeviceFormFactor;
|
|
import org.chromium.ui.base.WindowAndroid;
|
|
import org.chromium.ui.modaldialog.ModalDialogManager;
|
|
|
|
+import androidx.annotation.NonNull;
|
|
+import org.chromium.chrome.browser.bookmarks.BookmarkManagerOpener;
|
|
+
|
|
import java.util.List;
|
|
import java.util.function.Supplier;
|
|
|
|
@@ -402,7 +405,8 @@ public class NewTabPage
|
|
OneshotSupplier<ModuleRegistry> moduleRegistrySupplier,
|
|
MonotonicObservableSupplier<EdgeToEdgeController> edgeToEdgeControllerSupplier,
|
|
TopInsetProvider topInsetProvider,
|
|
- StartupMetricsTracker startupMetricsTracker) {
|
|
+ StartupMetricsTracker startupMetricsTracker,
|
|
+ MonotonicObservableSupplier<BookmarkManagerOpener> bookmarkManagerOpenerSupplier) {
|
|
mConstructedTimeNs = System.nanoTime();
|
|
TraceEvent.begin(TAG);
|
|
|
|
@@ -422,7 +426,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/NewTabPageCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCoordinator.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCoordinator.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageCoordinator.java
|
|
@@ -13,6 +13,7 @@ import android.graphics.Point;
|
|
import android.graphics.Rect;
|
|
import android.text.Editable;
|
|
import android.view.DragEvent;
|
|
+import android.view.ViewStub;
|
|
import android.view.View;
|
|
import android.view.View.OnLayoutChangeListener;
|
|
import android.view.ViewGroup;
|
|
@@ -64,6 +65,7 @@ import org.chromium.chrome.browser.setup_list.SetupListModuleUtils;
|
|
import org.chromium.chrome.browser.signin.SigninAndHistorySyncActivityLauncherImpl;
|
|
import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesCoordinator;
|
|
import org.chromium.chrome.browser.suggestions.tile.TileGroup;
|
|
+import org.chromium.chrome.browser.suggestions.tile.MostVisitedTilesGridLayout;
|
|
import org.chromium.chrome.browser.tab.Tab;
|
|
import org.chromium.chrome.browser.tab.TabLaunchType;
|
|
import org.chromium.chrome.browser.tab.TabSelectionType;
|
|
@@ -147,6 +149,8 @@ public class NewTabPageCoordinator implements ModuleDelegateHost {
|
|
private SetupListManager.@Nullable Observer mSetupListObserver;
|
|
private @Nullable Point mContextMenuStartPosition;
|
|
|
|
+ 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.
|
|
@@ -159,14 +163,14 @@ public class NewTabPageCoordinator implements ModuleDelegateHost {
|
|
*/
|
|
private boolean mHasShownView;
|
|
|
|
- private boolean mSearchProviderHasLogo = true;
|
|
+ private boolean mSearchProviderHasLogo = false;
|
|
private boolean mSearchProviderIsGoogle;
|
|
private boolean mShowingNonStandardGoogleLogo;
|
|
|
|
private boolean mInitialized;
|
|
|
|
private float mUrlFocusChangePercent;
|
|
- private boolean mDisableUrlFocusChangeAnimations;
|
|
+ private boolean mDisableUrlFocusChangeAnimations = true;
|
|
|
|
/** Flag used to request some layout changes after the next layout pass is completed. */
|
|
private boolean mTileCountChanged;
|
|
@@ -345,6 +349,7 @@ public class NewTabPageCoordinator implements ModuleDelegateHost {
|
|
mSearchEngineUtils.addIconObserver(mSearchEngineIconObserver);
|
|
setSearchBoxTextAppearance();
|
|
|
|
+ initializeShortcuts();
|
|
initializeSearchBoxTextView();
|
|
initializeVoiceSearchButton();
|
|
initializeLensButton();
|
|
@@ -742,6 +747,8 @@ public class NewTabPageCoordinator implements ModuleDelegateHost {
|
|
* @param isGoogle Whether the search provider is Google.
|
|
*/
|
|
void setSearchProviderInfo(boolean hasLogo, boolean isGoogle) {
|
|
+ hasLogo = false;
|
|
+ isGoogle = false;
|
|
if (hasLogo == mSearchProviderHasLogo
|
|
&& isGoogle == mSearchProviderIsGoogle
|
|
&& mInitialized) {
|
|
@@ -807,6 +814,7 @@ public class NewTabPageCoordinator implements ModuleDelegateHost {
|
|
* @param disable Whether to disable the animations.
|
|
*/
|
|
void setUrlFocusAnimationsDisabled(boolean disable) {
|
|
+ disable = true;
|
|
if (disable == mDisableUrlFocusChangeAnimations) return;
|
|
mDisableUrlFocusChangeAnimations = disable;
|
|
if (!disable) onUrlFocusAnimationChanged();
|
|
@@ -1335,6 +1343,22 @@ public class NewTabPageCoordinator implements ModuleDelegateHost {
|
|
}
|
|
}
|
|
|
|
+ private void initializeShortcuts() {
|
|
+ if (!ChromeFeatureList.isEnabled(ChromeFeatureList.SIMPLIFIED_NTP)) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ ViewStub shortcutsStub = mNewTabPageLayout.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(int width) {
|
|
int searchBoxWidth = width - mSearchBoxTwoSideMargin;
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxViewBinder.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxViewBinder.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/search/SearchBoxViewBinder.java
|
|
@@ -31,6 +31,7 @@ class SearchBoxViewBinder
|
|
View searchBoxContainer = searchBoxlayout.findViewById(R.id.search_box_container);
|
|
final TextView searchBoxTextView = searchBoxlayout.findViewById(R.id.search_box_text);
|
|
|
|
+ searchBoxlayout.setVisibility(View.GONE);
|
|
if (SearchBoxProperties.ALPHA == propertyKey) {
|
|
searchBoxlayout.setAlpha(model.get(SearchBoxProperties.ALPHA));
|
|
} else if (SearchBoxProperties.VOICE_SEARCH_COLOR_STATE_LIST == propertyKey) {
|
|
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
|
|
@@ -26,7 +26,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 = 8;
|
|
+ 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
|
|
@@ -23,17 +23,42 @@ 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.MonotonicObservableSupplier;
|
|
+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. */
|
|
@NullMarked
|
|
public class SuggestionsNavigationDelegate extends NativePageNavigationDelegateImpl {
|
|
|
|
+ private final MonotonicObservableSupplier<BookmarkManagerOpener> mBookmarkManagerOpenerSupplier;
|
|
+
|
|
public SuggestionsNavigationDelegate(
|
|
Activity activity,
|
|
Profile profile,
|
|
NativePageHost host,
|
|
TabModelSelector tabModelSelector,
|
|
- Tab tab) {
|
|
+ Tab tab,
|
|
+ MonotonicObservableSupplier<BookmarkManagerOpener> bookmarkManagerOpenerSupplier) {
|
|
super(activity, profile, host, tabModelSelector, tab);
|
|
+ mBookmarkManagerOpenerSupplier = bookmarkManagerOpenerSupplier;
|
|
+ }
|
|
+
|
|
+ public void navigateToBookmarks() {
|
|
+ mBookmarkManagerOpenerSupplier.get()
|
|
+ .showBookmarkManager(mActivity, mTab, 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
|
|
@@ -70,15 +70,11 @@ public class MostVisitedTilesCoordinator implements ConfigurationChangedObserver
|
|
mActivityLifecycleDispatcher = activityLifecycleDispatcher;
|
|
mMvTilesContainerLayout = mvTilesContainerLayout;
|
|
|
|
- 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);
|
|
@@ -88,7 +84,7 @@ public class MostVisitedTilesCoordinator implements ConfigurationChangedObserver
|
|
new MostVisitedTilesMediator(
|
|
activity,
|
|
mUiConfig,
|
|
- mvTilesContainerLayout,
|
|
+ tilesLayout,
|
|
mRenderer,
|
|
propertyModel,
|
|
isTablet,
|
|
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<TileView> mTileList = new ArrayList<TileView>();
|
|
+
|
|
+ /**
|
|
+ * 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;
|
|
+ }
|
|
+
|
|
+ @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
|
|
@@ -52,7 +52,7 @@ public class MostVisitedTilesMediator implements TileGroup.Observer {
|
|
private final Resources mResources;
|
|
private final UiConfig mUiConfig;
|
|
private final View mMvTilesContainerLayout;
|
|
- private final MostVisitedTilesLayout mMvTilesLayout;
|
|
+ private final MostVisitedTilesGridLayout mMvTilesLayout;
|
|
private final PropertyModel mModel;
|
|
private final boolean mIsTablet;
|
|
private final int mTileViewLandscapePadding;
|
|
@@ -76,7 +76,7 @@ public class MostVisitedTilesMediator implements TileGroup.Observer {
|
|
public MostVisitedTilesMediator(
|
|
Context context,
|
|
UiConfig uiConfig,
|
|
- View mvTilesContainerLayout,
|
|
+ MostVisitedTilesGridLayout mvTilesContainerLayout,
|
|
TileRenderer renderer,
|
|
PropertyModel propertyModel,
|
|
boolean isTablet,
|
|
@@ -223,12 +223,10 @@ public class MostVisitedTilesMediator implements TileGroup.Observer {
|
|
|
|
@Override
|
|
public void onCustomTileCreation(Tile tile) {
|
|
- mMvTilesLayout.ensureTileIsInViewOnNextLayout(tile.getIndex());
|
|
}
|
|
|
|
@Override
|
|
public void onCustomTileReorder(int newPos) {
|
|
- mMvTilesLayout.ensureTileIsInViewOnNextLayout(newPos);
|
|
}
|
|
|
|
public void onConfigurationChanged() {
|
|
@@ -264,10 +262,6 @@ public class MostVisitedTilesMediator implements TileGroup.Observer {
|
|
* recalculate the value of |mMvtContentFits|.
|
|
*/
|
|
void updateMvtOnTablet(@Nullable Integer totalWidth) {
|
|
- if (totalWidth != null) {
|
|
- mMvtContentFits = mMvTilesLayout.contentFitsOnTablet(totalWidth);
|
|
- }
|
|
-
|
|
MarginLayoutParams marginLayoutParams =
|
|
(MarginLayoutParams) mMvTilesContainerLayout.getLayoutParams();
|
|
marginLayoutParams.width =
|
|
@@ -379,7 +373,5 @@ public class MostVisitedTilesMediator implements TileGroup.Observer {
|
|
|
|
double firstTileScore = mTileGroup.getSuggestionScore(firstTile.getUrl());
|
|
if (firstTileScore < MVT_CUSTOMIZATION_IPH_TILE_SCORE_THRESHOULD) return;
|
|
-
|
|
- mMvTilesLayout.triggerCustomizationIph(mUserEducationHelper);
|
|
}
|
|
}
|
|
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
|
|
@@ -77,7 +77,7 @@ class TileDragDelegateImpl implements TileDragDelegate, TileDragSession.Delegate
|
|
private static final float DOMINATE_TRESHOLD_RATIO = 0.4f;
|
|
|
|
// Parent container for dragged tiles.
|
|
- private final MostVisitedTilesLayout mMvTilesLayout;
|
|
+ private final MostVisitedTilesGridLayout mMvTilesLayout;
|
|
|
|
private final @Px float mTileWidthPx;
|
|
|
|
@@ -103,7 +103,7 @@ class TileDragDelegateImpl implements TileDragDelegate, TileDragSession.Delegate
|
|
// (e.g., for Swap Flow, to allow fast repeated keyboard-triggered swaps) the action.
|
|
private @Nullable Runnable mPendingChangeFinalizer;
|
|
|
|
- public TileDragDelegateImpl(MostVisitedTilesLayout mvTilesLayout) {
|
|
+ public TileDragDelegateImpl(MostVisitedTilesGridLayout mvTilesLayout) {
|
|
mMvTilesLayout = mvTilesLayout;
|
|
Resources res = mMvTilesLayout.getResources();
|
|
mTileWidthPx = res.getDimensionPixelSize(R.dimen.tile_view_width);
|
|
@@ -228,18 +228,10 @@ class TileDragDelegateImpl implements TileDragDelegate, TileDragSession.Delegate
|
|
|
|
@Override
|
|
public void showDivider(boolean isAnimated) {
|
|
- SuggestionsTileVerticalDivider divider = mMvTilesLayout.getDividerMaybeNull();
|
|
- if (divider != null) {
|
|
- divider.show(isAnimated);
|
|
- }
|
|
}
|
|
|
|
@Override
|
|
public void hideDivider(boolean isAnimated) {
|
|
- SuggestionsTileVerticalDivider divider = mMvTilesLayout.getDividerMaybeNull();
|
|
- if (divider != null) {
|
|
- divider.hide(isAnimated);
|
|
- }
|
|
}
|
|
|
|
@Override
|
|
@@ -275,7 +267,7 @@ class TileDragDelegateImpl implements TileDragDelegate, TileDragSession.Delegate
|
|
public boolean isAutoScrollEnabled() {
|
|
// TODO(b/431765443): Return !DeviceInfo.isDesktop() if auto-scroll should be disabled on
|
|
// desktop Android browsers.
|
|
- return true;
|
|
+ return false;
|
|
}
|
|
|
|
@Override
|
|
@@ -285,12 +277,12 @@ class TileDragDelegateImpl implements TileDragDelegate, TileDragSession.Delegate
|
|
|
|
@Override
|
|
public SiteSuggestion getTileViewData(TileView view) {
|
|
- return mMvTilesLayout.getTileViewData(view);
|
|
+ return null;
|
|
}
|
|
|
|
@Override
|
|
public HorizontalScrollView getOuterView() {
|
|
- return mMvTilesLayout.getScrollView();
|
|
+ return null;
|
|
}
|
|
|
|
List<TileView> getDraggableTileViews() {
|
|
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
|
|
@@ -172,7 +172,7 @@ public class TileRenderer {
|
|
*/
|
|
public void renderTileSection(
|
|
List<Tile> 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.
|
|
@@ -210,7 +210,7 @@ public class TileRenderer {
|
|
if (prevTile != null
|
|
&& (prevTile.getData().source == TileSource.CUSTOM_LINKS)
|
|
!= (tile.getData().source == TileSource.CUSTOM_LINKS)) {
|
|
- parent.addDivider(buildDivider(parent));
|
|
+ //parent.addDivider(buildDivider(parent));
|
|
}
|
|
parent.addTile(tileView);
|
|
if (focusedUrl != null && focusedUrl.equals(tile.getUrl().getSpec())) {
|
|
@@ -226,7 +226,7 @@ public class TileRenderer {
|
|
|
|
if (shouldShowAddNewButton(sectionTiles)) {
|
|
TileView addCustomLinksButton = buildAddCustomLinksButton(parent, setupDelegate);
|
|
- parent.addUiView(addCustomLinksButton, mTileWidth);
|
|
+ //parent.addUiView(addCustomLinksButton, mTileWidth);
|
|
}
|
|
}
|
|
}
|
|
@@ -261,7 +261,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())
|
|
@@ -324,7 +324,7 @@ public class TileRenderer {
|
|
return tileView;
|
|
}
|
|
|
|
- SuggestionsTileVerticalDivider buildDivider(TilesLinearLayout parent) {
|
|
+ SuggestionsTileVerticalDivider buildDivider(MostVisitedTilesGridLayout parent) {
|
|
return (SuggestionsTileVerticalDivider)
|
|
LayoutInflater.from(parent.getContext())
|
|
.inflate(R.layout.suggestions_tile_vertical_divider, parent, false);
|
|
@@ -345,7 +345,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
|
|
@@ -32,7 +32,7 @@ import java.util.List;
|
|
* #getChildAt()}.
|
|
*/
|
|
@NullMarked
|
|
-public class TilesLinearLayout extends LinearLayout {
|
|
+class TilesLinearLayout extends LinearLayout {
|
|
private final List<TileView> mTileList = new ArrayList<>();
|
|
|
|
protected int mTileAndUiViewCount;
|
|
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
|
|
@@ -59,7 +59,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
|
|
@@ -382,6 +382,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
|
|
&kKeyboardEscBackNavigation,
|
|
&kLaunchCauseScreenOffFix,
|
|
&kLensOnQuickActionSearchWidget,
|
|
+ &kSimplifiedNTP,
|
|
&kLinkHoverStatusBar,
|
|
&kLoadAllTabsAtStartup,
|
|
&kLoadNativeEarly,
|
|
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
|
|
@@ -530,6 +530,7 @@ public abstract class ChromeFeatureList {
|
|
"MayLaunchUrlUsesSeparateStoragePartition";
|
|
public static final String MEDIA_INDICATORS_ANDROID = "MediaIndicatorsAndroid";
|
|
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 MOVE_TO_FRONT_IN_LAUNCH_INTENT_DISPATCHER =
|
|
diff --git a/chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.cc b/chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.cc
|
|
--- a/chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.cc
|
|
+++ b/chrome/browser/ntp_tiles/chrome_most_visited_sites_factory.cc
|
|
@@ -67,10 +67,6 @@ ChromeMostVisitedSitesFactory::NewForProfile(Profile* profile) {
|
|
|
|
std::unique_ptr<data_decoder::DataDecoder> data_decoder;
|
|
|
|
-#if BUILDFLAG(IS_ANDROID)
|
|
- data_decoder = std::make_unique<data_decoder::DataDecoder>();
|
|
-#endif
|
|
-
|
|
bool is_default_chrome_app_migrated;
|
|
|
|
#if BUILDFLAG(IS_ANDROID)
|
|
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<List<String>> callback) {
|
|
+ if ((true)) return;
|
|
HomeModulesRankingHelperJni.get()
|
|
.getClassificationResult(
|
|
profile,
|
|
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
|
|
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
|
|
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
|
|
@@ -4182,6 +4182,12 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>delete the Chrome d
|
|
<message name="IDS_RECENT_TABS" desc="Text for button to show 'Recent tabs', i.e. recently closed tabs and tabs that are open on other devices [CHAR_LIMIT=20]">
|
|
Recent tabs
|
|
</message>
|
|
+ <message name="IDS_MOST_VISITED_PLACEHOLDER_TITLE" desc="Header text shown on the new tab page when there are no most visited tiles yet.">
|
|
+ Nothing to see here… yet
|
|
+ </message>
|
|
+ <message name="IDS_MOST_VISITED_PLACEHOLDER_SUMMARY" desc="Explanation text shown on the new tab page when there are no most visited tiles yet.">
|
|
+ Your most visited pages will appear here
|
|
+ </message>
|
|
<message name="IDS_MOST_VISITED_ITEM_REMOVED" desc="Snackbar text shown after invoking context menu item "Remove" of a Top Sites Tile in the Most Visited Tiles area in the New Tab Page.">
|
|
This site won't be shown again
|
|
</message>
|
|
diff --git a/components/history/core/browser/top_sites_constants.h b/components/history/core/browser/top_sites_constants.h
|
|
--- a/components/history/core/browser/top_sites_constants.h
|
|
+++ b/components/history/core/browser/top_sites_constants.h
|
|
@@ -9,7 +9,7 @@
|
|
|
|
namespace history {
|
|
// How many top sites to store in the cache.
|
|
-static constexpr size_t kTopSitesNumber = 10;
|
|
+static constexpr size_t kTopSitesNumber = 4 * 4 + 2;
|
|
} // namespace history
|
|
|
|
#endif // COMPONENTS_HISTORY_CORE_BROWSER_TOP_SITES_CONSTANTS_H_
|
|
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<CustomLinksManager::Link> CustomLinksStore::RetrieveLinks() {
|
|
|
|
if (!has_recorded_first_load_stats) {
|
|
has_recorded_first_load_stats = true;
|
|
- ntp_tiles::metrics::RecordNumberOfCustomTilesOnFirstNtp(
|
|
- static_cast<int>(links.size()));
|
|
}
|
|
|
|
return links;
|
|
diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc
|
|
--- a/components/omnibox/common/omnibox_features.cc
|
|
+++ b/components/omnibox/common/omnibox_features.cc
|
|
@@ -194,6 +194,7 @@ BASE_FEATURE(kOmniboxAimDeferShowUntilVisualStateReady, ENABLED);
|
|
BASE_FEATURE(kDefaultTypedNavigationsToHttps,
|
|
"OmniboxDefaultTypedNavigationsToHttps",
|
|
enable_if(IS_IOS));
|
|
+SET_CROMITE_FEATURE_ENABLED(kDefaultTypedNavigationsToHttps);
|
|
|
|
// Override the delay to create a spare renderer when the omnibox is focused
|
|
// on Android.
|
|
@@ -278,6 +279,7 @@ BASE_FEATURE(kOmniboxMobileParityUpdate, ENABLED);
|
|
// Updates various NTP/Omnibox assets and descriptions for visual alignment on
|
|
// Android and iOS, V2.
|
|
BASE_FEATURE(kOmniboxMobileParityUpdateV2, ENABLED);
|
|
+SET_CROMITE_FEATURE_DISABLED(kOmniboxMobileParityUpdateV2);
|
|
|
|
// If enabled, the X-Geo header will include permission granularity.
|
|
BASE_FEATURE(kOmniboxXGeoPermissionGranularity, ENABLED);
|
|
diff --git a/components/search_engines/template_url.h b/components/search_engines/template_url.h
|
|
--- a/components/search_engines/template_url.h
|
|
+++ b/components/search_engines/template_url.h
|
|
@@ -803,9 +803,9 @@ class TemplateURL {
|
|
}
|
|
const GURL& favicon_url() const { return data().favicon_url; }
|
|
|
|
- const GURL& logo_url() const { return data().logo_url; }
|
|
+ const GURL logo_url() const { return GURL(); }
|
|
|
|
- const GURL& doodle_url() const { return data().doodle_url; }
|
|
+ const GURL doodle_url() const { return GURL(); }
|
|
|
|
const GURL& originating_url() const { return data().originating_url; }
|
|
|
|
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(kNewTabPageCustomizationV2);
|
|
+SET_CROMITE_FEATURE_DISABLED(kNewTabPageCustomizationForMvt);
|
|
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);
|
|
--
|