Skip to content

madebysan/shelf-android

Repository files navigation

Shelf app icon

Shelf

An Android player for audiobooks, videos, and long-form media.
Syncs with Google Drive – stream, download, and pick up where you left off.

Version 1.0.0 · Android 8.0+ (API 26)

Also available for iOS and macOS

Features

  • Google Drive streaming – Play audio and video files directly from your Drive, no downloads required
  • Offline downloads – Save books locally for listening without internet
  • Background playback – Keep listening with the screen off via MediaSession
  • Mini player – Persistent playback controls on the library screen
  • Cover art – Automatic cover art fetching from iTunes, Google Books, and Open Library
  • Multiple libraries – Add, switch, and manage separate Drive folder libraries
  • Search, filter, and sort – Find books by title, author, or genre with filter chips and sort options
  • Genre browsing – Visual genre cards with cover art collages
  • Discover mode – Shuffle to a random book at a random position, progress not saved
  • Bookmarks – Save and jump to named positions within a book
  • Chapters – Navigate chapter markers when available
  • Sleep timer – Timed or end-of-chapter auto-pause
  • Playback speed – Adjustable speed control
  • Video playback – Dedicated 16:9 player with 10-second skip for video files
  • Star, hide, and complete – Organize your library with status flags
  • Ratings – Rate books on a 5-star scale
  • Progress export/import – JSON backup compatible with the iOS version
  • Dark mode – System, light, or dark theme
  • Haptic feedback – Tactile responses on long-press actions

Tech Stack

  • Language: Kotlin
  • UI: Jetpack Compose + Material Design 3
  • Architecture: MVVM with Clean Architecture layers (data/domain/UI)
  • DI: Hilt
  • Database: Room (SQLite) with 3 tables (books, libraries, bookmarks)
  • Networking: Retrofit + OkHttp for Google Drive API
  • Playback: Media3 (ExoPlayer) + MediaSessionService
  • Preferences: DataStore
  • Image loading: Coil

Project Structure

app/src/main/java/com/madebysan/shelf/
├── data/
│   ├── local/          # Room database, DAOs, entities
│   ├── preferences/    # DataStore user preferences
│   ├── remote/         # Drive API service and DTOs
│   └── repository/     # Data repositories
├── di/                 # Hilt dependency injection modules
├── domain/
│   └── usecase/        # Business logic (scan library, fetch covers)
├── service/
│   ├── auth/           # Google Sign-In and OAuth
│   ├── download/       # Offline download manager
│   ├── drive/          # Drive file operations
│   └── playback/       # ExoPlayer service and state management
└── ui/
    ├── component/      # Reusable composables
    ├── navigation/     # Navigation graph
    ├── screen/         # Screen-level composables and ViewModels
    └── theme/          # Material theme and colors

Building

  1. Open in Android Studio
  2. Add your google-services.json to app/
  3. Configure Google Drive API credentials in Google Cloud Console
  4. Build and run on a device or emulator

Related Projects

Platform Repository
iOS shelf-ios
macOS shelf-mac
Landing shelf-landing

License

MIT


Made by santiagoalonso.com

About

Android audiobook and video player — syncs with Google Drive, streams or downloads, picks up where you left off

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages