Skip to content

Consolidated upstream PRs: AI overhaul, tablet support, localization (ja/ar/pt-BR/fr), tab management, playlist fix, UI fixes, deps bump#42

Merged
daedaevibin merged 98 commits into
masterfrom
devin/1781837668-consolidated-upstream-prs
Jun 19, 2026
Merged

Consolidated upstream PRs: AI overhaul, tablet support, localization (ja/ar/pt-BR/fr), tab management, playlist fix, UI fixes, deps bump#42
daedaevibin merged 98 commits into
masterfrom
devin/1781837668-consolidated-upstream-prs

Conversation

@devin-ai-integration

Copy link
Copy Markdown

Summary

Consolidates 12 open upstream PRs (from theovilardo/PixelPlayer) into a single merge-ready branch to minimize review overhead.

Included PRs

# Title Author
PixelPlayerHQ#2400 fix(playlists): prevent lost playlist edits from concurrent song removals AmrEldeeb5
PixelPlayerHQ#2397 chore(deps): bump com.google.genai:google-genai 1.58.0 → 1.59.0 dependabot
PixelPlayerHQ#2396 Feature/localization ja (Japanese) fujimon0722
PixelPlayerHQ#2383 ui: fix layout jump when collapsing telegram channel topics + Telegram/GitHub buttons in About Ayaanh001
PixelPlayerHQ#2380 feat: Add complete Arabic translation and configure app languages Hisham-Alzamzami
PixelPlayerHQ#2373 feat(removing library tabs): implement customizable tab management (add/remove) Ayaanh001
PixelPlayerHQ#2371 feat(ai): massive architecture overhaul, new providers, and generation tuning VoidX3D
PixelPlayerHQ#2363 Feat: tablet optimization ZL114514
PixelPlayerHQ#2355 feat(i18n): add pt-BR localization retrozinndev
PixelPlayerHQ#2353 Update French lyrics mode strings for consistency rebornlokii
PixelPlayerHQ#2352 Restructure Arabic localization resources and change AppLanguage behaviour adlifarizi
PixelPlayerHQ#2347 Update Strings to show beta 7.5 rebornlokii

Key changes

AI architecture (PixelPlayerHQ#2371): Renames AiOrchestratorAiHandler, removes per-provider clients (DeepSeekAiClient, GroqAiClient, MistralAiClient) in favor of unified GenericOpenAiClient, adds AiResponseCleaner, UnifiedModelFilter, generation parameter preferences (topP/topK/maxTokens/penalties), and new providers (Ollama, Custom). Overhauls AiSystemPromptEngine with chain-of-thought and few-shot examples.

Tablet support (PixelPlayerHQ#2363): Adaptive HomeScreen layout with PlayerInternalNavigationBar for 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). AppLanguage now uses nativeName instead of @StringRes labelRes for display — all new locales (ja, ar) follow this pattern.

Tab management (PixelPlayerHQ#2373): ReorderTabsSheet add/remove functionality, persistent tab configuration in UserPreferencesRepository.

Playlist concurrency fix (PixelPlayerHQ#2400): PlaylistPreferencesRepository prevents lost edits from concurrent song removals with PlaylistSongCountTest.

UI (PixelPlayerHQ#2383): Fixes layout jump on Telegram channel topic collapse, adds GitHub/Telegram social chips to About screen across all locales.

Conflict resolution

Link to Devin session: https://app.devin.ai/sessions/f148bdd13bcb440590e4a4c6a614454e
Requested by: @daedaevibin

rebornlokii and others added 30 commits June 13, 2026 09:39
Updated Italian strings in changelogs for improved clarity and consistency.
…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.
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.
Ayaanh001 and others added 25 commits June 17, 2026 16:25
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
…overhaul, new providers, and generation tuning
…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>
…aylist edits from concurrent song removals
@devin-ai-integration

Copy link
Copy Markdown
Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

daedaevibin and others added 2 commits June 19, 2026 03:02
…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>
@daedaevibin daedaevibin merged commit 94c360d into master Jun 19, 2026
4 of 5 checks passed
@daedaevibin daedaevibin deleted the devin/1781837668-consolidated-upstream-prs branch June 19, 2026 03:15
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.

10 participants