Skip to content

Pineapple 1.4

Choose a tag to compare

@kiinshuk kiinshuk released this 24 Oct 16:09
· 5 commits to main since this release

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 · audience doors; tapping opens a dedicated artist page with
    banner art, audience line, top songs, and now Albums, Videos, Fans might also like, About carousels.
  • Album pages (Phase 2): cover art, artist · year, kind · N songs · M minutes facts, ordered track list with tap-to-play.
  • Top-song / track playback uses the same TrackRow everywhere (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 downloadBitmap pump: memory+disk cache,
    crossfade from the synthesised gradient tile, no blank flashes on scroll.
  • Now Playing — poster-bleed background replaced with a clean PinePlayerTop/Bttom two-stop
    wash (classic Apple/Spotify cleanliness), 7 dp seek bar with scaling thumb, scale-in artwork entrance.
  • Motion system PineMotion shared: easing curves, durations, springs (no per-call ad-hoc magic).
  • Notification tray player fully functional - Android 12 (API 31) was broken because
    MediaSessionService only posts when a provider is attached:
    • Added runtime POST_NOTIFICATIONS prompt on Android 13+.
    • Hard-wired DefaultMediaNotificationProvider in PlaybackService.onCreate.
    • added the media_notification_channel_name string and R import.
      Notification now shows cover, title, artist and standard play/pause/next/previous controls.
  • Discovery screen now surfaces New releases and New music videos from 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_CLIENTS and EXPLORE_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.
  • assembleDebug green + APK installed on the M21; primary actions verified.
  • assembleRelease with 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.