Skip to content

This PR adds multi-language romanization support, new app languages, a dedicated Lyrics settings section, fixes 21 pre-existing lint errors, and includes various improvements across the codebase.#2457

Draft
daedaevibin wants to merge 15 commits into
PixelPlayerHQ:masterfrom
Veridian-Zenith:master

Conversation

@daedaevibin

@daedaevibin daedaevibin commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

✨ New Features

Multi-language romanization (MultiLangRomanizer)

  • Added detection for 5 new scripts: isThai(), isArabic(), isGreek(), isHebrew(), isVietnamese() — enables automatic language identification for AI translation prompts
  • Added romanizeVietnamese(): NFKD-decomposes and strips diacritics to plain ASCII Latin (e.g., "Việt Nam" → "Viet Nam")
  • Cyrillic romanization: Now actively routed in LyricsRepositoryImpl for all songs with Cyrillic text
  • AI translation enhancement: AiStateHolder.detectLyricsLanguage() identifies the source language before sending translation requests, prefixing prompts with detected language for better AI results

New app languages

  • Japanese: Full translation (values-ja/) — 10 string files across all categories
  • Vietnamese (values-vi/) and Traditional Chinese (values-zh-rTW/): Complete translation resource sets
  • Added missing translations: German changelogs/settings, Korean/Norwegian/Russian changelogs/settings
  • Locale config: locales_config.xml now registers all 14 supported locales for Android 13+ language picker

Note: I only touched my own languages aside from the new additions.

LYRICS settings category

  • New dedicated LYRICS category in Settings between APPEARANCE and PLAYBACK
  • Moves lyrics source priority (embedded/online/local) and immersive lyrics display settings into their own section
  • Distinct color scheme in the settings category grid

🐛 Bug Fixes

Lint errors (21 resolved)

Type Count Fix
MissingDefaultResource 14 Created base values/plurals.xml with English defaults for all Arabic-only plural names
NewApi 3 Annotated BlurEffectCache with @RequiresApi(31); guarded ForegroundServiceStartNotAllowedException with SDK check
WrongConstant 1 Suppressed lint on takePersistableUriPermission flags
NonObservableLocale 2 Suppressed lint on Locale.getDefault() in composable functions
MissingIntentFilterForMediaSearch 1 Added MEDIA_PLAY_FROM_SEARCH intent-filter to MainActivity for Android Auto voice search

Lyrics loading priority

  • Fixed loading order in LyricsStateHolder: local files → embedded metadata → stored database lyrics (was incorrectly prioritizing stored lyrics over local sources)

AI max tokens

  • Increased default from 4096 → 8192 for longer AI responses
  • Fixed redundant resetLyricsSearchState() call when opening the lyrics sheet

🔧 CI & Build

  • Added --no-build-cache to all Gradle build steps in CI workflows for reproducible builds
  • Reordered CodeQL workflow: Kotlin version pinning now happens before Gradle setup
  • Removed explicit maxHeapSize from app/build.gradle.kts
  • Cleaned up version overrides in gradle/libs.versions.toml

🛡️ Security & Utility

  • ServerUrlUtils.kt: Server URL validation utility to prevent SSRF/malformed URLs in Jellyfin, Navidrome, and GDrive configurations
  • app/lint.xml: Lint baseline configuration to manage known issues

📦 New Files

app/src/main/res/values-ja/          (10 string files — Japanese)
app/src/main/res/values-vi/           (10 string files — Vietnamese)
app/src/main/res/values-zh-rTW/       (10 string files — Traditional Chinese)
app/src/main/res/values-de/           (updated — German changelogs/settings)
app/src/main/res/values-ko/           (updated — Korean changelogs/settings)
app/src/main/res/values-nb/           (updated — Norwegian changelogs/settings)
app/src/main/res/values-ru/           (updated — Russian changelogs/settings)
app/src/main/res/values/plurals.xml   (base plural declarations)
app/lint.xml                          (lint baseline)
app/src/main/java/.../ServerUrlUtils.kt

@daedaevibin

daedaevibin commented Jun 24, 2026

Copy link
Copy Markdown
Contributor Author

Note:

Commits not signed despite my git settings being set to always sign commits. Unsure as to the reason why, currently investigating...


Corrected, rebased, and re-pushed.

New values-ja/ resource directory with all string categories translated.
… Vietnamese

- isThai(): detect Thai script via U+0E00..U+0E7F
- isArabic(): detect Arabic script via U+0600..U+06FF
- isGreek(): detect Greek script via U+0370..U+03FF
- isHebrew(): detect Hebrew script via U+0590..U+05FF
- isVietnamese(): detect Vietnamese via Latin Extended Additional block (U+1EA0..U+1EF9) and specific chars (ă, đ, ơ, ư)
- romanizeVietnamese(): NFKD-decompose and strip diacritics to plain ASCII
LyricsRepositoryImpl.kt:
- Route Cyrillic text to romanizeCyrillic() before falling through
- Route Vietnamese text to romanizeVietnamese()
- Include synced lyrics translations in LRC output

