From d07fb818dcacae3549c85d562749fb310048de8c Mon Sep 17 00:00:00 2001 From: Szilard Szaloki Date: Thu, 31 Jul 2025 14:31:35 -0600 Subject: [PATCH] Brave Account section in Android settings. (#30354) --- android/brave_java_sources.gni | 1 + android/java/AndroidManifest.xml | 8 ++ .../org/chromium/base/BraveFeatureList.java | 1 + .../BraveAccountCustomTabActivity.java | 100 ++++++++++++++++++ .../settings/BraveMainPreferencesBase.java | 48 +++++++-- android/java/res/values/brave_styles.xml | 4 + .../java/res/xml/brave_main_preferences.xml | 11 +- .../android/strings/android_brave_strings.grd | 6 ++ .../webui/brave_account/brave_account_ui.cc | 46 +++++++- .../chrome/browser/flags/android/DEPS | 1 + .../flags/android/chrome_feature_list.cc | 4 +- 11 files changed, 217 insertions(+), 13 deletions(-) create mode 100644 android/java/org/chromium/chrome/browser/customtabs/BraveAccountCustomTabActivity.java diff --git a/android/brave_java_sources.gni b/android/brave_java_sources.gni index d20220b8dea..d44355b977f 100644 --- a/android/brave_java_sources.gni +++ b/android/brave_java_sources.gni @@ -203,6 +203,7 @@ brave_java_sources = [ "../../brave/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/ArrowColorDrawable.java", "../../brave/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/PopupWindowTooltip.java", "../../brave/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/PopupWindowTooltipUtils.java", + "../../brave/android/java/org/chromium/chrome/browser/customtabs/BraveAccountCustomTabActivity.java", "../../brave/android/java/org/chromium/chrome/browser/customtabs/FullScreenCustomTabActivity.java", "../../brave/android/java/org/chromium/chrome/browser/customtabs/FullScreenCustomTabRootUiCoordinator.java", "../../brave/android/java/org/chromium/chrome/browser/customtabs/features/partialcustomtab/BravePartialCustomTabBottomSheetStrategy.java", diff --git a/android/java/AndroidManifest.xml b/android/java/AndroidManifest.xml index 5c1b8c3a673..129919f119d 100644 --- a/android/java/AndroidManifest.xml +++ b/android/java/AndroidManifest.xml @@ -17,6 +17,14 @@ android:name="org.chromium.chrome.browser.BraveRewardsUserWalletActivity" android:theme="@style/BraveTranslucent"/> + + finish()); + FrameLayout.LayoutParams closeButtonParams = + new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.WRAP_CONTENT, + FrameLayout.LayoutParams.WRAP_CONTENT, + Gravity.CENTER_VERTICAL | Gravity.END); + closeButtonParams.setMarginEnd(dpToPx(this, HORIZONTAL_MARGIN_DP)); + closeButton.setLayoutParams(closeButtonParams); + + FrameLayout header = new FrameLayout(this); + header.setLayoutParams( + new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, getActionBarSize(), Gravity.TOP)); + header.addView(title); + header.addView(closeButton); + + getContentView().addView(header); + } + + private int getActionBarSize() { + TypedValue value = new TypedValue(); + if (getTheme().resolveAttribute(android.R.attr.actionBarSize, value, true)) { + return TypedValue.complexToDimensionPixelSize( + value.data, getResources().getDisplayMetrics()); + } + + return dpToPx(this, 56); // the standard action bar height on phones in portrait + } + + public static void show(Activity activity) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("brave://account")); + intent.setClassName(activity, BraveAccountCustomTabActivity.class.getName()); + intent.putExtra(Browser.EXTRA_APPLICATION_ID, activity.getPackageName()); + intent.putExtra( + CustomTabsIntent.EXTRA_COLOR_SCHEME, + ColorUtils.inNightMode(activity) ? COLOR_SCHEME_DARK : COLOR_SCHEME_LIGHT); + IntentUtils.addTrustedIntentExtras(intent); + activity.startActivity(intent); + } +} diff --git a/android/java/org/chromium/chrome/browser/settings/BraveMainPreferencesBase.java b/android/java/org/chromium/chrome/browser/settings/BraveMainPreferencesBase.java index b196608561a..796a6fa75c9 100644 --- a/android/java/org/chromium/chrome/browser/settings/BraveMainPreferencesBase.java +++ b/android/java/org/chromium/chrome/browser/settings/BraveMainPreferencesBase.java @@ -23,6 +23,7 @@ import org.chromium.chrome.R; import org.chromium.chrome.browser.BraveLaunchIntentDispatcher; import org.chromium.chrome.browser.accessibility.settings.BraveAccessibilitySettings; import org.chromium.chrome.browser.brave_leo.BraveLeoPrefUtils; +import org.chromium.chrome.browser.customtabs.BraveAccountCustomTabActivity; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.homepage.settings.BraveHomepageSettings; import org.chromium.chrome.browser.notifications.BraveNotificationWarningDialog; @@ -55,6 +56,7 @@ import java.util.HashMap; public abstract class BraveMainPreferencesBase extends BravePreferenceFragment implements Preference.OnPreferenceChangeListener { // sections + private static final String PREF_BRAVE_ACCOUNT_SECTION = "brave_account_section"; private static final String PREF_FEATURES_SECTION = "features_section"; private static final String PREF_DISPLAY_SECTION = "display_section"; private static final String PREF_GENERAL_SECTION = "general_section"; @@ -64,8 +66,8 @@ public abstract class BraveMainPreferencesBase extends BravePreferenceFragment private static final String PREF_ABOUT_SECTION = "about_section"; // prefs - private static final String PREF_BRAVE_VPN_CALLOUT = "pref_vpn_callout"; + private static final String PREF_GET_STARTED = "get_started"; private static final String PREF_CLOSING_ALL_TABS_CLOSES_BRAVE = "closing_all_tabs_closes_brave"; private static final String PREF_PRIVACY = "privacy"; @@ -108,9 +110,11 @@ public abstract class BraveMainPreferencesBase extends BravePreferenceFragment // Add brave's additional preferences here because |onCreatePreference| is not called // by subclass (MainPreference::onCreatePreferences()). - // But, calling here has same effect because |onCreatePreferences()| is called by onCreate(). + // But, calling here has same effect because |onCreatePreferences()| is called by + // onCreate(). SettingsUtils.addPreferencesFromResource(this, R.xml.brave_main_preferences); + initBraveAccount(); overrideChromiumPreferences(); initRateBrave(); setPreferenceListeners(); @@ -267,19 +271,29 @@ public abstract class BraveMainPreferencesBase extends BravePreferenceFragment } } - setPreferenceOrder(PREF_FEATURES_SECTION, ++firstSectionOrder); + int braveAccountSectionOrder = firstSectionOrder; + if (ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_ACCOUNT)) { + setPreferenceOrder(PREF_BRAVE_ACCOUNT_SECTION, ++braveAccountSectionOrder); + setPreferenceOrder(PREF_GET_STARTED, ++braveAccountSectionOrder); + } else { + removePreferenceIfPresent(PREF_BRAVE_ACCOUNT_SECTION); + removePreferenceIfPresent(PREF_GET_STARTED); + } - setPreferenceOrder(PREF_SHIELDS_AND_PRIVACY, ++firstSectionOrder); - setPreferenceOrder(PREF_BRAVE_NEWS_V2, ++firstSectionOrder); + int featuresSectionOrder = braveAccountSectionOrder; + setPreferenceOrder(PREF_FEATURES_SECTION, ++featuresSectionOrder); + + setPreferenceOrder(PREF_SHIELDS_AND_PRIVACY, ++featuresSectionOrder); + setPreferenceOrder(PREF_BRAVE_NEWS_V2, ++featuresSectionOrder); if (ChromeFeatureList.isEnabled(BraveFeatureList.NATIVE_BRAVE_WALLET)) { - setPreferenceOrder(PREF_BRAVE_WALLET, ++firstSectionOrder); + setPreferenceOrder(PREF_BRAVE_WALLET, ++featuresSectionOrder); } else { removePreferenceIfPresent(PREF_BRAVE_WALLET); } if (ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_PLAYLIST)) { - setPreferenceOrder(PREF_BRAVE_PLAYLIST, ++firstSectionOrder); + setPreferenceOrder(PREF_BRAVE_PLAYLIST, ++featuresSectionOrder); } else { removePreferenceIfPresent(PREF_BRAVE_PLAYLIST); } @@ -287,18 +301,18 @@ public abstract class BraveMainPreferencesBase extends BravePreferenceFragment if (getActivity() != null && !getActivity().isFinishing() && BraveVpnUtils.isVpnFeatureSupported(getActivity())) { - setPreferenceOrder(PREF_BRAVE_VPN, ++firstSectionOrder); + setPreferenceOrder(PREF_BRAVE_VPN, ++featuresSectionOrder); } else { removePreferenceIfPresent(PREF_BRAVE_VPN); } if (BraveLeoPrefUtils.isLeoEnabled()) { - setPreferenceOrder(PREF_BRAVE_LEO, ++firstSectionOrder); + setPreferenceOrder(PREF_BRAVE_LEO, ++featuresSectionOrder); } else { removePreferenceIfPresent(PREF_BRAVE_LEO); } - int generalOrder = firstSectionOrder; + int generalOrder = featuresSectionOrder; setPreferenceOrder(PREF_GENERAL_SECTION, ++generalOrder); setPreferenceOrder(PREF_BRAVE_SEARCH_ENGINES, ++generalOrder); @@ -444,6 +458,20 @@ public abstract class BraveMainPreferencesBase extends BravePreferenceFragment updateSummary(PREF_BRAVE_STATS, BraveStatsPreferences.getPreferenceSummary()); } + private void initBraveAccount() { + Preference getStartedPreference = findPreference(PREF_GET_STARTED); + if (getStartedPreference != null) { + getStartedPreference.setOnPreferenceClickListener( + new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + BraveAccountCustomTabActivity.show(getActivity()); + return true; + } + }); + } + } + private void overrideChromiumPreferences() { // Replace fragment. Preference shieldsAndPrivacyPreference = findPreference(PREF_SHIELDS_AND_PRIVACY); diff --git a/android/java/res/values/brave_styles.xml b/android/java/res/values/brave_styles.xml index f0e7e0d7082..97565733fa2 100644 --- a/android/java/res/values/brave_styles.xml +++ b/android/java/res/values/brave_styles.xml @@ -308,6 +308,10 @@ @anim/slide_out_bottom + +