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
Conversation
|
Note: Commits not signed despite my 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
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
|
Drafted AI Errors arise after extended periods of time? 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. |
…th 7 updates Bumps the gradle-dependencies group with 7 updates in the / directory: | Package | From | To | | --- | --- | --- | | [gradle-wrapper](https://github.com/gradle/gradle) | `9.6.0` | `9.6.1` | | [com.google.dagger:hilt-android](https://github.com/google/dagger) | `2.59.2` | `2.60` | | [com.google.dagger:hilt-android-compiler](https://github.com/google/dagger) | `2.59.2` | `2.60` | | [io.ktor:ktor-server-core-jvm](https://github.com/ktorio/ktor) | `3.5.0` | `3.5.1` | | [io.ktor:ktor-server-netty-jvm](https://github.com/ktorio/ktor) | `3.5.0` | `3.5.1` | | [io.ktor:ktor-server-cio-jvm](https://github.com/ktorio/ktor) | `3.5.0` | `3.5.1` | | [com.google.dagger.hilt.android](https://github.com/google/dagger) | `2.59.2` | `2.60` | Updates `gradle-wrapper` from 9.6.0 to 9.6.1 - [Release notes](https://github.com/gradle/gradle/releases) - [Commits](gradle/gradle@v9.6.0...v9.6.1) Updates `com.google.dagger:hilt-android` from 2.59.2 to 2.60 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.59.2...dagger-2.60) Updates `com.google.dagger:hilt-android-compiler` from 2.59.2 to 2.60 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.59.2...dagger-2.60) Updates `com.google.dagger:hilt-android-compiler` from 2.59.2 to 2.60 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.59.2...dagger-2.60) Updates `io.ktor:ktor-server-core-jvm` from 3.5.0 to 3.5.1 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](ktorio/ktor@3.5.0...3.5.1) Updates `io.ktor:ktor-server-netty-jvm` from 3.5.0 to 3.5.1 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](ktorio/ktor@3.5.0...3.5.1) Updates `io.ktor:ktor-server-cio-jvm` from 3.5.0 to 3.5.1 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](ktorio/ktor@3.5.0...3.5.1) Updates `io.ktor:ktor-server-netty-jvm` from 3.5.0 to 3.5.1 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](ktorio/ktor@3.5.0...3.5.1) Updates `io.ktor:ktor-server-cio-jvm` from 3.5.0 to 3.5.1 - [Release notes](https://github.com/ktorio/ktor/releases) - [Changelog](https://github.com/ktorio/ktor/blob/main/CHANGELOG.md) - [Commits](ktorio/ktor@3.5.0...3.5.1) Updates `com.google.dagger.hilt.android` from 2.59.2 to 2.60 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](google/dagger@dagger-2.59.2...dagger-2.60) --- updated-dependencies: - dependency-name: gradle-wrapper dependency-version: 9.6.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.dagger:hilt-android dependency-version: '2.60' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: com.google.dagger:hilt-android-compiler dependency-version: '2.60' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: com.google.dagger:hilt-android-compiler dependency-version: '2.60' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: io.ktor:ktor-server-core-jvm dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: io.ktor:ktor-server-netty-jvm dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: io.ktor:ktor-server-cio-jvm dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: io.ktor:ktor-server-netty-jvm dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: io.ktor:ktor-server-cio-jvm dependency-version: 3.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.dagger.hilt.android dependency-version: '2.60' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
…path - Merge migrateTabOrder, ensureLibrarySortDefaults, and legacy favorite migration into a single deferred coroutine (2s delay) - Defer loadPersistedDailyMix and loadSearchHistory to after first frame (1.5s delay) - This prevents DataStore first() calls and DB queries from blocking the critical init path that feeds first-frame rendering
…storage - Load songs first (most critical tab, needed for Songs tab rendering) - Chain albums after songs, artists after albums, folders after artists using Job.join() to prevent 4 simultaneous Room queries from competing for limited I/O bandwidth on eMMC storage (Redmi) - Reduces GC pressure from concurrent heap allocations
…om queries - Replace songCountFlow (Room query) with allSongsFlow (in-memory) - Now all 3 flows in the combine are in-memory StateFlows, not Room queries - Eliminates redundant SELECT COUNT(*) query that re-emitted on every songs table write during sync
- Remove individual _isLoadingCategories toggles from albums and artists jobs (they no longer manage their own loading state) - Add a single watcher coroutine that sets _isLoadingCategories = true when songs complete, then false when all sequential jobs finish - Prevents 3 redundant recompositions of LibraryScreen through playerUiState during initial data load
- Library folders/loading combine: skip update when Triple unchanged - Sort options combine: skip update when SortOptionsSnapshot unchanged - AiUiSnapshot combine: skip update when snapshot unchanged - Prevents cascading recompositions of LibraryScreen from redundant playerUiState emissions during multiple rapid state changes
…quests - Add LYRICS to AiSystemPromptType enum - Add LYRICS case to AiSystemPromptEngine.buildPrompt with role/strategy - Update translateLyrics in AiStateHolder to use AiSystemPromptType.LYRICS - Add 'Lyrics' display label to formatPromptType in AiUsageComponents - Lyrics translation requests now appear distinctly in AI activity logs
… Parameters tab - Add GENERATION_PARAMETERS category to SettingsCategory enum with Tune icon - AI Integration tab now keeps only: provider selection, API key entry, model selection, base URL, and activity logs - New Generation Parameters tab gets: system prompt editor, temperature, top P, top K, max tokens, presence/frequency penalty, sample size, digest mode, and extended song fields - Add English string resources for the new category
…earch - Add description field to AiProvider enum entries - Create SearchableProviderSelector composable similar to SearchableModelSelector with search, filtering, and count label - Replace ThemeSelectorItem in AI_INTEGRATION settings with SearchableProviderSelector for provider selection - Search covers name, displayName, and description fields
- Update AI subtitle to reflect model selection and activity logs - Add GENERATION_PARAMETERS category strings to all locales - All new strings use English as fallback pending translator contributions
|
Just fixed most to all AI errors in #2497, your changes should work now! |
…dependencies-0242c4ee8e chore(deps): bump the gradle-dependencies group across 1 directory with 7 updates
Shall I merge your PR into my fork and test or would you like another approach? Any suggestions welcome, thanks! :) |
- Increase toast buffer from 1 to 5 to prevent rapid status/error drops
- Add status display card to CreateAiPlaylistDialog showing real-time
AI progress ("Analyzing...", "Selecting...", etc.)
- Pass aiStatus from LibraryScreen to CreateAiPlaylistDialog
- Fix missing import for RoundedCornerShape
|
yea i am still working on some final fixes so you can |
|
Doing it now! :)
|
…layerUiState - Expose searchResults, selectedSearchFilter, searchHistory directly from PlayerViewModel instead of deriving from 40-field playerUiState - Defer genre loading to LaunchedEffect gated by showGenreBrowse, avoiding heavy SELECT DISTINCT genre query on every navigation - Guard LaunchedEffect to skip performSearch for empty queries - Remove unused SearchUiSlice wrapper and flow imports
…ault models - Update AiProvider descriptions to reflect latest model families - Ollama: change to requiresApiKey=true with configurable URL (cloud) - DeepSeek: update endpoint to /v1, default deepseek-chat - Groq: update default to llama-3.3-70b-versatile - Mistral: update default to mistral-large-2411 - NVIDIA: update default to nemotron-70b-instruct - Kimi: update default to moonshot-v1-auto - GLM: update default to glm-4-plus - OpenRouter: update default to gemini-2.5-flash-preview free - Ollama: clear default URL (user configures their endpoint) - Allow empty API key for providers with requiresApiKey=false
… cooldowns - Replace mutableMapOf with ConcurrentHashMap for thread-safe cooldown tracking - Clean up expired cooldown entries on each generateContent call to prevent stale entries accumulating over time and blocking all providers - Reduce cooldown from 5 minutes to 2 minutes for faster recovery - Skip API key check for providers that don't require one
|
hey btw @daedaevibin can you provide me with some logs and more info on the ai issues so i can check other stuff as well? |
Actually, those issues were noticed during normal usage after an extended period of time. About three days later it started working, but the entire prompt response from the ai was being output where the lyrics go, including formatting markers like |
|
Oh then it should already fixed in the xml conversion for the new ai response handeler and token limiter. I have created a new class type promt for the ai lyrics so using that should resolve most of the issued you can analyze my code and update your lyrics part with it it should reslove all issues. |
|
For the token system i have added a new Generation Parameters to combat the same issues for the other playlists where the responses was cut in half due to restraints |
…and streamline base URL handling in settings
…lly scale maxTokens - Enhanced AiResponseCleaner.cleanTextResponse to strip paired **text**/__text__ markers - Strip conversational framing lines prepended by AI (Here is, Sure!, etc.) - Apply cleaning in AiStateHolder.translateLyrics before returning response - Dynamically scale maxTokens for LYRICS type based on input size (2x+ output, 4096 min, 16384 max) - Prevents aggressive cut-off and formatting markers in AI-translated lyrics
Bumps the gradle-dependencies group with 6 updates: | Package | From | To | | --- | --- | --- | | [org.junit.platform:junit-platform-launcher](https://github.com/junit-team/junit-framework) | `6.1.0` | `6.1.1` | | [org.junit.jupiter:junit-jupiter-api](https://github.com/junit-team/junit-framework) | `6.1.0` | `6.1.1` | | [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit-framework) | `6.1.0` | `6.1.1` | | [org.junit.vintage:junit-vintage-engine](https://github.com/junit-team/junit-framework) | `6.1.0` | `6.1.1` | | [com.google.errorprone:error_prone_annotations](https://github.com/google/error-prone) | `2.36.0` | `2.50.0` | | [org.junit.jupiter:junit-jupiter-params](https://github.com/junit-team/junit-framework) | `6.1.0` | `6.1.1` | Updates `org.junit.platform:junit-platform-launcher` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.0...r6.1.1) Updates `org.junit.jupiter:junit-jupiter-api` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.0...r6.1.1) Updates `org.junit.jupiter:junit-jupiter-engine` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.0...r6.1.1) Updates `org.junit.vintage:junit-vintage-engine` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.0...r6.1.1) Updates `com.google.errorprone:error_prone_annotations` from 2.36.0 to 2.50.0 - [Release notes](https://github.com/google/error-prone/releases) - [Commits](google/error-prone@v2.36.0...v2.50.0) Updates `org.junit.jupiter:junit-jupiter-params` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.0...r6.1.1) Updates `org.junit.jupiter:junit-jupiter-api` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.0...r6.1.1) Updates `org.junit.jupiter:junit-jupiter-engine` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.0...r6.1.1) Updates `org.junit.vintage:junit-vintage-engine` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](junit-team/junit-framework@r6.1.0...r6.1.1) --- updated-dependencies: - dependency-name: org.junit.platform:junit-platform-launcher dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.vintage:junit-vintage-engine dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: com.google.errorprone:error_prone_annotations dependency-version: 2.50.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: org.junit.jupiter:junit-jupiter-params dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.jupiter:junit-jupiter-api dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.junit.vintage:junit-vintage-engine dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
…dependencies-8e3801c0aa chore(deps): bump the gradle-dependencies group with 6 updates
…th 22 updates Bumps the gradle-dependencies group with 22 updates in the / directory: | Package | From | To | | --- | --- | --- | | androidx.compose.ui:ui-text-google-fonts | `1.11.3` | `1.11.4` | | androidx.compose.ui:ui | `1.11.3` | `1.11.4` | | androidx.compose.ui:ui-graphics | `1.11.3` | `1.11.4` | | androidx.compose.ui:ui-tooling | `1.11.3` | `1.11.4` | | androidx.compose.ui:ui-tooling-preview | `1.11.3` | `1.11.4` | | androidx.compose.ui:ui-test-manifest | `1.11.3` | `1.11.4` | | androidx.compose.ui:ui-test-junit4 | `1.11.3` | `1.11.4` | | androidx.compose.animation:animation | `1.11.3` | `1.11.4` | | androidx.compose.foundation:foundation | `1.11.3` | `1.11.4` | | androidx.glance:glance | `1.3.0-alpha01` | `1.3.0-alpha02` | | androidx.glance:glance-appwidget | `1.3.0-alpha01` | `1.3.0-alpha02` | | androidx.glance:glance-material3 | `1.3.0-alpha01` | `1.3.0-alpha02` | | androidx.hilt:hilt-lifecycle-viewmodel-compose | `1.3.0` | `1.4.0` | | androidx.hilt:hilt-navigation-compose | `1.3.0` | `1.4.0` | | androidx.hilt:hilt-work | `1.3.0` | `1.4.0` | | androidx.hilt:hilt-compiler | `1.3.0` | `1.4.0` | | androidx.compose:compose-bom | `2026.06.00` | `2026.06.01` | | [org.jetbrains.kotlinx:kotlinx-collections-immutable](https://github.com/Kotlin/kotlinx.collections.immutable) | `0.5.0` | `0.5.1` | | androidx.compose.material3:material3 | `1.5.0-alpha22` | `1.5.0-alpha23` | | [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework) | `4.2.0` | `4.2.1` | | androidx.test.uiautomator:uiautomator | `2.3.0` | `2.4.0` | | androidx.baselineprofile | `1.5.0-alpha06` | `1.5.0-alpha07` | Updates `androidx.compose.ui:ui-text-google-fonts` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui-graphics` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui-tooling` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui-tooling-preview` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui-test-manifest` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui-test-junit4` from 1.11.3 to 1.11.4 Updates `androidx.compose.animation:animation` from 1.11.3 to 1.11.4 Updates `androidx.compose.foundation:foundation` from 1.11.3 to 1.11.4 Updates `androidx.glance:glance` from 1.3.0-alpha01 to 1.3.0-alpha02 Updates `androidx.glance:glance-appwidget` from 1.3.0-alpha01 to 1.3.0-alpha02 Updates `androidx.glance:glance-material3` from 1.3.0-alpha01 to 1.3.0-alpha02 Updates `androidx.glance:glance-appwidget` from 1.3.0-alpha01 to 1.3.0-alpha02 Updates `androidx.glance:glance-material3` from 1.3.0-alpha01 to 1.3.0-alpha02 Updates `androidx.hilt:hilt-lifecycle-viewmodel-compose` from 1.3.0 to 1.4.0 Updates `androidx.hilt:hilt-navigation-compose` from 1.3.0 to 1.4.0 Updates `androidx.hilt:hilt-work` from 1.3.0 to 1.4.0 Updates `androidx.hilt:hilt-compiler` from 1.3.0 to 1.4.0 Updates `androidx.hilt:hilt-navigation-compose` from 1.3.0 to 1.4.0 Updates `androidx.hilt:hilt-work` from 1.3.0 to 1.4.0 Updates `androidx.hilt:hilt-compiler` from 1.3.0 to 1.4.0 Updates `androidx.compose:compose-bom` from 2026.06.00 to 2026.06.01 Updates `androidx.compose.ui:ui` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui-graphics` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui-tooling` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui-tooling-preview` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui-test-manifest` from 1.11.3 to 1.11.4 Updates `androidx.compose.ui:ui-test-junit4` from 1.11.3 to 1.11.4 Updates `org.jetbrains.kotlinx:kotlinx-collections-immutable` from 0.5.0 to 0.5.1 - [Release notes](https://github.com/Kotlin/kotlinx.collections.immutable/releases) - [Changelog](https://github.com/Kotlin/kotlinx.collections.immutable/blob/master/CHANGELOG.md) - [Commits](Kotlin/kotlinx.collections.immutable@v0.5.0...v0.5.1) Updates `androidx.compose.material3:material3` from 1.5.0-alpha22 to 1.5.0-alpha23 Updates `org.checkerframework:checker-qual` from 4.2.0 to 4.2.1 - [Release notes](https://github.com/typetools/checker-framework/releases) - [Changelog](https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md) - [Commits](typetools/checker-framework@checker-framework-4.2.0...checker-framework-4.2.1) Updates `androidx.test.uiautomator:uiautomator` from 2.3.0 to 2.4.0 Updates `androidx.baselineprofile` from 1.5.0-alpha06 to 1.5.0-alpha07 --- updated-dependencies: - dependency-name: androidx.compose.ui:ui-text-google-fonts dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui-graphics dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui-tooling dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui-tooling-preview dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui-test-manifest dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui-test-junit4 dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.animation:animation dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.foundation:foundation dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.glance:glance dependency-version: 1.3.0-alpha02 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.glance:glance-appwidget dependency-version: 1.3.0-alpha02 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.glance:glance-material3 dependency-version: 1.3.0-alpha02 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.glance:glance-appwidget dependency-version: 1.3.0-alpha02 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.glance:glance-material3 dependency-version: 1.3.0-alpha02 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.hilt:hilt-lifecycle-viewmodel-compose dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: androidx.hilt:hilt-navigation-compose dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: androidx.hilt:hilt-work dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: androidx.hilt:hilt-compiler dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: androidx.hilt:hilt-navigation-compose dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: androidx.hilt:hilt-work dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: androidx.hilt:hilt-compiler dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: androidx.compose:compose-bom dependency-version: 2026.06.01 dependency-type: direct:production dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui-graphics dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui-tooling dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui-tooling-preview dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui-test-manifest dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.ui:ui-test-junit4 dependency-version: 1.11.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.jetbrains.kotlinx:kotlinx-collections-immutable dependency-version: 0.5.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.compose.material3:material3 dependency-version: 1.5.0-alpha23 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: org.checkerframework:checker-qual dependency-version: 4.2.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies - dependency-name: androidx.test.uiautomator:uiautomator dependency-version: 2.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies - dependency-name: androidx.baselineprofile dependency-version: 1.5.0-alpha07 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
…atching, romanization detection
|
PR Updated, check main description message. (Will be working to close issues i have opened on my fork to cover additional items, you may check as required.) |
|
Yes everything looks fine. I'll do some testing after I have time . |
…og stuck, non-Latin search - Increase lyrics translation token cap from 16384 to 32768 - Use 3x output estimation (original+translation per line) - Expand CJK detection to include Thai, Arabic, Greek, Hebrew, Hindi, Punjabi - Remove false 'already translated' guard that checked stale UI state - Reorder lyrics source priority: local file > embedded > DB > song.lyrics - Close lyrics search dialog on Success (sync searchUiState with dialog visibility) - Add romanized artist search strategies for non-Latin scripts - Improve translation prompt to handle both synced and plain (unsynced) lyrics - Fix fetchFromRemote missing return@withContext for exact-match - Fix bulk LRC scanner to use Unicode-aware regex - Fix thinking model detection false positives - Add AI response cache cleanup (7-day TTL) - Consolidate duplicate model filtering (UnifiedModelFilter) - Move Gemini API key from URL query param to HTTP header - Remove dead code (countTokens, duplicate clearAll, FQN imports)
…duplication #58: Shared OkHttpClient singleton for AI clients - Added @AiOkHttpClient qualifier in Qualifiers.kt - Provided shared OkHttpClient in AppModule.kt with 30s/60s/30s timeouts - Injected into AiClientFactory and passed to GeminiAiClient/GenericOpenAiClient - Removed per-client OkHttpClient creation from GeminiAiClient and GenericOpenAiClient - Connection pool is now reused across all AI client instances #64: Fix high-res FLAC metadata write skipping - Changed updateFileMetadataWithTagLib to return false for problematic FLAC instead of true (was silently succeeding without writing) - Added FLAC verification after JAudioTagger commit to detect failed writes - Falls back to TagLib if JAudioTagger fails on FLAC files #67: Extract hardcoded provider labels, deduplicate sections - AiClientFactory now uses provider.displayName instead of hardcoded strings - Removed 80+ lines of dead per-provider StateFlows from SettingsViewModel - Removed dead per-provider system prompt change/reset functions - Removed dead per-provider model change functions
…ode quality improvements - Fix LyricsRepositoryImpl: Song.id.toLong() → toLongOrNull() with guards for non-numeric IDs (Telegram, Netease, GDrive sources) - Fix return type mismatch in scanAndAssignLocalLrcFiles - Remove dead favorites operations from MusicDao and UserPreferencesRepository (favorites now managed via FavoritesDao with SQL triggers) - Extract duplicated AiUsageReportSection composable in SettingsCategoryScreen - Hoist 9 inline collectAsStateWithLifecycle calls in Generation Parameters - SearchScreen: derive selectedSongIds/selectedPlaylistIds from remembered sets instead of separate Flow collections; pass isShuffleEnabled as param - SongEntity: toLongOrNull() with explicit exception for invalid IDs - SongRemovalStateHolder: guard non-numeric Song.id on delete
Overview
This PR combines multi-language romanization support, new app languages, dedicated Lyrics settings section, lint fixes, and merges VoidX3D PR #2497 (AI provider overhaul + performance optimization) with additional bug fixes on top.
107 files changed (excluding VoidX3D commits)
New Features
Multi-language romanization (
MultiLangRomanizer)romanizeVietnamese(): NFKD-decomposes and strips diacritics to plain ASCII LatinNew app languages
values-ja/)values-vi/) and Traditional Chinese (values-zh-rTW/)locales_config.xmlregisters all 14 supported localesLYRICS settings category
AI settings improvements (from VoidX3D PR #2497 + fixes)
SearchableProviderSelectorwith live searcheffectiveMaxTokensinterpolatescharsPerTokenbetween 1 (CJK) and 4 (Latin)Performance optimizations (from VoidX3D PR #2497)
SELECT COUNT(*)queriesBug Fixes
Lyrics translation fixes
song.lyricsLyrics search fixes
AI system fixes
UnifiedModelFilterconsistentlycountTokens(), duplicateclearAll(), FQN importsArchitecture fixes
@AiOkHttpClientqualifier, preserving connection pools across all provider instancesupdateFileMetadataWithTagLibnow returnsfalsefor problematic FLAC (was silently returningtruewithout writing); added FLAC verification after JAudioTagger commitAiClientFactoryusesprovider.displayNameinstead of hardcoded strings; removed 80+ lines of dead per-provider StateFlows and change/reset functions fromSettingsViewModelOther fixes
fetchFromRemoteexact-match result now properly returned (missingreturn@withContext)ConcurrentHashMapwith auto-cleanupLocale.getDefault()in composablesLint errors (22 resolved)
MissingDefaultResourcevalues/plurals.xmlNewApi@RequiresApi(31)WrongConstantNonObservableLocaleMissingIntentFilterForMediaSearchCI & Build
--no-build-cacheto all Gradle build steps in CI workflowsmaxHeapSizefromapp/build.gradle.ktsSecurity & Utility
ServerUrlUtils.kt: Server URL validation utility to prevent SSRF/malformed URLsapp/lint.xml: Lint baseline configurationBreaking Changes
requiresApiKey=true)Testing
./gradlew :app:lintDebug— PASS (0 errors)./gradlew :app:testDebugUnitTest— 388 tests pass, 5 pre-existing failures (unrelated to this PR)Credits