Skip to content

Add 'Fear' UI theme, assets and launcher UI updates - #11

Open
minetwice wants to merge 3 commits into
feature/premium-settings-drawer-257784861310019278from
codex/redesign-fear-launcher-ui/ux-vskbtw
Open

Add 'Fear' UI theme, assets and launcher UI updates#11
minetwice wants to merge 3 commits into
feature/premium-settings-drawer-257784861310019278from
codex/redesign-fear-launcher-ui/ux-vskbtw

Conversation

@minetwice

@minetwice minetwice commented Jul 18, 2026

Copy link
Copy Markdown
Owner

User description

Motivation

  • Introduce a new "Fear" visual theme and refreshed launcher UI to replace the previous premium style with new panels, cards and navigation chrome.
  • Improve launcher interactivity by adding explicit account/notification/settings controls and click sound feedback.
  • Simplify the sliding drawer behavior to open a centralized command/dashboard instead of toggling the old tray UI.

Description

  • Added a set of new drawable assets (fear_*) and new style definitions (FearLeftNavButton, FearPlayButton, etc.) and wired them into styles.xml to define the new theme look.
  • Reworked launcher layouts (fragment_launcher.xml and landscape variant), the progress/dashboard view (view_progress.xml), fragment_mod_search.xml, fragment_account_manager.xml, premium_skin_customizer_pane.xml, and skin customizer to use the new drawables, updated components and new left navigation, top bar, hero card, right cards and quick-launch areas.
  • Updated MainMenuFragment.java to change play button text states, add sound effects via SoundManager.playClick() and v.playSoundEffect(), and wire new click handlers for account_button, notification_button, and settings_button; the hamburger now calls openCommandDashboard() and mPlayStateListener displays updated labels/icons.
  • Small UX text/hint changes (search hint, dashboard subtitle, account manager labels) and minor layout/padding adjustments to match the new theme.

Testing

  • Ran ./gradlew assembleDebug, which completed successfully.
  • Ran ./gradlew lint, which completed successfully.

Codex Task


CodeAnt-AI Description

Redesign the launcher and related screens with the new Fear theme

What Changed

  • Replaced the old premium look on the launcher, mod search, account manager, skin customizer, and download dashboard with the new Fear visual style
  • Added a left navigation bar, top action row, hero panel, quick-launch strip, and updated card styling on the main launcher
  • Made launcher actions clearer with account, notification, settings, and profile controls, plus click sound feedback
  • Updated play button status text to show a loading indicator while launch tasks are running
  • Added a download dashboard header with file, speed, status, and progress columns for easier tracking

Impact

✅ Clearer launcher navigation
✅ Easier account and settings access
✅ More readable download progress

💡 Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

@codeant-ai

codeant-ai Bot commented Jul 18, 2026

Copy link
Copy Markdown

CodeAnt AI is reviewing your PR.

@codeant-ai codeant-ai Bot added the size:L This PR changes 100-499 lines, ignoring generated files label Jul 18, 2026
Comment on lines +10 to +13
<com.kdt.mcgui.LauncherMenuButton android:id="@+id/tab_home" style="@style/FearLeftNavButton.Selected" android:text="Home" android:drawableStart="@drawable/ic_px_home" />
<com.kdt.mcgui.LauncherMenuButton android:id="@+id/tab_installations" style="@style/FearLeftNavButton" android:text="Instances" android:drawableStart="@drawable/ic_px_file" />
<com.kdt.mcgui.LauncherMenuButton android:id="@+id/tab_skin" style="@style/FearLeftNavButton" android:text="Skins" android:drawableStart="@drawable/ic_px_image" />
<com.kdt.mcgui.LauncherMenuButton android:id="@+id/tab_settings_icon" style="@style/FearLeftNavButton" android:text="Settings" android:drawableStart="@drawable/ic_px_sliders" />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggestion: These new left-navigation tabs are never handled anywhere in Java/Kotlin (no R.id.tab_home, tab_installations, tab_skin, or tab_settings_icon listeners), so tapping them does nothing. Wire each tab to its intended navigation action (or remove them) to avoid shipping non-functional primary navigation in landscape. [incomplete implementation]

Severity Level: Critical 🚨
- ❌ Landscape launcher left navigation buttons appear but do nothing.
- ⚠️ Users cannot change instances/skins via new sidebar tabs.
Steps of Reproduction ✅
1. Open
app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/fragments/MainMenuFragment.java and
observe the constructor at lines ~120-130 (tool header shows lines 120-199) calling
super(R.layout.fragment_launcher), confirming fragment_launcher.xml is the layout used for
the main menu fragment.

