From 17d5aff9ddcd0a82ec647ae0bd30e75e88f79868 Mon Sep 17 00:00:00 2001
From: freebeartogoodhome <801dan@protonmail.com>
Date: Fri, 22 May 2026 23:04:33 -0600
Subject: [PATCH 1/2] fix Android login issues
---
android/app/src/main/AndroidManifest.xml | 6 ++++++
.../src/main/kotlin/org/lichess/mobileV2/MainActivity.kt | 6 ++++++
2 files changed, 12 insertions(+)
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 4b528f8c0..68605c2c6 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -164,5 +164,11 @@
+
+
+
+
+
+
diff --git a/android/app/src/main/kotlin/org/lichess/mobileV2/MainActivity.kt b/android/app/src/main/kotlin/org/lichess/mobileV2/MainActivity.kt
index d14dc4ac7..c5dee5a8d 100644
--- a/android/app/src/main/kotlin/org/lichess/mobileV2/MainActivity.kt
+++ b/android/app/src/main/kotlin/org/lichess/mobileV2/MainActivity.kt
@@ -20,6 +20,12 @@ class MainActivity: FlutterActivity() {
super.onCreate(savedInstanceState)
}
+override fun onNewIntent(intent: android.content.Intent) {
+ super.onNewIntent(intent)
+ // Pass the new intent carrying the OAuth token back into the activity context
+ setIntent(intent)
+ }
+
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, GESTURES_CHANNEL).setMethodCallHandler {
From 6135f5e9a94f45d9311f3c2a83aba2da92cdeff9 Mon Sep 17 00:00:00 2001
From: Vincent Velociter
Date: Tue, 26 May 2026 12:05:52 +0200
Subject: [PATCH 2/2] Add explanations about OAuth redirect handling
---
android/app/src/main/AndroidManifest.xml | 14 ++++++++------
.../kotlin/org/lichess/mobileV2/MainActivity.kt | 11 ++++++++---
2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 68605c2c6..6625fb711 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -154,17 +154,19 @@
android:name="flutterEmbedding"
android:value="2" />
-
+
+
-
+
diff --git a/android/app/src/main/kotlin/org/lichess/mobileV2/MainActivity.kt b/android/app/src/main/kotlin/org/lichess/mobileV2/MainActivity.kt
index c5dee5a8d..3c2487660 100644
--- a/android/app/src/main/kotlin/org/lichess/mobileV2/MainActivity.kt
+++ b/android/app/src/main/kotlin/org/lichess/mobileV2/MainActivity.kt
@@ -2,6 +2,7 @@ package org.lichess.mobileV2
import android.app.ActivityManager
import android.content.Context
+import android.content.Intent
import android.graphics.Rect
import android.os.Bundle
import android.util.Log
@@ -20,10 +21,14 @@ class MainActivity: FlutterActivity() {
super.onCreate(savedInstanceState)
}
-override fun onNewIntent(intent: android.content.Intent) {
- super.onNewIntent(intent)
- // Pass the new intent carrying the OAuth token back into the activity context
+ // The OAuth redirect (org.lichess.mobile://login-callback) is delivered here, not in onCreate,
+ // because OAuthCallbackActivity forwards it to this already-running singleTop instance. Flutter's
+ // default handling leaves getIntent() pointing at the stale launch intent, so app_links would read
+ // the wrong URI and the login flow would never receive the callback. setIntent() updates the
+ // activity's current intent to the one carrying the OAuth code so app_links surfaces it correctly.
+ override fun onNewIntent(intent: Intent) {
setIntent(intent)
+ super.onNewIntent(intent)
}
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {