Repository navigation
feat: Obsidian VIP premium theme, English README, and PR APK builds - #2
Merged
Merged
Conversation
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>
Owner
Author
|
CI verified. The
This is the first real compile of these changes, since my environment has no Android SDK/NDK. It confirms the This comment was created by an AI agent (OpenHands) on behalf of the user. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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_VIPcolour theme — deep obsidian surfaces, champagne-gold primary, violet and aurora-cyan accents — designed to read as "premium" while staying reactive to theme changes.ui/theme/PremiumTheme.ktobsidianVipDarkscheme,LocalPremiumTheme,premiumGoldGradient(),rememberPremiumSheenBrush(),premiumBorderStroke(),Modifier.premiumAmbience(),PremiumBadge()ui/theme/Theme.ktOBSIDIAN_VIP, forces dark in both branches, providesLocalPremiumThemeui/theme/ColorTheme.kt,NativeThemeUtils.ktui/screens/main/MainScreen.ktui/components/BackgroundCard.ktLauncherSettingsScreen.kt, all 3strings.xmlThe 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.mdis 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 asREADME_ZH_CN.md;README_EN_US.mdis removed as redundant. Language cross-links updated in all three files.3. CI: APK builds on pull requests
build.ymlpreviously had nopull_requesttrigger and the job was explicitly gated withif: github.event_name != 'pull_request', so a PR would show no build at all. Now:pull_requesttrigger added; the gating condition is removed.all) is built — enough to prove the code compiles. Manual and release runs still build all five.concurrencygroup so superseded pushes to the same PR cancel their predecessor runs.permissions: contents: readand aVARIANTenv with aDebugdefault, sinceinputs.variantis empty onpull_request.push_ci.ymlnarrowed frombranches: '**'tomain, so the same commit isn't built twice once PR builds are live.4. GPLv3 fork hygiene
gradle.propertiesnow names the fork Java Ant Launcher, pointsurl_homeat 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:
entitlements/mcstoreendpoint, and online servers independently verify ownership server-side. Removing the client-side check would not enable multiplayer — it would only be a DRM bypass.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,
compileSdk37 withminorApiLevel 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 thebuild.ymlchange.What I did verify:
when (colorTheme)blocks inTheme.ktand the settings label mapping all handleOBSIDIAN_VIP.strings.xmlfiles as well-formed XML with no duplicate keys..jksfiles 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