Skip to content

mm92ff/pocastcloni-githubfolder

Repository files navigation

PocastCloni

PocastCloni is a modern Android podcast player built with Kotlin, Jetpack Compose, Media3/ExoPlayer, Room, DataStore, WorkManager, and RSS feed synchronisation.

Features

  • Podcast Library - Add podcasts by RSS URL or iTunes search, reorder subscriptions, inspect podcast details, and mark all new episodes as seen.
  • Playback - Mini player and full player with play/pause, seek, skip, progress tracking, background playback, and notification support.
  • Downloads & Sync - Stream episodes, download episodes locally, optionally save files to Android's Downloads folder, run background feed checks, and use smart or full RSS refresh modes.
  • Auto Download & Cleanup - Per-podcast auto-download, global download limits, retry handling for transient failures, and automatic cleanup of played downloaded episodes.
  • History & Favorites - Playback history and favorites with date grouping, publication dates, manual favorite ordering, and added-date sorting.
  • Customisation - Light, Dark, and System themes; custom accent colour; optional gradient background; transparent cards and episode rows; one-handed layout; bottom bar clean mode with swipe reveal and auto-hide delay.
  • Settings - Tabbed Settings screen for Design, Playback, Sync, and Data.
  • Backup & Restore - Export and import podcasts, favorites, history, and user settings.
  • Statistics - Listening and download statistics with reset actions.

Screenshots

Home Home with Bottom Bar Settings
Home Home with Bottom Bar Settings
Downloads Search History
Downloads Search History
Favorites Podcast Detail Player
Favorites Podcast Detail Player

Download

Latest release:

Requirements

Item Version
Android 8.0 (API 26) and higher
Target SDK 34
Compile SDK 34
JDK 17

Tech Stack

Layer Libraries
UI Jetpack Compose, Material 3, Navigation Compose
Architecture Domain / Data / UI layers, ViewModel, StateFlow
Media Media3 ExoPlayer, MediaSession, foreground playback service
Database Room with exported migration schemas
Preferences DataStore Preferences
Networking Retrofit, OkHttp, Jackson XML
Images Coil Compose, Coil SVG
Background Work WorkManager with Hilt workers
Dependency Injection Hilt
Logging Timber
Quality Detekt, ktlint, JUnit 4, MockK, Turbine, AndroidX tests

Build

Prerequisites

  • Android Studio
  • JDK 17
  • Android SDK 34

Clone & Run

git clone https://github.com/mm92ff/pocastcloni-githubfolder.git
cd pocastcloni-githubfolder

Open the project in Android Studio and run it on a device or emulator with API 26 or newer.

Build APK

./gradlew assembleDebug
./gradlew assembleRelease

Windows:

.\gradlew.bat assembleDebug
.\gradlew.bat assembleRelease

Run Checks

./gradlew testDebugUnitTest
./gradlew detekt

Windows:

.\gradlew.bat testDebugUnitTest
.\gradlew.bat detekt

Project Structure

app/src/main/java/com/example/pocastcloni/
├── data/       # Room entities, DAO, repositories, RSS/search APIs, workers
├── domain/     # Models, repository interfaces, player contracts, use cases
├── di/         # Hilt modules
├── service/    # PodcastPlaybackService
├── ui/         # Compose screens, player UI, settings, theme, navigation
└── util/       # Constants, formatting, HTML, network and time helpers

Permissions

Permission Purpose
INTERNET Load RSS feeds, podcast artwork, search results, and episode streams
ACCESS_NETWORK_STATE Detect network state for downloads, sync, and statistics
WRITE_EXTERNAL_STORAGE Legacy public Downloads support on Android 9 and older
FOREGROUND_SERVICE Keep playback and long-running work stable
FOREGROUND_SERVICE_MEDIA_PLAYBACK Media playback foreground service on newer Android versions
FOREGROUND_SERVICE_DATA_SYNC Feed sync foreground service type on newer Android versions
POST_NOTIFICATIONS Show playback and foreground-service notifications

Notes

  • RSS feed parsing supports smart stream updates and full refresh mode.
  • On Android 10 and newer, saving to the public Downloads folder uses MediaStore.
  • Downloaded episodes fall back to streaming when the local file is missing.
  • The bottom navigation can be hidden in Clean Mode and revealed with an upward swipe.
  • Backups are JSON-based and include restorable library and settings data.

Contributing

  1. Fork the repository.
  2. Create a feature branch (git checkout -b feature/my-feature).
  3. Commit your changes (git commit -m "feat: add my feature").
  4. Push to the branch (git push origin feature/my-feature).
  5. Open a Pull Request.

License

This project is licensed under the Mozilla Public License 2.0.

About

Modern Android podcast app — Jetpack Compose, Media3/ExoPlayer, Clean Architecture

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages