https://github.com/madebysan/shelf-android
Android audiobook and video player — syncs with Google Drive, streams or downloads, picks up where you left off
https://github.com/madebysan/shelf-android
android audiobook google-drive jetpack-compose kotlin player
Last synced: 4 months ago
JSON representation
Android audiobook and video player — syncs with Google Drive, streams or downloads, picks up where you left off
- Host: GitHub
- URL: https://github.com/madebysan/shelf-android
- Owner: madebysan
- Created: 2026-03-06T16:49:50.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-03-06T17:06:43.000Z (5 months ago)
- Last Synced: 2026-03-06T20:43:09.949Z (5 months ago)
- Topics: android, audiobook, google-drive, jetpack-compose, kotlin, player
- Language: Kotlin
- Size: 180 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
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](../shelf-ios) |
| macOS | [shelf-mac](../shelf-mac) |
| Landing | [shelf-landing](../shelf-landing) |
## License
[MIT](LICENSE)
---
Made by [santiagoalonso.com](https://santiagoalonso.com)