Repository navigation
Pineapple 1.4
Pineapple 1.4
Comes with the full navigation catalogue (artists & albums), an image-pipeline + UI polish wave, offline/reconnect, the media-notification barrier fix, and discovery carousels.
Install
Download the asset below and sideload (Android 8.0+).
size 2.20 MB (2,201,350 bytes)
sha256 6a953b53c8b31de09e846434a4e6612f791872649cb88acc4f420e954f4b4143
What's new since 1.3
Catalogue Phase 1-2.5 (artist + album pages)
- Artist rows in search (Phase 1):
Artist · audiencedoors; tapping opens a dedicated artist page with
banner art, audience line, top songs, and nowAlbums,Videos,Fans might also like,Aboutcarousels. - Album pages (Phase 2): cover art,
artist · year,kind · N songs · M minutesfacts, ordered track list with tap-to-play. - Top-song / track playback uses the same
TrackRoweverywhere (search, artist, album, recents),
so a track looks identical whether you found it in search or an album.
UI/UX wave
- Coil image pipeline replaces the hand-rolled
downloadBitmappump: memory+disk cache,
crossfade from the synthesised gradient tile, no blank flashes on scroll. - Now Playing — poster-bleed background replaced with a clean
PinePlayerTop/Bttomtwo-stop
wash (classic Apple/Spotify cleanliness), 7 dp seek bar with scaling thumb, scale-in artwork entrance. - Motion system
PineMotionshared: easing curves, durations, springs (no per-call ad-hoc magic). - Notification tray player fully functional - Android 12 (API 31) was broken because
MediaSessionServiceonly posts when a provider is attached:- Added runtime
POST_NOTIFICATIONSprompt on Android 13+. - Hard-wired
DefaultMediaNotificationProviderinPlaybackService.onCreate. - added the
media_notification_channel_namestring andRimport.
Notification now shows cover, title, artist and standardplay/pause/next/previouscontrols.
- Added runtime
- Discovery screen now surfaces
New releasesandNew music videosfrom payloads we
already fetched (carousels scroll horizontally), matching the visual rhythm of the rest of the
app. Always-removed-empty-sections (no placeholders).
Network handling wave (PR #114)
- Distinct offline / retrying / stale / failed states at the request boundary.
- Connectivity observer registered in the
MainViewModel, released on clear; reconnect banner without
silent refetch.
Visual wave (PR #112)
- Worked letterbox: artwork fills its square frame in all three states (empty / loading / loaded).
Catalogue integrity
OFFICIAL_MUSIC_TYPES,PLAYER_CLIENTSandEXPLORE_BROWSE_ID(inner constants) were never touched.- Search still only returns official music + the artist/album doors — user-uploads never surface.
Verification
InnerTubeParsingTest: 30 tests, all green (extract id/title/counts, OFFICIAL_MUSIC whitelist,
artist detail (5 tracks, 14 albums, 17 videos, 10 related, bio), album detail (header + 11 tracks),
mixed order assertion).NetworkAccessTest: 10 tests, all green.assembleDebuggreen + APK installed on the M21; primary actions verified.assembleReleasewith R8 + resource shrinking green.
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.