Consolidated upstream PRs: AI overhaul, tablet support, localization (ja/ar/pt-BR/fr), tab management, playlist fix, UI fixes, deps bump#42
Merged
Conversation
Updated Italian strings in changelogs for improved clarity and consistency.
[ci skip]
…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
Renamed the central AI orchestration class from AiOrchestrator to AiHandler and updated all references across the codebase.
…s all providers - Create UnifiedModelFilter utility that filters out embedding, image, TTS, speech, moderation, vision-only, and other non-chat models - Update GeminiAiClient to use UnifiedModelFilter instead of hardcoded markers - Update GenericOpenAiClient to use UnifiedModelFilter instead of inline filter
These providers all use OpenAI-compatible APIs. Switching from dedicated client classes to GenericOpenAiClient eliminates duplicate code. The old class files are kept on disk but no longer referenced.
Add CUSTOM provider with hasConfigurableUrl=true and requiresApiKey=true for user-configured self-hosted/custom API endpoints.
CUSTOM provider uses GenericOpenAiClient with an empty default URL (user configures it via settings). createClientWithUrl allows creating a client with a custom base URL for configurable-URL providers.
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>
…urrently PlaylistPreferencesRepository edited playlists with an unsynchronized read-modify-write: userPlaylistsFlow.first() -> modify list -> updatePlaylist(). Removing several songs in quick succession fired concurrent coroutines that each read the same snapshot, so the last write won and the other removals were silently dropped. The Playlists-menu song count (songIds.size, read from the DB) then stayed stuck high, while the playlist detail screen still looked correct because it updates optimistically per tap. Serialize the read-modify-write editors (add/remove/reorder/rename/updatePlaylist /removeSongFromAllPlaylists) behind a coroutine Mutex so each edit reads and writes atomically. A private updatePlaylistLocked avoids re-entrant locking. Add an instrumentation regression test covering sequential add/remove, the concurrent-removal race, and the exact issue PixelPlayerHQ#2391 reproduction (fails before this change, passes after). Fixes PixelPlayerHQ#2391
…gs for consistency
…overhaul, new providers, and generation tuning
…plement customizable tab management
…lation and configure app languages Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…sing telegram channel topics and About screen buttons Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…nai:google-genai from 1.58.0 to 1.59.0
…aylist edits from concurrent song removals
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
…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>
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
Consolidates 12 open upstream PRs (from theovilardo/PixelPlayer) into a single merge-ready branch to minimize review overhead.
Included PRs
com.google.genai:google-genai1.58.0 → 1.59.0Key changes
AI architecture (PixelPlayerHQ#2371): Renames
AiOrchestrator→AiHandler, removes per-provider clients (DeepSeekAiClient,GroqAiClient,MistralAiClient) in favor of unifiedGenericOpenAiClient, addsAiResponseCleaner,UnifiedModelFilter, generation parameter preferences (topP/topK/maxTokens/penalties), and new providers (Ollama, Custom). OverhaulsAiSystemPromptEnginewith chain-of-thought and few-shot examples.Tablet support (PixelPlayerHQ#2363): Adaptive
HomeScreenlayout withPlayerInternalNavigationBarfor landscape/tablet, predictive back handler adjustments.Localization: Japanese (PixelPlayerHQ#2396), complete Arabic restructuring (PixelPlayerHQ#2352 + PixelPlayerHQ#2380), pt-BR (PixelPlayerHQ#2355), French lyrics fix (PixelPlayerHQ#2353), beta 7.5 strings (PixelPlayerHQ#2347).
AppLanguagenow usesnativeNameinstead of@StringRes labelResfor display — all new locales (ja, ar) follow this pattern.Tab management (PixelPlayerHQ#2373):
ReorderTabsSheetadd/remove functionality, persistent tab configuration inUserPreferencesRepository.Playlist concurrency fix (PixelPlayerHQ#2400):
PlaylistPreferencesRepositoryprevents lost edits from concurrent song removals withPlaylistSongCountTest.UI (PixelPlayerHQ#2383): Fixes layout jump on Telegram channel topic collapse, adds GitHub/Telegram social chips to About screen across all locales.
Conflict resolution
AppLanguage.kt: PR Restructure Arabic localization resources and change AppLanguage behaviour PixelPlayerHQ/PixelPlayer#2352 changed tonativeNameapproach, PRs feat: Add complete Arabic translation and configure app languages PixelPlayerHQ/PixelPlayer#2380/Feature/localization ja PixelPlayerHQ/PixelPlayer#2396 used old@StringResapproach. Resolved by keepingnativeNamepattern and adding Japanese (日本語) and Arabic (العربية) with native names.nativeNamereplaced them). Kept Restructure Arabic localization resources and change AppLanguage behaviour PixelPlayerHQ/PixelPlayer#2352's removal.Link to Devin session: https://app.devin.ai/sessions/f148bdd13bcb440590e4a4c6a614454e
Requested by: @daedaevibin