From 0734cdf5183a1a6c005ea41c2af954ab715d0abf Mon Sep 17 00:00:00 2001 From: Justin McCandless Date: Mon, 12 Jun 2023 13:31:28 -0700 Subject: [PATCH 1/6] Provide a default implementation to avoid needing to override setFrameworkHandlesBack --- .../io/flutter/embedding/android/FlutterFragment.java | 5 ----- .../android/io/flutter/plugin/platform/PlatformPlugin.java | 3 ++- 2 files changed, 2 insertions(+), 6 deletions(-) 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/plugin/platform/PlatformPlugin.java b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index 129e3318461fc..dd1601e179410 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -57,7 +57,8 @@ public interface PlatformPluginDelegate { */ boolean popSystemNavigator(); - void setFrameworkHandlesBack(boolean frameworkHandlesBacks); + default void setFrameworkHandlesBack(boolean frameworkHandlesBacks) { + } } @VisibleForTesting From 782eee50b1038d3a9559d8bcf70ef8ba894b6e3b Mon Sep 17 00:00:00 2001 From: Justin McCandless Date: Mon, 12 Jun 2023 13:39:19 -0700 Subject: [PATCH 2/6] Docs to explain the empty method --- .../android/io/flutter/plugin/platform/PlatformPlugin.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index dd1601e179410..71539b1dbfb12 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -57,6 +57,12 @@ public interface PlatformPluginDelegate { */ boolean popSystemNavigator(); + /** + * 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. + */ default void setFrameworkHandlesBack(boolean frameworkHandlesBacks) { } } From cb003af593f5b72b277a37f12f1d184dedec8674 Mon Sep 17 00:00:00 2001 From: Justin McCandless Date: Mon, 12 Jun 2023 13:40:04 -0700 Subject: [PATCH 3/6] Formatting --- .../android/io/flutter/plugin/platform/PlatformPlugin.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index 71539b1dbfb12..ae8c037e11303 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -60,11 +60,10 @@ public interface PlatformPluginDelegate { /** * 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 + *

Relevant for registering and unregistering the app's OnBackInvokedCallback for the * Predictive Back feature. */ - default void setFrameworkHandlesBack(boolean frameworkHandlesBacks) { - } + default void setFrameworkHandlesBack(boolean frameworkHandlesBacks) {} } @VisibleForTesting From 41b893dae4e3c1e92e9b4b55938cf295c171d879 Mon Sep 17 00:00:00 2001 From: Justin McCandless Date: Mon, 12 Jun 2023 13:47:08 -0700 Subject: [PATCH 4/6] frameworkHandlesBacks => frameworkHandlesBack --- .../io/flutter/embedding/android/FlutterActivity.java | 6 +++--- .../engine/systemchannels/PlatformChannel.java | 4 ++-- .../io/flutter/plugin/platform/PlatformPlugin.java | 10 +++++----- .../embedding/android/FlutterAndroidComponentTest.java | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) 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/engine/systemchannels/PlatformChannel.java b/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java index 2c0a3bf378a39..5a92988583413 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; } diff --git a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index ae8c037e11303..2895780482671 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -63,7 +63,7 @@ public interface PlatformPluginDelegate { *

Relevant for registering and unregistering the app's OnBackInvokedCallback for the * Predictive Back feature. */ - default void setFrameworkHandlesBack(boolean frameworkHandlesBacks) {} + default void setFrameworkHandlesBack(boolean frameworkHandlesBack) {} } @VisibleForTesting @@ -118,8 +118,8 @@ public void setSystemUiOverlayStyle( } @Override - public void setFrameworkHandlesBack(boolean frameworkHandlesBacks) { - PlatformPlugin.this.setFrameworkHandlesBack(frameworkHandlesBacks); + public void setFrameworkHandlesBack(boolean frameworkHandlesBack) { + PlatformPlugin.this.setFrameworkHandlesBack(frameworkHandlesBack); } @Override @@ -488,8 +488,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) {} } } From d701c984998731877350f9941b7d3be51b16cc63 Mon Sep 17 00:00:00 2001 From: Justin McCandless Date: Mon, 12 Jun 2023 13:54:50 -0700 Subject: [PATCH 5/6] Default implementation for source of error, too --- .../embedding/engine/systemchannels/PlatformChannel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5a92988583413..2b3a414d0652d 100644 --- a/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java +++ b/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java @@ -517,7 +517,7 @@ 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); + default void setFrameworkHandlesBack(boolean frameworkHandlesBack) {} /** * The Flutter application would like to pop the top item off of the Android app's navigation From ab5c5cd482d123ab24312cf9463b3ed6dca188bc Mon Sep 17 00:00:00 2001 From: Justin McCandless Date: Mon, 12 Jun 2023 15:00:17 -0700 Subject: [PATCH 6/6] Clarify docs --- .../embedding/engine/systemchannels/PlatformChannel.java | 8 +++++++- .../io/flutter/plugin/platform/PlatformPlugin.java | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) 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 2b3a414d0652d..06244b5b32f68 100644 --- a/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java +++ b/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java @@ -516,7 +516,13 @@ public interface PlatformMessageHandler { */ void setSystemUiOverlayStyle(@NonNull SystemChromeStyle systemUiOverlayStyle); - /** The Flutter application would or would not like to handle navigation pop events itself. */ + /** + * 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) {} /** diff --git a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java index 2895780482671..41ffa23853c7c 100644 --- a/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java +++ b/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java @@ -61,7 +61,8 @@ public interface PlatformPluginDelegate { * 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. + * Predictive Back feature, for example as in {@link + * io.flutter.embedding.android.FlutterActivity}. */ default void setFrameworkHandlesBack(boolean frameworkHandlesBack) {} }