ananas/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt
Cd16d d28e80d68e
feat: picture-in-picture (#277)
* 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>
2023-08-14 22:47:42 +02:00

154 lines
6.1 KiB
Kotlin

package dev.jdtech.jellyfin
import android.content.SharedPreferences
import android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
import androidx.core.content.edit
import androidx.media3.common.C.DEFAULT_SEEK_BACK_INCREMENT_MS
import androidx.media3.common.C.DEFAULT_SEEK_FORWARD_INCREMENT_MS
import javax.inject.Inject
class AppPreferences
@Inject
constructor(
private val sharedPreferences: SharedPreferences,
) {
// Server
var currentServer: String?
get() = sharedPreferences.getString(Constants.PREF_CURRENT_SERVER, null)
set(value) {
sharedPreferences.edit {
putString(Constants.PREF_CURRENT_SERVER, value)
}
}
// Offline
var offlineMode
get() = sharedPreferences.getBoolean(Constants.PREF_OFFLINE_MODE, false)
set(value) {
sharedPreferences.edit {
putBoolean(Constants.PREF_OFFLINE_MODE, value)
}
}
// Appearance
val theme get() = sharedPreferences.getString(Constants.PREF_THEME, null)
val dynamicColors get() = sharedPreferences.getBoolean(Constants.PREF_DYNAMIC_COLORS, true)
val amoledTheme get() = sharedPreferences.getBoolean(Constants.PREF_AMOLED_THEME, false)
var displayExtraInfo: Boolean
get() = sharedPreferences.getBoolean(Constants.PREF_DISPLAY_EXTRA_INFO, false)
set(value) {
sharedPreferences.edit {
putBoolean(Constants.PREF_DISPLAY_EXTRA_INFO, value)
}
}
// Player
val playerGestures get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES, true)
val playerGesturesVB get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES_VB, true)
val playerGesturesZoom get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES_ZOOM, true)
val playerGesturesSeek get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES_SEEK, true)
val playerBrightnessRemember get() =
sharedPreferences.getBoolean(Constants.PREF_PLAYER_BRIGHTNESS_REMEMBER, false)
var playerBrightness: Float
get() = sharedPreferences.getFloat(
Constants.PREF_PLAYER_BRIGHTNESS,
BRIGHTNESS_OVERRIDE_NONE,
)
set(value) {
sharedPreferences.edit {
putFloat(Constants.PREF_PLAYER_BRIGHTNESS, value)
}
}
val playerSeekBackIncrement get() = sharedPreferences.getString(
Constants.PREF_PLAYER_SEEK_BACK_INC,
DEFAULT_SEEK_BACK_INCREMENT_MS.toString(),
)!!.toLongOrNull() ?: DEFAULT_SEEK_BACK_INCREMENT_MS
val playerSeekForwardIncrement get() = sharedPreferences.getString(
Constants.PREF_PLAYER_SEEK_FORWARD_INC,
DEFAULT_SEEK_FORWARD_INCREMENT_MS.toString(),
)!!.toLongOrNull() ?: DEFAULT_SEEK_FORWARD_INCREMENT_MS
val playerMpv get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_MPV, false)
val playerMpvHwdec get() = sharedPreferences.getString(Constants.PREF_PLAYER_MPV_HWDEC, "mediacodec-copy")!!
val playerMpvHwdecCodecs: Set<String> get() = sharedPreferences.getStringSet(
Constants.PREF_PLAYER_MPV_HWDEC_CODECS,
setOf("h264", "hevc", "mpeg4", "mpeg2video", "vp8", "vp9"),
)!!
val playerMpvVo get() = sharedPreferences.getString(Constants.PREF_PLAYER_MPV_VO, "gpu")!!
val playerMpvAo get() = sharedPreferences.getString(Constants.PREF_PLAYER_MPV_AO, "audiotrack")!!
val playerMpvGpuApi get() = sharedPreferences.getString(Constants.PREF_PLAYER_MPV_GPU_API, "opengl")!!
val playerIntroSkipper get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_INTRO_SKIPPER, true)
val playerTrickPlay get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_TRICK_PLAY, true)
val playerPipGesture get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_PIP_GESTURE, false)
// Language
val preferredAudioLanguage get() = sharedPreferences.getString(Constants.PREF_AUDIO_LANGUAGE, "")!!
val preferredSubtitleLanguage get() = sharedPreferences.getString(Constants.PREF_SUBTITLE_LANGUAGE, "")!!
// Network
val requestTimeout get() = sharedPreferences.getString(
Constants.PREF_NETWORK_REQUEST_TIMEOUT,
Constants.NETWORK_DEFAULT_REQUEST_TIMEOUT.toString(),
)!!.toLongOrNull() ?: Constants.NETWORK_DEFAULT_REQUEST_TIMEOUT
val connectTimeout get() = sharedPreferences.getString(
Constants.PREF_NETWORK_CONNECT_TIMEOUT,
Constants.NETWORK_DEFAULT_CONNECT_TIMEOUT.toString(),
)!!.toLongOrNull() ?: Constants.NETWORK_DEFAULT_CONNECT_TIMEOUT
val socketTimeout get() = sharedPreferences.getString(
Constants.PREF_NETWORK_SOCKET_TIMEOUT,
Constants.NETWORK_DEFAULT_SOCKET_TIMEOUT.toString(),
)!!.toLongOrNull() ?: Constants.NETWORK_DEFAULT_SOCKET_TIMEOUT
// Cache
val imageCache get() = sharedPreferences.getBoolean(
Constants.PREF_IMAGE_CACHE,
true,
)
val imageCacheSize get() = sharedPreferences.getString(
Constants.PREF_IMAGE_CACHE_SIZE,
Constants.DEFAULT_CACHE_SIZE.toString(),
)!!.toIntOrNull() ?: Constants.DEFAULT_CACHE_SIZE
// Downloads
val downloadOverMobileData get() = sharedPreferences.getBoolean(
Constants.PREF_DOWNLOADS_MOBILE_DATA,
false,
)
val downloadWhenRoaming get() = sharedPreferences.getBoolean(
Constants.PREF_DOWNLOADS_ROAMING,
false,
)
// Sorting
var sortBy: String
get() = sharedPreferences.getString(
Constants.PREF_SORT_BY,
Constants.DEFAULT_SORT_BY,
)!!
set(value) {
sharedPreferences.edit {
putString(Constants.PREF_SORT_BY, value)
}
}
var sortOrder
get() = sharedPreferences.getString(
Constants.PREF_SORT_ORDER,
Constants.DEFAULT_SORT_ORDER,
)!!
set(value) {
sharedPreferences.edit {
putString(Constants.PREF_SORT_ORDER, value)
}
}
// Temp
var downloadsMigrated
get() = sharedPreferences.getBoolean("downloadsMigrated", false)
set(value) = sharedPreferences.edit {
putBoolean("downloadsMigrated", value)
}
}