diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java index d5ffa971c5f74..abbedeb4ddd18 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java @@ -701,10 +701,10 @@ public void onBackInvoked() { : null; @Override - public void setFrameworkHandlesBack(boolean frameworkHandlesBacks) { - if (frameworkHandlesBacks && !hasRegisteredBackCallback) { + public void setFrameworkHandlesBack(boolean frameworkHandlesBack) { + if (frameworkHandlesBack && !hasRegisteredBackCallback) { registerOnBackInvokedCallback(); - } else if (!frameworkHandlesBacks && hasRegisteredBackCallback) { + } else if (!frameworkHandlesBack && hasRegisteredBackCallback) { unregisterOnBackInvokedCallback(); } } diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterFragment.java b/shell/platform/android/io/flutter/embedding/android/FlutterFragment.java index ad1de8c698fd0..85ce3ade38fb0 100644 --- a/shell/platform/android/io/flutter/embedding/android/FlutterFragment.java +++ b/shell/platform/android/io/flutter/embedding/android/FlutterFragment.java @@ -1689,11 +1689,6 @@ boolean shouldDelayFirstAndroidViewDraw() { return getArguments().getBoolean(ARG_SHOULD_DELAY_FIRST_ANDROID_VIEW_DRAW); } - @Override - public void setFrameworkHandlesBack(boolean frameworkHandlesBacks) { - // Irrelevant to FlutterFragment. - } - private boolean stillAttachedForEvent(String event) { if (delegate == null) { Log.w(TAG, "FlutterFragment " + hashCode() + " " + event + " called after release."); diff --git a/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java b/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java index 2c0a3bf378a39..06244b5b32f68 100644 --- a/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java +++ b/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java @@ -138,8 +138,8 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result break; case "SystemNavigator.setFrameworkHandlesBack": { - boolean frameworkHandlesBacks = (boolean) arguments; - platformMessageHandler.setFrameworkHandlesBack(frameworkHandlesBacks); + boolean frameworkHandlesBack = (boolean) arguments; + platformMessageHandler.setFrameworkHandlesBack(frameworkHandlesBack); result.success(null); break; } @@ -516,8 +516,14 @@ public interface PlatformMessageHandler { */ void setSystemUiOverlayStyle(@NonNull SystemChromeStyle systemUiOverlayStyle); - /** The Flutter application would or would not like to handle navigation pop events itself. */ - void setFrameworkHandlesBack(boolean frameworkHandlesBack); + /** + * The Flutter application would or would not like to handle navigation pop events itself. + * + *

Relevant for registering and unregistering the app's OnBackInvokedCallback for the + * Predictive Back feature, for example as in {@link + * io.flutter.embedding.android.FlutterActivity}. + */ + default void setFrameworkHandlesBack(boolean frameworkHandlesBack) {} /** * The Flutter application would like to pop the top item off of the Android app's navigation diff --git a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index 129e3318461fc..41ffa23853c7c 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -57,7 +57,14 @@ public interface PlatformPluginDelegate { */ boolean popSystemNavigator(); - void setFrameworkHandlesBack(boolean frameworkHandlesBacks); + /** + * The Flutter application would or would not like to handle navigation pop events itself. + * + *

Relevant for registering and unregistering the app's OnBackInvokedCallback for the + * Predictive Back feature, for example as in {@link + * io.flutter.embedding.android.FlutterActivity}. + */ + default void setFrameworkHandlesBack(boolean frameworkHandlesBack) {} } @VisibleForTesting @@ -112,8 +119,8 @@ public void setSystemUiOverlayStyle( } @Override - public void setFrameworkHandlesBack(boolean frameworkHandlesBacks) { - PlatformPlugin.this.setFrameworkHandlesBack(frameworkHandlesBacks); + public void setFrameworkHandlesBack(boolean frameworkHandlesBack) { + PlatformPlugin.this.setFrameworkHandlesBack(frameworkHandlesBack); } @Override @@ -482,8 +489,8 @@ private void setSystemChromeSystemUIOverlayStyle( currentTheme = systemChromeStyle; } - private void setFrameworkHandlesBack(boolean frameworkHandlesBacks) { - platformPluginDelegate.setFrameworkHandlesBack(frameworkHandlesBacks); + private void setFrameworkHandlesBack(boolean frameworkHandlesBack) { + platformPluginDelegate.setFrameworkHandlesBack(frameworkHandlesBack); } private void popSystemNavigator() { diff --git a/shell/platform/android/test/io/flutter/embedding/android/FlutterAndroidComponentTest.java b/shell/platform/android/test/io/flutter/embedding/android/FlutterAndroidComponentTest.java index b7f9d9060dcfd..137ab26d42272 100644 --- a/shell/platform/android/test/io/flutter/embedding/android/FlutterAndroidComponentTest.java +++ b/shell/platform/android/test/io/flutter/embedding/android/FlutterAndroidComponentTest.java @@ -419,6 +419,6 @@ public boolean popSystemNavigator() { } @Override - public void setFrameworkHandlesBack(boolean frameworkHandlesBacks) {} + public void setFrameworkHandlesBack(boolean frameworkHandlesBack) {} } }