feat: Add first-launch server URL input dialog

Implements a setup dialog on first game launch that allows users to enter
their custom community server URL without rebuilding the APK.

Features:
- Server URL input dialog on first launch
- URL validation (format check)
- Connection test button
- SharedPreferences storage
- Priority: SharedPreferences > AndroidManifest.xml > EA defaults
- Activity restart flow for applying configuration

New files:
- CommunityServerManager.smali (URL management)
- ServerSetupActivity.smali + 4 inner classes (dialog UI)
- res/layout/activity_server_setup.xml (layout)
- SERVER-URL-INPUT-IMPLEMENTATION.md (docs)

Modified files:
- SynergyEnvironmentImpl.smali (SharedPreferences check priority)
- MainActivity.smali (first-launch check + onActivityResult)
- AndroidManifest.xml (declare ServerSetupActivity)

Benefits:
- One APK works with any server
- Easy server switching
- Lower barrier to entry for non-technical users
This commit is contained in:
2026-02-21 23:32:06 -08:00
parent b7fb41dd0b
commit 51be1177df
19 changed files with 1661 additions and 0 deletions

View File

@@ -2014,6 +2014,41 @@
.line 1418
invoke-super {p0, p1, p2, p3}, Lcom/firemonkeys/cloudcellapi/CC_Activity;->onActivityResult(IILandroid/content/Intent;)V
# 🆕 COMMUNITY PATCH: Handle ServerSetupActivity result
const/16 v0, 0x1001
if-ne p1, v0, :check_wifi
# ServerSetupActivity returned
const/4 v0, -0x1
if-ne p2, v0, :setup_cancelled
# RESULT_OK - Server URL was configured, continue boot
const-string v0, "✅ Server configured - continuing boot"
const-string v1, "MainActivity"
invoke-static {v1, v0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
# Restart activity to continue normal boot sequence
invoke-virtual {p0}, Landroid/app/Activity;->recreate()V
return-void
:setup_cancelled
# User cancelled setup - exit app
const-string v0, "❌ Server setup cancelled - exiting"
const-string v1, "MainActivity"
invoke-static {v1, v0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
invoke-virtual {p0}, Landroid/app/Activity;->finish()V
return-void
:check_wifi
const v0, 0x13a286e3
const/4 v1, 0x0
@@ -2306,6 +2341,41 @@
.line 362
invoke-super {p0, p1}, Lcom/firemonkeys/cloudcellapi/CC_Activity;->onCreate(Landroid/os/Bundle;)V
# 🆕 COMMUNITY PATCH: Check for server URL before continuing boot
.line 363
invoke-static {p0}, Lcom/firemint/realracing/CommunityServerManager;->checkServerUrl(Landroid/content/Context;)Z
move-result v0
if-nez v0, :server_configured
# No server URL configured - show setup dialog
const-string v0, "⚠️ No server URL configured - showing setup dialog"
const-string v1, "MainActivity"
invoke-static {v1, v0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
new-instance v0, Landroid/content/Intent;
const-class v1, Lcom/firemint/realracing/ServerSetupActivity;
invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
const/16 v1, 0x1001
invoke-virtual {p0, v0, v1}, Landroid/app/Activity;->startActivityForResult(Landroid/content/Intent;I)V
# Don't continue boot - wait for setup to complete
return-void
:server_configured
const-string v0, "✅ Server URL configured - continuing boot"
const-string v1, "MainActivity"
invoke-static {v1, v0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
.line 365
new-instance v0, Lcom/firemint/realracing/NotificationChannelHelper;