Commit Graph

28 Commits

Author SHA1 Message Date
6b9724c640 chore(build): add media3-cast and media3-session catalog entries, remove unused foundation 2026-07-18 14:17:25 +00:00
615e95db5c feat(player): add next episode overlay that appears 20s before episode end
Show an "Up Next" card with the next episode thumbnail, play overlay,
and title when within 20 seconds of the current episode ending.
Tapping it immediately starts the next episode from the playlist queue.

- Add nextEpisode field to PlayerUiState derived from queue
- Create NextEpisodeOverlay for mobile with artwork + title
- Create TvNextEpisodeOverlay for TV with D-pad focus support
- Integrate into both PlayerScreen and TvPlayerScreen
- Auto-focus overlay on TV when it appears
2026-06-18 16:34:39 +00:00
fa87005d01 chore: update Gradle and AGP versions 2026-06-04 20:59:54 +02:00
Purefin Dev
8da759257c refactor: replace collectAsState with lifecycle-aware collectAsStateWithLifecycle
Migrate all Flow state collection to collectAsStateWithLifecycle for proper lifecycle awareness, ensuring collection stops when the composable is not in the STARTED state.

- Added lifecycle-runtime-compose dependency to app and app-tv modules
- Replaced all collectAsState() calls with collectAsStateWithLifecycle()
- Updated initial parameter to initialValue for the lifecycle-aware variant
2026-05-21 19:47:58 +00:00
4b87f93dee Add Timber file logging and Jellyfin log upload 2026-05-14 18:06:54 +02:00
72fea00444 feat: integrate Firebase Crashlytics and Google Services into the project 2026-05-01 17:35:29 +02:00
76eebc1139 refactor: remove overcomplicated TvHomeHeroState 2026-04-19 19:49:12 +02:00
858f599dbd Upgrade AGP to 9.1.1 2026-04-17 17:36:22 +02:00
ad930e899f feat: introduce core data models and interfaces for playback and downloads 2026-04-15 20:02:50 +02:00
b67c8076f1 refactor: update package structure and imports for consistency across UI components 2026-04-14 22:03:36 +02:00
cf08db5034 Split mobile and TV playback profiles 2026-04-08 19:46:37 +02:00
356816ba0e feat: add HLS support by including media3-exoplayer-hls dependency 2026-04-07 16:25:54 +02:00
cdb9dc3403 feat: add androidx.tv.material3 dependency for TV-specific UI components 2026-04-01 20:34:20 +02:00
4c5dc8a452 Update Gradle and core build dependencies
- Upgrade Gradle wrapper to 9.3.1.
- Update Android Gradle Plugin (AGP) to 9.1.0 and Kotlin to 2.2.10.
- Update Hilt to 2.57.2, Room to 2.7.0, and KSP to 2.3.2.
- Configure Gradle Java toolchain using JetBrains JDK 21 and the Foojay resolver plugin.
- Define several Android build feature flags and compatibility properties in `gradle.properties`.
2026-03-27 18:34:24 +01:00
d433863e21 Update Gradle properties and library versions 2026-03-27 17:26:26 +01:00
7333781f83 refactor: modularize app into multi-module architecture 2026-02-22 11:05:26 +01:00
be456d4d6c feat: add movie download support using Media3 DownloadService
Implement media downloading with foreground notification showing progress
percentage and speed. Uses Media3's DownloadManager + SimpleCache with
OkHttp datasource for authenticated Jellyfin downloads. Downloaded movies
are saved to the offline database and the player reads from cache
automatically via CacheDataSource.
2026-02-17 20:20:50 +01:00
74b1c19c0c feat: add FFmpeg decoder support for unsupported audio codecs
Add support for audio codecs like DTS-HD that aren't natively supported
by Android's MediaCodec by integrating Jellyfin's FFmpeg decoder extension.

Changes:
- Add media3-ffmpeg-decoder dependency for software audio decoding
- Create AndroidDeviceProfile to detect and report device codec capabilities
- Configure ExoPlayer with extension renderer mode and decoder fallback
- Update playback URL selection to use transcoding when direct play unsupported
- Add CodecDebugHelper for debugging available device codecs

This fixes playback failures when encountering premium audio formats
by falling back to FFmpeg software decoding when hardware decoding fails.
2026-02-15 21:44:21 +01:00
eff2e3a0e9 feat: enhance login flow with error handling and user feedback 2026-02-09 19:52:04 +01:00
fa76517e12 implement Room local data source and refactor media repository
- Integrate Room database with entities for `Movie`, `Series`, `Season`, `Episode`, and `CastMember`.
- Implement `RoomMediaLocalDataSource` to handle persistent storage and retrieval of media data.
- Refactor `InMemoryMediaRepository` to use the local data source and synchronize with the Jellyfin API.
- Update `HomePageViewModel`, `SeriesViewModel`, and `EpisodeScreenViewModel` to leverage the new repository logic.
- Replace generic `ItemDto` with specific `MovieDto`, `SeriesDto`, and `EpisodeDto` for type-safe navigation.
- Refactor UI models and components in `SeriesScreen`, `EpisodeScreen`, and `HomeSections` to use domain models directly.
- Enhance `JellyfinApiClient` requests to include necessary fields like `CHILD_COUNT` and `PARENT_ID`.
- Update Gradle dependencies to include Room and KSP.
2026-01-31 21:30:12 +01:00
7cde4b357e Remove local database because it is not being used at this moment of the project. 2026-01-30 15:38:03 +01:00
15190a657a feat: add Room database entities and DAOs for Episodes, Seasons, and Series 2026-01-29 18:16:11 +01:00
c5c2c105ee implement Navigation 3 and Movie Details screen
- Update Android Gradle Plugin to 8.9.1 and target SDK to 36.
- Integrate `androidx.navigation3` for Compose-based navigation management.
- Implement a centralized `NavigationManager` and `Route` system (supporting `Home` and `Movie` routes).
- Add a comprehensive Movie Details screen featuring hero images, synopsis, metadata chips, and cast lists.
- Refactor `HomePage` and related components into a dedicated `hu.bbara.purefin.app.home` package.
- Enhance `JellyfinApiClient` with methods to fetch item details and "next up" episodes.
- Update `PurefinActivity` to use `NavDisplay` for handling app navigation and backstack.
- Setup Hilt modules for providing navigation-related dependencies.
2026-01-18 13:34:15 +01:00
fd100816cc implement Media3 ExoPlayer for video playback
- Add Media3 UI, ExoPlayer, and Compose dependencies.
- Implement `PlayerActivity` with landscape orientation for video playback.
- Create `PlayerViewModel` to manage ExoPlayer lifecycle and media loading via Hilt.
- Define `VideoPlayerModule` to provide a configured `ExoPlayer` instance with tunneling and custom load control.
- Extend `JellyfinApiClient` to fetch media sources and video stream URLs.
- Update `ContinueWatchingCard` to launch `PlayerActivity` when the play button is clicked.
- Enforce portrait orientation for the main application and filter duplicate items in `HomePageViewModel`.
2026-01-18 02:09:11 +01:00
f979d1b68f Added image loading with coil image cache to HomePage 2026-01-17 17:19:52 +01:00
a05497c7bc Added HomePage Loading without Image loading 2026-01-17 15:04:34 +01:00
3fd571824f implement Hilt, DataStore, and Jellyfin SDK
- Setup Hilt for dependency injection and KSP for annotation processing.
- Add DataStore for user session management with JSON serialization.
- Integrate Jellyfin SDK and create a basic `JellyfinApiClient`.
- Replace `MainActivity` with `PurefinActivity` featuring a login flow and a placeholder home screen.
- Implement custom UI components: `PurefinComplexTextField`, `PurefinPasswordField`, and `PurefinTextButton`.
- Update version catalog with new dependencies and downgrade SDK versions to 35.
2026-01-16 19:47:34 +01:00
d536c42d65 initial android project 2026-01-16 19:47:33 +01:00