@@ -25,7 +25,11 @@ public class AppPlugin extends Plugin {
2525 private static final String EVENT_RESUME = "resume" ;
2626 private boolean hasPausedEver = false ;
2727
28+ private OnBackPressedCallback onBackPressedCallback ;
29+
2830 public void load () {
31+ boolean disableBackButtonHandler = getConfig ().getBoolean ("disableBackButtonHandler" , false );
32+
2933 bridge
3034 .getApp ()
3135 .setStatusChangeListener (
@@ -44,22 +48,24 @@ public void load() {
4448 notifyListeners (EVENT_RESTORED_RESULT , result .getWrappedResult (), true );
4549 }
4650 );
47- OnBackPressedCallback callback = new OnBackPressedCallback (true ) {
48- @ Override
49- public void handleOnBackPressed () {
50- if (!hasListeners (EVENT_BACK_BUTTON )) {
51- if (bridge .getWebView ().canGoBack ()) {
52- bridge .getWebView ().goBack ();
51+ this .onBackPressedCallback =
52+ new OnBackPressedCallback (!disableBackButtonHandler ) {
53+ @ Override
54+ public void handleOnBackPressed () {
55+ if (!hasListeners (EVENT_BACK_BUTTON )) {
56+ if (bridge .getWebView ().canGoBack ()) {
57+ bridge .getWebView ().goBack ();
58+ }
59+ } else {
60+ JSObject data = new JSObject ();
61+ data .put ("canGoBack" , bridge .getWebView ().canGoBack ());
62+ notifyListeners (EVENT_BACK_BUTTON , data , true );
63+ bridge .triggerJSEvent ("backbutton" , "document" );
5364 }
54- } else {
55- JSObject data = new JSObject ();
56- data .put ("canGoBack" , bridge .getWebView ().canGoBack ());
57- notifyListeners (EVENT_BACK_BUTTON , data , true );
58- bridge .triggerJSEvent ("backbutton" , "document" );
5965 }
60- }
61- };
62- getActivity ().getOnBackPressedDispatcher ().addCallback (getActivity (), callback );
66+ };
67+
68+ getActivity ().getOnBackPressedDispatcher ().addCallback (getActivity (), this . onBackPressedCallback );
6369 }
6470
6571 @ PluginMethod
@@ -112,6 +118,19 @@ public void minimizeApp(PluginCall call) {
112118 call .resolve ();
113119 }
114120
121+ @ PluginMethod
122+ public void toggleBackButtonHandler (PluginCall call ) {
123+ if (this .onBackPressedCallback == null ) {
124+ call .reject ("onBackPressedCallback is not set" );
125+ return ;
126+ }
127+
128+ Boolean enabled = call .getBoolean ("enabled" );
129+
130+ this .onBackPressedCallback .setEnabled (enabled );
131+ call .resolve ();
132+ }
133+
115134 /**
116135 * Handle ACTION_VIEW intents to store a URL that was used to open the app
117136 * @param intent
0 commit comments