Files
cromite/build/patches/Show-NTP-at-startup.patch
2024-03-15 16:24:42 +01:00

221 lines
13 KiB
Diff

From: uazo <uazo@users.noreply.github.com>
Date: Tue, 27 Feb 2024 16:20:43 +0000
Subject: Show NTP at startup
Adds an active option by default to automatically open the
NTP at each reboot and allows the user to continue the old browsing.
Until the real tab is opened, no data is retrieved.
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../java/res/layout/single_tab_view_layout.xml | 11 +++++++++--
.../tasks/SingleTabSwitcherOnNtpMediator.java | 10 ++++------
.../android/java/res/xml/homepage_preferences.xml | 6 ++++++
.../chrome/browser/ChromeInactivityTracker.java | 13 +++++++++++++
.../chrome/browser/ChromeTabbedActivity.java | 4 +++-
.../chrome/browser/tasks/ReturnToChromeUtil.java | 8 +++++++-
.../browser/preferences/ChromePreferenceKeys.java | 2 ++
.../preferences/LegacyChromePreferenceKeys.java | 1 +
.../show-ntp-at-startup.grdp | 9 +++++++++
.../chrome_feature_list_cc/show-ntp-at-startup.inc | 2 ++
10 files changed, 56 insertions(+), 10 deletions(-)
create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/show-ntp-at-startup.grdp
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc
diff --git a/chrome/android/features/start_surface/java/res/layout/single_tab_view_layout.xml b/chrome/android/features/start_surface/java/res/layout/single_tab_view_layout.xml
--- a/chrome/android/features/start_surface/java/res/layout/single_tab_view_layout.xml
+++ b/chrome/android/features/start_surface/java/res/layout/single_tab_view_layout.xml
@@ -36,7 +36,7 @@ found in the LICENSE file.
<LinearLayout
android:id="@+id/continue_browsing"
android:layout_width="wrap_content"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:layout_toEndOf="@+id/tab_favicon_view"
android:layout_toStartOf="@+id/chevron_right_view"
android:orientation="vertical">
@@ -57,11 +57,18 @@ found in the LICENSE file.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.0"
- android:layout_marginBottom="10dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.TextMedium" />
+ <TextView
+ android:id="@+id/tab_url_view"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="10dp"
+ android:gravity="start"
+ android:singleLine="false"
+ android:textAppearance="@style/TextAppearance.TextSmall.Secondary"/>
</LinearLayout>
<ImageView
diff --git a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherOnNtpMediator.java b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherOnNtpMediator.java
--- a/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherOnNtpMediator.java
+++ b/chrome/android/features/start_surface/java/src/org/chromium/chrome/features/tasks/SingleTabSwitcherOnNtpMediator.java
@@ -292,9 +292,8 @@ public class SingleTabSwitcherOnNtpMediator implements ConfigurationChangedObser
public void onPageLoadFinished(Tab tab, GURL url) {
super.onPageLoadFinished(tab, url);
mPropertyModel.set(TITLE, tab.getTitle());
- if (mIsSurfacePolishEnabled) {
- mPropertyModel.set(
- URL, SingleTabSwitcherMediator.getDomainUrl(tab.getUrl()));
+ if ((true)) {
+ mPropertyModel.set(URL, tab.getUrl().getPossiblyInvalidSpec());
}
tab.removeObserver(this);
}
@@ -302,9 +301,8 @@ public class SingleTabSwitcherOnNtpMediator implements ConfigurationChangedObser
mMostRecentTab.addObserver(tabObserver);
} else {
mPropertyModel.set(TITLE, mMostRecentTab.getTitle());
- if (mIsSurfacePolishEnabled) {
- mPropertyModel.set(
- URL, SingleTabSwitcherMediator.getDomainUrl(mMostRecentTab.getUrl()));
+ if ((true)) {
+ mPropertyModel.set(URL, mMostRecentTab.getUrl().getPossiblyInvalidSpec());
}
}
}
diff --git a/chrome/android/java/res/xml/homepage_preferences.xml b/chrome/android/java/res/xml/homepage_preferences.xml
--- a/chrome/android/java/res/xml/homepage_preferences.xml
+++ b/chrome/android/java/res/xml/homepage_preferences.xml
@@ -19,6 +19,12 @@ found in the LICENSE file.
android:summaryOn="@string/options_ntp_is_homepage_label"
android:summaryOff="@string/options_ntp_is_homepage_label" />
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:title="@string/show_ntp_at_startup_title"
+ android:summary="@string/show_ntp_at_startup_summary"
+ app:featureName="enable-show-ntp-at-startup"
+ app:needRestart="true" />
+
<org.chromium.chrome.browser.homepage.settings.RadioButtonGroupHomepagePreference
android:key="homepage_radio_group"
android:selectable="false"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java
@@ -12,6 +12,7 @@ import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.DestroyObserver;
import org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver;
import org.chromium.chrome.browser.lifecycle.StartStopWithNativeObserver;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
@@ -55,6 +56,18 @@ public class ChromeInactivityTracker
mLifecycleDispatcher.register(this);
}
+ public void setIsStartup(boolean newStartup) {
+ ChromeSharedPreferences.getInstance().writeBoolean(
+ ChromePreferenceKeys.TABBED_ACTIVITY_IS_STARTUP, newStartup);
+ }
+
+ public boolean isNewStartup() {
+ return
+ ChromeFeatureList.sShowNtpAtStartupAndroid.isEnabled()
+ && ChromeSharedPreferences.getInstance().readBoolean(
+ ChromePreferenceKeys.TABBED_ACTIVITY_IS_STARTUP, false);
+ }
+
/**
* Updates the shared preferences to contain the given time. Used internally and for tests.
* @param timeInMillis the time to record.
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
@@ -1650,7 +1650,7 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
Callback<String> onStandardActiveIndexRead = null;
shouldShowNtpAsHomeSurfaceAtStartup = shouldShowNtpHomeSurfaceOnStartup();
boolean skipSavingNonActiveNtps = skipSavingNonActiveNtps();
- if (skipSavingNonActiveNtps) {
+ if (skipSavingNonActiveNtps || shouldShowNtpAsHomeSurfaceAtStartup) {
mHomeSurfaceTracker = new HomeSurfaceTracker();
}
if (shouldShowNtpAsHomeSurfaceAtStartup) {
@@ -2317,6 +2317,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
mInactivityTracker =
new ChromeInactivityTracker(
ChromePreferenceKeys.TABBED_ACTIVITY_LAST_BACKGROUNDED_TIME_MS_PREF);
+ mInactivityTracker.setIsStartup(
+ !CipherFactory.getInstance().restoreFromBundle(getSavedInstanceState()));
TabUsageTracker.initialize(this.getLifecycleDispatcher(), tabModelSelector);
assert getActivityTabStartupMetricsTracker() != null;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
@@ -651,6 +651,12 @@ public final class ReturnToChromeUtil {
}
}
+ if (IntentUtils.isMainIntentFromLauncher(intent)
+ && inactivityTracker.isNewStartup()) {
+ inactivityTracker.setIsStartup(false);
+ return true;
+ }
+
// Checks whether to show the Start surface due to feature flag TAB_SWITCHER_ON_RETURN_MS.
long lastVisibleTimeMs = inactivityTracker.getLastVisibleTimeMs();
long lastBackgroundTimeMs = inactivityTracker.getLastBackgroundedTimeMs();
@@ -794,7 +800,7 @@ public final class ReturnToChromeUtil {
TabModel currentTabModel,
TabCreator tabCreator,
HomeSurfaceTracker homeSurfaceTracker) {
- if (isIncognito || !shouldShowNtpHomeSurfaceOnStartup) {
+ if (isIncognito || !shouldShowNtpHomeSurfaceOnStartup || homeSurfaceTracker == null) {
return false;
}
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
@@ -780,6 +780,8 @@ public final class ChromePreferenceKeys {
public static final String TABBED_ACTIVITY_LAST_BACKGROUNDED_TIME_MS_PREF =
"ChromeTabbedActivity.BackgroundTimeMs";
+ public static final String TABBED_ACTIVITY_IS_STARTUP =
+ "ChromeTabbedActivity.IsStartup";
public static final String TABBED_ACTIVITY_LAST_VISIBLE_TIME_MS =
"Chrome.StartSurface.LastVisibleTimeMs";
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
@@ -119,6 +119,7 @@ public class LegacyChromePreferenceKeys {
ChromePreferenceKeys.SNAPSHOT_DATABASE_REMOVED,
ChromePreferenceKeys.SYNC_ERROR_MESSAGE_SHOWN_AT_TIME,
ChromePreferenceKeys.TABBED_ACTIVITY_LAST_BACKGROUNDED_TIME_MS_PREF,
+ ChromePreferenceKeys.TABBED_ACTIVITY_IS_STARTUP,
ChromePreferenceKeys.TABMODEL_ACTIVE_TAB_ID,
ChromePreferenceKeys.TABMODEL_HAS_COMPUTED_MAX_ID,
ChromePreferenceKeys.TABMODEL_HAS_RUN_FILE_MIGRATION,
diff --git a/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/show-ntp-at-startup.grdp b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/show-ntp-at-startup.grdp
new file mode 100644
--- /dev/null
+++ b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/show-ntp-at-startup.grdp
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+ <message name="IDS_SHOW_NTP_AT_STARTUP_TITLE" desc="Text for 'Show NTP at startup' settings option.">
+ Show NTP at startup
+ </message>
+ <message name="IDS_SHOW_NTP_AT_STARTUP_SUMMARY" desc="Summary text for 'Show NTP at startup' settings option.">
+ Enable showing a NewTabPage at startup and allows selection of the last open tab
+ </message>
+</grit-part>
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc
@@ -0,0 +1,2 @@
+SET_CROMITE_FEATURE_ENABLED(kStartSurfaceReturnTime);
+SET_CROMITE_FEATURE_ENABLED(kShowNtpAtStartupAndroid);
--