From a166d41841037f31a20069cbcefb916297f188e6 Mon Sep 17 00:00:00 2001 From: Booker Date: Fri, 29 May 2026 13:00:11 +0700 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=A1=AB=E5=85=85=E9=98=BB=E6=AD=A2=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7=E9=9A=90=E7=A7=81=E4=BF=9D?= =?UTF-8?q?=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/openim/flutter/openim/MainActivity.kt | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/android/app/src/main/kotlin/io/openim/flutter/openim/MainActivity.kt b/android/app/src/main/kotlin/io/openim/flutter/openim/MainActivity.kt index 3a3ad4a..817ac74 100644 --- a/android/app/src/main/kotlin/io/openim/flutter/openim/MainActivity.kt +++ b/android/app/src/main/kotlin/io/openim/flutter/openim/MainActivity.kt @@ -13,6 +13,8 @@ import android.os.Build import android.provider.MediaStore import android.util.Base64 import android.util.Log +import android.view.View +import android.view.ViewGroup import androidx.core.content.FileProvider import io.flutter.embedding.android.FlutterActivity import org.conscrypt.Conscrypt @@ -41,6 +43,12 @@ class MainActivity : FlutterActivity() { Log.w(TAG, "Conscrypt provider install failed: ${e.message}") } super.onCreate(savedInstanceState) + installAutofillBlocker() + } + + override fun onResume() { + super.onResume() + disableAutofillForCurrentWindow() } override fun configureFlutterEngine(flutterEngine: FlutterEngine) { @@ -264,6 +272,36 @@ class MainActivity : FlutterActivity() { ) } + private fun installAutofillBlocker() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + return + } + + disableAutofillForCurrentWindow() + window.decorView.viewTreeObserver.addOnGlobalLayoutListener { + disableAutofillForCurrentWindow() + } + } + + private fun disableAutofillForCurrentWindow() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + return + } + disableAutofill(window.decorView) + } + + private fun disableAutofill(view: View) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + view.importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS + } + + if (view is ViewGroup) { + for (index in 0 until view.childCount) { + disableAutofill(view.getChildAt(index)) + } + } + } + private fun normalizeMimeTypes(acceptTypes: List): List { val mimeTypes = linkedSetOf() acceptTypes