From 649dea59d94e177f9dbfc68afde5ab0653850f72 Mon Sep 17 00:00:00 2001 From: tapanmodh Date: Wed, 4 Jan 2023 01:41:10 +0530 Subject: [PATCH] Add option to enable/disable download notification bubble --- android/brave_java_sources.gni | 2 +- .../BraveTabUiFeatureUtilities.java | 2 +- android/java/apk_for_test.flags | 8 +++++ .../BravePreferenceKeys.java | 6 ++-- .../browser/BraveLaunchIntentDispatcher.java | 2 +- .../chrome/browser/BraveRewardsHelper.java | 2 +- .../chrome/browser/app/BraveActivity.java | 2 +- .../BraveNewsBottomSheetDialogFragment.java | 2 +- .../brave_news/CardBuilderFeedCard.java | 2 +- .../crypto_wallet/util/KeystoreHelper.java | 2 +- .../browser/download/BraveMimeUtils.java | 2 +- .../settings/BraveDownloadSettings.java | 30 ++++++++++++++++++- .../browser/ntp/BraveNewTabPageLayout.java | 2 +- .../chrome/browser/rate/RateUtils.java | 2 +- .../browser/rewards/BraveRewardsPanel.java | 2 +- .../BraveSetDefaultBrowserUtils.java | 2 +- .../SetDefaultBrowserBottomSheetFragment.java | 2 +- .../settings/AppearancePreferences.java | 2 +- .../settings/BraveCustomTabsPreference.java | 7 +++-- .../settings/BraveNewsCategorySources.java | 2 +- .../settings/BraveNewsPreferences.java | 2 +- .../settings/BraveNewsPreferencesDetails.java | 2 +- .../settings/BraveNewsPreferencesV2.java | 2 +- .../browser/share/BraveShareDelegateImpl.java | 2 +- .../bottom/BottomToolbarConfiguration.java | 2 +- .../toolbar/top/BraveToolbarLayoutImpl.java | 2 +- ...BravePackageReplacedBroadcastReceiver.java | 2 +- .../browser/upgrade/NotificationIntent.java | 2 +- .../res/xml/brave_download_preferences.xml | 6 ++++ .../chromium/chrome/browser/BytecodeTest.java | 13 ++++++++ browser/download/internal/android/BUILD.gn | 18 +++++++++++ .../BraveDownloadMessageUiControllerImpl.java | 29 ++++++++++++++++++ .../android/strings/android_brave_strings.grd | 6 ++++ build/android/bytecode/BUILD.gn | 1 + build/android/bytecode/bytecode_rewriter.gni | 1 + .../org/brave/bytecode/BraveClassAdapter.java | 1 + ...adMessageUiControllerImplClassAdapter.java | 24 +++++++++++++++ build/android/config.gni | 1 + 38 files changed, 169 insertions(+), 30 deletions(-) rename android/java/org/chromium/{chrome/browser/preferences => base}/BravePreferenceKeys.java (92%) create mode 100644 browser/download/internal/android/BUILD.gn create mode 100644 browser/download/internal/android/java/src/org/chromium/chrome/browser/download/BraveDownloadMessageUiControllerImpl.java create mode 100644 build/android/bytecode/java/org/brave/bytecode/BraveDownloadMessageUiControllerImplClassAdapter.java diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index 79f3d7baef56..7736e83b1e97 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -262,7 +262,6 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/partnercustomizations/CloseBraveManager.java", "../../brave/android/java/org/chromium/chrome/browser/password_manager/settings/BravePasswordSettingsBase.java", "../../brave/android/java/org/chromium/chrome/browser/preferences/BravePrefServiceBridge.java", - "../../brave/android/java/org/chromium/chrome/browser/preferences/BravePreferenceKeys.java", "../../brave/android/java/org/chromium/chrome/browser/preferences/website/BraveShieldsContentSettings.java", "../../brave/android/java/org/chromium/chrome/browser/preferences/website/BraveShieldsContentSettingsObserver.java", "../../brave/android/java/org/chromium/chrome/browser/privacy/settings/BravePrivacySettings.java", @@ -456,6 +455,7 @@ brave_browser_ui_android_toolbar_sources = [ brave_java_base_sources = [ "//brave/android/java/org/chromium/base/BraveCommandLineInitUtil.java", "//brave/android/java/org/chromium/base/BraveFeatureList.java", + "//brave/android/java/org/chromium/base/BravePreferenceKeys.java", "//brave/android/java/org/chromium/base/BraveReflectionUtil.java", ] diff --git a/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/BraveTabUiFeatureUtilities.java b/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/BraveTabUiFeatureUtilities.java index 6e62f8344a8b..0bbc853b5bc3 100644 --- a/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/BraveTabUiFeatureUtilities.java +++ b/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/BraveTabUiFeatureUtilities.java @@ -8,8 +8,8 @@ import android.annotation.SuppressLint; import android.content.Context; +import org.chromium.base.BravePreferenceKeys; import org.chromium.chrome.browser.flags.CachedFeatureFlags; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; public class BraveTabUiFeatureUtilities { diff --git a/android/java/apk_for_test.flags b/android/java/apk_for_test.flags index cdc5dd012926..9eb26644586a 100644 --- a/android/java/apk_for_test.flags +++ b/android/java/apk_for_test.flags @@ -461,6 +461,14 @@ public (...); } +-keep class org.chromium.chrome.browser.download.BraveDownloadMessageUiControllerImpl { + *** isVisibleToUser(...); +} + +-keep class org.chromium.chrome.browser.download.DownloadMessageUiControllerImpl { + *** isVisibleToUser(...); +} + -keep class org.chromium.chrome.browser.omnibox.suggestions.BraveAutocompleteCoordinator { *** createViewProvider(...); } diff --git a/android/java/org/chromium/chrome/browser/preferences/BravePreferenceKeys.java b/android/java/org/chromium/base/BravePreferenceKeys.java similarity index 92% rename from android/java/org/chromium/chrome/browser/preferences/BravePreferenceKeys.java rename to android/java/org/chromium/base/BravePreferenceKeys.java index 834ec885f7f8..5f3400c37d3f 100644 --- a/android/java/org/chromium/chrome/browser/preferences/BravePreferenceKeys.java +++ b/android/java/org/chromium/base/BravePreferenceKeys.java @@ -1,9 +1,9 @@ /* Copyright (c) 2020 The Brave Authors. All rights reserved. * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ + * You can obtain one at https://mozilla.org/MPL/2.0/. */ -package org.chromium.chrome.browser.preferences; +package org.chromium.base; public final class BravePreferenceKeys { public static final String BRAVE_BOTTOM_TOOLBAR_ENABLED_KEY = @@ -25,6 +25,8 @@ public final class BravePreferenceKeys { "org.chromium.chrome.browser.upgrade.Milliseconds_New"; public static final String BRAVE_DOWNLOADS_AUTOMATICALLY_OPEN_WHEN_POSSIBLE = "org.chromium.chrome.browser.downloads.Automatically_Open_When_Possible"; + public static final String BRAVE_DOWNLOADS_DOWNLOAD_PROGRESS_NOTIFICATION_BUBBLE = + "org.chromium.chrome.browser.downloads.Download_Progress_Notification_Bubble"; public static final String BRAVE_DOUBLE_RESTART = "org.chromium.chrome.browser.Brave_Double_Restart"; public static final String BRAVE_TAB_GROUPS_ENABLED = diff --git a/android/java/org/chromium/chrome/browser/BraveLaunchIntentDispatcher.java b/android/java/org/chromium/chrome/browser/BraveLaunchIntentDispatcher.java index 4df9173263f7..d9a400636c6b 100644 --- a/android/java/org/chromium/chrome/browser/BraveLaunchIntentDispatcher.java +++ b/android/java/org/chromium/chrome/browser/BraveLaunchIntentDispatcher.java @@ -8,8 +8,8 @@ import android.content.Intent; import android.content.SharedPreferences; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; // see org.brave.bytecode.BraveLaunchIntentDispatcherClassAdapter public class BraveLaunchIntentDispatcher { diff --git a/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java b/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java index dfa5e044396f..cfc0aee27a4c 100644 --- a/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java +++ b/android/java/org/chromium/chrome/browser/BraveRewardsHelper.java @@ -25,13 +25,13 @@ import androidx.annotation.Nullable; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.base.annotations.CalledByNative; import org.chromium.chrome.R; import org.chromium.chrome.browser.BraveRewardsNativeWorker; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.app.BraveActivity; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; diff --git a/android/java/org/chromium/chrome/browser/app/BraveActivity.java b/android/java/org/chromium/chrome/browser/app/BraveActivity.java index 293041c97be9..b8159966719e 100644 --- a/android/java/org/chromium/chrome/browser/app/BraveActivity.java +++ b/android/java/org/chromium/chrome/browser/app/BraveActivity.java @@ -53,6 +53,7 @@ import org.chromium.base.ApplicationStatus; import org.chromium.base.BraveFeatureList; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.BraveReflectionUtil; import org.chromium.base.CollectionUtil; import org.chromium.base.CommandLine; @@ -142,7 +143,6 @@ import org.chromium.chrome.browser.onboarding.v2.HighlightView; import org.chromium.chrome.browser.preferences.BravePref; import org.chromium.chrome.browser.preferences.BravePrefServiceBridge; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.PrefChangeRegistrar; import org.chromium.chrome.browser.preferences.PrefChangeRegistrar.PrefObserver; diff --git a/android/java/org/chromium/chrome/browser/brave_news/BraveNewsBottomSheetDialogFragment.java b/android/java/org/chromium/chrome/browser/brave_news/BraveNewsBottomSheetDialogFragment.java index 4fa8828044ee..f157224c86a1 100644 --- a/android/java/org/chromium/chrome/browser/brave_news/BraveNewsBottomSheetDialogFragment.java +++ b/android/java/org/chromium/chrome/browser/brave_news/BraveNewsBottomSheetDialogFragment.java @@ -20,10 +20,10 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment; +import org.chromium.base.BravePreferenceKeys; import org.chromium.brave_news.mojom.BraveNewsController; import org.chromium.brave_news.mojom.UserEnabled; import org.chromium.chrome.R; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.util.TabUtils; diff --git a/android/java/org/chromium/chrome/browser/brave_news/CardBuilderFeedCard.java b/android/java/org/chromium/chrome/browser/brave_news/CardBuilderFeedCard.java index 215aad265139..18a5fefb8c70 100644 --- a/android/java/org/chromium/chrome/browser/brave_news/CardBuilderFeedCard.java +++ b/android/java/org/chromium/chrome/browser/brave_news/CardBuilderFeedCard.java @@ -58,6 +58,7 @@ import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.transition.Transition; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.brave_news.mojom.Article; @@ -79,7 +80,6 @@ import org.chromium.chrome.browser.local_database.DatabaseHelper; import org.chromium.chrome.browser.local_database.DisplayAdsTable; import org.chromium.chrome.browser.ntp_background_images.util.NTPUtil; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.rate.BraveRateDialogFragment; import org.chromium.chrome.browser.util.ConfigurationUtils; diff --git a/android/java/org/chromium/chrome/browser/crypto_wallet/util/KeystoreHelper.java b/android/java/org/chromium/chrome/browser/crypto_wallet/util/KeystoreHelper.java index ca9a55e61057..d876eae2dbcb 100644 --- a/android/java/org/chromium/chrome/browser/crypto_wallet/util/KeystoreHelper.java +++ b/android/java/org/chromium/chrome/browser/crypto_wallet/util/KeystoreHelper.java @@ -9,7 +9,7 @@ import android.security.keystore.KeyProperties; import android.util.Base64; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; +import org.chromium.base.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import java.io.IOException; diff --git a/android/java/org/chromium/chrome/browser/download/BraveMimeUtils.java b/android/java/org/chromium/chrome/browser/download/BraveMimeUtils.java index a1e58ecdf519..f9fd5a2cbdba 100644 --- a/android/java/org/chromium/chrome/browser/download/BraveMimeUtils.java +++ b/android/java/org/chromium/chrome/browser/download/BraveMimeUtils.java @@ -5,8 +5,8 @@ package org.chromium.chrome.browser.download; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; public class BraveMimeUtils { public static boolean canAutoOpenMimeType(String mimeType) { diff --git a/android/java/org/chromium/chrome/browser/download/settings/BraveDownloadSettings.java b/android/java/org/chromium/chrome/browser/download/settings/BraveDownloadSettings.java index b742f437274d..1d9914b04383 100644 --- a/android/java/org/chromium/chrome/browser/download/settings/BraveDownloadSettings.java +++ b/android/java/org/chromium/chrome/browser/download/settings/BraveDownloadSettings.java @@ -10,9 +10,9 @@ import androidx.annotation.Nullable; import androidx.preference.Preference; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.chrome.R; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; import org.chromium.components.browser_ui.settings.SettingsUtils; @@ -22,8 +22,12 @@ public class BraveDownloadSettings "automatically_open_when_possible"; private static final String PREF_DOWNLOAD_LATER_PROMPT_ENABLED = "download_later_prompt_enabled"; + public static final String PREF_LOCATION_PROMPT_ENABLED = "location_prompt_enabled"; + private static final String PREF_DOWNLOAD_PROGRESS_NOTIFICATION_BUBBLE = + "download_progress_notification_bubble"; private ChromeSwitchPreference mAutomaticallyOpenWhenPossiblePref; + private ChromeSwitchPreference mDownloadProgressNotificationBubblePref; @Override public void onCreate(Bundle savedInstanceState) { @@ -35,6 +39,17 @@ public void onCreate(Bundle savedInstanceState) { (ChromeSwitchPreference) findPreference(PREF_AUTOMATICALLY_OPEN_WHEN_POSSIBLE); mAutomaticallyOpenWhenPossiblePref.setOnPreferenceChangeListener(this); + mDownloadProgressNotificationBubblePref = + (ChromeSwitchPreference) findPreference(PREF_DOWNLOAD_PROGRESS_NOTIFICATION_BUBBLE); + mDownloadProgressNotificationBubblePref.setOnPreferenceChangeListener(this); + + ChromeSwitchPreference locationPromptEnabledPref = + (ChromeSwitchPreference) findPreference(PREF_LOCATION_PROMPT_ENABLED); + if (locationPromptEnabledPref != null) { + locationPromptEnabledPref.setTitle( + R.string.brave_download_location_prompt_enabled_title); + } + ChromeSwitchPreference downloadLaterPromptEnabledPref = (ChromeSwitchPreference) findPreference(PREF_DOWNLOAD_LATER_PROMPT_ENABLED); assert downloadLaterPromptEnabledPref != null : "Upstream applied new changes!"; @@ -54,6 +69,12 @@ private void updateDownloadSettings() { boolean automaticallyOpenWhenPossible = ContextUtils.getAppSharedPreferences().getBoolean( BravePreferenceKeys.BRAVE_DOWNLOADS_AUTOMATICALLY_OPEN_WHEN_POSSIBLE, true); mAutomaticallyOpenWhenPossiblePref.setChecked(automaticallyOpenWhenPossible); + + boolean downloadProgressNotificationBubble = + ContextUtils.getAppSharedPreferences().getBoolean( + BravePreferenceKeys.BRAVE_DOWNLOADS_DOWNLOAD_PROGRESS_NOTIFICATION_BUBBLE, + false); + mDownloadProgressNotificationBubblePref.setChecked(downloadProgressNotificationBubble); } // Preference.OnPreferenceChangeListener implementation. @@ -66,6 +87,13 @@ public boolean onPreferenceChange(Preference preference, Object newValue) { BravePreferenceKeys.BRAVE_DOWNLOADS_AUTOMATICALLY_OPEN_WHEN_POSSIBLE, (boolean) newValue) .apply(); + } else if (PREF_DOWNLOAD_PROGRESS_NOTIFICATION_BUBBLE.equals(preference.getKey())) { + ContextUtils.getAppSharedPreferences() + .edit() + .putBoolean(BravePreferenceKeys + .BRAVE_DOWNLOADS_DOWNLOAD_PROGRESS_NOTIFICATION_BUBBLE, + (boolean) newValue) + .apply(); } return super.onPreferenceChange(preference, newValue); } diff --git a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java index 5e922f330d44..eb084bda80b6 100644 --- a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java +++ b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java @@ -49,6 +49,7 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton; import org.chromium.base.BraveFeatureList; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.ThreadUtils; @@ -97,7 +98,6 @@ import org.chromium.chrome.browser.onboarding.OnboardingPrefManager; import org.chromium.chrome.browser.preferences.BravePref; import org.chromium.chrome.browser.preferences.BravePrefServiceBridge; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.query_tiles.BraveQueryTileSection; diff --git a/android/java/org/chromium/chrome/browser/rate/RateUtils.java b/android/java/org/chromium/chrome/browser/rate/RateUtils.java index 7f026f41f48e..c9a81b9028f7 100644 --- a/android/java/org/chromium/chrome/browser/rate/RateUtils.java +++ b/android/java/org/chromium/chrome/browser/rate/RateUtils.java @@ -10,9 +10,9 @@ import android.content.Context; import android.content.SharedPreferences; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.base.Log; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.set_default_browser.BraveSetDefaultBrowserUtils; import org.chromium.chrome.browser.vpn.utils.BraveVpnPrefUtils; diff --git a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java index 63b7dc0ad706..f26e5d7a89e4 100644 --- a/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java +++ b/android/java/org/chromium/chrome/browser/rewards/BraveRewardsPanel.java @@ -69,6 +69,7 @@ import org.json.JSONException; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.BraveReflectionUtil; import org.chromium.base.BuildInfo; import org.chromium.base.ContextUtils; @@ -95,7 +96,6 @@ import org.chromium.chrome.browser.notifications.BraveNotificationWarningDialog; import org.chromium.chrome.browser.notifications.BravePermissionUtils; import org.chromium.chrome.browser.preferences.BravePref; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; diff --git a/android/java/org/chromium/chrome/browser/set_default_browser/BraveSetDefaultBrowserUtils.java b/android/java/org/chromium/chrome/browser/set_default_browser/BraveSetDefaultBrowserUtils.java index 78a242522318..c86bedd30a83 100644 --- a/android/java/org/chromium/chrome/browser/set_default_browser/BraveSetDefaultBrowserUtils.java +++ b/android/java/org/chromium/chrome/browser/set_default_browser/BraveSetDefaultBrowserUtils.java @@ -23,10 +23,10 @@ import androidx.appcompat.app.AppCompatActivity; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.onboarding.OnboardingPrefManager; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.util.BraveConstants; import org.chromium.components.embedder_support.util.UrlConstants; diff --git a/android/java/org/chromium/chrome/browser/set_default_browser/SetDefaultBrowserBottomSheetFragment.java b/android/java/org/chromium/chrome/browser/set_default_browser/SetDefaultBrowserBottomSheetFragment.java index 5780a54bc9e0..6bc87827fe9e 100644 --- a/android/java/org/chromium/chrome/browser/set_default_browser/SetDefaultBrowserBottomSheetFragment.java +++ b/android/java/org/chromium/chrome/browser/set_default_browser/SetDefaultBrowserBottomSheetFragment.java @@ -20,8 +20,8 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment; +import org.chromium.base.BravePreferenceKeys; import org.chromium.chrome.R; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; public class SetDefaultBrowserBottomSheetFragment extends BottomSheetDialogFragment { diff --git a/android/java/org/chromium/chrome/browser/settings/AppearancePreferences.java b/android/java/org/chromium/chrome/browser/settings/AppearancePreferences.java index 82d0d7bb9f93..2047a88f3edb 100644 --- a/android/java/org/chromium/chrome/browser/settings/AppearancePreferences.java +++ b/android/java/org/chromium/chrome/browser/settings/AppearancePreferences.java @@ -13,6 +13,7 @@ import androidx.preference.Preference; import org.chromium.base.BraveFeatureList; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.BraveFeatureUtil; @@ -22,7 +23,6 @@ import org.chromium.chrome.browser.app.flags.ChromeCachedFlags; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.night_mode.NightModeUtils; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.settings.BravePreferenceFragment; import org.chromium.chrome.browser.tasks.tab_management.BraveTabUiFeatureUtilities; diff --git a/android/java/org/chromium/chrome/browser/settings/BraveCustomTabsPreference.java b/android/java/org/chromium/chrome/browser/settings/BraveCustomTabsPreference.java index 0a5f4972e029..74e8c0e60ff2 100644 --- a/android/java/org/chromium/chrome/browser/settings/BraveCustomTabsPreference.java +++ b/android/java/org/chromium/chrome/browser/settings/BraveCustomTabsPreference.java @@ -5,15 +5,16 @@ package org.chromium.chrome.browser.settings; -import android.os.Bundle; import android.content.SharedPreferences; +import android.os.Bundle; + import androidx.preference.Preference; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; +import org.chromium.chrome.R; import org.chromium.chrome.browser.BraveLaunchIntentDispatcher; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.settings.BravePreferenceFragment; -import org.chromium.chrome.R; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; import org.chromium.components.browser_ui.settings.SettingsUtils; diff --git a/android/java/org/chromium/chrome/browser/settings/BraveNewsCategorySources.java b/android/java/org/chromium/chrome/browser/settings/BraveNewsCategorySources.java index de99f118efcd..6791a8a7b4fc 100644 --- a/android/java/org/chromium/chrome/browser/settings/BraveNewsCategorySources.java +++ b/android/java/org/chromium/chrome/browser/settings/BraveNewsCategorySources.java @@ -17,13 +17,13 @@ import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.brave_news.mojom.BraveNewsController; import org.chromium.brave_news.mojom.Publisher; import org.chromium.brave_news.mojom.UserEnabled; import org.chromium.chrome.R; import org.chromium.chrome.browser.brave_news.BraveNewsControllerFactory; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.settings.SearchPreference; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; diff --git a/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferences.java b/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferences.java index d09c087b2205..816171ff8970 100644 --- a/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferences.java +++ b/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferences.java @@ -19,6 +19,7 @@ import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.brave_news.mojom.BraveNewsController; import org.chromium.brave_news.mojom.Publisher; @@ -28,7 +29,6 @@ import org.chromium.chrome.browser.BraveLaunchIntentDispatcher; import org.chromium.chrome.browser.brave_news.BraveNewsControllerFactory; import org.chromium.chrome.browser.preferences.BravePrefServiceBridge; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.settings.BravePreferenceFragment; import org.chromium.chrome.browser.settings.SettingsLauncherImpl; diff --git a/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferencesDetails.java b/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferencesDetails.java index bce8a404799e..5d49684a5d32 100644 --- a/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferencesDetails.java +++ b/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferencesDetails.java @@ -24,6 +24,7 @@ import com.bumptech.glide.Glide; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; import org.chromium.brave_news.mojom.BraveNewsController; @@ -34,7 +35,6 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.brave_news.BraveNewsControllerFactory; import org.chromium.chrome.browser.brave_news.BraveNewsUtils; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.settings.BravePreferenceFragment; import org.chromium.chrome.browser.util.BraveConstants; diff --git a/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferencesV2.java b/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferencesV2.java index dc150c76f40c..0a8f75743324 100644 --- a/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferencesV2.java +++ b/android/java/org/chromium/chrome/browser/settings/BraveNewsPreferencesV2.java @@ -26,6 +26,7 @@ import com.airbnb.lottie.LottieProperty; import com.airbnb.lottie.model.KeyPath; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; @@ -38,7 +39,6 @@ import org.chromium.chrome.browser.customtabs.CustomTabActivity; import org.chromium.chrome.browser.night_mode.GlobalNightModeStateProviderHolder; import org.chromium.chrome.browser.preferences.BravePrefServiceBridge; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.settings.BravePreferenceFragment; import org.chromium.chrome.browser.util.BraveConstants; diff --git a/android/java/org/chromium/chrome/browser/share/BraveShareDelegateImpl.java b/android/java/org/chromium/chrome/browser/share/BraveShareDelegateImpl.java index f55e880323dc..6ca043d0534d 100644 --- a/android/java/org/chromium/chrome/browser/share/BraveShareDelegateImpl.java +++ b/android/java/org/chromium/chrome/browser/share/BraveShareDelegateImpl.java @@ -5,9 +5,9 @@ package org.chromium.chrome.browser.share; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.supplier.Supplier; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; diff --git a/android/java/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarConfiguration.java b/android/java/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarConfiguration.java index 37261d3dbc45..8e48ff1bc849 100644 --- a/android/java/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarConfiguration.java +++ b/android/java/org/chromium/chrome/browser/toolbar/bottom/BottomToolbarConfiguration.java @@ -11,9 +11,9 @@ import android.view.Display; import org.chromium.base.ApplicationStatus; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.ContextUtils; import org.chromium.chrome.browser.app.ChromeActivity; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities; import org.chromium.ui.base.DeviceFormFactor; diff --git a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java index cd706fc6959d..b981599c8477 100644 --- a/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java +++ b/android/java/org/chromium/chrome/browser/toolbar/top/BraveToolbarLayoutImpl.java @@ -50,6 +50,7 @@ import androidx.core.content.res.ResourcesCompat; import org.chromium.base.ApiCompatibilityUtils; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.BraveReflectionUtil; import org.chromium.base.ContextUtils; import org.chromium.base.Log; @@ -87,7 +88,6 @@ import org.chromium.chrome.browser.onboarding.v2.HighlightView; import org.chromium.chrome.browser.preferences.BravePref; import org.chromium.chrome.browser.preferences.BravePrefServiceBridge; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.preferences.website.BraveShieldsContentSettings; import org.chromium.chrome.browser.preferences.website.BraveShieldsContentSettingsObserver; diff --git a/android/java/org/chromium/chrome/browser/upgrade/BravePackageReplacedBroadcastReceiver.java b/android/java/org/chromium/chrome/browser/upgrade/BravePackageReplacedBroadcastReceiver.java index 3d50597ee670..5611d4ad843e 100644 --- a/android/java/org/chromium/chrome/browser/upgrade/BravePackageReplacedBroadcastReceiver.java +++ b/android/java/org/chromium/chrome/browser/upgrade/BravePackageReplacedBroadcastReceiver.java @@ -9,9 +9,9 @@ import android.content.Context; import android.content.Intent; +import org.chromium.base.BravePreferenceKeys; import org.chromium.chrome.browser.notifications.retention.RetentionNotificationUtil; import org.chromium.chrome.browser.onboarding.OnboardingPrefManager; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.util.BraveConstants; diff --git a/android/java/org/chromium/chrome/browser/upgrade/NotificationIntent.java b/android/java/org/chromium/chrome/browser/upgrade/NotificationIntent.java index 3448a7168270..00153cdc1a8b 100644 --- a/android/java/org/chromium/chrome/browser/upgrade/NotificationIntent.java +++ b/android/java/org/chromium/chrome/browser/upgrade/NotificationIntent.java @@ -17,11 +17,11 @@ import androidx.core.app.NotificationCompat; +import org.chromium.base.BravePreferenceKeys; import org.chromium.base.IntentUtils; import org.chromium.base.Log; import org.chromium.base.ThreadUtils; import org.chromium.chrome.R; -import org.chromium.chrome.browser.preferences.BravePreferenceKeys; import java.util.ArrayList; import java.util.Arrays; diff --git a/android/java/res/xml/brave_download_preferences.xml b/android/java/res/xml/brave_download_preferences.xml index 1340da87086f..b582536d500f 100644 --- a/android/java/res/xml/brave_download_preferences.xml +++ b/android/java/res/xml/brave_download_preferences.xml @@ -11,4 +11,10 @@ android:summaryOn="@string/text_on" android:summaryOff="@string/text_off" /> + + diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index bc205eeb41c3..29acd36f36f4 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -259,6 +259,10 @@ public void testClassesExist() throws Exception { classExists("org/chromium/chrome/browser/dom_distiller/BraveReaderModeManager")); Assert.assertTrue(classExists( "org/chromium/chrome/browser/share/send_tab_to_self/BraveManageAccountDevicesLinkView")); + Assert.assertTrue(classExists( + "org/chromium/chrome/browser/download/DownloadMessageUiControllerImpl")); + Assert.assertTrue(classExists( + "org/chromium/chrome/browser/download/BraveDownloadMessageUiControllerImpl")); Assert.assertTrue(classExists( "org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator")); Assert.assertTrue(classExists( @@ -452,6 +456,12 @@ public void testMethodsExist() throws Exception { Assert.assertTrue(methodExists( "org/chromium/chrome/browser/notifications/permissions/NotificationPermissionRationaleDialogController", "wrapDialogDismissalCallback", true, Callback.class, Callback.class)); + Assert.assertTrue( + methodExists("org/chromium/chrome/browser/download/DownloadMessageUiControllerImpl", + "isVisibleToUser", false, null)); + Assert.assertTrue(methodExists( + "org/chromium/chrome/browser/download/BraveDownloadMessageUiControllerImpl", + "isVisibleToUser", false, null)); } @Test @@ -958,6 +968,9 @@ public void testSuperNames() throws Exception { Assert.assertTrue( checkSuperName("org/chromium/chrome/browser/infobar/TranslateCompactInfoBar", "org/chromium/chrome/browser/infobar/BraveTranslateCompactInfoBarBase")); + Assert.assertTrue(checkSuperName( + "org/chromium/chrome/browser/download/DownloadMessageUiControllerImpl", + "org/chromium/chrome/browser/download/BraveDownloadMessageUiControllerImpl")); Assert.assertTrue(checkSuperName( "org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator", "org/chromium/chrome/browser/omnibox/suggestions/BraveAutocompleteCoordinator")); diff --git a/browser/download/internal/android/BUILD.gn b/browser/download/internal/android/BUILD.gn new file mode 100644 index 000000000000..f454095f8531 --- /dev/null +++ b/browser/download/internal/android/BUILD.gn @@ -0,0 +1,18 @@ +# Copyright (c) 2023 The Brave Authors. All rights reserved. +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at https://mozilla.org/MPL/2.0/. + +import("//build/config/android/rules.gni") + +android_library("java") { + sources = [ "java/src/org/chromium/chrome/browser/download/BraveDownloadMessageUiControllerImpl.java" ] + + deps = [ + "//base:base_java", + "//chrome/browser/download/internal/android:java", + "//components/offline_items_collection/core:core_java", + ] + + resources_package = "org.chromium.chrome.browser.download.internal" +} diff --git a/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/BraveDownloadMessageUiControllerImpl.java b/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/BraveDownloadMessageUiControllerImpl.java new file mode 100644 index 000000000000..f0b0ecdb0b2f --- /dev/null +++ b/browser/download/internal/android/java/src/org/chromium/chrome/browser/download/BraveDownloadMessageUiControllerImpl.java @@ -0,0 +1,29 @@ +/* Copyright (c) 2023 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package org.chromium.chrome.browser.download; + +import android.text.TextUtils; + +import org.chromium.base.BravePreferenceKeys; +import org.chromium.base.ContextUtils; +import org.chromium.components.offline_items_collection.LegacyHelpers; +import org.chromium.components.offline_items_collection.OfflineItem; + +public class BraveDownloadMessageUiControllerImpl { + public boolean isVisibleToUser(OfflineItem offlineItem) { + if (offlineItem.isTransient || offlineItem.isSuggested || offlineItem.isDangerous) { + return false; + } + + if (LegacyHelpers.isLegacyDownload(offlineItem.id) + && TextUtils.isEmpty(offlineItem.filePath)) { + return false; + } + + return ContextUtils.getAppSharedPreferences().getBoolean( + BravePreferenceKeys.BRAVE_DOWNLOADS_DOWNLOAD_PROGRESS_NOTIFICATION_BUBBLE, false); + } +} diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd index 4d4ea5191ca7..1fa3705c6953 100644 --- a/browser/ui/android/strings/android_brave_strings.grd +++ b/browser/ui/android/strings/android_brave_strings.grd @@ -1643,6 +1643,12 @@ Are you sure you want to do this? Automatically open when possible + + Show download progress notifications + + + Ask where to save files (if SD card is detected) + View full Privacy Report diff --git a/build/android/bytecode/BUILD.gn b/build/android/bytecode/BUILD.gn index a6271a4fe26f..b79a65e1014a 100644 --- a/build/android/bytecode/BUILD.gn +++ b/build/android/bytecode/BUILD.gn @@ -26,6 +26,7 @@ java_binary("java_bytecode_rewriter") { "//brave/build/android/bytecode/java/org/brave/bytecode/BraveContentSettingsResourcesClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveCustomizationProviderDelegateImplClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveDefaultBrowserPromoUtilsClassAdapter.java", + "//brave/build/android/bytecode/java/org/brave/bytecode/BraveDownloadMessageUiControllerImplClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveDropdownItemViewInfoListBuilderClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveDropdownItemViewInfoListManagerClassAdapter.java", "//brave/build/android/bytecode/java/org/brave/bytecode/BraveDynamicColorsClassAdapter.java", diff --git a/build/android/bytecode/bytecode_rewriter.gni b/build/android/bytecode/bytecode_rewriter.gni index 1ea05e0c554a..a78c27303d43 100644 --- a/build/android/bytecode/bytecode_rewriter.gni +++ b/build/android/bytecode/bytecode_rewriter.gni @@ -11,6 +11,7 @@ brave_bytecode_jars = [ "obj/chrome/android/base_module_java.javac.jar", "obj/chrome/android/chrome_java.javac.jar", "obj/chrome/android/features/tab_ui/java.javac.jar", + "obj/chrome/browser/download/internal/android/java.javac.jar", "obj/chrome/browser/flags/java.javac.jar", "obj/chrome/browser/locale/delegate_java.javac.jar", "obj/chrome/browser/notifications/java.javac.jar", diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java index 8d7a6166cf6d..906d0378b3e5 100644 --- a/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java +++ b/build/android/bytecode/java/org/brave/bytecode/BraveClassAdapter.java @@ -24,6 +24,7 @@ public static ClassVisitor createAdapter(ClassVisitor chain) { chain = new BraveContentSettingsResourcesClassAdapter(chain); chain = new BraveCustomizationProviderDelegateImplClassAdapter(chain); chain = new BraveDefaultBrowserPromoUtilsClassAdapter(chain); + chain = new BraveDownloadMessageUiControllerImplClassAdapter(chain); chain = new BraveDropdownItemViewInfoListBuilderClassAdapter(chain); chain = new BraveDropdownItemViewInfoListManagerClassAdapter(chain); chain = new BraveDynamicColorsClassAdapter(chain); diff --git a/build/android/bytecode/java/org/brave/bytecode/BraveDownloadMessageUiControllerImplClassAdapter.java b/build/android/bytecode/java/org/brave/bytecode/BraveDownloadMessageUiControllerImplClassAdapter.java new file mode 100644 index 000000000000..91487aaca460 --- /dev/null +++ b/build/android/bytecode/java/org/brave/bytecode/BraveDownloadMessageUiControllerImplClassAdapter.java @@ -0,0 +1,24 @@ +/* Copyright (c) 2023 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at https://mozilla.org/MPL/2.0/. */ + +package org.brave.bytecode; + +import org.objectweb.asm.ClassVisitor; + +public class BraveDownloadMessageUiControllerImplClassAdapter extends BraveClassVisitor { + static String sDownloadMessageUiControllerImpl = + "org/chromium/chrome/browser/download/DownloadMessageUiControllerImpl"; + + static String sBraveDownloadMessageUiControllerImpl = + "org/chromium/chrome/browser/download/BraveDownloadMessageUiControllerImpl"; + + public BraveDownloadMessageUiControllerImplClassAdapter(ClassVisitor visitor) { + super(visitor); + + changeSuperName(sDownloadMessageUiControllerImpl, sBraveDownloadMessageUiControllerImpl); + changeMethodOwner(sDownloadMessageUiControllerImpl, "isVisibleToUser", + sBraveDownloadMessageUiControllerImpl); + } +} diff --git a/build/android/config.gni b/build/android/config.gni index 9e30168cf23d..d0f8e339e220 100644 --- a/build/android/config.gni +++ b/build/android/config.gni @@ -20,6 +20,7 @@ brave_android_manifest_includes = [ brave_chrome_java_deps = [ "//brave/android/java/org/chromium/chrome/browser/search_engines:java", + "//brave/browser/download/internal/android:java", "//brave/browser/notifications/android:brave_java", "//brave/browser/notifications/android:java", "//brave/browser/safe_browsing/android/java/src/org/chromium/chrome/browser/safe_browsing/settings:java",