Skip to content

Restructure app into premium ROM hub with Modules, Tools and on‑demand root#6

Merged
hypermezo4-create merged 1 commit into
mainfrom
codex/build-premium-ui-and-feature-hub
Apr 22, 2026
Merged

Restructure app into premium ROM hub with Modules, Tools and on‑demand root#6
hypermezo4-create merged 1 commit into
mainfrom
codex/build-premium-ui-and-feature-hub

Conversation

@hypermezo4-create

Copy link
Copy Markdown
Owner

Motivation

  • Centralize ROM features into one polished DeadZon app (not a Monet-only tool) and present them as modules rather than scattered Settings entries.
  • Make Monet a focused Tools section, not the app entry point, and request root only when a user performs a privileged action.
  • Reuse the uploaded XML/resource keys as the source of truth for module structure and keep preference keys for compatibility.

Description

  • Reworked the app shell navigation into a 4-tab premium hub: Home, Modules, Tools, and Settings, and added module subroutes for About Phone, Notifications, Notification Animations, Lockscreen, and Control Center.
  • Added a ModuleCatalog and generic module UI (FeatureOption/FeatureSection) plus ModulesScreen and ModulesViewModel that map many uploaded preference keys into reusable toggle/slider/list/color/action controls.
  • Introduced ToolsScreen and moved Monet access into the Tools flow, added an inline Check Root Status action in MonetScreen, and removed the launch-time root gate from the app and Monet preferences/state handling.
  • Kept and reused the existing overlay/root backend (RootShell, OverlayCommandBuilder, OverlayRepository, MonetController, MonetOverlayRegistry), and applied visible branding cleanup in Compose UI to replace legacy ROM branding with DeadZon/neutral labels.

Testing

  • Attempted ./gradlew assembleDebug, which failed in this environment due to missing/incorrect Android SDK/platform resolution (25.0.1), so a full build could not be verified here.
  • Ran repository checks such as git diff --check which reported no issues and git status to confirm changed files were tracked.
  • Manual compile-run verification should be performed in an Android Studio environment with appropriate SDK/platform installed by running ./gradlew assembleDebug (expected to succeed once SDK is available).

Codex Task

@vercel

vercel Bot commented Apr 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cavo Ready Ready Preview, Comment Apr 22, 2026 10:44am

@hypermezo4-create hypermezo4-create merged commit 992ccd2 into main Apr 22, 2026
2 of 3 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1a944ae6d4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +35 to +36
fun setValue(key: String, value: String) {
_uiState.update { it.copy(values = it.values.toMutableMap().apply { put(key, value) }) }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Persist module edits instead of keeping them in transient state

setValue only mutates an in-memory map, and this view model is created from hiltViewModel() inside each module route, so edits are lost when the destination is recreated and never reach any preference/backend layer. In practice, the new module toggles/sliders look interactive but do not actually apply or persist ROM settings, which breaks the core module workflow introduced in this commit.

Useful? React with 👍 / 👎.

FeatureControlType.SLIDER -> {
val current = value.toFloatOrNull() ?: 0f
Text(current.toInt().toString())
Slider(value = current, onValueChange = { onValue(it.toInt().toString()) }, valueRange = 0f..255f)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Replace hardcoded slider range with option-specific bounds

All slider controls are forced to 0f..255f, but several configured slider defaults in the module catalog are much higher (for example notification animation duration defaults to 1000). That mismatch causes incorrect rendering/interaction for those controls (out-of-range initial values and values effectively capped to 255), so users cannot set valid values for affected module options.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant