Repository navigation
Pineapple 1.2
Pineapple 1.2
Streams YouTube music with as little ceremony as possible.
Install
Download Pineapple-1.2.apk and sideload it. Android only, native Kotlin.
sha256 6995e2f0b252b46bc83966141de0eaedb5dd9c22d6bb8c62b9b64e7dd0dc4e88
size 2,184,966 bytes (2.08 MB)
What's fixed since 1.0
Search in the bottom nav bar was dead. Tapping it from Discovery or
Library did nothing. The tap was being delivered the whole time — the real
cause was a stale closure. goTab compared against a composition-time tab
that the nav bar kept captured from the first frame and never advanced past
SEARCH, so Search was the one tab where next == tab matched and returned
early. Discovery and Library only worked because the stale value happened to
differ from them. Verified over eight consecutive taps after a cold start.
A cancellation was showing up as an error. Every catch in
MainViewModel caught Throwable, which includes CancellationException.
When a newer query superseded an in-flight one, the ordinary cancel was
reported to you as a red banner reading "StandaloneCoroutine was cancelled"
— sitting directly above the results that had loaded successfully. All five
handlers now rethrow it. The play path and the player polling loop had the
same latent flaw.
Icons were invisible. The bundled vector drawables left android:fillColor
off every path. A VectorDrawable path with no fill colour is transparent
black, and Compose's Icon tints with SrcIn, which keeps the source's
alpha — so every icon was rendering perfectly at zero opacity. The build was
green throughout; it took looking at the app to catch.
Changed
- Three-dot menu on every search result, opening the same actions sheet
the Library uses: add to liked, play next, add to queue, add to playlist.
Long-press does the same. - Removed the BEST badge from the top search result.
- Removed the STREAMS INSTANTLY badge from the top right.
- Icons replaced with Google's Material Symbols Rounded (Apache-2.0),
bundled as vector drawables rather than pulled in as a dependency. The
hand-drawn compass, library and heart approximations are gone. - Full-screen player gained real shuffle, repeat and an Up Next queue.
Verification
- 23/23 unit tests pass
- Release build with R8 and resource shrinking intact
- Playback confirmed on device:
state=3with the queue auto-advancing - All nav tabs confirmed reachable on device
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.