From c6887b658346d7a64718dc4c81e8454c6c498a11 Mon Sep 17 00:00:00 2001 From: Booker Date: Tue, 9 Jun 2026 12:39:41 +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=20WebView=20=E8=A1=A8=E5=8D=95=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/openim/flutter/openim/MainActivity.kt | 52 ++++++++++++++++--- 1 file changed, 45 insertions(+), 7 deletions(-) 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 953fc6c..4d6a86e 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 @@ -16,6 +16,7 @@ import android.util.Base64 import android.util.Log import android.view.View import android.view.ViewGroup +import android.view.autofill.AutofillManager import android.webkit.CookieManager import android.webkit.WebStorage import android.webkit.WebView @@ -59,6 +60,13 @@ class MainActivity : FlutterActivity() { disableAutofillForCurrentWindow() } + override fun onWindowFocusChanged(hasFocus: Boolean) { + super.onWindowFocusChanged(hasFocus) + if (hasFocus) { + disableAutofillForCurrentWindow() + } + } + override fun onDestroy() { pendingCaptureConfirmationDialog?.dismiss() pendingCaptureConfirmationDialog = null @@ -405,21 +413,18 @@ class MainActivity : FlutterActivity() { } private fun installAutofillBlocker() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - return - } - disableAutofillForCurrentWindow() window.decorView.viewTreeObserver.addOnGlobalLayoutListener { disableAutofillForCurrentWindow() } + window.decorView.post { + disableAutofillForCurrentWindow() + } } private fun disableAutofillForCurrentWindow() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - return - } disableAutofill(window.decorView) + cancelAutofillSession() } private fun disableAutofill(view: View) { @@ -427,6 +432,10 @@ class MainActivity : FlutterActivity() { view.importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS } + if (view is WebView) { + disableWebViewAutofill(view) + } + if (view is ViewGroup) { for (index in 0 until view.childCount) { disableAutofill(view.getChildAt(index)) @@ -434,6 +443,35 @@ class MainActivity : FlutterActivity() { } } + private fun disableWebViewAutofill(webView: WebView) { + webView.settings.setSaveFormData(false) + webView.clearFormData() + webView.isSaveEnabled = false + webView.setSaveFromParentEnabled(false) + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + webView.importantForAutofill = + View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS + } + + webView.post { + webView.settings.setSaveFormData(false) + webView.clearFormData() + webView.isSaveEnabled = false + webView.setSaveFromParentEnabled(false) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + webView.importantForAutofill = + View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS + } + } + } + + private fun cancelAutofillSession() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + getSystemService(AutofillManager::class.java)?.cancel() + } + } + private fun normalizeMimeTypes(acceptTypes: List): List { val mimeTypes = linkedSetOf() acceptTypes