feat: 添加自动填充阻止功能,优化用户隐私保护

This commit is contained in:
Booker
2026-05-29 13:00:11 +07:00
parent 3cb8888497
commit a166d41841

View File

@@ -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<String>): List<String> {
val mimeTypes = linkedSetOf<String>()
acceptTypes