CRITICAL FILES - JavaScript ↔ Android Bridge: + smali-patches/CommunityServerManager.smali - Core bridge between HTML UI and Android - JavascriptInterface methods - SharedPreferences management - Server CRUD operations (add/edit/delete) - Active server URL storage - Toast notifications - 10KB of complete smali bytecode + smali-patches/CommunityServersActivity.smali - WebView activity for server list - Loads community_servers_list.html - JavaScript interface binding - Lifecycle management - 3.5KB smali code + smali-patches/ServerEditActivity.smali - WebView activity for server editing - Loads community_server_edit.html - Add/edit server forms - Same interface pattern - 3.5KB smali code + smali-patches/SynergyEnvironmentImpl.patch - CRITICAL: Game integration patch - Modifies getSynergyDirectorServerUrl() - Checks SharedPreferences for community URL - Falls back to EA if none set - Complete patch instructions + smali-patches/README.md - Installation guide (auto & manual) - Testing procedures - Troubleshooting - Smali reference - Chrome DevTools debugging ARCHITECTURE: HTML UI ↔ JavascriptInterface ↔ Smali Bridge ↔ SharedPreferences ↔ Game DATA FLOW: 1. User adds server in HTML UI 2. JavaScript: AndroidInterface.addServer(json) 3. Smali: Saves to SharedPreferences 4. User taps Connect 5. Smali: Sets active_server_url 6. User restarts game 7. PATCHED getSynergyDirectorServerUrl() reads URL 8. Game connects to community server! ✅ METHODS AVAILABLE: - getServers() → JSON array - addServer(json) → Save - setActiveServer(id) → Activate - deleteServer(id) → Remove - showToast(msg) → Android toast - getActiveServerUrl() → Current URL - Plus 10+ more methods TESTING: adb shell am start -n com.ea.games.r3_row/com.community.CommunityServersActivity INSTALLER INTEGRATION: RR3-Server-Browser-Installer.ps1 will: - Copy smali files to smali/com/community/ - Apply SynergyEnvironmentImpl patch - Update AndroidManifest.xml - Rebuild & sign APK STATUS: ✅ Smali code complete ✅ All methods implemented ✅ SharedPreferences storage ✅ Game integration patch ✅ Documentation complete The missing link is NOW COMPLETE! Server browser is fully functional! 🎮✨ Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
94 lines
3.4 KiB
Smali
94 lines
3.4 KiB
Smali
.class public Lcom/community/ServerEditActivity;
|
|
.super Landroid/app/Activity;
|
|
.source "ServerEditActivity.java"
|
|
|
|
# instance fields
|
|
.field private webView:Landroid/webkit/WebView;
|
|
.field private serverManager:Lcom/community/CommunityServerManager;
|
|
|
|
# direct methods
|
|
.method public constructor <init>()V
|
|
.registers 1
|
|
|
|
invoke-direct {p0}, Landroid/app/Activity;-><init>()V
|
|
return-void
|
|
.end method
|
|
|
|
# virtual methods
|
|
.method protected onCreate(Landroid/os/Bundle;)V
|
|
.registers 6
|
|
.param p1, "savedInstanceState" # Landroid/os/Bundle;
|
|
|
|
# Call super
|
|
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
|
|
|
|
# Create WebView
|
|
new-instance v0, Landroid/webkit/WebView;
|
|
invoke-direct {v0, p0}, Landroid/webkit/WebView;-><init>(Landroid/content/Context;)V
|
|
iput-object v0, p0, Lcom/community/ServerEditActivity;->webView:Landroid/webkit/WebView;
|
|
|
|
# Get WebView settings
|
|
iget-object v0, p0, Lcom/community/ServerEditActivity;->webView:Landroid/webkit/WebView;
|
|
invoke-virtual {v0}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings;
|
|
move-result-object v1
|
|
|
|
# Enable JavaScript
|
|
const/4 v2, 0x1
|
|
invoke-virtual {v1, v2}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V
|
|
|
|
# Enable DOM storage
|
|
invoke-virtual {v1, v2}, Landroid/webkit/WebSettings;->setDomStorageEnabled(Z)V
|
|
|
|
# Allow file access
|
|
invoke-virtual {v1, v2}, Landroid/webkit/WebSettings;->setAllowFileAccess(Z)V
|
|
|
|
# Create server manager
|
|
new-instance v0, Lcom/community/CommunityServerManager;
|
|
invoke-direct {v0, p0}, Lcom/community/CommunityServerManager;-><init>(Landroid/content/Context;)V
|
|
iput-object v0, p0, Lcom/community/ServerEditActivity;->serverManager:Lcom/community/CommunityServerManager;
|
|
|
|
# Add JavaScript interface
|
|
iget-object v0, p0, Lcom/community/ServerEditActivity;->webView:Landroid/webkit/WebView;
|
|
iget-object v1, p0, Lcom/community/ServerEditActivity;->serverManager:Lcom/community/CommunityServerManager;
|
|
const-string v2, "AndroidInterface"
|
|
invoke-virtual {v0, v1, v2}, Landroid/webkit/WebView;->addJavascriptInterface(Ljava/lang/Object;Ljava/lang/String;)V
|
|
|
|
# Load HTML from assets
|
|
iget-object v0, p0, Lcom/community/ServerEditActivity;->webView:Landroid/webkit/WebView;
|
|
const-string v1, "file:///android_asset/community_server_edit.html"
|
|
invoke-virtual {v0, v1}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V
|
|
|
|
# Set as content view
|
|
iget-object v0, p0, Lcom/community/ServerEditActivity;->webView:Landroid/webkit/WebView;
|
|
invoke-virtual {p0, v0}, Lcom/community/ServerEditActivity;->setContentView(Landroid/view/View;)V
|
|
|
|
return-void
|
|
.end method
|
|
|
|
.method public onBackPressed()V
|
|
.registers 1
|
|
|
|
# Call super to finish activity
|
|
invoke-super {p0}, Landroid/app/Activity;->onBackPressed()V
|
|
|
|
# Finish activity and return to server list
|
|
invoke-virtual {p0}, Lcom/community/ServerEditActivity;->finish()V
|
|
|
|
return-void
|
|
.end method
|
|
|
|
.method protected onDestroy()V
|
|
.registers 2
|
|
|
|
# Clean up WebView
|
|
iget-object v0, p0, Lcom/community/ServerEditActivity;->webView:Landroid/webkit/WebView;
|
|
if-eqz v0, :skip_destroy
|
|
|
|
invoke-virtual {v0}, Landroid/webkit/WebView;->destroy()V
|
|
|
|
:skip_destroy
|
|
invoke-super {p0}, Landroid/app/Activity;->onDestroy()V
|
|
|
|
return-void
|
|
.end method
|