Skip to content
Draft
Show file tree
Hide file tree
Changes from 66 commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
b6e5116
Introduce Module model & refactor module loading
DerGoogler Apr 1, 2026
163840c
Clean up comments in ModulesViewModel
DerGoogler Apr 1, 2026
9af4295
Refactor modules UI and add root file utils
DerGoogler Apr 1, 2026
cdb33ba
Migrate UI to mmrlx components & refactor modules
DerGoogler Apr 3, 2026
c5265a8
Add status bar contrast handling & activity safety
DerGoogler Apr 3, 2026
78e49dd
Add per-source console store and logging helpers
DerGoogler Apr 4, 2026
a24ffbd
Add BottomNavigation; refactor console store usage
DerGoogler Apr 4, 2026
289413c
Replace hwui module with dev.mmrlx.hybridwebui
DerGoogler Apr 4, 2026
5b26975
Use modal bottom sheet and add MenuChip/Point
DerGoogler Apr 4, 2026
37abfe9
Log errors when exiting activity
DerGoogler Apr 4, 2026
bd4766a
.
DerGoogler Apr 5, 2026
75ad518
Add WebUI X, DevTools and module UI updates
DerGoogler Apr 8, 2026
cb4438c
Add SuFile I/O utilities and FileSystemInterface
DerGoogler Apr 9, 2026
f8a38c0
Add prompt/confirm dialogs to WebUI
DerGoogler Apr 9, 2026
6144937
Migrate list UI to mmrlx and add toolbar
DerGoogler Apr 9, 2026
91a4c83
Use mmrlx UI components and bump mmrlx
DerGoogler Apr 9, 2026
f848246
Support MX/WX engine launch for modules
DerGoogler Apr 9, 2026
9ae2d22
Add autoAddInsets config and inset injection
DerGoogler Apr 9, 2026
4926a71
Refactor prompt dialogs and add keyboard options
DerGoogler Apr 10, 2026
2fd4381
Add FileSystem JS interface and console toggle
DerGoogler Apr 10, 2026
da07c0a
.
DerGoogler Apr 11, 2026
6c753dd
Add KernelSU web interface and WorkingMode enum
DerGoogler Apr 12, 2026
932538c
Use stable IDs for render entries
DerGoogler Apr 12, 2026
9108996
Switch icons, add back handler, bump mmrlx
DerGoogler Apr 12, 2026
99ade31
.
DerGoogler Apr 13, 2026
7de6a88
Add git icons and improve ModuleItem UI
DerGoogler Apr 13, 2026
601abe2
Add bottom nav, adjust UI imports and deps
DerGoogler Apr 19, 2026
f7283f5
Add WebUI Lua plugin and SU file factories
DerGoogler May 16, 2026
6d242b6
Only register lua plugin if the index file exists
DerGoogler May 16, 2026
caada9a
get rid of PlatformManager and use SuFileSystemManager
DerGoogler May 16, 2026
75c9b51
A lot of refactoring...
DerGoogler May 17, 2026
2b3e694
Refactor WebrootConfig state and bump mmrlx
DerGoogler May 23, 2026
ed0b405
Add WebUI back/exit handlers and config tweaks
DerGoogler May 23, 2026
b23bc8b
Add testing product flavors (internal/alpha/beta/rc)
DerGoogler May 23, 2026
3423d4d
Migrate FileExplorer UI to mmrlx components
DerGoogler May 23, 2026
f6db51c
Introduce ModuleScope, LocalModule & theme refactor
DerGoogler May 23, 2026
79afdc6
Initialize SuFile and harden module scanning
DerGoogler May 23, 2026
2febcda
Robust module prop parsing; UI tweaks & bump deps
DerGoogler May 23, 2026
193d81e
.
DerGoogler May 24, 2026
a6fbbc8
Add skeletons and pull-to-refresh for modules
DerGoogler May 24, 2026
46c8c7a
Refactor Module props; add LocalCover UI
DerGoogler May 24, 2026
a5386c6
Move adb path resolution to UserPreferences
DerGoogler May 24, 2026
f85b41e
Integrate TextMate editor & ADB file resolver
DerGoogler May 24, 2026
4b530f4
Use MaterialIconResolver for file icons
DerGoogler May 24, 2026
2bf0529
Add custom ADB path setting and UI changes
DerGoogler May 24, 2026
b5a9a30
Refactor WebUI, add demo assets & fixes
DerGoogler May 24, 2026
7705ab0
Expose module and paths as Lua tables
DerGoogler May 24, 2026
a787331
Handle language setup errors in code editor
DerGoogler May 25, 2026
49b2931
.
DerGoogler May 25, 2026
94b539c
Use prefs.isNonRoot in ModuleItem
DerGoogler May 25, 2026
7c8392e
Update FileInterface.kt
DerGoogler May 25, 2026
3327365
.
DerGoogler May 25, 2026
d1769b1
Add writeText import to FileEditorScreen
DerGoogler May 25, 2026
dafba63
.
DerGoogler May 25, 2026
bc3b020
Set default WebUI engine to WX
DerGoogler May 25, 2026
4a4a71e
Potential fix for pull request finding
DerGoogler May 30, 2026
6b3acab
Mark CrashHandlerActivity non-exported
DerGoogler May 30, 2026
013595f
Potential fix for pull request finding
DerGoogler May 30, 2026
88c07c1
Potential fix for pull request finding
DerGoogler May 30, 2026
08e4ab7
.
DerGoogler May 30, 2026
d96f1ef
Add optional toolbar to ModuleScope
DerGoogler May 31, 2026
3077483
Adopt MMRLXTheme and badge color tokens
DerGoogler May 31, 2026
66d9d5d
Use Jsoup to parse and manage DOM in DevTools
DerGoogler May 31, 2026
e0d2ddd
Add legacy JS interfaces and utility helpers
DerGoogler May 31, 2026
699a210
Drop getCurrentApplication and simplify platform
DerGoogler May 31, 2026
7c67d37
Use applicationIdSuffix and update APK naming
DerGoogler May 31, 2026
05a25b5
Add File Explorer activity & BasePathScope
DerGoogler Jun 20, 2026
134bd0c
Add explorer launcher icon and vector assets
DerGoogler Jun 20, 2026
c278a95
Refactor ConfigEditor UI and set refresh default
DerGoogler Jun 20, 2026
06c173d
Harden FileExplorerViewModel init & navigation
DerGoogler Jun 20, 2026
038a195
Bump mmrlx to 1.0.130 and adapt API changes
DerGoogler Jun 21, 2026
cee7e88
Add package/icon handlers and JS package APIs
DerGoogler Jun 21, 2026
cce7ed9
Reorder WebrootPathHandler registration
DerGoogler Jun 21, 2026
4d44e96
Extract default CSP and apply CSP manager
DerGoogler Jun 25, 2026
5e80d41
Add GPR creds to build-apk action; bump mmrlx
DerGoogler Jun 27, 2026
fd923e0
Add ZIP module import and ViewModel integration
DerGoogler Jun 27, 2026
e304595
Log CSP, fix CSP formatting, bump mmrlx
DerGoogler Jun 27, 2026
4e6f87c
Use webroot for module assets and avatar
DerGoogler Jun 27, 2026
5f0ac04
Adjust CSP img-src and flip package check
DerGoogler Jun 27, 2026
a1600a0
Add local SuFile painter helper
DerGoogler Jun 27, 2026
a60f36e
Add DevTools snippets tab and reload hooks
DerGoogler Jun 27, 2026
e2ac6dc
Add draggable resize support to DevTools panel
DerGoogler Jun 27, 2026
a727670
Add module shortcut creation screen
DerGoogler Jun 27, 2026
ebb539b
Restore app theme settings and add alert banner
DerGoogler Jun 27, 2026
ac80c88
Remove status bar padding from ViewTab
DerGoogler Jun 27, 2026
e8d5a9f
Expose module metadata to WebUI JS
DerGoogler Jun 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 74 additions & 21 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import app.cash.licensee.ViolationAction
import com.android.build.gradle.internal.api.ApkVariantOutputImpl
import com.android.build.api.variant.impl.VariantOutputImpl

