Twine

PodcastPlayer

Pratik Behara
Published

0
  • Project creator

A Kotlin Multiplatform podcast player with real native UI on both platforms. Search for shows via the iTunes Search API, browse episodes parsed straight from each show’s RSS feed, and play them. On Android, playback keeps running in the background (with system notification controls) after the app is closed; on iOS, playback is foreground-only for now.

Android and iOS each have their own native UI — Jetpack Compose on Android, SwiftUI on iOS — sharing the same business logic (networking, search, episode parsing) and the same brand theme, but built with each platform’s own idioms rather than a pixel-for-pixel clone (e.g. iOS uses a native List/.searchable/grouped-Settings-style screen instead of mirroring the Compose layout).

Features
Search — debounced iTunes Search API lookup for podcasts.
Episodes — RSS feed fetched and parsed per podcast (via xmlutil), including title, description, publish date, and audio URL.
Background playback (Android) — episodes play through a Media3 ExoPlayer hosted in a foreground MediaSessionService, so playback (and a system notification with play/pause controls) survives the app being backgrounded or swiped from Recents, not just screen rotation.
Playback (iOS) — a native AVPlayer wrapper; foreground playback only today, no Background Modes capability or lock-screen controls yet.
Theme — System / Light / Dark, switchable from the Profile tab and persisted across launches (Jetpack DataStore on Android, UserDefaults on iOS).