diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ba716b9..62c5fcd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: path: ./dist/ - name: Rename APK - run: mv ./dist/app-release.apk ./dist/rl-mobile-manager.apk + run: mv ./dist/app-release.apk ./dist/rl-manager.apk - name: Publish release uses: marvinpinto/action-automatic-releases@latest diff --git a/Manager/app/build.gradle.kts b/Manager/app/build.gradle.kts index e305f0a..59cbc5f 100644 --- a/Manager/app/build.gradle.kts +++ b/Manager/app/build.gradle.kts @@ -35,7 +35,7 @@ android { useSupportLibrary = true } - buildConfigField("String", "TAG", "\"RLMobileManager\"") + buildConfigField("String", "TAG", "\"RLManager\"") buildConfigField("String", "SUPPORT_SERVER", "\"\"") // no support server yet buildConfigField("String", "PATCHES_REPO_OWNER", "\"meowarex\"") diff --git a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/widgets/updater/UpdaterViewModel.kt b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/widgets/updater/UpdaterViewModel.kt index aec036f..fe0fce4 100644 --- a/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/widgets/updater/UpdaterViewModel.kt +++ b/Manager/app/src/main/kotlin/com/meowarex/rlmobile/ui/widgets/updater/UpdaterViewModel.kt @@ -153,7 +153,7 @@ class UpdaterViewModel( val version = SemVer.parseOrNull(release.tagName) ?: return@mapNotNull null - val asset = release.assets.find { it.name == "rl-mobile-manager-${release.tagName}.apk" } + val asset = release.assets.find { it.name == "rl-manager-${release.tagName}.apk" } ?: return@mapNotNull null Triple(version, release, asset.browserDownloadUrl) diff --git a/README.md b/README.md new file mode 100644 index 0000000..c5bd6c2 --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# Radiant Lyrics Mobile + +A Manager app for Android that patches TIDAL to bring the Radiant Lyrics experience to mobile. + +## What it does + +- Blurred album art background in the player +- Progress pill overlay in lyrics mode - restored from old UI +- Hides the ugly cover art when in lyrics mode +- Syllable Level lyrics (SoonTM) + +## Installation + +### Batteries <3 +- Android 8.0+ +- TIDAL app (v2.192.0 / build 9089) + +### Steps +1. Download the latest `rl-manager.apk` from [Releases](../../releases/latest) +2. Install it (allow unknown sources if prompted) +3. Open the Manager & follow the instructions in the app +4. Install the patched TIDAL APK when prompted +5. You might need to disable Play Protect (might not be required so just ignore if you don't see a warning prompt) + +## Building from Source + +```bash +git clone https://github.com/meowarex/rl-mobile +cd rl-mobile/Manager +./gradlew :app:assembleDebug +``` + +## How Patching Works + +The Manager downloads the TIDAL APK, disassembles it with baksmali, applies each `.patch` file in `patches/` as a unified diff against the matching smali class, reassembles, and repacks the APK. + +Each patch file targets a specific class via its `--- a/` header — the filename itself is just for readability. + +## Contributing Patches + +### Adding a new patch + +1. Disassemble TIDAL with apktool: + ```bash + apktool d tidal.apk -o tidal-src + ``` + +2. Copy the target smali file and edit it: + ```bash + cp tidal-src/smali_classesX/com/tidal/.../Target.smali Target.smali.orig + # make your changes to Target.smali + ``` + +3. Generate the patch: + ```bash + diff -u Target.smali.orig Target.smali \ + --label a/com/tidal/.../Target.smali \ + --label b/com/tidal/.../Target.smali \ + > patches/my-feature.patch + ``` + +4. Test it applies cleanly: + ```bash + cp Target.smali.orig Target.smali + patch -p1 < patches/my-feature.patch + ``` + +### Rules for patches +- The `--- a/` header must be the full smali class path relative to the dex root (e.g. `com/tidal/android/feature/...`) +- Patches apply sequentially in filename order — if your patch touches a file another patch already modifies, make sure the context lines still match after the prior patch +- No new helper classes — the patcher only edits existing APK classes +- Keep patches focused: one feature per file +- Comment EACH patch line on the end with a simple 1-5 word description of what it does/or is for +- Make sure the patch file name is descriptive of what it does + +### Submitting +Fork the repo, add your patch to `patches/`, and open a PR describing what it changes and why. +- Patch PR should be prefixed with `[patch]` in the title + +## Credits + +Inrixia — TidaLuna framework