Consolidated community contributions: AI architecture overhaul, tablet optimization, localization (ja/ar/pt-BR/fr), customizable library tabs, playlist concurrency fix, UI improvements, security hardening, and code quality pass#2404
Conversation
…or the Arabic resource directory
…anguage enum and remove legacy translation keys
Add widthIn(max = 540.dp) to dialogs and several setup pages to constrain content on wide screens and import required layout helpers. Rename the SineWaveLine parameter from `waves` to `wavesDensity`, update its KDoc and default, and adjust the theta calculation to scale density relative to a 380dp baseline width. Update all call sites (BetaInfoBottomSheet, ChangelogBottomSheet, PlaylistContainer, SetupScreen, etc.) to use `wavesDensity`. Also small UI tweaks in SetupScreen: comment out CenterHorizontally alignment, reduce a spacer height, and set the welcome artwork to requiredWidth(380.dp). These changes improve responsive layout behavior and make the sine wave drawing density consistent across different widths.
f again
still working on the min width and the back animation
…dd/remove) • Added add/remove buttons to allow users to add, remove, the tabs from the library screen. • Implemented persistent storage for library tab configurations in UserPreferencesRepository. • Updated LibraryViewModel/PlayerViewModel to handle saving and resetting tab orders. • Modified LibraryScreen to dynamically render the navigation pager based on the user's tab preferences.
Translate all 10 string resource files into Japanese (~1,470 strings). Japanese plurals use quantity="other" only, which covers all cases. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add JAPANESE("ja", R.string.settings_language_japanese) to AppLanguage enum
- Add <locale android:name="ja"/> to locales_config.xml
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add the "Japanese" language label in each language's own translation: en=Japanese, de=Japanisch, es=Japonés, fr=Japonais, in=Jepang, it=Giapponese, ko=일본어, nb=Japansk, ru=Японский, tr=Japonca, zh=日语 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Bumps the gradle-dependencies group with 1 update in the / directory: [com.google.genai:google-genai](https://github.com/googleapis/java-genai). Updates `com.google.genai:google-genai` from 1.58.0 to 1.59.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.59.0) --- updated-dependencies: - dependency-name: com.google.genai:google-genai dependency-version: 1.59.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout). 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) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' 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 1 update: [com.google.genai:google-genai](https://github.com/googleapis/java-genai). Updates `com.google.genai:google-genai` from 1.58.0 to 1.59.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.59.0) --- updated-dependencies: - dependency-name: com.google.genai:google-genai dependency-version: 1.59.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gradle-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
Security:
- Fix OkHttp response body leaks in AI clients by using .use{} blocks
- All HTTP responses now properly closed in OpenAiCompatibleClient base
Error handling:
- Add Timber logging to silent catch blocks in EqualizerPreferencesRepository,
PlaylistViewModel, LyricsStateHolder, FileExplorerStateHolder,
DeviceCapabilitiesViewModel, PhoneDirectWatchTransferCoordinator
Refactoring:
- Extract OpenAiCompatibleClient base class from DeepSeek, Groq, Mistral,
GenericOpenAi clients (~600 lines of duplicated code removed)
- Extract ServerUrlUtils for shared URL normalization/validation logic
used by NavidromeCredentials and JellyfinCredentials
Tests:
- Add AiClientFactoryTest (all providers, blank key validation)
- Add OpenAiCompatibleClientTest (config, model filtering, token counting)
- Add CloudMusicUtilsTest (JSON parsing, artist name parsing)
- Add ServerUrlUtilsTest (URL normalization, validation, local network checks)
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
The abstract val 'defaultModel' generated a getDefaultModel() JVM getter that clashed with the AiClient interface's getDefaultModel() function. Renamed to 'providerDefaultModel' and 'providerDefaultModels' to avoid the accidental override. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…/github-actions-640176b5ab chore(deps): bump actions/checkout from 6 to 7 in the github-actions group
…nai:google-genai from 1.58.0 to 1.59.0
…aylist edits from concurrent song removals
…layerHQ#2371 PR #41 refactored AI clients into OpenAiCompatibleClient base class. Upstream PixelPlayerHQ#2371 deleted separate clients entirely, unified into GenericOpenAiClient. Resolution: accept PixelPlayerHQ#2371's deletions, remove now-dead OpenAiCompatibleClient and its test, update AiClientFactoryTest to match new architecture. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…convention Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ated-upstream-prs Consolidated upstream PRs: AI overhaul, tablet support, localization (ja/ar/pt-BR/fr), tab management, playlist fix, UI fixes, deps bump
SummaryBrings together 12 community PRs, security hardening, error observability, code deduplication, performance optimizations, and test coverage across 169 files (7,980 insertions, 4,032 deletions). Community PRs Consolidated
AI Architecture Overhaul (#2371)
Tablet Optimization (#2363)
Localization
Customizable Library Tabs (#2373)
Playlist Concurrency Fix (#2400)
UI Improvements (#2383)
Security Hardening
Code Quality
Tests
Dependency Updates
Conflict Resolution Notes
|
…s page control buttons
Bumps the gradle-dependencies group with 1 update: [gradle-wrapper](https://github.com/gradle/gradle). 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) --- 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 ... Signed-off-by: dependabot[bot] <support@github.com>
…dependencies-30ba516ba3 chore(deps): bump gradle-wrapper from 9.5.1 to 9.6.0 in the gradle-dependencies group
|
WoW! |
- Refine the visual effect and usage scope of the Gaussian blur while - optimizing its overall rendering smoothness. Additionally, add the new - `PlayingEqIconV2` component, featuring a spectrum animation that dynamically synchronizes with the music rhythm.
- AudioRmsSink: Introduce exponential decay for `maxRms` to prevent the visualizer from getting stuck after loud volume spikes. - AudioRmsSink: Add support for parsing 32-bit Float PCM encoding to fix amplitude calculation in Hi-Fi mode. - PlayingEqIconV2: Remove redundant `derivedStateOf` and `remember` wrappers around high-frequency data classes to eliminate recomposition overhead and animation stutters.
|
Merged #2425 updates. |
|
commits/PRs merged: 8b1f6aab Merge pull request #2383 from Ayaanh001/master
d43f0f73 Merge branch 'master' into master
51f23d78 Merge pull request #2347 from rebornlokii/masterthis places me at 63 commits ahead of master here, mainly consisting of other PRs, including some of my own changes. |
|
ngl we dont need a pr like this, because localizations are stale until play store release, tablet optimization is not on our "first to merge" things, closing this will help more than merging it all at once, if you have your own changes, just pr them. |
I agree, this will only complicate things more. Also, my i18n PR isn't even done yet(it's set as draft). |
To place everything into one place, along with other improvements and work, I have merged all the pending PRs into my own fork and I am working currently to resolve conflicts.