Repository navigation
Pineapple 1.3
Pineapple 1.3
Streams YouTube music with as little ceremony as possible — now with a
real artist/album catalogue on top of search and a much tougher
network story.
Install
Download the asset below and sideload it. Android only, native Kotlin.
Android 8.0+ (minSdk 26).
size 2.19 MB (2,201,350 bytes / 2,201,350)
sha256 c2e812e776083fcbcee7058716adc20f645c47070e44253bf2a05f30ba62ec18
What's new
Catalogue (Phase 1 + Phase 2 + 2.5) — surfaced entirely from the InnerTube
payloads Pineapple already fetched.
- Artist pages: banner header, name, audience line, Top songs, and now
releases (Albums + Singles & EPs), Videos, Live performances, "Fans might
also like" (related artists) and a real About/bio block (from the
description shelf). Tap an album goes to its page, tap a related artist to
theirs. - Album pages: square cover art,
artist · yearline,kind · N songs · M minutesfact line, ordered track list with play, library participation. - Search keeps artist and album doors instead of dropping them at the old
videoId.isEmpty()guard. An artist or album row now opens a real page
instead of being a dead entry.
Offline & slow networks (from PR #114):
- Explicit connectivity checks at the request boundary: distinct
"You're offline" state with the existing retry, while HTTP / rate / API
errors keep their own message. - Network observer registered in the
MainViewModeland released on clear;
reconnect notices shown alongside cached results without silently
re-requesting. - Cancellation + race-free bootstrap (callback installed before the initial
snapshot), trySend under lock.
Visual polish (from PR #112):
- Artwork letterboxing fixed: the player hero now fills its square frame in
all three states (empty / loading / loaded).
Detail fixes:
- Like button now fills while playback is paused.
- Artist avatar now uses the same thumbnail path as tracks.
Verification
- 40/40 unit tests pass (parsing: 30; network: 10)
assembleReleasewith R8 + resource shrinking green- Debug + release launch clean on a Galaxy M21
- Protected InnerTube constants untouched
(PLAYER_CLIENTS,OFFICIAL_MUSIC_TYPES,EXPLORE_BROWSE_ID)
Note
This app uses YouTube's private InnerTube API without an API key, the same
technique NewPipe uses. It is sideloaded and cannot be published to Google
Play. See Legal.