From 2cfff090f4bfdcff8b7292015b49cb770cc202bb Mon Sep 17 00:00:00 2001 From: Deep Pandya <5146988+deeppandya@users.noreply.github.com> Date: Sun, 13 Apr 2025 17:16:06 -0400 Subject: [PATCH] Update changes for always on to auto reconnect (#28615) * Update changes for always on to auto reconnect * ADd quotes to hightlight Block connections without VPN --- android/brave_java_resources.gni | 4 +- .../vpn/activities/VpnAlwaysOnActivity.java | 19 +++--- .../vpn/adapters/AlwaysOnPagerAdapter.java | 58 ++++++++++++++----- .../vpn/settings/BraveVpnPreferences.java | 8 +-- .../browser/vpn/utils/BraveVpnUtils.java | 6 +- ...on.xml => activity_auto_reconnect_vpn.xml} | 8 +-- ...uto_reconnect_vpn_tutorial_item_layout.xml | 53 +++++++++++++++++ .../kill_switch_tutorial_item_layout.xml | 39 ------------- .../java/res/xml/brave_vpn_preferences.xml | 4 +- .../android/strings/android_brave_strings.grd | 17 +++--- 10 files changed, 133 insertions(+), 83 deletions(-) rename android/java/res/layout/{activity_vpn_always_on.xml => activity_auto_reconnect_vpn.xml} (89%) create mode 100644 android/java/res/layout/auto_reconnect_vpn_tutorial_item_layout.xml delete mode 100644 android/java/res/layout/kill_switch_tutorial_item_layout.xml diff --git a/android/brave_java_resources.gni b/android/brave_java_resources.gni index a8fea619fb3..226ff052f23 100644 --- a/android/brave_java_resources.gni +++ b/android/brave_java_resources.gni @@ -714,6 +714,7 @@ brave_java_resources = [ "java/res/layout/activity_account_selector.xml", "java/res/layout/activity_add_account.xml", "java/res/layout/activity_advance_tx_setting.xml", + "java/res/layout/activity_auto_reconnect_vpn.xml", "java/res/layout/activity_brave_leo_plans.xml", "java/res/layout/activity_brave_vpn_profile.xml", "java/res/layout/activity_brave_vpn_support.xml", @@ -725,13 +726,13 @@ brave_java_resources = [ "java/res/layout/activity_split_tunnel.xml", "java/res/layout/activity_tipping_banner_mobile.xml", "java/res/layout/activity_tipping_banner_tablet.xml", - "java/res/layout/activity_vpn_always_on.xml", "java/res/layout/activity_vpn_paywall.xml", "java/res/layout/activity_vpn_server.xml", "java/res/layout/activity_vpn_server_selection.xml", "java/res/layout/activity_welcome_onboarding.xml", "java/res/layout/application_item_layout.xml", "java/res/layout/approve_tx_bottom_sheet.xml", + "java/res/layout/auto_reconnect_vpn_tutorial_item_layout.xml", "java/res/layout/bottom_toolbar.xml", "java/res/layout/bottom_toolbar_browsing.xml", "java/res/layout/bottom_toolbar_menu_button.xml", @@ -879,7 +880,6 @@ brave_java_resources = [ "java/res/layout/item_news_settings.xml", "java/res/layout/item_news_settings_section.xml", "java/res/layout/item_two_line_horizontal.xml", - "java/res/layout/kill_switch_tutorial_item_layout.xml", "java/res/layout/label_network_selector.xml", "java/res/layout/layout_search_widget_promo.xml", "java/res/layout/location_status_incognito_badge.xml", diff --git a/android/java/org/chromium/chrome/browser/vpn/activities/VpnAlwaysOnActivity.java b/android/java/org/chromium/chrome/browser/vpn/activities/VpnAlwaysOnActivity.java index 7b8bc583f83..89bce638f98 100644 --- a/android/java/org/chromium/chrome/browser/vpn/activities/VpnAlwaysOnActivity.java +++ b/android/java/org/chromium/chrome/browser/vpn/activities/VpnAlwaysOnActivity.java @@ -24,24 +24,27 @@ import org.chromium.chrome.browser.vpn.utils.BraveVpnUtils; public class VpnAlwaysOnActivity extends AsyncInitializationActivity { private void initializeViews() { - setContentView(R.layout.activity_vpn_always_on); + setContentView(R.layout.activity_auto_reconnect_vpn); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); assert actionBar != null; actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setTitle(getResources().getString(R.string.always_on_vpn)); + actionBar.setTitle(getResources().getString(R.string.auto_reconnect_vpn)); - ViewPager killSwitchTutorialViewPager = findViewById(R.id.kill_switch_tutorial_view_pager); + ViewPager autoReconnectVpnTutorialViewPager = + findViewById(R.id.auto_reconnect_vpn_tutorial_view_pager); AlwaysOnPagerAdapter alwaysOnPagerAdapter = new AlwaysOnPagerAdapter(this); - killSwitchTutorialViewPager.setAdapter(alwaysOnPagerAdapter); - TabLayout killSwitchTutorialTabLayout = findViewById(R.id.kill_switch_tutorial_tab_layout); - killSwitchTutorialTabLayout.setupWithViewPager(killSwitchTutorialViewPager, true); + autoReconnectVpnTutorialViewPager.setAdapter(alwaysOnPagerAdapter); + TabLayout autoReconnectVpnTutorialTabLayout = + findViewById(R.id.auto_reconnect_vpn_tutorial_tab_layout); + autoReconnectVpnTutorialTabLayout.setupWithViewPager( + autoReconnectVpnTutorialViewPager, true); - Button killSwitchTutorialAction = findViewById(R.id.kill_switch_action_button); - killSwitchTutorialAction.setOnClickListener( + Button autoReconnectVpnAction = findViewById(R.id.auto_reconnect_vpn_action_button); + autoReconnectVpnAction.setOnClickListener( v -> { BraveVpnUtils.openVpnSettings(VpnAlwaysOnActivity.this); }); diff --git a/android/java/org/chromium/chrome/browser/vpn/adapters/AlwaysOnPagerAdapter.java b/android/java/org/chromium/chrome/browser/vpn/adapters/AlwaysOnPagerAdapter.java index 49249d93861..bc02c0ae7d7 100644 --- a/android/java/org/chromium/chrome/browser/vpn/adapters/AlwaysOnPagerAdapter.java +++ b/android/java/org/chromium/chrome/browser/vpn/adapters/AlwaysOnPagerAdapter.java @@ -8,6 +8,7 @@ package org.chromium.chrome.browser.vpn.adapters; import android.annotation.SuppressLint; import android.content.Context; import android.text.SpannableString; +import android.text.method.LinkMovementMethod; import android.text.style.StyleSpan; import android.view.LayoutInflater; import android.view.View; @@ -19,6 +20,8 @@ import androidx.annotation.NonNull; import androidx.viewpager.widget.PagerAdapter; import org.chromium.chrome.R; +import org.chromium.chrome.browser.customtabs.CustomTabActivity; +import org.chromium.ui.text.ChromeClickableSpan; import org.chromium.ui.text.SpanApplier; import org.chromium.ui.text.SpanApplier.SpanInfo; @@ -27,6 +30,10 @@ import java.util.List; public class AlwaysOnPagerAdapter extends PagerAdapter { private Context mContext; + + private static final String AUTO_RECONNECT_VPN_LINK = + "https://support.brave.com/hc/en-us/articles/29918727663373-How-do-I-connect-to-Brave-VPN-automatically#tab-2"; + private List mImageResources = Arrays.asList( R.drawable.ic_vpn_always_on_1, @@ -34,9 +41,10 @@ public class AlwaysOnPagerAdapter extends PagerAdapter { R.drawable.ic_vpn_always_on_3); private List mTexts = Arrays.asList( - R.string.kill_switch_tutorial_text_1, - R.string.kill_switch_tutorial_text_2, - R.string.kill_switch_tutorial_text_3); + R.string.auto_reconnect_vpn_tutorial_text_1, + R.string.auto_reconnect_vpn_tutorial_text_2, + R.string.auto_reconnect_vpn_tutorial_text_3, + R.string.auto_reconnect_vpn_tutorial_text_4); public AlwaysOnPagerAdapter(Context context) { this.mContext = context; @@ -48,26 +56,48 @@ public class AlwaysOnPagerAdapter extends PagerAdapter { @SuppressLint("InflateParams") View view = LayoutInflater.from(mContext) - .inflate(R.layout.kill_switch_tutorial_item_layout, null); - TextView killSwitchTutorialText = view.findViewById(R.id.kill_switch_tutorial_text); - String killSwitchText = mContext.getResources().getString(mTexts.get(position)); + .inflate(R.layout.auto_reconnect_vpn_tutorial_item_layout, null); + TextView autoReconnectVpnTutorialText = + view.findViewById(R.id.auto_reconnect_vpn_tutorial_text); + String autoReconnectVpnText = mContext.getResources().getString(mTexts.get(position)); + TextView autoReconnectVpnTutorialWarningText = + view.findViewById(R.id.auto_reconnect_vpn_tutorial_warning_text); if (position == 2) { SpannableString tutorialSpannableString = SpanApplier.applySpans( - killSwitchText, + autoReconnectVpnText, new SpanInfo( - "", - "", + "", + "", null, new StyleSpan(android.graphics.Typeface.BOLD))); - killSwitchTutorialText.setText(tutorialSpannableString); + autoReconnectVpnTutorialText.setText(tutorialSpannableString); + + String autoReconnectVpnWarningText = + mContext.getResources().getString(mTexts.get(position + 1)); + ChromeClickableSpan learnMoreClickableSpan = + new ChromeClickableSpan( + mContext, + R.color.brave_blue_tint_color, + (textView) -> { + CustomTabActivity.showInfoPage(mContext, AUTO_RECONNECT_VPN_LINK); + }); + SpannableString learnMoreSpannableString = + SpanApplier.applySpans( + autoReconnectVpnWarningText, + new SpanInfo("", "", learnMoreClickableSpan)); + + autoReconnectVpnTutorialWarningText.setVisibility(View.VISIBLE); + autoReconnectVpnTutorialWarningText.setMovementMethod(LinkMovementMethod.getInstance()); + autoReconnectVpnTutorialWarningText.setText(learnMoreSpannableString); } else { - killSwitchTutorialText.setText(killSwitchText); + autoReconnectVpnTutorialText.setText(autoReconnectVpnText); } - ImageView killSwitchTutorialImage = view.findViewById(R.id.kill_switch_tutorial_image); - int killSwitchImage = mImageResources.get(position); - killSwitchTutorialImage.setImageResource(killSwitchImage); + ImageView autoReconnectVpnTutorialImage = + view.findViewById(R.id.auto_reconnect_vpn_tutorial_image); + int autoReconnectVpnImage = mImageResources.get(position); + autoReconnectVpnTutorialImage.setImageResource(autoReconnectVpnImage); collection.addView(view); return view; diff --git a/android/java/org/chromium/chrome/browser/vpn/settings/BraveVpnPreferences.java b/android/java/org/chromium/chrome/browser/vpn/settings/BraveVpnPreferences.java index ae0fe6e5972..d346965f44d 100644 --- a/android/java/org/chromium/chrome/browser/vpn/settings/BraveVpnPreferences.java +++ b/android/java/org/chromium/chrome/browser/vpn/settings/BraveVpnPreferences.java @@ -71,7 +71,7 @@ public class BraveVpnPreferences extends BravePreferenceFragment implements Brav public static final String PREF_SUPPORT_VPN = "support_vpn"; public static final String PREF_SERVER_RESET_CONFIGURATION = "server_reset_configuration"; private static final String PREF_SPLIT_TUNNELING = "split_tunneling"; - private static final String PREF_ALWAYS_ON = "always_on"; + private static final String PREF_AUTO_RECONNECT_VPN = "auto_reconnect_vpn"; private static final String PREF_BRAVE_VPN_SUBSCRIPTION_SECTION = "brave_vpn_subscription_section"; @@ -188,12 +188,12 @@ public class BraveVpnPreferences extends BravePreferenceFragment implements Brav return true; } }); - findPreference(PREF_ALWAYS_ON) + findPreference(PREF_AUTO_RECONNECT_VPN) .setOnPreferenceClickListener( new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { - BraveVpnUtils.openAlwaysOnActivity(getActivity()); + BraveVpnUtils.openAutoReconnectVpnActivity(getActivity()); return true; } }); @@ -318,7 +318,7 @@ public class BraveVpnPreferences extends BravePreferenceFragment implements Brav .setEnabled( BraveVpnPrefUtils .isSubscriptionPurchase()); - findPreference(PREF_ALWAYS_ON) + findPreference(PREF_AUTO_RECONNECT_VPN) .setEnabled( BraveVpnPrefUtils .isSubscriptionPurchase()); diff --git a/android/java/org/chromium/chrome/browser/vpn/utils/BraveVpnUtils.java b/android/java/org/chromium/chrome/browser/vpn/utils/BraveVpnUtils.java index a86712ad671..346e7f6f943 100644 --- a/android/java/org/chromium/chrome/browser/vpn/utils/BraveVpnUtils.java +++ b/android/java/org/chromium/chrome/browser/vpn/utils/BraveVpnUtils.java @@ -102,12 +102,12 @@ public class BraveVpnUtils { activity.startActivity(braveVpnSupportIntent); } - public static void openAlwaysOnActivity(Activity activity) { + public static void openAutoReconnectVpnActivity(Activity activity) { if (activity == null) { return; } - Intent vpnAlwaysOnActivityIntent = new Intent(activity, VpnAlwaysOnActivity.class); - activity.startActivity(vpnAlwaysOnActivityIntent); + Intent autoReconnectVpnActivityIntent = new Intent(activity, VpnAlwaysOnActivity.class); + activity.startActivity(autoReconnectVpnActivityIntent); } public static void openVpnSettings(Activity activity) { diff --git a/android/java/res/layout/activity_vpn_always_on.xml b/android/java/res/layout/activity_auto_reconnect_vpn.xml similarity index 89% rename from android/java/res/layout/activity_vpn_always_on.xml rename to android/java/res/layout/activity_auto_reconnect_vpn.xml index 62c72cb8acd..7bba702bd6c 100644 --- a/android/java/res/layout/activity_vpn_always_on.xml +++ b/android/java/res/layout/activity_auto_reconnect_vpn.xml @@ -23,14 +23,14 @@ android:minHeight="?attr/actionBarSize"/> diff --git a/android/java/res/layout/auto_reconnect_vpn_tutorial_item_layout.xml b/android/java/res/layout/auto_reconnect_vpn_tutorial_item_layout.xml new file mode 100644 index 00000000000..af5ae017096 --- /dev/null +++ b/android/java/res/layout/auto_reconnect_vpn_tutorial_item_layout.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + diff --git a/android/java/res/layout/kill_switch_tutorial_item_layout.xml b/android/java/res/layout/kill_switch_tutorial_item_layout.xml deleted file mode 100644 index f6a577267d6..00000000000 --- a/android/java/res/layout/kill_switch_tutorial_item_layout.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - diff --git a/android/java/res/xml/brave_vpn_preferences.xml b/android/java/res/xml/brave_vpn_preferences.xml index 439e02966e2..096984fd787 100644 --- a/android/java/res/xml/brave_vpn_preferences.xml +++ b/android/java/res/xml/brave_vpn_preferences.xml @@ -40,8 +40,8 @@ android:key="server_change_location"/> + android:key="auto_reconnect_vpn" + android:title="@string/auto_reconnect_vpn"/> Please merge other tabs to another Brave window. - - Always-on VPN + + Auto re-connect VPN How to turn on: - + 1. Open your device's settings from your app drawer or tapping the button below. - + 2. Find Brave VPN and tap on the settings icon to the right. - - 3. Toggle <always_on_tutorial>Always-on VPN</always_on_tutorial> to enable it. + + 3. Toggle <auto_reconnect_vpn_tutorial>Always-on VPN</auto_reconnect_vpn_tutorial> to enable it. - + + Note that because of Android limitations, "Block connections without VPN" doesn't work as expected. <learn_more>Learn more.</learn_more> + + Open Android settings