diff --git a/.cirrus.yml b/.cirrus.yml
index ca1d651..75ec95d 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -1,4 +1,4 @@
-gcp_credentials: ENCRYPTED[a4b6c1cb428a657573b775d39dd8006beed3013d01ca3d1a3972bdc2bd39bb937dd91ea3d98eeb9ce55e4bd303d045d3]
+gcp_credentials: ENCRYPTED[!0e63b52bd7e4fda1cd7b7bf2b4fe515a27fadbeaced01f5ad8b699b81d3611ed64c5d3271bcd8426dd914ef41cba48a0!]
 
 # LINUX
 task:
diff --git a/DEPS b/DEPS
index f066566..ca210b9 100644
--- a/DEPS
+++ b/DEPS
@@ -35,7 +35,7 @@
   # Dart is: https://github.com/dart-lang/sdk/blob/master/DEPS.
   # You can use //tools/dart/create_updated_flutter_deps.py to produce
   # updated revision list of existing dependencies.
-  'dart_revision': '516eb3b05c252ef3d34255d06700c1f09f7f4502',
+  'dart_revision': '065872e802209ffa97aa3fad204758830b6100a0',
 
   # WARNING: DO NOT EDIT MANUALLY
   # The lines between blank lines above and below are generated by a script. See create_updated_flutter_deps.py
diff --git a/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java b/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java
index 0b68c27..843b24e 100644
--- a/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java
+++ b/shell/platform/android/io/flutter/plugin/editing/InputConnectionAdaptor.java
@@ -4,13 +4,11 @@
 
 package io.flutter.plugin.editing;
 
-import android.annotation.SuppressLint;
 import android.content.ClipData;
 import android.content.ClipboardManager;
 import android.content.Context;
 import android.os.Build;
 import android.os.Bundle;
-import android.provider.Settings;
 import android.text.DynamicLayout;
 import android.text.Editable;
 import android.text.InputType;
@@ -25,7 +23,6 @@
 import android.view.inputmethod.ExtractedText;
 import android.view.inputmethod.ExtractedTextRequest;
 import android.view.inputmethod.InputMethodManager;
-import android.view.inputmethod.InputMethodSubtype;
 import io.flutter.Log;
 import io.flutter.embedding.android.AndroidKeyProcessor;
 import io.flutter.embedding.engine.FlutterJNI;
@@ -48,6 +45,8 @@
   private InputMethodManager mImm;
   private final Layout mLayout;
   private FlutterTextUtils flutterTextUtils;
+  private final KeyboardManager keyboardManager;
+  private int batchEditNestDepth = 0;
 
   @SuppressWarnings("deprecation")
   public InputConnectionAdaptor(
@@ -135,12 +134,14 @@
   @Override
   public boolean beginBatchEdit() {
     mEditable.beginBatchEdit();
+    batchEditNestDepth += 1;
     return super.beginBatchEdit();
   }
 
   @Override
   public boolean endBatchEdit() {
     boolean result = super.endBatchEdit();
+    batchEditNestDepth -= 1;
     mEditable.endBatchEdit();
     return result;
   }
@@ -238,27 +239,9 @@
   public void closeConnection() {
     super.closeConnection();
     mEditable.removeEditingStateListener(this);
-  }
-
-  // Detect if the keyboard is a Samsung keyboard, where we apply Samsung-specific hacks to
-  // fix critical bugs that make the keyboard otherwise unusable. See finishComposingText() for
-  // more details.
-  @SuppressLint("NewApi") // New API guard is inline, the linter can't see it.
-  @SuppressWarnings("deprecation")
-  private boolean isSamsung() {
-    InputMethodSubtype subtype = mImm.getCurrentInputMethodSubtype();
-    // Impacted devices all shipped with Android Lollipop or newer.
-    if (subtype == null
-        || Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP
-        || !Build.MANUFACTURER.equals("samsung")) {
-      return false;
+    for (; batchEditNestDepth > 0; batchEditNestDepth--) {
+      endBatchEdit();
     }
-    String keyboardName =
-        Settings.Secure.getString(
-            mFlutterView.getContext().getContentResolver(), Settings.Secure.DEFAULT_INPUT_METHOD);
-    // The Samsung keyboard is called "com.sec.android.inputmethod/.SamsungKeypad" but look
-    // for "Samsung" just in case Samsung changes the name of the keyboard.
-    return keyboardName.contains("Samsung");
   }
 
   @Override
diff --git a/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java b/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java
index b59f8e3..e35578f 100644
--- a/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java
+++ b/shell/platform/android/io/flutter/plugin/editing/TextInputPlugin.java
@@ -441,9 +441,7 @@
       // to reset their internal states.
       mRestartInputPending = composingChanged(mLastKnownFrameworkTextEditingState, state);
       if (mRestartInputPending) {
-        Log.w(
-            TAG,
-            "Changing the content within the the composing region may cause the input method to behave strangely, and is therefore discouraged. See https://github.com/flutter/flutter/issues/78827 for more details");
+        Log.i(TAG, "Composing region changed by the framework. Restarting the input method.");
       }
     }
 
diff --git a/shell/platform/android/test/io/flutter/plugin/editing/InputConnectionAdaptorTest.java b/shell/platform/android/test/io/flutter/plugin/editing/InputConnectionAdaptorTest.java
index a0f98f9..d90e342 100644
--- a/shell/platform/android/test/io/flutter/plugin/editing/InputConnectionAdaptorTest.java
+++ b/shell/platform/android/test/io/flutter/plugin/editing/InputConnectionAdaptorTest.java
@@ -1115,6 +1115,19 @@
     assertFalse(didConsume);
   }
 
+  @Test
+  public void testCleanUpBatchEndsOnCloseConnection() {
+    final ListenableEditingState editable = sampleEditable(0, 0);
+    InputConnectionAdaptor adaptor = spy(sampleInputConnectionAdaptor(editable));
+    for (int i = 0; i < 5; i++) {
+      adaptor.beginBatchEdit();
+    }
+    adaptor.endBatchEdit();
+    verify(adaptor, times(1)).endBatchEdit();
+    adaptor.closeConnection();
+    verify(adaptor, times(4)).endBatchEdit();
+  }
+
   private static final String SAMPLE_TEXT =
       "Lorem ipsum dolor sit amet," + "\nconsectetur adipiscing elit.";
 
