219 lines
12 KiB
Diff
219 lines
12 KiB
Diff
From: uazo <uazo@users.noreply.github.com>
|
|
Date: Mon, 21 Aug 2023 14:03:25 +0000
|
|
Subject: Add option to disable snapshots
|
|
|
|
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
|
|
---
|
|
.../tab_management/TabGridViewBinder.java | 8 +++-
|
|
.../tasks/tab_management/TabProperties.java | 5 +++
|
|
.../java/res/xml/privacy_preferences.xml | 5 +++
|
|
.../chrome/browser/app/ChromeActivity.java | 4 +-
|
|
.../privacy/settings/PrivacySettings.java | 44 ++++++++++++++++++-
|
|
.../strings/android_chrome_strings.grd | 8 ++++
|
|
6 files changed, 71 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
|
|
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
|
|
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridViewBinder.java
|
|
@@ -536,7 +536,12 @@ class TabGridViewBinder {
|
|
TabUtils.setDrawableAndUpdateImageMatrix(thumbnail, result, thumbnailSize);
|
|
} else {
|
|
thumbnail.setThumbnailViewState(ThumbnailViewState.PLACEHOLDER_LOADED);
|
|
- thumbnail.setImageDrawable(null);
|
|
+ TabFavicon tabFavicon = model.get(TabProperties.FAVICON);
|
|
+ if (tabFavicon != null) {
|
|
+ thumbnail.setScaleType(ImageView.ScaleType.CENTER);
|
|
+ thumbnail.setImageDrawable(
|
|
+ isSelected ? tabFavicon.getSelectedDrawable() : tabFavicon.getDefaultDrawable());
|
|
+ }
|
|
}
|
|
};
|
|
if (sThumbnailFetcherForTesting != null) {
|
|
@@ -574,6 +579,7 @@ class TabGridViewBinder {
|
|
*/
|
|
private static void setFavicon(
|
|
ImageView faviconView, PropertyModel model, @Nullable TabFavicon favicon) {
|
|
+ model.set(TabProperties.FAVICON, favicon);
|
|
if (favicon == null) {
|
|
faviconView.setImageDrawable(null);
|
|
return;
|
|
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
|
|
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
|
|
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
|
|
@@ -131,6 +131,9 @@ public class TabProperties {
|
|
public static final WritableBooleanPropertyKey FAVICON_FETCHED =
|
|
new WritableBooleanPropertyKey();
|
|
|
|
+ public static final WritableObjectPropertyKey<TabListFaviconProvider.TabFavicon> FAVICON =
|
|
+ new WritableObjectPropertyKey<>();
|
|
+
|
|
/** Property for lazily fetching favicons when required by an item in a UI. */
|
|
public static final WritableObjectPropertyKey<TabListFaviconProvider.TabFaviconFetcher>
|
|
FAVICON_FETCHER = new WritableObjectPropertyKey<>();
|
|
@@ -233,6 +236,7 @@ public class TabProperties {
|
|
CARD_TYPE,
|
|
CONTENT_DESCRIPTION_TEXT_RESOLVER,
|
|
ACTION_BUTTON_DESCRIPTION_TEXT_RESOLVER,
|
|
+ FAVICON,
|
|
QUICK_DELETE_ANIMATION_STATUS,
|
|
TAB_GROUP_COLOR_VIEW_PROVIDER,
|
|
TAB_GROUP_CARD_COLOR,
|
|
@@ -274,6 +278,7 @@ public class TabProperties {
|
|
TAB_ACTION_BUTTON_DATA,
|
|
FAVICON_FETCHED,
|
|
FAVICON_FETCHER,
|
|
+ FAVICON,
|
|
IS_SELECTED,
|
|
TITLE,
|
|
HAS_NOTIFICATION_BUBBLE
|
|
diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
|
|
--- a/chrome/android/java/res/xml/privacy_preferences.xml
|
|
+++ b/chrome/android/java/res/xml/privacy_preferences.xml
|
|
@@ -61,6 +61,11 @@ found in the LICENSE file.
|
|
android:title="@string/open_external_links_incognito_title"
|
|
android:summary="@string/open_external_links_incognito_summary"
|
|
android:defaultValue="false" />
|
|
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
|
|
+ android:key="tabgrid_use_icons"
|
|
+ android:title="@string/tabgrid_use_icons_title"
|
|
+ android:summary="@string/tabgrid_use_icons_summary"
|
|
+ android:defaultValue="false" />
|
|
<Preference
|
|
android:key="preload_pages"
|
|
android:title="@string/preload_pages_title"
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
|
|
@@ -161,6 +161,7 @@ import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
|
|
import org.chromium.chrome.browser.preferences.Pref;
|
|
import org.chromium.chrome.browser.price_tracking.PriceDropNotificationManagerFactory;
|
|
import org.chromium.chrome.browser.printing.TabPrinter;
|
|
+import org.chromium.chrome.browser.privacy.settings.PrivacySettings;
|
|
import org.chromium.chrome.browser.profiles.Profile;
|
|
import org.chromium.chrome.browser.profiles.ProfileManager;
|
|
import org.chromium.chrome.browser.profiles.ProfileManagerUtils;
|
|
@@ -699,7 +700,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
|
|
new TabContentManager(
|
|
this,
|
|
mBrowserControlsManagerSupplier.get(),
|
|
- /* snapshotsEnabled= */ true,
|
|
+ !TabUiFeatureUtilities.shouldUseListMode()
|
|
+ && !ContextUtils.getAppSharedPreferences().getBoolean(PrivacySettings.PREF_TABGRID_USE_ICONS, false),
|
|
tabModelSelector != null ? tabModelSelector::getTabById : null,
|
|
TabWindowManagerSingleton.getInstance()));
|
|
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
|
|
@@ -31,6 +31,7 @@ import org.chromium.base.ContextUtils;
|
|
import org.chromium.base.IntentUtils;
|
|
import org.chromium.base.metrics.RecordHistogram;
|
|
import org.chromium.base.metrics.RecordUserAction;
|
|
+import java.util.function.Supplier;
|
|
import org.chromium.base.supplier.MonotonicObservableSupplier;
|
|
import org.chromium.base.supplier.ObservableSuppliers;
|
|
import org.chromium.base.supplier.SettableMonotonicObservableSupplier;
|
|
@@ -107,13 +108,27 @@ import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
|
|
import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
|
|
import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate;
|
|
|
|
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
|
|
+import org.chromium.chrome.browser.ui.messages.snackbar.INeedSnackbarManager;
|
|
+import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
|
|
+import org.chromium.chrome.browser.lifetime.ApplicationLifetime;
|
|
+
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/** Fragment to keep track of the all the privacy related preferences. */
|
|
@NullMarked
|
|
public class PrivacySettings extends ChromeBaseSettingsFragment
|
|
- implements Preference.OnPreferenceChangeListener {
|
|
+ implements Preference.OnPreferenceChangeListener, INeedSnackbarManager {
|
|
+
|
|
+ private Supplier<SnackbarManager> mSnackbarManagerSupplier;
|
|
+ private Snackbar mSnackbar;
|
|
+
|
|
+ @Override
|
|
+ public void setSnackbarManagerSupplier(Supplier<SnackbarManager> manager) {
|
|
+ mSnackbarManagerSupplier = manager;
|
|
+ }
|
|
+
|
|
private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment";
|
|
private static final String PREF_PRELOAD_PAGES = "preload_pages";
|
|
private static final String PREF_HTTPS_FIRST_MODE = "https_first_mode";
|
|
@@ -206,6 +221,21 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
|
|
if (shouldHideSandboxPref(privacySandboxBridge)) {
|
|
getPreferenceScreen().removePreference(sandboxPreference);
|
|
}
|
|
+ mSnackbar = Snackbar.make(getActivity().getString(R.string.ui_relaunch_notice),
|
|
+ new SnackbarManager.SnackbarController() {
|
|
+ @Override
|
|
+ public void onDismissNoAction(Object actionData) { }
|
|
+
|
|
+ @Override
|
|
+ public void onAction(Object actionData) {
|
|
+ ApplicationLifetime.terminate(true);
|
|
+ }
|
|
+ }, Snackbar.TYPE_NOTIFICATION, Snackbar.UMA_UNKNOWN)
|
|
+ .setDefaultLines(false)
|
|
+ .setAction(getActivity().getString(R.string.relaunch),
|
|
+ /*actionData*/null)
|
|
+ .setDuration(/*durationMs*/70000);
|
|
+
|
|
Preference privacyGuidePreference = findPreference(PREF_PRIVACY_GUIDE);
|
|
// Record the launch of PG from the S&P link-row entry point
|
|
privacyGuidePreference.setOnPreferenceClickListener(
|
|
@@ -477,6 +507,7 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
|
|
|
|
public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
|
|
public static final String PREF_OPEN_EXTERNAL_LINKS_INCOGNITO = "open_external_links_incognito";
|
|
+ public static final String PREF_TABGRID_USE_ICONS = "tabgrid_use_icons";
|
|
|
|
@Override
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
@@ -523,6 +554,13 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
|
|
SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
|
|
sharedPreferencesEditor.putBoolean(PREF_OPEN_EXTERNAL_LINKS_INCOGNITO, (boolean)newValue);
|
|
sharedPreferencesEditor.apply();
|
|
+ } else if (PREF_TABGRID_USE_ICONS.equals(key)) {
|
|
+ SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
|
|
+ sharedPreferencesEditor.putBoolean(PREF_TABGRID_USE_ICONS, (boolean)newValue);
|
|
+ sharedPreferencesEditor.apply();
|
|
+ if (!mSnackbarManagerSupplier.get().isShowing()) {
|
|
+ mSnackbarManagerSupplier.get().showSnackbar(mSnackbar);
|
|
+ }
|
|
}
|
|
return true;
|
|
}
|
|
@@ -573,6 +611,10 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
|
|
: R.string.text_off);
|
|
}
|
|
|
|
+ Preference tabGridUseIcons =
|
|
+ (ChromeSwitchPreference) findPreference(PREF_TABGRID_USE_ICONS);
|
|
+ tabGridUseIcons.setOnPreferenceChangeListener(this);
|
|
+
|
|
Preference refererPolicyPref = findPreference(PREF_REFERER_POLICY);
|
|
refererPolicyPref.setSummary(
|
|
RefererSettingsFragment.getRefererSummaryString(getContext()));
|
|
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
|
|
@@ -6691,6 +6691,14 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>delete the Chrome d
|
|
Your <ph name="FQDN">%1$s<ex>www.amazon.com</ex></ph> timer ran out. It'll start again tomorrow.
|
|
</message>
|
|
|
|
+ <!-- Tab Broup Disable Thumbnail -->
|
|
+ <message name="IDS_TABGRID_USE_ICONS_TITLE" desc="Text for 'Use icons in the tab grid' settings-privacy option.">
|
|
+ Use only icons in the tab grid
|
|
+ </message>
|
|
+ <message name="IDS_TABGRID_USE_ICONS_SUMMARY" desc="Summary text for 'Use icons in the tab grid' settings-privacy option.">
|
|
+ Disable saving snapshots to disk (even for incognito sessions)
|
|
+ </message>
|
|
+
|
|
<!-- Tab Group Tab Switcher strings -->
|
|
<message name="IDS_TAB_MANAGEMENT_MODULE_TITLE" desc="Text shown when the Tab Management module is referenced in install start, success, failure UI (e.g. in IDS_MODULE_INSTALL_START_TEXT, which will expand to 'Installing Tab management for Chrome…').">
|
|
Tab management
|
|
--
|