Skip to content

feat(ui): align the launcher UI with LeviLauncher for Windows - #454

Merged
futrime merged 4 commits into
mainfrom
feat/align-ui-with-windows
Nov 10, 2026
Merged

futrime merged 4 commits into
mainfrom
feat/align-ui-with-windows

Conversation

@futrime

@futrime futrime commented Nov 10, 2026 •

Copy link
Copy Markdown
Member

Summary

Rebuilds the app shell and every launcher page after LeviLauncher for Windows, and adds the Windows personalization options, while keeping controls sized for touch (buttons ≥ 40dp, list rows ≥ 44dp).

Shell

  • Left icon rail (Launch / Download / Instances / About / Settings) with the active-item pill and the theme toggle; top bar with back/forward history, breadcrumbs (首页 › 内容管理 › 世界), news and the account avatar; page area with the concave corner.
  • "Use top navigation bar" switches to the Windows navbar layout.
  • The front camera never covers a control, without shrinking the screen: the shell, chrome and wallpaper stay full screen; only the rail item at the camera's height moves below it, top bar items move only if the camera reaches the bar, and a page gets extra room only for the part of the camera past its own margins. The real cutout outline is used on API 31+. Pages without the shell (login, world editor, crash) do the same with their own margins; splash and game loading stay edge to edge.

Pages

Home, download (Google Play, merged from main), instances, instance settings, content management, content lists (worlds / packs / skins / servers / screenshots), mods, external mods, CurseForge, LeviMC mods, settings, about, accounts, news and quick launch now use the Windows structure: a header card with the title and main actions, white content cards, segmented tabs, pill buttons and colored icon chips, with Windows wording where a counterpart exists. Home moves Microsoft account to the avatar and quick launch into the launch button menu.

Two-pane pages (landscape phones)

A header card on top leaves lists only ~110-150dp tall on a landscape phone. Download, CurseForge, LeviMC mods (browse/installed), mods, external mods, content lists, instances, instance settings and settings therefore put the title, actions, search and filters (or the tabs, stacked vertically) in a left panel (240dp, 288dp from 840dp wide, scrolls if needed) and show the list at full height on the right. "Two-pane pages" in Personalization > Layout and motion (on by default) switches back to the Windows layout with the header on top; each page keeps both layouts with the same view ids.

Personalization (same options as Windows)

  • Theme mode: light, dark, manual schedule, sunrise/sunset (same time-zone based calculation as Windows), follow system.
  • Theme color per light/dark mode: the 14 Windows presets, the 35 "more colors" and a custom color; base layer (none / theme / custom color + opacity) under the wallpaper.
  • Layout and motion: top navigation bar, two-pane pages (Android only), disable animations (also follows the system "remove animations" setting).
  • Wallpaper: folder with random or sequential order, a new image on every launch and "next image"; single image; fit mode (smart / center / fit / stretch / tile / top left / top right); blur 0–50, brightness 20–100%, opacity 0–100%.
  • Interface material per mode: balanced / clear / solid presets, interface opacity, wallpaper overlay, readability protection (same formula as Windows) and reset.

Not ported: the Windows "interface blur" slider (Android cannot blur what is behind a view).

Testing

  • ./gradlew :app:assembleDebug builds.
  • On an API 35 emulator with a punch-hole cutout: opened every page in light and dark mode, with two-pane on and off, the sidebar and top-navbar layouts, a non-default theme color and a wallpaper; no crashes in the crash log. Cutout padding verified on the camera side.
  • Not verified on a physical device or with the camera on the other side in landscape.

Rebuild the app shell and every launcher page after the Windows launcher,
keeping touch-sized controls.

Shell
- Left icon rail with the active-item pill, a top bar with back/forward
  history, breadcrumbs, news and the account avatar, and the page area
  with the concave corner. A top navigation bar is available as on Windows.
- Keep the navigation and pages clear of the front camera cutout.

Look
- Windows palette (emerald, zinc neutrals) for light and dark mode, header
  cards, white content cards, segmented tabs, pill buttons, icon chips.
- Home, instances, instance settings, content management and lists, mods,
  external mods, CurseForge, LeviMC mods, settings, about, accounts, news
  and quick launch follow the Windows layouts and wording.

Personalization (same options as Windows)
- Theme mode: light, dark, manual schedule, sunrise/sunset, follow system;
  quick theme toggle in the navigation.
- Theme color per light/dark mode with the Windows presets and more colors,
  plus a custom color; base layer under the wallpaper.
- Layout and motion: top navigation bar, disable animations.
- Wallpaper: folder with random/sequential order and next image, single
  image, fit mode, blur, brightness and opacity.
- Interface material: presets, interface opacity, wallpaper overlay and
  readability protection.
Bring in the Google Play download page and fit it into the new shell:
- add Download to the sidebar rail, the top navbar and the breadcrumbs,
- restyle the download and Google sign-in pages after the Windows
  download page (header card, search, segmented filters, version table).

Also replace the shell-wide cutout padding with targeted avoidance: the
shell, chrome and wallpaper stay full screen, only the rail item at the
camera's height moves below it, top bar items move only if the camera
reaches the bar, and the page gets extra room only for the part of the
camera past its own margins. The real cutout outline is used on API 31+.
…witch

On landscape phones a header card on top leaves lists only ~110-150dp tall.
Download, CurseForge, LeviMC mods (browse/installed), mods, external mods,
content lists, instances, instance settings and settings now put the title,
actions, search and filters (or the tabs, stacked vertically) in a left panel
and show the list or content at full height on the right. The left panel is
240dp, 288dp from 840dp wide, and scrolls when it does not fit.

Personalization > Layout and motion gets "Two-pane pages" (on by default);
turning it off restores the Windows layout with the header on top. Each page
keeps both layouts with the same view ids.

Also: segmented controls gain a vertical mode and ellipsize long labels; the
download table moves type/state into the version cell in two-pane mode; the
mods table version column narrows on small screens; settings rows keep a
minimum title width; the appearance-mode control fits the narrower pane.
Each page is its own activity, so every rail tap cross-faded the whole
window, rail and top bar included, and the camera avoidance re-laid out
the rail a frame late.

- Navigation between launcher pages runs without a window animation; the
  shell stays put and only the page content fades in (from 40% opacity,
  so the page area never shows blank).
- Camera avoidance recomputes only when the cutout changes, and applies
  before the first draw (that draw is skipped when something moved).
- The rail's active pill is placed before the next draw, not a frame later.
@futrime
futrime merged commit 7e230f1 into main Nov 10, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants