From 871fcb8f8e90e81141abd822825b20c00c3cafe0 Mon Sep 17 00:00:00 2001 From: Davinci9196 Date: Wed, 17 Dec 2025 16:56:46 +0800 Subject: [PATCH 1/3] 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)) } } } From 664a4175e1485ef6c4a83246a0094c19b99dfdb4 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Mon, 30 Mar 2026 11:33:34 +0200 Subject: [PATCH 2/3] Use non-blocking await() instead of blocking --- .../kotlin/org/microg/gms/auth/login/DroidGuardHandler.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 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 fb3504834b..3523369db6 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 @@ -9,6 +9,7 @@ import android.util.Log import androidx.lifecycle.lifecycleScope import com.google.android.gms.droidguard.DroidGuardClient import com.google.android.gms.tasks.Tasks +import com.google.android.gms.tasks.await import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -24,8 +25,7 @@ class DroidGuardHandler(private val activity: LoginActivity) { val start = System.currentTimeMillis() try { val result = withContext(Dispatchers.IO) { - val resultTask = DroidGuardClient.getResults(activity, "minute_maid", Collections.singletonMap("dg_minutemaid", dg)) - Tasks.await(resultTask, 5000, TimeUnit.MILLISECONDS) + DroidGuardClient.getResults(activity, "minute_maid", Collections.singletonMap("dg_minutemaid", dg)).await() } Log.d(TAG, "start: result: $result") withContext(Dispatchers.Main) { From 621e66a6f94680ecc39d7cf29e4a02a37352dc70 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Mon, 30 Mar 2026 11:58:41 +0200 Subject: [PATCH 3/3] Remove unneeded imports --- .../main/kotlin/org/microg/gms/auth/login/DroidGuardHandler.kt | 2 -- 1 file changed, 2 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 3523369db6..b12c55a852 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 @@ -8,13 +8,11 @@ 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.Tasks import com.google.android.gms.tasks.await 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"