From: uazo 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 | 10 +++--- .../browser/tasks/ReturnToChromeUtil.java | 19 ++++++++--- chrome/app/settings_strings.grdp | 2 +- .../HomeTipsModulesProvider.java | 4 +-- .../flags/android/chrome_feature_list.cc | 1 + .../cromite/sShowNtpAtStartupAndroid.java | 33 +++++++++++++++++++ .../magic_stack/HomeModulesMediator.java | 8 +++++ .../browser/magic_stack/ModuleRegistry.java | 3 +- .../policies/background_tab_loading_policy.cc | 2 ++ .../preferences/ChromePreferenceKeys.java | 2 ++ .../LegacyChromePreferenceKeys.java | 1 + .../on_startup_page/on_startup_page.ts | 1 + .../client_util/HomeModulesRankingHelper.java | 2 -- chrome/browser/sessions/session_restore.cc | 9 ++++- .../res/layout/single_tab_module_layout.xml | 17 +++++----- .../SingleTabSwitcherCoordinator.java | 2 +- .../SingleTabSwitcherOnNtpMediator.java | 5 +-- .../show-ntp-at-startup.grdp | 9 +++++ chrome/browser/ui/browser_tabrestore.cc | 2 +- .../startup/startup_browser_creator_impl.cc | 8 +++++ .../about_flags_cc/show-ntp-at-startup.inc | 12 +++++++ .../show-ntp-at-startup.inc | 5 +++ .../show-ntp-at-startup.inc | 1 + 26 files changed, 150 insertions(+), 29 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" /> + + - Continue where you left off and open a specific set of pages + Continue where you left off and open a New Tab page Use current pages diff --git a/chrome/browser/educational_tip/java/src/org/chromium/chrome/browser/educational_tip/HomeTipsModulesProvider.java b/chrome/browser/educational_tip/java/src/org/chromium/chrome/browser/educational_tip/HomeTipsModulesProvider.java --- a/chrome/browser/educational_tip/java/src/org/chromium/chrome/browser/educational_tip/HomeTipsModulesProvider.java +++ b/chrome/browser/educational_tip/java/src/org/chromium/chrome/browser/educational_tip/HomeTipsModulesProvider.java @@ -43,10 +43,10 @@ public class HomeTipsModulesProvider { if (moduleType == ModuleType.SETUP_LIST_TWO_CELL_CONTAINER) { moduleRegistry.registerModule( moduleType, - new EducationalTipModuleTwoCellBuilder(moduleType, actionDelegate)); + new EducationalTipModuleTwoCellBuilder(moduleType, actionDelegate), /*active*/ false); } else { moduleRegistry.registerModule( - moduleType, new EducationalTipModuleBuilder(moduleType, actionDelegate)); + moduleType, new EducationalTipModuleBuilder(moduleType, actionDelegate), /*active*/ 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 @@ -449,6 +449,7 @@ const base::Feature* const kFeaturesExposedToJava[] = { &kSearchInCCTAlternateTapHandlingIfEnabledByEmbedder, &kSearchInCCTIfEnabledByEmbedder, &kSettingsMultiColumn, + &kShowNtpAtStartupAndroid, &kSettingsSingleActivity, &kShareCustomActionsInCCT, &kShortCircuitUnfocusAnimation, 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 . +*/ + +package org.chromium.chrome.browser.flags.cromite; + +import org.chromium.components.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/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/HomeModulesMediator.java b/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/HomeModulesMediator.java --- a/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/HomeModulesMediator.java +++ b/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/HomeModulesMediator.java @@ -125,6 +125,14 @@ public class HomeModulesMediator { // 0. Get the set of currently enabled (eligible) modules. mEnabledModuleSet = null; Set enabledModuleSet = getFilteredEnabledModuleSet(); + List enabledModuleList = new ArrayList<>(enabledModuleSet); + + buildModulesAndShow( + enabledModuleList, + moduleDelegate, + onHomeModulesChangedCallback, + /*durationMs*/ 0); + if ((true)) return; // 1. Get the sorted list of manually ranked modules, filtered by eligibility. List manuallyRankedModules = getSortedManuallyRankedModules(enabledModuleSet); diff --git a/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/ModuleRegistry.java b/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/ModuleRegistry.java --- a/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/ModuleRegistry.java +++ b/chrome/browser/magic_stack/android/java/src/org/chromium/chrome/browser/magic_stack/ModuleRegistry.java @@ -68,7 +68,8 @@ public class ModuleRegistry { * @param moduleType The type of the module. * @param builder The object of the module builder. */ - public void registerModule(@ModuleType int moduleType, ModuleProviderBuilder builder) { + public void registerModule(@ModuleType int moduleType, ModuleProviderBuilder builder, boolean active) { + if (!active) return; mModuleBuildersMap.put(moduleType, builder); } diff --git a/chrome/browser/performance_manager/policies/background_tab_loading_policy.cc b/chrome/browser/performance_manager/policies/background_tab_loading_policy.cc --- a/chrome/browser/performance_manager/policies/background_tab_loading_policy.cc +++ b/chrome/browser/performance_manager/policies/background_tab_loading_policy.cc @@ -382,6 +382,7 @@ base::DictValue BackgroundTabLoadingPolicy::DescribeSystemNodeData( bool BackgroundTabLoadingPolicy::ShouldLoad( const PageNodeToLoadData& page_node_data) { + if ((true)) return false; if (tab_loads_started_ < min_tabs_to_load_) { return true; } @@ -583,6 +584,7 @@ void BackgroundTabLoadingPolicy::MaybeLoadSomeTabs() { // Continue to load tabs while possible. This is in a loop with a // recalculation of GetMaxNewTabLoads() as reentrancy can cause conditions // to change as each tab load is initiated. + if ((false)) while (GetMaxNewTabLoads() > 0) { LoadNextTab(); } 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 @@ -964,6 +964,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 @@ -114,6 +114,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/resources/settings/on_startup_page/on_startup_page.ts b/chrome/browser/resources/settings/on_startup_page/on_startup_page.ts --- a/chrome/browser/resources/settings/on_startup_page/on_startup_page.ts +++ b/chrome/browser/resources/settings/on_startup_page/on_startup_page.ts @@ -115,6 +115,7 @@ export class SettingsOnStartupPageElement extends */ private showContinueAndOpenSpecific_(pref: chrome.settingsPrivate.PrefObject): boolean { + if ((true)) return true; return pref.enforcement === chrome.settingsPrivate.Enforcement.ENFORCED || pref.enforcement === chrome.settingsPrivate.Enforcement.RECOMMENDED; } 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 @@ -51,7 +51,6 @@ public final class HomeModulesRankingHelper { * @param moduleLabel the module label to notify the module ranker */ public static void notifyCardInteracted(Profile profile, String moduleLabel) { - HomeModulesRankingHelperJni.get().notifyCardInteracted(profile, moduleLabel); } /** @@ -61,7 +60,6 @@ public final class HomeModulesRankingHelper { * @param moduleLabel the module label to notify the module ranker */ public static void notifyCardShown(Profile profile, String moduleLabel) { - HomeModulesRankingHelperJni.get().notifyCardShown(profile, moduleLabel); } /** diff --git a/chrome/browser/sessions/session_restore.cc b/chrome/browser/sessions/session_restore.cc --- a/chrome/browser/sessions/session_restore.cc +++ b/chrome/browser/sessions/session_restore.cc @@ -933,7 +933,13 @@ class SessionRestoreImpl : public BrowserCollectionObserver { // be selected as ShowBrowser() will load the selected tab. bool is_selected_tab = (initial_tab_count == 0) && (i == selected_tab_index); - + if (is_selected_tab && !startup_tabs_.empty()) { + is_selected_tab = false; + if (browser != browser_) { + browser->set_is_session_restore(false); + did_show_browser = true; + } + } // Convert the last active time because WebContents needs a TimeTicks. const base::TimeDelta delta = tab.last_active_time - epoch_time; const base::TimeTicks last_active_time_ticks = epoch_time_ticks + delta; @@ -1253,6 +1259,7 @@ class SessionRestoreImpl : public BrowserCollectionObserver { } if (last_normal_browser && !normal_startup_tabs.empty()) { AppendURLsToBrowser(last_normal_browser, normal_startup_tabs); + last_normal_browser->window()->Show(); } if (!startup_tabs_from_last_and_urls_pref.empty()) { Browser::CreateParams params = diff --git a/chrome/browser/single_tab/android/java/res/layout/single_tab_module_layout.xml b/chrome/browser/single_tab/android/java/res/layout/single_tab_module_layout.xml --- a/chrome/browser/single_tab/android/java/res/layout/single_tab_module_layout.xml +++ b/chrome/browser/single_tab/android/java/res/layout/single_tab_module_layout.xml @@ -67,12 +67,12 @@ found in the LICENSE file. + android:layout_height="@dimen/single_tab_module_tab_thumbnail_size"> @@ -85,8 +85,6 @@ found in the LICENSE file. android:layout_marginStart="@dimen/single_tab_thumbnail_margin" android:layout_marginEnd="@dimen/single_tab_thumbnail_margin" android:layout_alignParentStart="true" - android:layout_alignParentBottom="true" - android:layout_alignParentTop="true" android:adjustViewBounds="false" android:gravity="center_horizontal" android:importantForAccessibility="no" @@ -117,7 +115,7 @@ found in the LICENSE file. 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 @@ -182,7 +182,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 @@ -110,6 +110,7 @@ public class SingleTabSwitcherOnNtpMediator { mSingleTabCardClickedCallback = null; } }); + if (mSeeMoreLinkClickedCallback != null) mPropertyModel.set( SEE_MORE_LINK_CLICK_LISTENER, () -> { @@ -272,14 +273,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 @@ + + + + Show NTP at startup + + + Enable showing a NewTabPage at startup and allows selection of the last open tab + + diff --git a/chrome/browser/ui/browser_tabrestore.cc b/chrome/browser/ui/browser_tabrestore.cc --- a/chrome/browser/ui/browser_tabrestore.cc +++ b/chrome/browser/ui/browser_tabrestore.cc @@ -243,7 +243,7 @@ WebContents* AddRestoredTabImpl(std::unique_ptr web_contents, // Immediate load if the browser activeness is true or unknown. That is, do // not do immediate load for browsers that are known to be inactive. - bool should_load = is_active_browser.value_or(true); + bool should_load = false; // On OS_MAC, `LoadRestoredTabIfVisible` by default so that its tab loading // behaves like other platforms to make FirstWebContentsProfiler wor diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc --- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc @@ -650,6 +650,14 @@ StartupBrowserCreatorImpl::DetermineStartupTabs( if (prefs_tabs.empty()) { AppendTabs(provider.GetNewTabPageTabs(*command_line_, profile_), &tabs); } + + SessionStartupPref session_startup_pref = + SessionStartupPref::GetStartupPref(profile_); + if (session_startup_pref.type == SessionStartupPref::LAST_AND_URLS) { + StartupTabs new_tabs; + new_tabs.emplace_back(GURL(chrome::kChromeUINewTabURL)); + AppendTabs(new_tabs, &tabs); + } } // Maybe add any tabs which the user has previously pinned. 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); --