diff --git a/android/brave_java_resources.gni b/android/brave_java_resources.gni
index 6057e4ee680c..de8ee7f56852 100644
--- a/android/brave_java_resources.gni
+++ b/android/brave_java_resources.gni
@@ -792,6 +792,7 @@ brave_java_resources = [
"java/res/layout/brave_bottom_new_tab_button.xml",
"java/res/layout/brave_custom_tabs_toolbar.xml",
"java/res/layout/brave_dialog_preference.xml",
+ "java/res/layout/brave_exit_confirmation.xml",
"java/res/layout/brave_leo_reset_dialog.xml",
"java/res/layout/brave_news_card_menu.xml",
"java/res/layout/brave_news_load_new_content.xml",
diff --git a/android/java/org/chromium/chrome/browser/app/BraveActivity.java b/android/java/org/chromium/chrome/browser/app/BraveActivity.java
index 73afd9938b2b..578d5ddb28bf 100644
--- a/android/java/org/chromium/chrome/browser/app/BraveActivity.java
+++ b/android/java/org/chromium/chrome/browser/app/BraveActivity.java
@@ -11,6 +11,7 @@
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentSender;
import android.content.SharedPreferences;
@@ -22,6 +23,7 @@
import android.os.Handler;
import android.text.TextUtils;
import android.view.Gravity;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -401,7 +403,7 @@ public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) {
if (currentTab == null) {
return false;
} else if (id == R.id.exit_id) {
- ApplicationLifetime.terminate(false);
+ exitBrave();
} else if (id == R.id.set_default_browser) {
BraveSetDefaultBrowserUtils.showBraveSetDefaultBrowserDialog(BraveActivity.this, true);
} else if (id == R.id.brave_rewards_id) {
@@ -2469,4 +2471,29 @@ public MultiInstanceManager getMultiInstanceManager() {
BraveReflectionUtil.getField(
ChromeTabbedActivity.class, "mMultiInstanceManager", this);
}
+
+ private void exitBrave() {
+ LayoutInflater inflater =
+ (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflater.inflate(R.layout.brave_exit_confirmation, null);
+ DialogInterface.OnClickListener onClickListener =
+ (dialog, button) -> {
+ if (button == AlertDialog.BUTTON_POSITIVE) {
+ ApplicationLifetime.terminate(false);
+ } else {
+ dialog.dismiss();
+ }
+ };
+
+ AlertDialog.Builder alert =
+ new AlertDialog.Builder(this, R.style.ThemeOverlay_BrowserUI_AlertDialog);
+ AlertDialog alertDialog =
+ alert.setTitle(R.string.menu_exit)
+ .setView(view)
+ .setPositiveButton(R.string.brave_action_yes, onClickListener)
+ .setNegativeButton(R.string.brave_action_no, onClickListener)
+ .create();
+ alertDialog.getDelegate().setHandleNativeActionModesEnabled(false);
+ alertDialog.show();
+ }
}
diff --git a/android/java/res/layout/brave_exit_confirmation.xml b/android/java/res/layout/brave_exit_confirmation.xml
new file mode 100644
index 000000000000..b52cc63cbde8
--- /dev/null
+++ b/android/java/res/layout/brave_exit_confirmation.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
diff --git a/browser/ui/android/strings/android_brave_strings.grd b/browser/ui/android/strings/android_brave_strings.grd
index ab7b73866c01..cb2dd0fca9c8 100644
--- a/browser/ui/android/strings/android_brave_strings.grd
+++ b/browser/ui/android/strings/android_brave_strings.grd
@@ -4066,6 +4066,9 @@ If you don't accept this request, VPN will not reconnect and your internet conne
Show undo button when tabs are closed
+
+ Are you sure you want to exit Brave?
+