From 51f84f87da01e72f24958856905dc320c9f06b05 Mon Sep 17 00:00:00 2001 From: Casey Hillers Date: Fri, 14 Apr 2023 11:01:58 -0700 Subject: [PATCH] Revert "[Android] Send connectionClosed message when keyboard becomes invisible to ensure framework focus state is correct. (#40746)" This reverts commit c9adff6f4ea1964dcf27b589e3cf08be591d8ec6. --- .../systemchannels/TextInputChannel.java | 8 ----- .../ImeSyncDeferringInsetsCallback.java | 32 ------------------- .../plugin/editing/TextInputPlugin.java | 15 --------- .../plugin/editing/TextInputPluginTest.java | 13 -------- 4 files changed, 68 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/engine/systemchannels/TextInputChannel.java b/shell/platform/android/io/flutter/embedding/engine/systemchannels/TextInputChannel.java index 687d1f29a2a30..e0f95681f3b9c 100644 --- a/shell/platform/android/io/flutter/embedding/engine/systemchannels/TextInputChannel.java +++ b/shell/platform/android/io/flutter/embedding/engine/systemchannels/TextInputChannel.java @@ -367,14 +367,6 @@ public void performPrivateCommand( "TextInputClient.performPrivateCommand", Arrays.asList(inputClientId, json)); } - /** Instructs Flutter to execute a "onConnectionClosed" action. */ - public void onConnectionClosed(int inputClientId) { - Log.v(TAG, "Sending 'onConnectionClosed' message."); - channel.invokeMethod( - "TextInputClient.onConnectionClosed", - Arrays.asList(inputClientId, "TextInputClient.onConnectionClosed")); - } - /** * Sets the {@link TextInputMethodHandler} which receives all events and requests that are parsed * from the underlying platform channel. diff --git a/shell/platform/android/io/flutter/plugin/editing/ImeSyncDeferringInsetsCallback.java b/shell/platform/android/io/flutter/plugin/editing/ImeSyncDeferringInsetsCallback.java index e33aed5d41552..0a6f0ef3f64db 100644 --- a/shell/platform/android/io/flutter/plugin/editing/ImeSyncDeferringInsetsCallback.java +++ b/shell/platform/android/io/flutter/plugin/editing/ImeSyncDeferringInsetsCallback.java @@ -14,8 +14,6 @@ import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; import java.util.List; // Loosely based off of @@ -56,7 +54,6 @@ class ImeSyncDeferringInsetsCallback { private WindowInsets lastWindowInsets; private AnimationCallback animationCallback; private InsetsListener insetsListener; - private ImeVisibleListener imeVisibleListener; // True when an animation that matches deferredInsetTypes is active. // @@ -91,11 +88,6 @@ void remove() { view.setOnApplyWindowInsetsListener(null); } - // Set a listener to be notified when the IME visibility changes. - void setImeVisibleListener(ImeVisibleListener imeVisibleListener) { - this.imeVisibleListener = imeVisibleListener; - } - @VisibleForTesting View.OnApplyWindowInsetsListener getInsetsListener() { return insetsListener; @@ -106,11 +98,6 @@ WindowInsetsAnimation.Callback getAnimationCallback() { return animationCallback; } - @VisibleForTesting - ImeVisibleListener getImeVisibleListener() { - return imeVisibleListener; - } - // WindowInsetsAnimation.Callback was introduced in API level 30. The callback // subclass is separated into an inner class in order to avoid warnings from // the Android class loader on older platforms. @@ -128,20 +115,6 @@ public void onPrepare(WindowInsetsAnimation animation) { } } - @NonNull - @Override - public WindowInsetsAnimation.Bounds onStart( - @NonNull WindowInsetsAnimation animation, @NonNull WindowInsetsAnimation.Bounds bounds) { - // Observe changes to software keyboard visibility and notify listener when animation start. - // See https://developer.android.com/develop/ui/views/layout/sw-keyboard. - WindowInsetsCompat insets = ViewCompat.getRootWindowInsets(view); - if (insets != null && imeVisibleListener != null) { - boolean imeVisible = insets.isVisible(WindowInsetsCompat.Type.ime()); - imeVisibleListener.onImeVisibleChanged(imeVisible); - } - return super.onStart(animation, bounds); - } - @Override public WindowInsets onProgress( WindowInsets insets, List runningAnimations) { @@ -226,9 +199,4 @@ public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) { return view.onApplyWindowInsets(windowInsets); } } - - // Listener for IME visibility changes. - public interface ImeVisibleListener { - void onImeVisibleChanged(boolean visible); - } } diff --git a/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java b/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java index 042d3d2070c4f..10cbc1b65cb61 100644 --- a/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java +++ b/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java @@ -94,17 +94,6 @@ public TextInputPlugin( WindowInsets.Type.ime() // Deferred, insets that will animate ); imeSyncCallback.install(); - - // When the IME is hidden, we need to notify the framework that close connection. - imeSyncCallback.setImeVisibleListener( - new ImeSyncDeferringInsetsCallback.ImeVisibleListener() { - @Override - public void onImeVisibleChanged(boolean visible) { - if (!visible) { - onConnectionClosed(); - } - } - }); } this.textInputChannel = textInputChannel; @@ -849,8 +838,4 @@ public void autofill(@NonNull SparseArray values) { textInputChannel.updateEditingStateWithTag(inputTarget.id, editingValues); } // -------- End: Autofill ------- - - public void onConnectionClosed() { - textInputChannel.onConnectionClosed(inputTarget.id); - } } diff --git a/shell/platform/android/test/io/flutter/plugin/editing/TextInputPluginTest.java b/shell/platform/android/test/io/flutter/plugin/editing/TextInputPluginTest.java index 9459a5701f657..462b6ec2ff808 100644 --- a/shell/platform/android/test/io/flutter/plugin/editing/TextInputPluginTest.java +++ b/shell/platform/android/test/io/flutter/plugin/editing/TextInputPluginTest.java @@ -2118,19 +2118,6 @@ public void ime_windowInsetsSync() { assertEquals(0, viewportMetricsCaptor.getValue().viewInsetTop); } - @Test - @TargetApi(30) - @Config(sdk = 30) - public void onConnectionClosed_imeInvisible() { - View testView = new View(ctx); - TextInputChannel textInputChannel = spy(new TextInputChannel(mock(DartExecutor.class))); - TextInputPlugin textInputPlugin = - new TextInputPlugin(testView, textInputChannel, mock(PlatformViewsController.class)); - ImeSyncDeferringInsetsCallback imeSyncCallback = textInputPlugin.getImeSyncCallback(); - imeSyncCallback.getImeVisibleListener().onImeVisibleChanged(false); - verify(textInputChannel, times(1)).onConnectionClosed(anyInt()); - } - interface EventHandler { void sendAppPrivateCommand(View view, String action, Bundle data); }