From 871fcb8f8e90e81141abd822825b20c00c3cafe0 Mon Sep 17 00:00:00 2001 From: Davinci9196 Date: Wed, 17 Dec 2025 16:56:46 +0800 Subject: [PATCH] Avoiding ANR that may occur during login --- .../gms/auth/login/DroidGuardHandler.kt | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/play-services-core/src/main/kotlin/org/microg/gms/auth/login/DroidGuardHandler.kt b/play-services-core/src/main/kotlin/org/microg/gms/auth/login/DroidGuardHandler.kt index a3b9c80c7b..fb3504834b 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/auth/login/DroidGuardHandler.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/auth/login/DroidGuardHandler.kt @@ -5,20 +5,36 @@ package org.microg.gms.auth.login +import android.util.Log import androidx.lifecycle.lifecycleScope import com.google.android.gms.droidguard.DroidGuardClient -import com.google.android.gms.tasks.await -import java.util.* +import com.google.android.gms.tasks.Tasks +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import java.util.Collections +import java.util.concurrent.TimeUnit + +private const val TAG = "DroidGuardHandler" class DroidGuardHandler(private val activity: LoginActivity) { fun start(dg: String) { - activity.lifecycleScope.launchWhenStarted { + activity.lifecycleScope.launch { + Log.d(TAG, "getDroidGuardResult start ${Thread.currentThread().name}") + val start = System.currentTimeMillis() try { - val result = DroidGuardClient.getResults(activity, "minute_maid", Collections.singletonMap("dg_minutemaid", dg)).await() - activity.runScript("window.setDgResult('$result')") + val result = withContext(Dispatchers.IO) { + val resultTask = DroidGuardClient.getResults(activity, "minute_maid", Collections.singletonMap("dg_minutemaid", dg)) + Tasks.await(resultTask, 5000, TimeUnit.MILLISECONDS) + } + Log.d(TAG, "start: result: $result") + withContext(Dispatchers.Main) { + activity.runScript("window.setDgResult('$result')") + } } catch (e: Exception) { // Ignore } + Log.d(TAG, "getDroidGuardResult end " + (System.currentTimeMillis() - start)) } } }