Files
cromite/build/patches/Show-NTP-at-startup.patch
T

300 lines
17 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/xml/homepage_preferences.xml | 6 ++++
.../browser/BrowserRestartActivity.java | 1 +
.../browser/ChromeInactivityTracker.java | 14 ++++++++
.../chrome/browser/ChromeTabbedActivity.java | 2 ++
.../browser/tasks/ReturnToChromeUtil.java | 16 ++++++++-
.../flags/android/chrome_feature_list.cc | 1 +
.../cromite/sShowNtpAtStartupAndroid.java | 33 +++++++++++++++++++
.../preferences/ChromePreferenceKeys.java | 2 ++
.../LegacyChromePreferenceKeys.java | 1 +
.../SingleTabSwitcherCoordinator.java | 2 +-
.../SingleTabSwitcherOnNtpMediator.java | 4 +--
.../show-ntp-at-startup.grdp | 9 +++++
.../about_flags_cc/show-ntp-at-startup.inc | 12 +++++++
.../show-ntp-at-startup.inc | 5 +++
.../show-ntp-at-startup.inc | 1 +
15 files changed, 105 insertions(+), 4 deletions(-)
create mode 100644 chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java
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/about_flags_cc/show-ntp-at-startup.inc
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/show-ntp-at-startup.inc
create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc
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/BrowserRestartActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/BrowserRestartActivity.java
@@ -67,6 +67,7 @@ public class BrowserRestartActivity extends Activity {
Intent restartIntent = new Intent(Intent.ACTION_MAIN);
restartIntent.setPackage(context.getPackageName());
restartIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ restartIntent.putExtra(BrowserRestartActivity.EXTRA_RESTART, true);
context.startActivity(restartIntent);
}
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,8 +12,10 @@ 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;
+import org.chromium.chrome.browser.flags.cromite.sShowNtpAtStartupAndroid;
/**
* Manages pref that can track the delay since the last stop of the tracked activity.
@@ -55,6 +57,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
+ sShowNtpAtStartupAndroid.getInstance().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
@@ -2184,6 +2184,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);
TabGroupUsageTracker.initialize(
this.getLifecycleDispatcher(), tabModelSelector, this::isWarmOnResume);
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
@@ -19,9 +19,11 @@ import org.chromium.base.IntentUtils;
import org.chromium.base.cached_flags.IntCachedFieldTrialParameter;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.BrowserRestartActivity;
import org.chromium.chrome.browser.ChromeInactivityTracker;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.cromite.sShowNtpAtStartupAndroid;
import org.chromium.chrome.browser.magic_stack.HomeModulesMetricsUtils;
import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.tab.Tab;
@@ -133,6 +135,18 @@ public final class ReturnToChromeUtil {
return false;
}
+ if (!sShowNtpAtStartupAndroid.getInstance().isEnabled())
+ return false;
+
+ boolean isMainIntentFromLauncherOrRestart =
+ IntentUtils.isMainIntentFromLauncher(intent)
+ || IntentUtils.safeGetBooleanExtra(
+ intent, BrowserRestartActivity.EXTRA_RESTART, false);
+ if (isMainIntentFromLauncherOrRestart && inactivityTracker.isNewStartup()) {
+ inactivityTracker.setIsStartup(false);
+ return true;
+ }
+
// Checks whether to show the NTP homepage due to feature flag
// HOME_SURFACE_RETURN_TIME_SECONDS.
long lastVisibleTimeMs = inactivityTracker.getLastVisibleTimeMs();
@@ -243,7 +257,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/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
@@ -296,6 +296,7 @@ const base::Feature* const kFeaturesExposedToJava[] = {
&kReportParentalControlSitesChild,
&kSearchInCCT,
&kSearchResumptionModuleAndroid,
+ &kShowNtpAtStartupAndroid,
&kShareCustomActionsInCCT,
&kSmallerTabStripTitleLimit,
&kSuppressToolbarCaptures,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java
new file mode 100644
--- /dev/null
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/cromite/sShowNtpAtStartupAndroid.java
@@ -0,0 +1,33 @@
+/*
+ This file is part of Cromite.
+
+ Cromite is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Cromite is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Cromite. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+package org.chromium.chrome.browser.flags.cromite;
+
+import org.chromium.base.cached_flags.CachedFlag;
+import org.chromium.chrome.browser.flags.ChromeFeatureMap;
+
+public class sShowNtpAtStartupAndroid {
+ private static final CachedFlag sInstance =
+ new CachedFlag(ChromeFeatureMap.getInstance(),
+ "ShowNtpAtStartupAndroid", false);
+
+ private sShowNtpAtStartupAndroid() {}
+
+ public static CachedFlag getInstance() {
+ return sInstance;
+ }
+}
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
@@ -784,6 +784,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
@@ -118,6 +118,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/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherCoordinator.java b/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherCoordinator.java
--- a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherCoordinator.java
+++ b/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherCoordinator.java
@@ -175,7 +175,7 @@ public class SingleTabSwitcherCoordinator implements ModuleProvider {
/** Returns the layout resource id for the single tab card. */
public static int getModuleLayoutId() {
- return R.layout.single_tab_module_layout;
+ return R.layout.single_tab_module_layout; // (uazo) check this
}
public void destroy() {
diff --git a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java b/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java
--- a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java
+++ b/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java
@@ -269,14 +269,14 @@ public class SingleTabSwitcherOnNtpMediator {
public void onPageLoadFinished(Tab tab, GURL url) {
super.onPageLoadFinished(tab, url);
mPropertyModel.set(TITLE, tab.getTitle());
- mPropertyModel.set(URL, getDomainUrl(tab.getUrl()));
+ mPropertyModel.set(URL, tab.getUrl().getPossiblyInvalidSpec());
tab.removeObserver(this);
}
};
mMostRecentTab.addObserver(tabObserver);
} else {
mPropertyModel.set(TITLE, mMostRecentTab.getTitle());
- mPropertyModel.set(URL, getDomainUrl(mMostRecentTab.getUrl()));
+ mPropertyModel.set(URL, mMostRecentTab.getUrl().getPossiblyInvalidSpec());
}
}
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/about_flags_cc/show-ntp-at-startup.inc b/cromite_flags/chrome/browser/about_flags_cc/show-ntp-at-startup.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/about_flags_cc/show-ntp-at-startup.inc
@@ -0,0 +1,12 @@
+#if BUILDFLAG(IS_ANDROID)
+
+#ifdef FLAG_SECTION
+
+ {"enable-show-ntp-at-startup",
+ "Show a NewTabPage at startup",
+ "Enable showing a NewTabPage at startup after leaving Cromite for a while.", kOsAndroid,
+ FEATURE_VALUE_TYPE(chrome::android::kShowNtpAtStartupAndroid)},
+
+#endif
+
+#endif
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,5 @@
+SET_CROMITE_FEATURE_ENABLED(kStartSurfaceReturnTime);
+
+CROMITE_FEATURE(kShowNtpAtStartupAndroid,
+ "ShowNtpAtStartupAndroid",
+ base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc
new file mode 100644
--- /dev/null
+++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/show-ntp-at-startup.inc
@@ -0,0 +1 @@
+BASE_DECLARE_FEATURE(kShowNtpAtStartupAndroid);
--