Revert "Support basic back navigation in Android 13/API 33" (#36001) (#36063)
Co-authored-by: Casey Hillers <chillers@google.com>
diff --git a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java
index dd502a8..13137eb 100644
--- a/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java
+++ b/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java
@@ -35,8 +35,6 @@
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
-import android.window.OnBackInvokedCallback;
-import android.window.OnBackInvokedDispatcher;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
@@ -497,8 +495,6 @@
lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
- registerOnBackInvokedCallback();
-
configureWindowForTransparency();
setContentView(createFlutterView());
@@ -507,48 +503,6 @@
}
/**
- * Registers the callback with OnBackInvokedDispatcher to capture back navigation gestures and
- * pass them to the framework.
- *
- * <p>This replaces the deprecated onBackPressed method override in order to support API 33's
- * predictive back navigation feature.
- *
- * <p>The callback must be unregistered in order to prevent unpredictable behavior once outside
- * the Flutter app.
- */
- @VisibleForTesting
- public void registerOnBackInvokedCallback() {
- if (Build.VERSION.SDK_INT >= 33) {
- getOnBackInvokedDispatcher()
- .registerOnBackInvokedCallback(
- OnBackInvokedDispatcher.PRIORITY_DEFAULT, onBackInvokedCallback);
- }
- }
-
- /**
- * Unregisters the callback from OnBackInvokedDispatcher.
- *
- * <p>This should be called when the activity is no longer in use to prevent unpredictable
- * behavior such as being stuck and unable to press back.
- */
- @VisibleForTesting
- public void unregisterOnBackInvokedCallback() {
- if (Build.VERSION.SDK_INT >= 33) {
- getOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(onBackInvokedCallback);
- }
- }
-
- private final OnBackInvokedCallback onBackInvokedCallback =
- Build.VERSION.SDK_INT >= 33
- ? new OnBackInvokedCallback() {
- @Override
- public void onBackInvoked() {
- onBackPressed();
- }
- }
- : null;
-
- /**
* Switches themes for this {@code Activity} from the theme used to launch this {@code Activity}
* to a "normal theme" that is intended for regular {@code Activity} operation.
*
@@ -726,9 +680,7 @@
*
* <p>After calling, this activity should be disposed immediately and not be re-used.
*/
- @VisibleForTesting
- public void release() {
- unregisterOnBackInvokedCallback();
+ private void release() {
if (delegate != null) {
delegate.release();
delegate = null;
diff --git a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java
index 75d7abf..d6d1d30 100644
--- a/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java
+++ b/shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java
@@ -88,36 +88,6 @@
assertTrue(activity.findViewById(FlutterActivity.FLUTTER_VIEW_ID) instanceof FlutterView);
}
- // TODO(garyq): Robolectric does not yet support android api 33 yet. Switch to a robolectric
- // test that directly exercises the OnBackInvoked APIs when API 33 is supported.
- @Test
- @TargetApi(33)
- public void itRegistersOnBackInvokedCallbackOnCreate() {
- Intent intent = FlutterActivityWithReportFullyDrawn.createDefaultIntent(ctx);
- ActivityController<FlutterActivityWithReportFullyDrawn> activityController =
- Robolectric.buildActivity(FlutterActivityWithReportFullyDrawn.class, intent);
- FlutterActivityWithReportFullyDrawn activity = spy(activityController.get());
-
- activity.onCreate(null);
-
- verify(activity, times(1)).registerOnBackInvokedCallback();
- }
-
- // TODO(garyq): Robolectric does not yet support android api 33 yet. Switch to a robolectric
- // test that directly exercises the OnBackInvoked APIs when API 33 is supported.
- @Test
- @TargetApi(33)
- public void itUnregistersOnBackInvokedCallbackOnRelease() {
- Intent intent = FlutterActivityWithReportFullyDrawn.createDefaultIntent(ctx);
- ActivityController<FlutterActivityWithReportFullyDrawn> activityController =
- Robolectric.buildActivity(FlutterActivityWithReportFullyDrawn.class, intent);
- FlutterActivityWithReportFullyDrawn activity = spy(activityController.get());
-
- activity.release();
-
- verify(activity, times(1)).unregisterOnBackInvokedCallback();
- }
-
@Test
public void itCreatesDefaultIntentWithExpectedDefaults() {
Intent intent = FlutterActivity.createDefaultIntent(ctx);
@@ -626,14 +596,6 @@
}
}
- private class FlutterActivityWithMockBackInvokedHandling extends FlutterActivity {
- @Override
- public void registerOnBackInvokedCallback() {}
-
- @Override
- public void unregisterOnBackInvokedCallback() {}
- }
-
private static final class FakeFlutterPlugin
implements FlutterPlugin,
ActivityAware,
diff --git a/shell/platform/android/test_runner/build.gradle b/shell/platform/android/test_runner/build.gradle
index d1dfa4c..dfdf361 100644
--- a/shell/platform/android/test_runner/build.gradle
+++ b/shell/platform/android/test_runner/build.gradle
@@ -71,10 +71,10 @@
testImplementation "com.google.android.play:core:1.8.0"
testImplementation "com.ibm.icu:icu4j:69.1"
testImplementation "org.robolectric:robolectric:4.7.3"
- testImplementation "junit:junit:4.13.2"
- testImplementation "androidx.test.ext:junit:1.1.4-alpha07"
+ testImplementation "junit:junit:4.13"
+ testImplementation "androidx.test.ext:junit:1.1.3"
- def mockitoVersion = "4.7.0"
+ def mockitoVersion = "4.1.0"
testImplementation "org.mockito:mockito-core:$mockitoVersion"
testImplementation "org.mockito:mockito-inline:$mockitoVersion"
testImplementation "org.mockito:mockito-android:$mockitoVersion"