AiStateHolder.kt:
- Detect source language before AI translation using MultiLangRomanizer
- Support all newly detected scripts (Thai, Arabic, Greek, Hebrew, Vietnamese)
- Prefix translation prompt with detected language for better AI results
MissingDefaultResource (14): Create base values/plurals.xml with English defaults
  for all 14 plural names that only existed in values-ar/

NewApi (3): Annotate BlurEffectCache with @RequiresApi(31); guard
  ForegroundServiceStartNotAllowedException with SDK_INT >= S check

WrongConstant (1): Suppress lint on takePersistableUriPermission flags

NonObservableLocale (2): Suppress lint on Locale.getDefault() in composables

MissingIntentFilterForMediaSearch (1): Add MEDIA_PLAY_FROM_SEARCH intent-filter
  to MainActivity for Android Auto voice search support
- Add JAPANESE, TRADITIONAL_CHINESE, VIETNAMESE to AppLanguage enum
- Update locales_config.xml with all supported locales (de, en, es, fr, in, it, ja, ko, nb, ru, tr, vi, zh-CN, zh-TW)
- Add German translations for changelogs and settings
- Add Korean, Norwegian Bokmal, Russian translations for changelogs and settings
- Add Japanese strings_settings.xml update
SettingsCategory.kt:
- Add LYRICS category with QueueMusic icon between APPEARANCE and PLAYBACK
- Move EQUALIZER after PLAYBACK for better grouping
- Add DEVICE_CAPABILITIES after DEVELOPER

SettingsCategoryScreen.kt:
- Extract lyrics management (source priority, reset) into dedicated LYRICS section
- Extract lyrics display (immersive mode, auto-hide delay) into LYRICS section
- Keep PLAYBACK focused on playback-specific settings only
- Suppress NonObservableLocale in AI usage section

SettingsScreen.kt:
- Add color scheme for LYRICS category

FullPlayerContent.kt:
- Remove redundant resetLyricsSearchState() call when opening lyrics sheet
- Add --no-build-cache to all Gradle build steps for CI reproducibility
- Reorder CodeQL workflow steps: pin Kotlin version before Gradle setup
- Remove explicit maxHeapSize from app build.gradle.kts
- Remove kotlin and ksp version overrides from libs.versions.toml
AiPreferencesRepository.kt: Increase default AI max tokens from 4096 to 8192
LyricsStateHolder.kt: Fix lyrics loading priority - read local file and
  embedded lyrics before falling back to stored database lyrics
…lint baseline

- ServerUrlUtils.kt: URL utility for server configuration
- values-vi/ and values-zh-rTW/: Vietnamese and Traditional Chinese translation resources
- app/lint.xml: Lint baseline configuration file
dependabot Bot and others added 5 commits June 24, 2026 22:23
Bumps the github-actions group with 2 updates: [actions/checkout](https://github.com/actions/checkout) and [actions/cache](https://github.com/actions/cache).


Updates `actions/checkout` from 6 to 7
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v6...v7)

Updates `actions/cache` from 5 to 6
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](actions/cache@v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/cache
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps the gradle-dependencies group with 2 updates: [gradle-wrapper](https://github.com/gradle/gradle) and [com.google.genai:google-genai](https://github.com/googleapis/java-genai).


Updates `gradle-wrapper` from 9.5.1 to 9.6.0
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](gradle/gradle@v9.5.1...v9.6.0)

Updates `com.google.genai:google-genai` from 1.58.0 to 1.60.0
- [Release notes](https://github.com/googleapis/java-genai/releases)
- [Changelog](https://github.com/googleapis/java-genai/blob/main/CHANGELOG.md)
- [Commits](googleapis/java-genai@v1.58.0...v1.60.0)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gradle-dependencies
- dependency-name: com.google.genai:google-genai
  dependency-version: 1.60.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gradle-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
…/github-actions-02325a8da5

chore(deps): bump the github-actions group with 2 updates
…dependencies-4659e02046

chore(deps): bump the gradle-dependencies group with 2 updates
@daedaevibin daedaevibin marked this pull request as draft June 25, 2026 05:41
@daedaevibin

daedaevibin commented Jun 25, 2026

Copy link
Copy Markdown
Contributor Author

@theovilardo

Drafted


AI Errors arise after extended periods of time?
Investigating currently.


Results: Incapable of doing repair work at this time due to many at-home items occuring, including my Aunt's new baby!

Since I will be assisting with this child as she is a single mother, I have to relay my time to items of immediate concern, this includes my own physical health and similar items.

You may leave comments and or reviews on problematic items for me to see, I will review and correct any where possible as soon as I am available.

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.

1 participant