Comment on lines 1 to 3
plugins {
alias(libs.plugins.self.application)
alias(libs.plugins.self.compose)
alias(libs.plugins.self.hilt)
alias(libs.plugins.licensee)
alias(libs.plugins.ksp)
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.kotlin.serialization)
}

Expand Down Expand Up @@ -54,7 +55,7 @@ android {
signingConfigs.getByName("debug")
}

flavorDimensions += "distribution"
flavorDimensions += listOf("distribution", "testing")

productFlavors {
create("official") {
Expand All @@ -64,6 +65,34 @@ android {
buildConfigField("Boolean", "IS_SPOOFED_BUILD", "false")
}

create("internal") {
dimension = "testing"
applicationIdSuffix = ".internal"
resValue("string", "app_name", "[ᛁ] $baseAppName")
buildConfigField("Boolean", "IS_SPOOFED_BUILD", "false")
}

create("alpha") {
dimension = "testing"
applicationIdSuffix = ".alpha"
resValue("string", "app_name", "[ᚨ] $baseAppName")
buildConfigField("Boolean", "IS_SPOOFED_BUILD", "false")
}

create("beta") {
dimension = "testing"
applicationIdSuffix = ".beta"
resValue("string", "app_name", "[ᛒ] $baseAppName")
buildConfigField("Boolean", "IS_SPOOFED_BUILD", "false")
}

create("rc") {
dimension = "testing"
applicationIdSuffix = ".rc"
resValue("string", "app_name", "[ᚱ] $baseAppName")
buildConfigField("Boolean", "IS_SPOOFED_BUILD", "false")
}

create("spoofed") {
dimension = "distribution"
applicationId = generateRandomPackageName()
Expand All @@ -85,7 +114,6 @@ android {
buildConfigField("Boolean", "IS_GOOGLE_PLAY_BUILD", "false")
isDebuggable = false
isJniDebuggable = false
versionNameSuffix = "-release"
renderscriptOptimLevel = 3
multiDexEnabled = true

Expand All @@ -103,7 +131,6 @@ android {
buildConfigField("Boolean", "IS_DEV_VERSION", "true")
buildConfigField("Boolean", "IS_GOOGLE_PLAY_BUILD", "false")
applicationIdSuffix = ".debug"
versionNameSuffix = "-debug"
isJniDebuggable = true
isDebuggable = true
renderscriptOptimLevel = 0
Expand All @@ -126,46 +153,62 @@ android {

buildFeatures {
buildConfig = true
resValues = true
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}

packaging.resources.excludes += setOf(
"META-INF/**",
"okhttp3/**",
//"kotlin/**",
"org/**",
"**.properties",
"**.bin",
"**/*.proto"
)
packaging {
resources {
excludes += setOf(
"META-INF/**",
"okhttp3/**",
//"kotlin/**",
"org/**",
"**.properties",
"**.bin",
"**/*.proto"
)
pickFirsts += listOf(
"tables/**"
)
}
}

dependenciesInfo {
includeInApk = false
includeInBundle = false
}

applicationVariants.configureEach {
outputs.configureEach {
(this as? ApkVariantOutputImpl)?.outputFileName =
"WebUI-X-$versionName-$flavorName.apk"
}
}
}

licensee {
bundleAndroidAsset.set(true)
violationAction(ViolationAction.IGNORE)
}

androidComponents {
onVariants { variant ->
val testingFlavor = variant.productFlavors
.firstOrNull { it.first == "testing" }
?.second

variant.outputs.filterIsInstance<VariantOutputImpl>().forEach { output ->
output.outputFileName.set(
output.versionName.map { vName ->
"WebUI-X-$vName-${variant.buildType}-$testingFlavor.apk"
}
)
}
}
}

dependencies {
implementation(projects.webui)
implementation(projects.modconf)
implementation(projects.jna)
implementation(projects.hwui)
implementation(libs.mmrl.ext)
implementation(libs.mmrl.ui)
implementation(libs.mmrl.platform)
Expand All @@ -180,6 +223,7 @@ dependencies {

implementation(libs.androidx.lifecycle.process)
implementation(libs.hiddenApiBypass)
implementation(libs.kotlin.parcelize.runtime)

implementation(libs.semver)
implementation(libs.coil.compose)
Expand Down Expand Up @@ -247,4 +291,13 @@ dependencies {

implementation(libs.composedestinations.core)
ksp(libs.composedestinations.ksp)

implementation(libs.mmrlx.ui)
implementation(libs.mmrlx.utilities)
implementation(libs.mmrlx.webui.core)
implementation(libs.mmrlx.webui.lua)
implementation(libs.mmrlx.nio)

implementation("com.github.MMRLApp.RootThread:thread:0.0.3")
implementation("org.jsoup:jsoup:1.18.3")
}
27 changes: 23 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,20 +72,34 @@

<activity
android:name="${__packageName__}.ui.activity.CrashHandlerActivity"
android:exported="true"
android:exported="false"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize">
</activity>
Comment on lines +93 to 98

<activity
android:name="${__packageName__}.ui.activity.webui.WebUIActivity"
android:autoRemoveFromRecents="true"
android:documentLaunchMode="intoExisting"
android:hardwareAccelerated="true"
android:enableOnBackInvokedCallback="true"
android:exported="true"
android:label="WebUI X"
android:permission="${webuiPermissionId}.permission.WEBUI_X"
android:process="${webuiPermissionId}.process.webui"
android:taskAffinity="${applicationId}.WEBUI_X">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

<activity
android:name="${__packageName__}.ui.activity.webui.WebUIActivity"
android:name="${__packageName__}.ui.webui.WebUIActivity"
android:autoRemoveFromRecents="true"
android:documentLaunchMode="intoExisting"
android:hardwareAccelerated="true"
android:enableOnBackInvokedCallback="true"
android:exported="true"
android:label="WebUI X"
android:permission="${webuiPermissionId}.permission.WEBUI_X"
Expand Down Expand Up @@ -142,6 +156,11 @@
android:exported="false"
android:foregroundServiceType="specialUse" />

<service
android:name="dev.mmrlx.nio.service.NonRootFileService"
android:exported="false"
android:foregroundServiceType="specialUse" />

<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
Expand Down
Loading