Add Complete Smali Bridge for Server Browser
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>
This commit is contained in:
93
smali-patches/ServerEditActivity.smali
Normal file
93
smali-patches/ServerEditActivity.smali
Normal file
@@ -0,0 +1,93 @@
|
||||
.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
|
||||
Reference in New Issue
Block a user