2. Open app_pojavlauncher/src/main/res/layout-land/fragment_launcher.xml and verify that
the left navigation buttons are defined at lines 10-13 with ids @+id/tab_home,
@+id/tab_installations, @+id/tab_skin, and @+id/tab_settings_icon, using
com.kdt.mcgui.LauncherMenuButton.

3. Using the Grep tool, search the Java sources for "tab_home" (pattern "tab_home", glob
"*.java") across /workspace/FearLauncher; the search returns "No matches found",
confirming there is no code-behind reference to R.id.tab_home (or the other tab ids) in
any Java class.

4. In MainMenuFragment.onViewCreated (same file, lines ~130-180), note that only
play_button, hamburger_menu_icon, edit_profile_button_main, account_button,
notification_button, settings_button, and settings_tray are wired with findViewById and
setOnClickListener, and no handlers exist for tab_home, tab_installations, tab_skin, or
tab_settings_icon, so when the landscape main menu is displayed and a user taps any
left-nav tab, the click produces only default view feedback with no navigation or state
change.

Fix in Cursor Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** app_pojavlauncher/src/main/res/layout-land/fragment_launcher.xml
**Line:** 10:13
**Comment:**
	*Incomplete Implementation: These new left-navigation tabs are never handled anywhere in Java/Kotlin (no `R.id.tab_home`, `tab_installations`, `tab_skin`, or `tab_settings_icon` listeners), so tapping them does nothing. Wire each tab to its intended navigation action (or remove them) to avoid shipping non-functional primary navigation in landscape.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

<TextView android:layout_width="150dp" android:layout_height="44dp" android:gravity="center" android:background="@drawable/fear_glass_chip_bg" android:text="● Online ˅" android:textColor="#FFFFFF" android:textSize="14sp"/>
<ImageButton android:id="@+id/account_button" android:layout_width="48dp" android:layout_height="48dp" android:layout_marginStart="28dp" android:background="@drawable/fear_glass_chip_bg" android:src="@drawable/ic_account_circle" android:padding="11dp" app:tint="#FFFFFF"/>
<ImageButton android:id="@+id/notification_button" android:layout_width="48dp" android:layout_height="48dp" android:layout_marginStart="12dp" android:background="@drawable/fear_glass_chip_bg" android:src="@drawable/ic_px_bell" android:padding="12dp" app:tint="#FFFFFF"/>
<com.kdt.mcgui.LauncherMenuButton android:id="@+id/hamburger_menu_icon" android:layout_width="48dp" android:layout_height="48dp" android:layout_marginStart="12dp" android:background="@drawable/fear_glass_chip_bg" android:src="@drawable/ic_three_dots" android:padding="12dp" app:tint="#FFFFFF"/>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggestion: hamburger_menu_icon is a LauncherMenuButton (button/text-based view), but it is configured with android:src/app:tint image-view style attributes; on this widget those attributes are not the correct API and the icon can fail to render as intended. Use a compatible image widget or set the icon through the button’s compound-drawable API (drawableStart/drawable*) so the menu icon reliably appears. [api mismatch]

Severity Level: Major ⚠️
- ⚠️ Hamburger menu icon invisible or inconsistent on launcher top bar.
- ⚠️ Users may miss command dashboard entrypoint, reducing discoverability.
Steps of Reproduction ✅
1. Open app_pojavlauncher/src/main/res/layout-land/fragment_launcher.xml and locate the
top-bar definition around line 19; at line 24 the control with id @+id/hamburger_menu_icon
is declared as a com.kdt.mcgui.LauncherMenuButton with
android:src="@drawable/ic_three_dots" and app:tint, but no android:text or compound
drawable attributes.

2. Open app_pojavlauncher/src/main/java/com/kdt/mcgui/LauncherMenuButton.java and observe
at lines 4-12 that LauncherMenuButton extends fr.spse.extended_view.ExtendedButton and
configures text padding and compound drawable sizes in setSettings(), indicating it is a
Button/TextView-derived widget that uses compound drawables, not an ImageView-derived
widget that would honor android:src.

3. In the same LauncherMenuButton class, note there is no code reading an android:src
attribute or mapping it into a drawable, so on inflation the android:src specified in
fragment_launcher.xml has no effect and the LauncherMenuButton will only draw its
background (fear_glass_chip_bg) with no icon content.

4. Open
app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/fragments/MainMenuFragment.java and
confirm in onViewCreated (lines ~120-180) that the hamburger button is retrieved with
view.findViewById(R.id.hamburger_menu_icon) and given an onClickListener that calls
openCommandDashboard(); when this fragment is shown in landscape, the user sees a blank
glass chip button without the three-dots icon, making the command dashboard entrypoint
visually ambiguous even though the click still works.

Fix in Cursor Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** app_pojavlauncher/src/main/res/layout-land/fragment_launcher.xml
**Line:** 24:24
**Comment:**
	*Api Mismatch: `hamburger_menu_icon` is a `LauncherMenuButton` (button/text-based view), but it is configured with `android:src`/`app:tint` image-view style attributes; on this widget those attributes are not the correct API and the icon can fail to render as intended. Use a compatible image widget or set the icon through the button’s compound-drawable API (`drawableStart`/`drawable*`) so the menu icon reliably appears.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

Comment on lines +19 to +24
<LinearLayout android:id="@+id/top_bar" android:layout_width="0dp" android:layout_height="74dp" android:gravity="center_vertical" android:paddingStart="36dp" android:paddingEnd="24dp" app:layout_constraintStart_toEndOf="@id/left_nav" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent">
<LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical"><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Welcome back," android:textColor="#18B9FF" android:textSize="15sp" android:textStyle="bold"/><TextView android:id="@+id/account_name_display" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="minetwice" android:textColor="#FFFFFF" android:textSize="34sp" android:textStyle="bold"/></LinearLayout>
<TextView android:layout_width="150dp" android:layout_height="44dp" android:gravity="center" android:background="@drawable/fear_glass_chip_bg" android:text="● Online ˅" android:textColor="#FFFFFF" android:textSize="14sp"/>
<ImageButton android:id="@+id/account_button" android:layout_width="48dp" android:layout_height="48dp" android:layout_marginStart="28dp" android:background="@drawable/fear_glass_chip_bg" android:src="@drawable/ic_account_circle" android:padding="11dp" app:tint="#FFFFFF"/>
<ImageButton android:id="@+id/notification_button" android:layout_width="48dp" android:layout_height="48dp" android:layout_marginStart="12dp" android:background="@drawable/fear_glass_chip_bg" android:src="@drawable/ic_px_bell" android:padding="12dp" app:tint="#FFFFFF"/>
<com.kdt.mcgui.LauncherMenuButton android:id="@+id/hamburger_menu_icon" android:layout_width="48dp" android:layout_height="48dp" android:layout_marginStart="12dp" android:background="@drawable/fear_glass_chip_bg" android:src="@drawable/ic_three_dots" android:padding="12dp" app:tint="#FFFFFF"/>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggestion: The top bar combines multiple fixed-width controls (status chip and icon buttons with extra start margins) inside the remaining space after the fixed left rail, so on narrower devices the row cannot fit and controls will clip or be pushed offscreen. Make this row responsive (wrap/constraint chain/compact variant) instead of relying on fixed widths and large fixed gaps. [css layout issue]

Severity Level: Critical 🚨
- ❌ Top-bar account, notification, settings icons clip offscreen.
- ⚠️ Users cannot access account manager from small devices.
- ⚠️ Online status chip partially hidden, confusing presence state.
Steps of Reproduction ✅
1. Launch the app so `LauncherActivity` creates `MainMenuFragment`
(`LauncherActivity.java:153`) and the fragment inflates `R.layout.fragment_launcher`
(`MainMenuFragment.java:125`), bringing the top bar from `fragment_launcher.xml` into
view.

2. In `MainMenuFragment.onViewCreated`
(`app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/fragments/MainMenuFragment.java:162-182`),
the views `R.id.account_button`, `R.id.notification_button`, and `R.id.settings_button`
are bound and given click listeners, making the corresponding top-bar controls in
`fragment_launcher.xml` critical for account, notification, and settings access.

3. On a narrow portrait phone (e.g. ~360dp wide), the `top_bar` LinearLayout (line 19) is
constrained between the fixed-width sidebar `left_nav` (`210dp` at line 5) and the right
edge with `layout_width="0dp"` (match constraints), so its total width is approximately
`deviceWidth - 210dp` (~150dp); `paddingStart="36dp"` and `paddingEnd="24dp"` further
reduce usable child width to ~90dp.

