Skip to content

feat: Obsidian VIP premium theme, English README, and PR APK builds - #2

Merged
ChimeraAnt-DEV merged 1 commit into
mainfrom
feat/premium-theme-english-readme
Sep 17, 2026
Merged

ChimeraAnt-DEV merged 1 commit into
mainfrom
feat/premium-theme-english-readme

Conversation

@ChimeraAnt-DEV

Copy link
Copy Markdown
Owner

Summary

Three things in one PR: a new premium "VIP" theme, an English README aligned with the current upstream, and CI that actually builds an APK on pull requests.


1. Obsidian VIP premium theme (new)

A new OBSIDIAN_VIP colour theme — deep obsidian surfaces, champagne-gold primary, violet and aurora-cyan accents — designed to read as "premium" while staying reactive to theme changes.

Area Change
ui/theme/PremiumTheme.kt New. obsidianVipDark scheme, LocalPremiumTheme, premiumGoldGradient(), rememberPremiumSheenBrush(), premiumBorderStroke(), Modifier.premiumAmbience(), PremiumBadge()
ui/theme/Theme.kt Resolves OBSIDIAN_VIP, forces dark in both branches, provides LocalPremiumTheme
ui/theme/ColorTheme.kt, NativeThemeUtils.kt Enum entry + seed colours
ui/screens/main/MainScreen.kt VIP badge beside the title, ambience overlay layer
ui/components/BackgroundCard.kt Picks up the gold gradient border automatically
LauncherSettingsScreen.kt, all 3 strings.xml Theme entry and labels (en / zh-CN / zh-TW)

The premium effects are driven by Compose animation primitives and sit behind LocalPremiumTheme, so they cost nothing when another theme is active. The card border is a static gold gradient and the only animated element is the single ambience layer, to keep GPU cost predictable.

2. README → English, aligned with upstream

README.md is now English and mirrors the current upstream structure (About, Language/Translation, Build, License, Open Source Libraries) with the library table refreshed. The Chinese original is preserved as README_ZH_CN.md; README_EN_US.md is removed as redundant. Language cross-links updated in all three files.

3. CI: APK builds on pull requests

build.yml previously had no pull_request trigger and the job was explicitly gated with if: github.event_name != 'pull_request', so a PR would show no build at all. Now:

  • pull_request trigger added; the gating condition is removed.
  • On a PR, one architecture (all) is built — enough to prove the code compiles. Manual and release runs still build all five.
  • Added a concurrency group so superseded pushes to the same PR cancel their predecessor runs.
  • Added permissions: contents: read and a VARIANT env with a Debug default, since inputs.variant is empty on pull_request.
  • push_ci.yml narrowed from branches: '**' to main, so the same commit isn't built twice once PR builds are live.

4. GPLv3 fork hygiene

gradle.properties now names the fork Java Ant Launcher, points url_home at this repository, and the splash screen shows an "unofficial modified build" notice (translated to zh-CN/zh-TW). The license's additional terms require a modified version to be distinguishable and marked as non-official; this is that.


What this PR deliberately does not do

The original request included removing the need to own Minecraft. I did not implement that, and want the reasoning on the record so it isn't silently expected:

  • The ownership check is not a launcher setting. During Microsoft login the app calls Mojang's entitlements/mcstore endpoint, and online servers independently verify ownership server-side. Removing the client-side check would not enable multiplayer — it would only be a DRM bypass.
  • Implementing it would be circumvention of a licensing/authentication control, which I'm not able to do.

The legitimate path for the stated use case (Bedrock players on Android who can't afford a second copy) already exists in the codebase: the launcher supports offline/local accounts (localLogin, OfflineYggdrasilServer) with no purchase and no login, which covers single-player worlds and mods. I documented this in a new Accounts section in the README with a comparison table and step-by-step instructions. If that documentation is wrong or incomplete, that's a normal review comment and I'll fix it.


Verification

The environment has no Android SDK/NDK, and the project uses a preview toolchain (AGP 9.3, Kotlin 2.4.10, compileSdk 37 with minorApiLevel 2), so I could not run a full Gradle build locally. This PR intentionally relies on CI to produce the first real APK — that is the point of the build.yml change.

What I did verify:

  • Syntax-checked every modified Kotlin file with a standalone Kotlin compiler (JDK 21). No parse errors; the only diagnostics were unresolved references from the absent Compose classpath.
  • Confirmed the exhaustive when (colorTheme) blocks in Theme.kt and the settings label mapping all handle OBSIDIAN_VIP.
  • Validated all three strings.xml files as well-formed XML with no duplicate keys.
  • Parsed all workflow YAML and checked the trigger/matrix/env structure resolves as intended.
  • Confirmed no keystores or secrets were added to the diff (the two .jks files were already tracked upstream, untouched here).

Reviewer note: if CI fails, treat the build log as authoritative over my static checks — I had no way to compile Compose locally.


This PR was created by an AI agent (OpenHands) on behalf of the user.

@ChimeraAnt-DEV can click here to continue refining the PR

Adds a new "Obsidian VIP" colour theme (deep obsidian surfaces with a
champagne-gold primary and violet/aurora accents) intended to give the UI a
premium, reactive feel. The theme is selectable from Settings -> Launcher and
is force-dark so the visual identity stays consistent when the light/dark
toggle is flipped.

- PremiumTheme.kt: obsidianVipDark scheme, LocalPremiumTheme composition
  local, gold gradient, reactive sheen brush, premium card border, drifting
  ambience layer, and a VIP badge composable.
- Theme.kt / ColorTheme.kt / NativeThemeUtils.kt: register and resolve
  OBSIDIAN_VIP, and expose LocalPremiumTheme to the tree.
- MainScreen.kt: VIP badge next to the title and the ambience overlay.
- BackgroundCard.kt: picks up the gold border under the premium theme.
- LauncherSettingsScreen.kt + strings: theme entry and labels (en, zh-CN,
  zh-TW).

README is now English (README.md) and mirrors the current upstream structure,
with a new Accounts section documenting the supported offline/local account
flow. The Chinese original is preserved as README_ZH_CN.md; README_EN_US.md is
removed as redundant.

GPLv3 fork hygiene: app renamed to Java Ant Launcher, project URL pointed at
this fork, and an unofficial-build notice added to the splash screen.

CI: build.yml now runs on pull_request and produces a debug APK (single arch
on PRs, all architectures on manual/release runs), with a concurrency group so
superseded runs are cancelled. push_ci.yml is narrowed to main to avoid
building the same commit twice.

Co-authored-by: openhands <openhands@all-hands.dev>
@ChimeraAnt-DEV ChimeraAnt-DEV added documentation Improvements or additions to documentation enhancement New feature or request labels Sep 17, 2026 — with OpenHands AI

Copy link
Copy Markdown
Owner Author

CI verified. The pull_request trigger works and the APK builds cleanly:

  • Run: #35175365966 — build (all) passed in 6m30s
  • Artifact: debug apk (all) (394 MB universal debug, all ABIs, unminified — expected size for a debug build bundling LWJGL/SDL natives)

This is the first real compile of these changes, since my environment has no Android SDK/NDK. It confirms the OBSIDIAN_VIP enum wiring, the new PremiumTheme.kt file, and all three strings.xml edits compile and package correctly. Release artifacts and the per-architecture matrix are skipped on PRs by design; run the workflow manually (workflow_dispatch) to produce all five architectures.


This comment was created by an AI agent (OpenHands) on behalf of the user.

@ChimeraAnt-DEV
ChimeraAnt-DEV merged commit 488cb5d into main Sep 17, 2026
1 check passed
@ChimeraAnt-DEV
ChimeraAnt-DEV deleted the feat/premium-theme-english-readme branch September 17, 2026 02:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants