diff --git a/engine/src/flutter/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java b/engine/src/flutter/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java index d0562be102..033ea576b1 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/embedding/android/FlutterFragmentActivity.java @@ -620,6 +620,15 @@ public class FlutterFragmentActivity extends FragmentActivity super.onNewIntent(intent); } + // Intentionally missing super call to align FlutterFragmentActivity predictive back behavior + // with FlutterActivity, with respect to how it responds to the + // android:enableOnBackInvokedCallback manifest property. + @Override + @SuppressWarnings("MissingSuperCall") + public void onBackPressed() { + flutterFragment.onBackPressed(); + } + @Override public void onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { diff --git a/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java b/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java index 73274cbce9..f25b134137 100644 --- a/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java +++ b/engine/src/flutter/shell/platform/android/test/io/flutter/embedding/android/FlutterFragmentActivityTest.java @@ -13,6 +13,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.annotation.TargetApi; @@ -299,6 +300,23 @@ public class FlutterFragmentActivityTest { flutterFragmentActivityActivityScenario.close(); } + @Test + @Config(minSdk = Build.API_LEVELS.API_34) + @TargetApi(Build.API_LEVELS.API_34) + public void onBackPressedCallsGetForwardedToFragment() { + FlutterFragmentActivityWithProvidedEngine activity = + spy(Robolectric.buildActivity(FlutterFragmentActivityWithProvidedEngine.class).get()); + + FlutterFragment fragment = mock(FlutterFragment.class); + when(activity.retrieveExistingFlutterFragmentIfPossible()).thenReturn(null, fragment); + FlutterEngine engine = mock(FlutterEngine.class); + when(fragment.getFlutterEngine()).thenReturn(engine); + activity.onCreate(null); + + activity.onBackPressed(); + verify(fragment).onBackPressed(); + } + @Test @Config(minSdk = Build.API_LEVELS.API_34) @TargetApi(Build.API_LEVELS.API_34)