diff --git a/app/src/main/java/com/aurora/store/compose/ui/accounts/GoogleLoginScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/accounts/GoogleLoginScreen.kt
index 7dbdb7131..ff20573bf 100644
--- a/app/src/main/java/com/aurora/store/compose/ui/accounts/GoogleLoginScreen.kt
+++ b/app/src/main/java/com/aurora/store/compose/ui/accounts/GoogleLoginScreen.kt
@@ -40,8 +40,16 @@ import com.aurora.store.viewmodel.auth.AuthViewModel
private const val EMBEDDED_SETUP_URL = "https://accounts.google.com/EmbeddedSetup"
private const val AUTH_TOKEN = "oauth_token"
-private const val JS_PROFILE_EMAIL =
- "(function() { return document.getElementById('profileIdentifier').innerHTML; })();"
+
+// Google's EmbeddedSetup post-login page renders the account as e.g.
+//
...
;
+// the legacy id="profileIdentifier" selector no longer matches.
+private const val JS_PROFILE_EMAIL = """
+ (function() {
+ var el = document.querySelector('[data-profile-identifier][data-email]');
+ return el ? el.getAttribute('data-email') : null;
+ })();
+"""
@Composable
fun GoogleLoginScreen(
@@ -120,16 +128,12 @@ fun GoogleLoginScreen(
webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
- val cookies = CookieManager.getInstance().getCookie(url)
- if (cookies != null) {
- val cookieMap = AC2DMUtil.parseCookieString(cookies)
- if (cookieMap.isNotEmpty() && cookieMap[AUTH_TOKEN] != null) {
- val oauthToken = cookieMap[AUTH_TOKEN]
- view.evaluateJavascript(JS_PROFILE_EMAIL) { result ->
- val email = result.replace("\"", "")
- viewModel.buildAuthData(view.context, email, oauthToken)
- }
- }
+ val cookies = CookieManager.getInstance().getCookie(url) ?: return
+ val cookieMap = AC2DMUtil.parseCookieString(cookies)
+ val oauthToken = cookieMap[AUTH_TOKEN] ?: return
+ view.evaluateJavascript(JS_PROFILE_EMAIL) { result ->
+ val email = result.trim('"')
+ viewModel.buildAuthData(view.context, email, oauthToken)
}
}
}
diff --git a/app/src/main/java/com/aurora/store/util/AC2DMTask.kt b/app/src/main/java/com/aurora/store/util/AC2DMTask.kt
index d5415a728..a5099ca16 100644
--- a/app/src/main/java/com/aurora/store/util/AC2DMTask.kt
+++ b/app/src/main/java/com/aurora/store/util/AC2DMTask.kt
@@ -27,11 +27,7 @@ import okhttp3.RequestBody.Companion.toRequestBody
class AC2DMTask @Inject constructor(private val httpClient: HttpClient) {
@Throws(Exception::class)
- fun getAC2DMResponse(email: String?, oAuthToken: String?): Map {
- if (email == null || oAuthToken == null) {
- return mapOf()
- }
-
+ fun getAC2DMResponse(email: String, oAuthToken: String): Map {
val params: MutableMap = hashMapOf()
params["lang"] = Locale.getDefault().toString().replace("_", "-")
params["google_play_services_version"] = PLAY_SERVICES_VERSION_CODE
@@ -60,7 +56,7 @@ class AC2DMTask @Inject constructor(private val httpClient: HttpClient) {
return if (response.isSuccessful) {
AC2DMUtil.parseResponse(String(response.responseBytes))
} else {
- mapOf()
+ emptyMap()
}
}
diff --git a/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt
index 428ca10b9..b2e36496e 100644
--- a/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt
+++ b/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt
@@ -39,13 +39,13 @@ import com.aurora.store.util.PackageUtil
import com.aurora.store.util.Preferences
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
-import java.net.ConnectException
-import java.net.UnknownHostException
-import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
+import java.net.ConnectException
+import java.net.UnknownHostException
+import javax.inject.Inject
@HiltViewModel
class AuthViewModel @Inject constructor(
@@ -92,16 +92,19 @@ class AuthViewModel @Inject constructor(
}
}
- fun buildAuthData(context: Context, email: String, oauthToken: String?) {
+ fun buildAuthData(context: Context, email: String, oauthToken: String) {
viewModelScope.launch(Dispatchers.IO) {
try {
val response = aC2DMTask.getAC2DMResponse(email, oauthToken)
if (response.isNotEmpty()) {
val aasToken = response["Token"]
if (aasToken != null) {
- Preferences.putString(context, Constants.ACCOUNT_EMAIL_PLAIN, email)
+ val accountEmail = response["Email"]?.takeIf { it.isNotBlank() } ?: email
+ Preferences.putString(context, Constants.ACCOUNT_EMAIL_PLAIN, accountEmail)
Preferences.putString(context, Constants.ACCOUNT_AAS_PLAIN, aasToken)
- AuroraApp.events.send(AuthEvent.GoogleLogin(true, email, aasToken))
+ AuroraApp.events.send(
+ AuthEvent.GoogleLogin(true, accountEmail, aasToken)
+ )
} else {
Preferences.putString(context, Constants.ACCOUNT_EMAIL_PLAIN, "")
Preferences.putString(context, Constants.ACCOUNT_AAS_PLAIN, "")
@@ -191,8 +194,8 @@ class AuthViewModel @Inject constructor(
context,
Preferences.PREFERENCE_AUTH_VIA_MICROG,
accountType == AccountType.GOOGLE &&
- tokenType == AuthHelper.Token.AUTH &&
- PackageUtil.hasSupportedMicroGVariant(context)
+ tokenType == AuthHelper.Token.AUTH &&
+ PackageUtil.hasSupportedMicroGVariant(context)
)
_authState.value = AuthState.SignedIn
} else {