* feat: lock player controls
Add Lock Player feature.
This feature is similar to the feature found in the stock Jellyfin Android app and in the VLC app.
When enabled, it disables the gestures (seek, volume and brightness control), disables the default player controls and leaves only two buttons: a back button and an "unlock" button.
Pressing the unlock button reverts the player back to the initial state, e.g. gestures enabled and default buttons shown.
Works with ExoPlayer and MPV Player.
Let me know of any issues.
* Update PlayerGestureHelper.kt
* Fixed spacing issues
* fixed bug + formatting
* Simplified code
* Fixed spacing
* fixed trailing line?
* refactor: set locked layout initial visibility in xml
---------
Co-authored-by: jarnedemeulemeester <jarnedemeulemeester@gmail.com>
* refactor WIP: stop using `BaseItemDto` but use custom items specific to Findroid
This will make it easier to support downloaded items
* refactor: split `MediaInfoFragment` into `MovieFragment` and `ShowFragment`
* feat: add download icons to items
* feat WIP: download movies
* feat: download movie and play local file
* fix: remove `VideoVersionDialogFragment` from `ShowFragment`
* feat: select which version you want to download
* feat: delete downloaded movie
* feat: download progress indicator
* refactor: rename JellyfinItems to FindroidItems
* feat: offline mode (movies only)
* feat: offline mode card
* feat: download external files
* feat: toggle played on downloads
* feat: convert intros to `FindroidIntro`
* refactor: add itemId and sourceId to external downloaded subtitle filenames
* refactor: simplify `onMediaItemTransition`
* refactor: clean up some player item logic
* feat: download trickPlay data
* refactor: downloading of item to only require the item and a source id
* fix: external subtitle title
* feat: add `DownloadsFragment`
* feat: download episodes
* fix: cascade deletion if last item
* feat: download intro timestamps
* feat WIP: add storage activity
* feat: user data in separate table
* feat: add buttons to season fragment
* fix: improve responsiveness of the watched and favorite buttons
* fix: move `ic_database.xml` to main
* perf: optimize home fragment by limiting the number of items
* fix: database improvements
- use compound primary key for FindroidUserDataDto instead of id
- set played to false when playback percentage is below 90%
- capitalize SQL keywords
- update favorite in userdata
- set primary key of TrickPlayManifestDto to itemId
- prepare to sync data back to server
* feat: sync playback progress
This includes playback position, played and favorite
* fix: use non-transitive r classes
* lint: ktlint fix
* refactor: centralize item buttons in `item_actions.xml`
* feat: show intermediate progress when progress is less than 5
Also remove delete button from item_actions.xml
* feat: remove intros
* feat: check available storage space before downloading
* fix: trailer button
* refactor: make indexNumberEnd nullable
* feat: add offline mode toggle in settings
* fix: download over mobile data and roaming
* feat: immediately show spinner when tapping download
* revert: season fragment buttons
* feat: snackbar in downloads fragment
This snackbar is displayed when there is no connection to the server but the app is not in Offline Mode (Offline Mode is required to play content when the server is unavailable)
* refactor: make onReceive arguments non nullable
* fix: handle download finished / failed when BroadcastReceiver does not work
* fix: download multiple episodes
* feat: download to external storage (SD card)
* fix: reset download button when dialog is dismissed
* feat(offline): show "continue watching" episodes on home
* fix: watch progress bar on episode item in season
* feat(offline): next up items
* lint: fix some linting issues
* lint: fix some linting issues
* lint: fix some linting issues
* feat: remove StorageActivity
StorageActivity is not ready yet and out of scope for this PR
* fix: collection types that are not known crash the media fragment
* fix: downloading trick play data
* fix: sort downloaded items
* fix: navigate back if item is deleted instead of showing error
Navigate back based on NullPointerException in loadData method of viewmodels. This may not be the best approach but it works well enough.
Navigating back from BottomSheetFragment does not trigger onResume of previous fragment which in turn does not refresh its contents.
* fix: play from local storage instead of server when downloaded
* fix: missing items
* fix: `SyncWorker` using the app JellyfinApi instance instead of it's own
* fix: only show downloaded items when navigating from `DownloadsFragment`
* fix: make chips horizontal scrollable
* feat: migrate database (retain) and downloads (wipe)
Also add indexes on seriesId and seasonId
* fix: remove temp testing in downloadsMigrated
* lint: fix some linting issues
* fix: add error handling to downloading item
* feat: add "Preparing download" dialog to make sure the user waits for the download to start
* refactor: first show dialog then start downloading
* fix: add error handling to user configuration in `PlayerViewModel`
* feat: allow downloads to be cancelled
* fix: "View details" is cut off when text is too long
* lint: fix indent
* Scrubbing Preview
Add Jellyscrub plugin support
* Fix syntax
* Some adjustments
Rounded corners
Fix switch
* refactor: switch to `StateFlow`
* refactor: remove `FrameLayout`
* refactor: move trick play retrieval to `onMediaItemTransition`
Only load trick play data for current item
Make it async
---------
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* fix: gesture conflict in seek gesture
* fix: gesture conflict in volume and brightness gestures
* refactor: move to separate method and add implementation for previous Android versions
* lint: run ktlintFormat
---------
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* feat: add video file metadata on `MediaInfoFragment`
* feat(metadata): add chips within a chipgroup to showcase major parameters
Set a "temp" text as default for chips since without it, the style resets when text is changed through code
(kind of a hacky fix)
* feat(parser): implement data model for VideoMetadata and parse function
* feat(metadata): show dolby/dts audio codecs and hide SDR display profile
* feat(dolby): add a dolby logo after the rating and per-theme color
* feat(settings): add a preference switch for showing detailed A/V & Subs info
* feat: add dolby logo for video and audio profile inside chip
* feat: handle different audio profiles and change raw names
* feat(audio): add atmos text with the audio codec itself
* feat: only parse metadata when item is a movie
Also correct spacing when there are no chips
* fix(metadata): check for DoVi title since codec shows as HDR10
* fixup!: parsing of audio codecs and display name
---------
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* Add intro skipper support
* Fix checking for 404
* Add back missing Intro class and dependencies due to rebase
* Add preference
* Clean up visibility logic
* Update skip intro button design
* Add proguard file to keep Serializable classes
* Move introCheck to a separate Runnable and fix Runnables are never cleaned up
* Simplify check before starting runnable
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* Update android-plugin to v7.4.0
* Set Java version to 11
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* Split app into core and app:phone
* Use global versionCode and versionName
* Clean up gradle dependencies
* Use string formatting inside getString function
* Move proguard file to app:phone
* Move app_navigation and BasePlayerActivity to app:phone
* Add buildTypes to core gradle and remove buildFeatures
* Add suffix core to core namespace
* Split code into 4 more modules: data, preferences, player:core and player:video
* Clean up some gradle files
* Clean up data gradle
* Remove duplicate Constants.kt
* Use AppPreferences in more places
* Split off strings
* Remove unused animations
* Make about_libraries strings non-translatable
* Move mpv assets to player:video module
* Make AppPreferences a Singleton
* Update dependency org.jellyfin.sdk:jellyfin-core to v1.4.0
* Remove ACCESS_WIFI_STATE permission
* Fix adding server
* Remove server already added error
Add the address if server already exists in database but the address doesn't
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* Migrate to media3
* Update docs
* Move display_extended_title to AppPreferences
* Move display_extended_title to AppPreferences p2
* Add MediaSession support to the player
* Fix mpv player
* Disable animations on tv player controls and rename the tv_control_view file
* New media3 decoder ffmpeg
* Add multiple addresses per server
* Clean up
* Change icon to globe
* Fix AddServerAddressDialog crashing on tv
* Fix navigation to main activity on tv
* Hide nav bar in UsersFragment and ServerAddressesFragment
* Add hint for server address
* Add mpv options: hwdec, hwdec-codecs, vo, gpu-api
* Add audio output option
* Use AppPreferences in companion object to set the vo
* Remove unused strings
* Use strings for mpv prefs
* Change default ao to audiotrack
* Clean up preferred language settings
* Add multiple users per server
* Remove unnecessary longClickListener
* Check if user is selected on startup
* Still create JellyfinApi even if no user is selected
* Already fill in the username when needing to re-login
* Add new network settings with socket timeout option
* Add socketTimeout to AppPreferences
* Format with ktlint
* Add request timeout and connect timeout as options
* New server db schema
Adds support for multiple addresses and users per server
* Fix crash when the only available server is deleted and app is restarted
* Set serverId as foreign key in User and ServerAddress
* Format using ktlint
* Bump ServerDatabase version to 2
* Fix deleted downloads
This commit fixes downloads getting deleted after a few weeks by android's cleanup system. This is fixed by downloading the files under the .download extension and renaming them when the download is completed.
* Add retry download feature
* Add indicator when download is ongoing
* Refactor download code
* Disable button on retry and clean up
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
activity 1.6.0 -> 1.6.1
material 1.6.1 -> 1.7.0
navigation 2.5.2 -> 2.5.3
jellyfin 1.3.6 -> 1.3.7
aboutLibraries 10.5.0 -> 10.5.1
Includes some additional changes to the material shape appearance to keep the current look
* Fix MPV subtitles zoom in
Closes#162
Some .ass subtitles will still be broken due to their forced stylings unless stripped.
* Move everything in a single if statement
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* Merge MainActivity and MainActivityTv
* Merge AddServerFragment and TvAddServerFragment
* Merge LoginFragment and TvLoginFragment
* Add new focus effect
* Add libraries to tv home
* Fix home empty when navigating back on mobile
* Add loading indicator to home fragment
* Add empty LibraryFragment
* Add focus outline to settings button
* Use DiffCallback for updating home fragment
* Visually upgrade MediaDetailFragment
* Make all home items focusable in touch mode
* Add new focus border to person item
* Add LibraryFragment layout for TV
(Whilst also making a clusterfuck of the navigation)
* Add missing try-catch in HomeViewModel
* Don't show CancellationException on AddServerFragment
* Fix a few crashes plus errors
* Allow seeking in players by tapping
* Allow seeking in players by swiping horizontally
* Small cleanup
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* Use NavigationRail on tablets
Width 600dp+
* Add next up item next to the description on tablets
Width 600dp+
* Add tv banners for debug and staging
* Clean up tv add server fragment
* Clean up tv login fragment
* Upgrade ExoPlayer to 2.18
* Change the position polling from every 2 to every 5 sec
* Make internalMediaItems non-nullable
* Clean up mpv track names
* Reduce explayer ffmpeg extension size by not including all decoders
Removed decoders vorbis, opus, flac, pcm_mulaw, pcm_alaw, mp3, aac because these are already supported by Android.
* Clean up preferredLanguage preferences
* Add support for external subtitles in exoplayer
* Enable ASS/SSA external subtitles
* Enable VTT external subtitles
* Clean up
* Fix srt and vtt
Jellyfin currently converts vtt to srt without changing the codec tag. This makes the player unable to decode the subs because it thinks the file is vtt while in fact it is srt.
* Fix for vtt subs
Jellyfin return a srt stream when it should return a vtt stream