4. The children in `top_bar` include a fixed-width status chip TextView
(`layout_width="150dp"` at line 21) and three 48dp-wide icon buttons with start margins
(`lines 22–24`), whose combined required width far exceeds the ~90dp available; Android’s
LinearLayout therefore clamps or clips these controls, causing the rightmost actions
(notification, settings, and hamburger menu) to be partially or fully offscreen and
difficult or impossible to tap on small-screen devices.

Fix in Cursor Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** app_pojavlauncher/src/main/res/layout/fragment_launcher.xml
**Line:** 19:24
**Comment:**
	*Css Layout Issue: The top bar combines multiple fixed-width controls (status chip and icon buttons with extra start margins) inside the remaining space after the fixed left rail, so on narrower devices the row cannot fit and controls will clip or be pushed offscreen. Make this row responsive (wrap/constraint chain/compact variant) instead of relying on fixed widths and large fixed gaps.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎


<TextView android:id="@+id/subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="36dp" android:text="Ready to play Minecraft?" android:textColor="#B7C8E8" android:textSize="14sp" app:layout_constraintStart_toEndOf="@id/left_nav" app:layout_constraintTop_toBottomOf="@id/top_bar"/>

<androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/hero_card" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="36dp" android:layout_marginTop="22dp" android:layout_marginEnd="280dp" android:layout_marginBottom="104dp" android:padding="18dp" android:background="@drawable/fear_glass_panel_bg" app:layout_constraintStart_toEndOf="@id/left_nav" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/subtitle" app:layout_constraintBottom_toBottomOf="parent">

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggestion: The central hero panel is constrained with a very large fixed end margin while a fixed-width sidebar is also present, which can drive the available width to zero on common phone widths and make the main launcher content disappear. Replace hardcoded large margins with responsive constraints (percent width/guidelines or size-qualified layouts) so the card always has usable width. [css layout issue]

Severity Level: Critical 🚨
- ❌ Hero card collapses; play button becomes unusable.
- ⚠️ Active instance details hidden; users lose context.
Steps of Reproduction ✅
1. Launch the Android app so `LauncherActivity` starts; on first creation it replaces
`R.id.container_fragment` with `new MainMenuFragment()`
(`app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LauncherActivity.java:153`), making
the main dashboard use `MainMenuFragment`.

2. `MainMenuFragment` constructs with `super(R.layout.fragment_launcher)`
(`app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/fragments/MainMenuFragment.java:125`),
which inflates `app_pojavlauncher/src/main/res/layout/fragment_launcher.xml` as the active
layout.

3. On a typical phone-width device in portrait (e.g. ~360dp), the root `ConstraintLayout`
in `fragment_launcher.xml` (line 2) has width equal to the device; the fixed left sidebar
`@+id/left_nav` (line 5) consumes `210dp`, and the hero card `@+id/hero_card` (line 29) is
constrained between `left_nav` and the parent with `android:layout_marginStart="36dp"` and
`android:layout_marginEnd="280dp"`.

4. The effective available width for `hero_card` becomes `deviceWidth - 210dp - 36dp -
280dp`, which is zero or negative on common phone widths; because `hero_card` uses
`layout_width="0dp"` (match constraints) with those margins, ConstraintLayout resolves it
to near-zero width, causing its contents (version label and play button at line 31) to
render collapsed or offscreen, so the main launcher panel and primary play control
effectively disappear on small screens.

Fix in Cursor Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** app_pojavlauncher/src/main/res/layout/fragment_launcher.xml
**Line:** 29:29
**Comment:**
	*Css Layout Issue: The central hero panel is constrained with a very large fixed end margin while a fixed-width sidebar is also present, which can drive the available width to zero on common phone widths and make the main launcher content disappear. Replace hardcoded large margins with responsive constraints (percent width/guidelines or size-qualified layouts) so the card always has usable width.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
👍 | 👎

@codeant-ai

codeant-ai Bot commented Jul 18, 2026

Copy link
Copy Markdown

CodeAnt AI finished reviewing your PR.

@kings880

Copy link
Copy Markdown

add mobile glues and launcher to laggy in entry level phone.

@minetwice minetwice closed this Jul 23, 2026
@minetwice

Copy link
Copy Markdown
Owner Author

Dude

1 similar comment
@minetwice

Copy link
Copy Markdown
Owner Author

Dude

@minetwice minetwice reopened this Jul 23, 2026
@minetwice minetwice closed this Jul 23, 2026
@minetwice minetwice reopened this Jul 23, 2026
@kings880

Copy link
Copy Markdown

Sorry bro someone using my GitHub✌️😭

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

Labels

codex size:L This PR changes 100-499 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants