* Fix snackbar not showing in landscape
This affected also all tablets since they use the landscape view!
Added `setTextMaxLines` because for some reason the text is truncated on tablets.
Fixes#473.
Co-Authored-By: Jcuhfehl <91626737+Jcuhfehl@users.noreply.github.com>
* Remove unused import
---------
Co-authored-by: Jcuhfehl <91626737+Jcuhfehl@users.noreply.github.com>
* improvement: changed Person Detail Fragment
Changed the Person Detail Fragment to better use the available space.
Separate layout for larger screens/landscape orientation
* added values for different screen sizes
* fixed spacing
* refactor: rename `layout_height_def` to `person_detail_overview_height`
* refactor: remove `+` from some ids
I know that xml files are parsed top to bottom and the plus sign create a new id. But it seems to work even if the id is created after it is referenced.
I think this is cleaner
---------
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
Fixes#445
The episode indicator background was constrained to a 24dp box. If this box could not contain the count, then the count would wrap onto a new line.
The proposed solution is to use a rounded rectangle as the background instead. This can then expand into a chip as needed to accommodate larger numbers without wrapping.
* add pip
* fixed OnResume() OnStop()
add picture in picture button
add pip settings
* fixed sourceRectHint
add aspectRatio
* fix import
* improve hide playerControls
* add onNewIntent()
* Home button/gesture settings
* add summary
* add GESTURE_EXCLUSION_AREA_SIDE
* remove if else in sourceRectHint
fix onStop() behavior
* fix behavior when using pip button, now go home
* test
* fix onStop()
* fix: mpv aspect ratio
* fix when in PiP mode and starting new playback
* refactor: pip implementation
Remove option to disable pip button, always show the button when pip is supported
Remove the option to completely disable pip
Format using ktlint
* fix when in pip mode and play a new video
* fix recent app behavior
* lint
* Some adjustments
* fix: Aspect ratio is too extreme
* fix: Activity recreation
* fix merge issues
* fix merge issues
* ktlintFormat
* Add Picture in Picture
* fix
* fix sourceRectHint, updateZoomMode before entering pip
* lint
* fix: disable pip when player is locked
* lint
* lint
* fix: sourceRectHint
* fix: replace media items in mpv
* fix: don't show skip intro button in pip
* chore: remove `android:resizeableActivity` from manifest since the default is already `true`
* refactor: remove option to force 16:9 aspect ratio
* refactor: update strings
---------
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* refactor: remove deprecated methods to hide system ui
* fix: action bar reappear after changing the brightness
* lint: run ktlintFormat
* refactor: remove sdk check
* fix: system bars stay visible after closing dialog
* fix: add player theme to set navigationbar and statusbar colors to transparent
* fix: draw behind navigationbar and statusbar
* refactor: remove swipeToShowStatusBars extensions
Remove fix for status bar reappearing on LineageOS after changing brightness with gesture.
This can always be added back when official Android version from manufacturers also need this fix.
---------
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* feat: Add seek and play/pause functionality to onDoubleTap
This patch enhances the `onDoubleTap` method within the media player
component. It introduces a split-screen layout where the player view is
divided into three equal areas (in the ratio of 2:1:2).
1. Leftmost Area: When double-tapped, it seeks the media playback
backward by the defined seek increment
(`appPreferences.playerSeekBackIncrement`).
2. Middle Area: A double-tap in this area toggles the play/pause state
of the player. If the player is currently playing, it will be paused,
and if it's paused, it will be resumed.
3. Rightmost Area: When double-tapped, it seeks the media playback
forward by the specified seek increment
(`appPreferences.playerSeekForwardIncrement`).
* refactor: inline some variables and put x position inside when statement
---------
Co-authored-by: Jarne Demeulemeester <jarnedemeulemeester@gmail.com>
* fix: volume progress bar smoothness
* fix: configureInsets() for lockedControls
* fix: gesture not working if the player was locked and used back gesture
* 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