From 76121925d7b7d3e0ae54be1dfd5b61dfaa0c359f Mon Sep 17 00:00:00 2001
From: Jarne Demeulemeester
<32322857+jarnedemeulemeester@users.noreply.github.com>
Date: Fri, 13 Jan 2023 23:51:20 +0100
Subject: [PATCH] Modularize the codebase (#230)
* 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
---
app/.gitignore | 1 -
app/{ => phone}/build.gradle.kts | 21 ++-
app/{ => phone}/lint.xml | 0
app/{ => phone}/proguard-rules.pro | 0
app/{ => phone}/src/main/AndroidManifest.xml | 0
.../dev/jdtech/jellyfin/BaseApplication.kt | 8 +-
.../dev/jdtech/jellyfin/BasePlayerActivity.kt | 2 +-
.../dev/jdtech/jellyfin/BindingAdapters.kt | 6 +-
.../java/dev/jdtech/jellyfin/MainActivity.kt | 3 +-
.../dev/jdtech/jellyfin/PlayerActivity.kt | 1 -
.../adapters/CollectionListAdapter.kt | 0
.../adapters/DiscoveredServerListAdapter.kt | 0
.../adapters/DownloadEpisodeListAdapter.kt | 16 +-
.../adapters/DownloadSeriesListAdapter.kt | 0
.../adapters/DownloadViewItemListAdapter.kt | 0
.../jellyfin/adapters/DownloadsListAdapter.kt | 0
.../jellyfin/adapters/EpisodeListAdapter.kt | 13 +-
.../jellyfin/adapters/FavoritesListAdapter.kt | 3 +-
.../adapters/HomeEpisodeListAdapter.kt | 0
.../jellyfin/adapters/PersonListAdapter.kt | 0
.../jellyfin/adapters/ServerAddressAdapter.kt | 0
.../jellyfin/adapters/ServerGridAdapter.kt | 0
.../jellyfin/adapters/UserListAdapter.kt | 0
.../jellyfin/adapters/UserLoginListAdapter.kt | 0
.../jellyfin/adapters/ViewItemListAdapter.kt | 0
.../adapters/ViewItemPagingAdapter.kt | 0
.../jellyfin/adapters/ViewListAdapter.kt | 21 +--
.../java/dev/jdtech/jellyfin/di/AppModule.kt | 0
.../jellyfin/fragments/AddServerFragment.kt | 2 +-
.../jellyfin/fragments/DownloadFragment.kt | 0
.../fragments/DownloadSeriesFragment.kt | 0
.../fragments/EpisodeBottomSheetFragment.kt | 4 +-
.../jellyfin/fragments/FavoriteFragment.kt | 0
.../jdtech/jellyfin/fragments/HomeFragment.kt | 0
.../jellyfin/fragments/LibraryFragment.kt | 10 +-
.../jellyfin/fragments/LoginFragment.kt | 4 +-
.../jellyfin/fragments/MediaFragment.kt | 0
.../jellyfin/fragments/MediaInfoFragment.kt | 4 +-
.../fragments/PersonDetailFragment.kt | 0
.../fragments/SearchResultFragment.kt | 0
.../jellyfin/fragments/SeasonFragment.kt | 0
.../fragments/ServerAddressesFragment.kt | 0
.../fragments/ServerSelectFragment.kt | 0
.../fragments/SettingsAppearanceFragment.kt | 0
.../fragments/SettingsCacheFragment.kt | 0
.../fragments/SettingsDeviceFragment.kt | 0
.../fragments/SettingsDownloadsFragment.kt | 0
.../jellyfin/fragments/SettingsFragment.kt | 2 +-
.../fragments/SettingsLanguageFragment.kt | 0
.../fragments/SettingsNetworkFragment.kt | 2 +-
.../fragments/SettingsPlayerFragment.kt | 0
.../fragments/TwoPaneSettingsFragment.kt | 0
.../jellyfin/fragments/UsersFragment.kt | 0
.../dev/jdtech/jellyfin/utils/Extensions.kt | 15 ++
.../jellyfin/utils/PlayerGestureHelper.kt | 2 +
.../main/res/layout-w600dp/activity_main.xml | 0
.../res/layout-w600dp/fragment_media_info.xml | 0
.../src/main/res/layout/activity_main.xml | 0
.../src/main/res/layout/activity_player.xml | 0
.../src/main/res/layout/base_item.xml | 0
.../src/main/res/layout/collection_item.xml | 0
.../res/layout/discovered_server_item.xml | 0
.../src/main/res/layout/download_section.xml | 0
.../main/res/layout/episode_bottom_sheet.xml | 0
.../src/main/res/layout/episode_item.xml | 0
.../src/main/res/layout/error_panel.xml | 0
.../res/layout/exo_player_control_view.xml | 0
.../src/main/res/layout/exo_player_view.xml | 0
.../src/main/res/layout/favorite_section.xml | 1 -
.../main/res/layout/fragment_add_server.xml | 0
.../src/main/res/layout/fragment_download.xml | 0
.../res/layout/fragment_download_series.xml | 0
.../src/main/res/layout/fragment_favorite.xml | 0
.../src/main/res/layout/fragment_home.xml | 0
.../src/main/res/layout/fragment_library.xml | 0
.../src/main/res/layout/fragment_login.xml | 0
.../src/main/res/layout/fragment_media.xml | 0
.../main/res/layout/fragment_media_info.xml | 0
.../res/layout/fragment_person_detail.xml | 0
.../res/layout/fragment_search_result.xml | 0
.../src/main/res/layout/fragment_season.xml | 0
.../res/layout/fragment_server_addresses.xml | 0
.../res/layout/fragment_server_select.xml | 0
.../src/main/res/layout/fragment_users.xml | 0
.../src/main/res/layout/home_episode_item.xml | 0
.../src/main/res/layout/next_up_section.xml | 0
.../src/main/res/layout/person_item.xml | 0
.../src/main/res/layout/season_header.xml | 0
.../res/layout/server_address_list_item.xml | 0
.../src/main/res/layout/server_item.xml | 0
.../src/main/res/layout/user_item.xml | 0
.../src/main/res/layout/user_list_item.xml | 0
.../src/main/res/layout/view_item.xml | 0
.../main/res/navigation/app_navigation.xml | 0
.../main/res/anim/item_animation_slide_in.xml | 12 --
.../res/anim/overview_media_animation.xml | 5 -
app/src/main/res/values-hr/strings.xml | 2 -
app/src/main/res/values-pt-rBR/strings.xml | 154 ------------------
app/src/main/res/values/about_libraries.xml | 8 -
build.gradle.kts | 6 +-
core/build.gradle.kts | 65 ++++++++
.../libs/lib-decoder-ffmpeg-release.aar | Bin
.../res/drawable/ic_banner_foreground.xml | 0
.../res/drawable/ic_launcher_foreground.xml | 0
.../src/debug/res/values/strings.xml | 0
.../src/main/ic_launcher-playstore.png | Bin
.../jellyfin/database/ServerDatabase.kt | 0
.../jellyfin/database/ServerDatabaseDao.kt | 0
.../java/dev/jdtech/jellyfin/di/ApiModule.kt | 2 +-
.../jellyfin/di/AppPreferencesModule.kt | 19 +++
.../dev/jdtech/jellyfin/di/DatabaseModule.kt | 0
.../dev/jdtech/jellyfin/di/GlideModule.kt | 8 +-
.../jdtech/jellyfin/di/RepositoryModule.kt | 0
.../jellyfin/di/SharedPreferencesModule.kt | 0
.../dialogs/AddServerAddressDialog.kt | 2 +-
.../dialogs/DeleteServerAddressDialog.kt | 2 +-
.../dialogs/DeleteServerDialogFragment.kt | 2 +-
.../dialogs/DeleteUserDialogFragment.kt | 2 +-
.../jellyfin/dialogs/ErrorDialogFragment.kt | 2 +-
.../jellyfin/dialogs/SortDialogFragment.kt | 28 ++--
.../jdtech/jellyfin/models/CollectionType.kt | 0
.../jellyfin/models/DiscoveredServer.kt | 0
.../jellyfin/models/DownloadEpisodeItem.kt | 15 ++
.../jdtech/jellyfin/models/DownloadSection.kt | 0
.../dev/jdtech/jellyfin/models/EpisodeItem.kt | 16 ++
.../jdtech/jellyfin/models/ExceptionUiText.kt | 9 +
.../jdtech/jellyfin/models/FavoriteSection.kt | 2 +-
.../dev/jdtech/jellyfin/models/HomeItem.kt | 19 +++
.../dev/jdtech/jellyfin/models/HomeSection.kt | 0
.../java/dev/jdtech/jellyfin/models/Server.kt | 0
.../jdtech/jellyfin/models/ServerAddress.kt | 0
.../jellyfin/models/ServerWithAddresses.kt | 0
.../models/ServerWithAddressesAndUsers.kt | 0
.../jdtech/jellyfin/models/ServerWithUsers.kt | 0
.../java/dev/jdtech/jellyfin/models/UiText.kt | 19 +++
.../java/dev/jdtech/jellyfin/models/User.kt | 0
.../java/dev/jdtech/jellyfin/models/View.kt | 0
.../jdtech/jellyfin/utils/CoreExtensions.kt | 13 --
.../jellyfin/viewmodels/AddServerViewModel.kt | 71 ++++----
.../viewmodels/DownloadSeriesViewModel.kt | 2 +-
.../jellyfin/viewmodels/DownloadViewModel.kt | 8 +-
.../viewmodels/EpisodeBottomSheetViewModel.kt | 0
.../jellyfin/viewmodels/FavoriteViewModel.kt | 16 +-
.../jellyfin/viewmodels/HomeViewModel.kt | 12 +-
.../jellyfin/viewmodels/LibraryViewModel.kt | 3 +-
.../jellyfin/viewmodels/LoginViewModel.kt | 14 +-
.../jellyfin/viewmodels/MainViewModel.kt | 0
.../jellyfin/viewmodels/MediaInfoViewModel.kt | 0
.../jellyfin/viewmodels/MediaViewModel.kt | 0
.../viewmodels/PersonDetailViewModel.kt | 2 +-
.../viewmodels/SearchResultViewModel.kt | 16 +-
.../jellyfin/viewmodels/SeasonViewModel.kt | 2 +-
.../viewmodels/ServerAddressesViewModel.kt | 0
.../viewmodels/ServerSelectViewModel.kt | 2 +-
.../viewmodels/SettingsDeviceViewModel.kt | 2 +-
.../jellyfin/viewmodels/UsersViewModel.kt | 0
.../src/main/res/drawable-night/ic_banner.xml | 0
.../res/drawable/button_accent_background.xml | 0
.../res/drawable/button_setup_background.xml | 0
.../main/res/drawable/circle_background.xml | 0
.../src/main/res/drawable/focus_border.xml | 0
.../src/main/res/drawable/header_gradient.xml | 0
.../src/main/res/drawable/ic_alert_circle.xml | 0
.../src/main/res/drawable/ic_arrow_left.xml | 0
.../src/main/res/drawable/ic_banner.xml | 0
.../res/drawable/ic_banner_foreground.xml | 0
.../src/main/res/drawable/ic_check.xml | 0
.../main/res/drawable/ic_closed_caption.xml | 0
.../src/main/res/drawable/ic_download.xml | 0
.../src/main/res/drawable/ic_fast_forward.xml | 0
.../src/main/res/drawable/ic_film.xml | 0
.../src/main/res/drawable/ic_gauge.xml | 0
.../src/main/res/drawable/ic_globe.xml | 0
.../src/main/res/drawable/ic_heart.xml | 0
.../src/main/res/drawable/ic_heart_filled.xml | 0
.../src/main/res/drawable/ic_home.xml | 0
.../src/main/res/drawable/ic_languages.xml | 0
.../res/drawable/ic_launcher_foreground.xml | 0
.../src/main/res/drawable/ic_library.xml | 0
.../src/main/res/drawable/ic_lock.xml | 0
.../src/main/res/drawable/ic_minus_fat.xml | 0
.../src/main/res/drawable/ic_network.xml | 0
.../src/main/res/drawable/ic_palette.xml | 0
.../src/main/res/drawable/ic_pause.xml | 0
.../src/main/res/drawable/ic_play.xml | 0
.../src/main/res/drawable/ic_plus.xml | 0
.../src/main/res/drawable/ic_rewind.xml | 0
.../src/main/res/drawable/ic_rotate_ccw.xml | 0
.../src/main/res/drawable/ic_search.xml | 0
.../src/main/res/drawable/ic_server.xml | 0
.../src/main/res/drawable/ic_settings.xml | 0
.../src/main/res/drawable/ic_skip_back.xml | 0
.../src/main/res/drawable/ic_skip_forward.xml | 0
.../src/main/res/drawable/ic_smartphone.xml | 0
.../src/main/res/drawable/ic_speaker.xml | 0
.../src/main/res/drawable/ic_star.xml | 0
.../src/main/res/drawable/ic_sun.xml | 0
.../src/main/res/drawable/ic_trash.xml | 0
.../src/main/res/drawable/ic_user.xml | 0
.../res/drawable/ic_user_color_on_primary.xml | 0
.../src/main/res/drawable/ic_volume.xml | 0
.../main/res/drawable/overlay_background.xml | 0
.../main/res/drawable/person_placeholder.xml | 0
.../res/drawable/progress_scale_drawable.xml | 0
.../main/res/drawable/ripple_background.xml | 0
.../transparent_circle_background.xml | 0
.../main/res/drawable/user_placeholder.xml | 0
.../src/main/res/menu/bottom_nav_menu.xml | 0
{app => core}/src/main/res/menu/home_menu.xml | 0
.../src/main/res/menu/library_menu.xml | 0
.../src/main/res/menu/media_menu.xml | 0
.../main/res/mipmap-anydpi/ic_launcher.xml | 0
.../src/main/res/values-b+es+419/strings.xml | 7 +-
.../src/main/res/values-bg/strings.xml | 6 +-
.../src/main/res/values-cs-rCZ/strings.xml | 4 +-
.../src/main/res/values-de/strings.xml | 7 +-
.../src/main/res/values-es-rMX/strings.xml | 7 +-
.../src/main/res/values-es/strings.xml | 9 +-
.../src/main/res/values-fr/strings.xml | 7 +-
.../src/main/res/values-hu/strings.xml | 6 +-
.../src/main/res/values-it/strings.xml | 7 +-
.../src/main/res/values-ko/strings.xml | 7 +-
.../src/main/res/values-night/themes.xml | 0
.../src/main/res/values-nl/strings.xml | 11 +-
.../src/main/res/values-pl/strings.xml | 7 +-
core/src/main/res/values-pt-rBR/strings.xml | 8 +
.../src/main/res/values-pt/strings.xml | 7 +-
.../src/main/res/values-ru/strings.xml | 6 +-
.../src/main/res/values-sw600dp/dimens.xml | 0
.../src/main/res/values-sw720dp/dimens.xml | 0
.../src/main/res/values-zh-rCN/strings.xml | 7 +-
.../src/main/res/values-zh-rTW/strings.xml | 7 +-
core/src/main/res/values/about_libraries.xml | 8 +
{app => core}/src/main/res/values/colors.xml | 0
{app => core}/src/main/res/values/dimens.xml | 0
.../src/main/res/values/drawables.xml | 0
.../main/res/values/ic_banner_background.xml | 0
.../res/values/ic_launcher_background.xml | 0
.../src/main/res/values/languages.xml | 0
{app => core}/src/main/res/values/shape.xml | 0
.../src/main/res/values/string_arrays.xml | 0
{app => core}/src/main/res/values/strings.xml | 5 -
{app => core}/src/main/res/values/styles.xml | 0
{app => core}/src/main/res/values/themes.xml | 0
.../src/main/res/xml/fragment_settings.xml | 0
.../res/xml/fragment_settings_appearance.xml | 0
.../main/res/xml/fragment_settings_cache.xml | 0
.../main/res/xml/fragment_settings_device.xml | 0
.../res/xml/fragment_settings_downloads.xml | 0
.../res/xml/fragment_settings_language.xml | 0
.../res/xml/fragment_settings_network.xml | 0
.../main/res/xml/fragment_settings_player.xml | 0
.../main/res/xml/network_security_config.xml | 0
.../res/drawable/ic_banner_foreground.xml | 0
.../res/drawable/ic_launcher_foreground.xml | 0
.../src/staging/res/values/strings.xml | 0
data/build.gradle.kts | 49 ++++++
data/lint.xml | 7 +
.../dev/jdtech/jellyfin/api/JellyfinApi.kt | 4 +-
.../dev/jdtech/jellyfin/models}/SortBy.kt | 2 +-
.../jellyfin/repository/ItemsPagingSource.kt | 2 +-
.../jellyfin/repository/JellyfinRepository.kt | 2 +-
.../repository/JellyfinRepositoryImpl.kt | 2 +-
gradle/libs.versions.toml | 2 +
player/core/build.gradle.kts | 51 ++++++
player/core/lint.xml | 7 +
.../jdtech/jellyfin/database/Converters.kt | 0
.../jellyfin/database/DownloadDatabase.kt | 0
.../jellyfin/database/DownloadDatabaseDao.kt | 0
.../jdtech/jellyfin/models/DownloadItem.kt | 0
.../jellyfin/models/DownloadSeriesMetadata.kt | 0
.../jellyfin/models/ExternalSubtitle.kt | 0
.../dev/jdtech/jellyfin/models/PlayerItem.kt | 0
.../jellyfin/utils/DownloadUtilities.kt | 9 +-
player/video/build.gradle.kts | 56 +++++++
player/video/lint.xml | 7 +
.../video}/src/main/assets/mpv.conf | 0
.../video}/src/main/assets/subfont.ttf | Bin
.../dialogs/SpeedSelectionDialogFragment.kt | 2 +-
.../dialogs/TrackSelectionDialogFragment.kt | 2 +-
.../dialogs/VideoVersionDialogFragment.kt | 2 +-
.../java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt | 2 +-
.../java/dev/jdtech/jellyfin/mpv/TrackType.kt | 0
.../viewmodels/PlayerActivityViewModel.kt | 2 +-
.../jellyfin/viewmodels/PlayerViewModel.kt | 2 +-
.../src/main/res/values-b+es+419/strings.xml | 8 +
.../video/src/main/res/values-bg/strings.xml | 7 +
.../src/main/res/values-cs-rCZ/strings.xml | 4 +
.../video/src/main/res/values-de/strings.xml | 8 +
.../src/main/res/values-es-rMX/strings.xml | 8 +
.../video/src/main/res/values-es/strings.xml | 8 +
.../video/src/main/res/values-fr/strings.xml | 8 +
.../video/src/main/res/values-hu/strings.xml | 7 +
.../video/src/main/res/values-it/strings.xml | 8 +
.../video/src/main/res/values-ko/strings.xml | 8 +
.../video/src/main/res/values-nl/strings.xml | 8 +
.../video/src/main/res/values-pl/strings.xml | 8 +
.../src/main/res/values-pt-rBR/strings.xml | 8 +
.../video/src/main/res/values-pt/strings.xml | 8 +
.../video/src/main/res/values-ru/strings.xml | 7 +
.../src/main/res/values-zh-rCN/strings.xml | 8 +
.../src/main/res/values-zh-rTW/strings.xml | 8 +
player/video/src/main/res/values/strings.xml | 7 +
preferences/build.gradle.kts | 43 +++++
preferences/lint.xml | 7 +
.../dev/jdtech/jellyfin}/AppPreferences.kt | 44 ++++-
.../java/dev/jdtech/jellyfin}/Constants.kt | 11 +-
settings.gradle.kts | 7 +-
308 files changed, 795 insertions(+), 501 deletions(-)
delete mode 100644 app/.gitignore
rename app/{ => phone}/build.gradle.kts (86%)
rename app/{ => phone}/lint.xml (100%)
rename app/{ => phone}/proguard-rules.pro (100%)
rename app/{ => phone}/src/main/AndroidManifest.xml (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt (82%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt (98%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt (95%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/MainActivity.kt (97%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt (99%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/CollectionListAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/DiscoveredServerListAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/DownloadEpisodeListAdapter.kt (93%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/DownloadSeriesListAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/DownloadViewItemListAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/DownloadsListAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt (94%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/FavoritesListAdapter.kt (95%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/HomeEpisodeListAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/PersonListAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/ServerAddressAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/ServerGridAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/UserListAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/UserLoginListAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemListAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemPagingAdapter.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt (87%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/di/AppModule.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt (98%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/DownloadFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/DownloadSeriesFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt (98%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt (95%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt (98%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt (99%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/PersonDetailFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/ServerAddressesFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/SettingsAppearanceFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/SettingsCacheFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/SettingsDeviceFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/SettingsDownloadsFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt (97%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/SettingsLanguageFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/SettingsNetworkFragment.kt (93%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/SettingsPlayerFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/TwoPaneSettingsFragment.kt (100%)
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/fragments/UsersFragment.kt (100%)
create mode 100644 app/phone/src/main/java/dev/jdtech/jellyfin/utils/Extensions.kt
rename app/{ => phone}/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt (99%)
rename app/{ => phone}/src/main/res/layout-w600dp/activity_main.xml (100%)
rename app/{ => phone}/src/main/res/layout-w600dp/fragment_media_info.xml (100%)
rename app/{ => phone}/src/main/res/layout/activity_main.xml (100%)
rename app/{ => phone}/src/main/res/layout/activity_player.xml (100%)
rename app/{ => phone}/src/main/res/layout/base_item.xml (100%)
rename app/{ => phone}/src/main/res/layout/collection_item.xml (100%)
rename app/{ => phone}/src/main/res/layout/discovered_server_item.xml (100%)
rename app/{ => phone}/src/main/res/layout/download_section.xml (100%)
rename app/{ => phone}/src/main/res/layout/episode_bottom_sheet.xml (100%)
rename app/{ => phone}/src/main/res/layout/episode_item.xml (100%)
rename app/{ => phone}/src/main/res/layout/error_panel.xml (100%)
rename app/{ => phone}/src/main/res/layout/exo_player_control_view.xml (100%)
rename app/{ => phone}/src/main/res/layout/exo_player_view.xml (100%)
rename app/{ => phone}/src/main/res/layout/favorite_section.xml (97%)
rename app/{ => phone}/src/main/res/layout/fragment_add_server.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_download.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_download_series.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_favorite.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_home.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_library.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_login.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_media.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_media_info.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_person_detail.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_search_result.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_season.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_server_addresses.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_server_select.xml (100%)
rename app/{ => phone}/src/main/res/layout/fragment_users.xml (100%)
rename app/{ => phone}/src/main/res/layout/home_episode_item.xml (100%)
rename app/{ => phone}/src/main/res/layout/next_up_section.xml (100%)
rename app/{ => phone}/src/main/res/layout/person_item.xml (100%)
rename app/{ => phone}/src/main/res/layout/season_header.xml (100%)
rename app/{ => phone}/src/main/res/layout/server_address_list_item.xml (100%)
rename app/{ => phone}/src/main/res/layout/server_item.xml (100%)
rename app/{ => phone}/src/main/res/layout/user_item.xml (100%)
rename app/{ => phone}/src/main/res/layout/user_list_item.xml (100%)
rename app/{ => phone}/src/main/res/layout/view_item.xml (100%)
rename app/{ => phone}/src/main/res/navigation/app_navigation.xml (100%)
delete mode 100644 app/src/main/res/anim/item_animation_slide_in.xml
delete mode 100644 app/src/main/res/anim/overview_media_animation.xml
delete mode 100644 app/src/main/res/values-hr/strings.xml
delete mode 100644 app/src/main/res/values-pt-rBR/strings.xml
delete mode 100644 app/src/main/res/values/about_libraries.xml
create mode 100644 core/build.gradle.kts
rename {app => core}/libs/lib-decoder-ffmpeg-release.aar (100%)
rename {app => core}/src/debug/res/drawable/ic_banner_foreground.xml (100%)
rename {app => core}/src/debug/res/drawable/ic_launcher_foreground.xml (100%)
rename {app => core}/src/debug/res/values/strings.xml (100%)
rename {app => core}/src/main/ic_launcher-playstore.png (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt (97%)
create mode 100644 core/src/main/java/dev/jdtech/jellyfin/di/AppPreferencesModule.kt
rename {app => core}/src/main/java/dev/jdtech/jellyfin/di/DatabaseModule.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt (80%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/di/SharedPreferencesModule.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/dialogs/AddServerAddressDialog.kt (97%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerAddressDialog.kt (97%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerDialogFragment.kt (97%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteUserDialogFragment.kt (96%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt (98%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/dialogs/SortDialogFragment.kt (80%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/CollectionType.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/DiscoveredServer.kt (100%)
create mode 100644 core/src/main/java/dev/jdtech/jellyfin/models/DownloadEpisodeItem.kt
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/DownloadSection.kt (100%)
create mode 100644 core/src/main/java/dev/jdtech/jellyfin/models/EpisodeItem.kt
create mode 100644 core/src/main/java/dev/jdtech/jellyfin/models/ExceptionUiText.kt
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/FavoriteSection.kt (88%)
create mode 100644 core/src/main/java/dev/jdtech/jellyfin/models/HomeItem.kt
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/HomeSection.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/Server.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/ServerAddress.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/ServerWithAddresses.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/ServerWithAddressesAndUsers.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/ServerWithUsers.kt (100%)
create mode 100644 core/src/main/java/dev/jdtech/jellyfin/models/UiText.kt
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/User.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/models/View.kt (100%)
rename app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt => core/src/main/java/dev/jdtech/jellyfin/utils/CoreExtensions.kt (75%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt (81%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadSeriesViewModel.kt (96%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadViewModel.kt (92%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/FavoriteViewModel.kt (85%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt (92%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt (98%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt (90%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaViewModel.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/PersonDetailViewModel.kt (97%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/SearchResultViewModel.kt (85%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt (97%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerAddressesViewModel.kt (100%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt (97%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/SettingsDeviceViewModel.kt (94%)
rename {app => core}/src/main/java/dev/jdtech/jellyfin/viewmodels/UsersViewModel.kt (100%)
rename {app => core}/src/main/res/drawable-night/ic_banner.xml (100%)
rename {app => core}/src/main/res/drawable/button_accent_background.xml (100%)
rename {app => core}/src/main/res/drawable/button_setup_background.xml (100%)
rename {app => core}/src/main/res/drawable/circle_background.xml (100%)
rename {app => core}/src/main/res/drawable/focus_border.xml (100%)
rename {app => core}/src/main/res/drawable/header_gradient.xml (100%)
rename {app => core}/src/main/res/drawable/ic_alert_circle.xml (100%)
rename {app => core}/src/main/res/drawable/ic_arrow_left.xml (100%)
rename {app => core}/src/main/res/drawable/ic_banner.xml (100%)
rename {app => core}/src/main/res/drawable/ic_banner_foreground.xml (100%)
rename {app => core}/src/main/res/drawable/ic_check.xml (100%)
rename {app => core}/src/main/res/drawable/ic_closed_caption.xml (100%)
rename {app => core}/src/main/res/drawable/ic_download.xml (100%)
rename {app => core}/src/main/res/drawable/ic_fast_forward.xml (100%)
rename {app => core}/src/main/res/drawable/ic_film.xml (100%)
rename {app => core}/src/main/res/drawable/ic_gauge.xml (100%)
rename {app => core}/src/main/res/drawable/ic_globe.xml (100%)
rename {app => core}/src/main/res/drawable/ic_heart.xml (100%)
rename {app => core}/src/main/res/drawable/ic_heart_filled.xml (100%)
rename {app => core}/src/main/res/drawable/ic_home.xml (100%)
rename {app => core}/src/main/res/drawable/ic_languages.xml (100%)
rename {app => core}/src/main/res/drawable/ic_launcher_foreground.xml (100%)
rename {app => core}/src/main/res/drawable/ic_library.xml (100%)
rename {app => core}/src/main/res/drawable/ic_lock.xml (100%)
rename {app => core}/src/main/res/drawable/ic_minus_fat.xml (100%)
rename {app => core}/src/main/res/drawable/ic_network.xml (100%)
rename {app => core}/src/main/res/drawable/ic_palette.xml (100%)
rename {app => core}/src/main/res/drawable/ic_pause.xml (100%)
rename {app => core}/src/main/res/drawable/ic_play.xml (100%)
rename {app => core}/src/main/res/drawable/ic_plus.xml (100%)
rename {app => core}/src/main/res/drawable/ic_rewind.xml (100%)
rename {app => core}/src/main/res/drawable/ic_rotate_ccw.xml (100%)
rename {app => core}/src/main/res/drawable/ic_search.xml (100%)
rename {app => core}/src/main/res/drawable/ic_server.xml (100%)
rename {app => core}/src/main/res/drawable/ic_settings.xml (100%)
rename {app => core}/src/main/res/drawable/ic_skip_back.xml (100%)
rename {app => core}/src/main/res/drawable/ic_skip_forward.xml (100%)
rename {app => core}/src/main/res/drawable/ic_smartphone.xml (100%)
rename {app => core}/src/main/res/drawable/ic_speaker.xml (100%)
rename {app => core}/src/main/res/drawable/ic_star.xml (100%)
rename {app => core}/src/main/res/drawable/ic_sun.xml (100%)
rename {app => core}/src/main/res/drawable/ic_trash.xml (100%)
rename {app => core}/src/main/res/drawable/ic_user.xml (100%)
rename {app => core}/src/main/res/drawable/ic_user_color_on_primary.xml (100%)
rename {app => core}/src/main/res/drawable/ic_volume.xml (100%)
rename {app => core}/src/main/res/drawable/overlay_background.xml (100%)
rename {app => core}/src/main/res/drawable/person_placeholder.xml (100%)
rename {app => core}/src/main/res/drawable/progress_scale_drawable.xml (100%)
rename {app => core}/src/main/res/drawable/ripple_background.xml (100%)
rename {app => core}/src/main/res/drawable/transparent_circle_background.xml (100%)
rename {app => core}/src/main/res/drawable/user_placeholder.xml (100%)
rename {app => core}/src/main/res/menu/bottom_nav_menu.xml (100%)
rename {app => core}/src/main/res/menu/home_menu.xml (100%)
rename {app => core}/src/main/res/menu/library_menu.xml (100%)
rename {app => core}/src/main/res/menu/media_menu.xml (100%)
rename {app => core}/src/main/res/mipmap-anydpi/ic_launcher.xml (100%)
rename {app => core}/src/main/res/values-b+es+419/strings.xml (96%)
rename {app => core}/src/main/res/values-bg/strings.xml (95%)
rename {app => core}/src/main/res/values-cs-rCZ/strings.xml (97%)
rename {app => core}/src/main/res/values-de/strings.xml (96%)
rename {app => core}/src/main/res/values-es-rMX/strings.xml (96%)
rename {app => core}/src/main/res/values-es/strings.xml (95%)
rename {app => core}/src/main/res/values-fr/strings.xml (96%)
rename {app => core}/src/main/res/values-hu/strings.xml (96%)
rename {app => core}/src/main/res/values-it/strings.xml (96%)
rename {app => core}/src/main/res/values-ko/strings.xml (96%)
rename {app => core}/src/main/res/values-night/themes.xml (100%)
rename {app => core}/src/main/res/values-nl/strings.xml (95%)
rename {app => core}/src/main/res/values-pl/strings.xml (96%)
create mode 100644 core/src/main/res/values-pt-rBR/strings.xml
rename {app => core}/src/main/res/values-pt/strings.xml (96%)
rename {app => core}/src/main/res/values-ru/strings.xml (96%)
rename {app => core}/src/main/res/values-sw600dp/dimens.xml (100%)
rename {app => core}/src/main/res/values-sw720dp/dimens.xml (100%)
rename {app => core}/src/main/res/values-zh-rCN/strings.xml (96%)
rename {app => core}/src/main/res/values-zh-rTW/strings.xml (96%)
create mode 100644 core/src/main/res/values/about_libraries.xml
rename {app => core}/src/main/res/values/colors.xml (100%)
rename {app => core}/src/main/res/values/dimens.xml (100%)
rename {app => core}/src/main/res/values/drawables.xml (100%)
rename {app => core}/src/main/res/values/ic_banner_background.xml (100%)
rename {app => core}/src/main/res/values/ic_launcher_background.xml (100%)
rename {app => core}/src/main/res/values/languages.xml (100%)
rename {app => core}/src/main/res/values/shape.xml (100%)
rename {app => core}/src/main/res/values/string_arrays.xml (100%)
rename {app => core}/src/main/res/values/strings.xml (96%)
rename {app => core}/src/main/res/values/styles.xml (100%)
rename {app => core}/src/main/res/values/themes.xml (100%)
rename {app => core}/src/main/res/xml/fragment_settings.xml (100%)
rename {app => core}/src/main/res/xml/fragment_settings_appearance.xml (100%)
rename {app => core}/src/main/res/xml/fragment_settings_cache.xml (100%)
rename {app => core}/src/main/res/xml/fragment_settings_device.xml (100%)
rename {app => core}/src/main/res/xml/fragment_settings_downloads.xml (100%)
rename {app => core}/src/main/res/xml/fragment_settings_language.xml (100%)
rename {app => core}/src/main/res/xml/fragment_settings_network.xml (100%)
rename {app => core}/src/main/res/xml/fragment_settings_player.xml (100%)
rename {app => core}/src/main/res/xml/network_security_config.xml (100%)
rename {app => core}/src/staging/res/drawable/ic_banner_foreground.xml (100%)
rename {app => core}/src/staging/res/drawable/ic_launcher_foreground.xml (100%)
rename {app => core}/src/staging/res/values/strings.xml (100%)
create mode 100644 data/build.gradle.kts
create mode 100644 data/lint.xml
rename {app => data}/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt (97%)
rename {app/src/main/java/dev/jdtech/jellyfin/utils => data/src/main/java/dev/jdtech/jellyfin/models}/SortBy.kt (93%)
rename {app => data}/src/main/java/dev/jdtech/jellyfin/repository/ItemsPagingSource.kt (97%)
rename {app => data}/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt (98%)
rename {app => data}/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt (99%)
create mode 100644 player/core/build.gradle.kts
create mode 100644 player/core/lint.xml
rename {app => player/core}/src/main/java/dev/jdtech/jellyfin/database/Converters.kt (100%)
rename {app => player/core}/src/main/java/dev/jdtech/jellyfin/database/DownloadDatabase.kt (100%)
rename {app => player/core}/src/main/java/dev/jdtech/jellyfin/database/DownloadDatabaseDao.kt (100%)
rename {app => player/core}/src/main/java/dev/jdtech/jellyfin/models/DownloadItem.kt (100%)
rename {app => player/core}/src/main/java/dev/jdtech/jellyfin/models/DownloadSeriesMetadata.kt (100%)
rename {app => player/core}/src/main/java/dev/jdtech/jellyfin/models/ExternalSubtitle.kt (100%)
rename {app => player/core}/src/main/java/dev/jdtech/jellyfin/models/PlayerItem.kt (100%)
rename {app => player/core}/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt (96%)
create mode 100644 player/video/build.gradle.kts
create mode 100644 player/video/lint.xml
rename {app => player/video}/src/main/assets/mpv.conf (100%)
rename {app => player/video}/src/main/assets/subfont.ttf (100%)
rename {app => player/video}/src/main/java/dev/jdtech/jellyfin/dialogs/SpeedSelectionDialogFragment.kt (96%)
rename {app => player/video}/src/main/java/dev/jdtech/jellyfin/dialogs/TrackSelectionDialogFragment.kt (98%)
rename {app => player/video}/src/main/java/dev/jdtech/jellyfin/dialogs/VideoVersionDialogFragment.kt (95%)
rename {app => player/video}/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt (99%)
rename {app => player/video}/src/main/java/dev/jdtech/jellyfin/mpv/TrackType.kt (100%)
rename {app => player/video}/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt (99%)
rename {app => player/video}/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt (99%)
create mode 100644 player/video/src/main/res/values-b+es+419/strings.xml
create mode 100644 player/video/src/main/res/values-bg/strings.xml
create mode 100644 player/video/src/main/res/values-cs-rCZ/strings.xml
create mode 100644 player/video/src/main/res/values-de/strings.xml
create mode 100644 player/video/src/main/res/values-es-rMX/strings.xml
create mode 100644 player/video/src/main/res/values-es/strings.xml
create mode 100644 player/video/src/main/res/values-fr/strings.xml
create mode 100644 player/video/src/main/res/values-hu/strings.xml
create mode 100644 player/video/src/main/res/values-it/strings.xml
create mode 100644 player/video/src/main/res/values-ko/strings.xml
create mode 100644 player/video/src/main/res/values-nl/strings.xml
create mode 100644 player/video/src/main/res/values-pl/strings.xml
create mode 100644 player/video/src/main/res/values-pt-rBR/strings.xml
create mode 100644 player/video/src/main/res/values-pt/strings.xml
create mode 100644 player/video/src/main/res/values-ru/strings.xml
create mode 100644 player/video/src/main/res/values-zh-rCN/strings.xml
create mode 100644 player/video/src/main/res/values-zh-rTW/strings.xml
create mode 100644 player/video/src/main/res/values/strings.xml
create mode 100644 preferences/build.gradle.kts
create mode 100644 preferences/lint.xml
rename {app/src/main/java/dev/jdtech/jellyfin/utils => preferences/src/main/java/dev/jdtech/jellyfin}/AppPreferences.kt (75%)
rename {app/src/main/java/dev/jdtech/jellyfin/utils => preferences/src/main/java/dev/jdtech/jellyfin}/Constants.kt (83%)
diff --git a/app/.gitignore b/app/.gitignore
deleted file mode 100644
index 42afabfd..00000000
--- a/app/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/phone/build.gradle.kts
similarity index 86%
rename from app/build.gradle.kts
rename to app/phone/build.gradle.kts
index d81e29d9..2325d5af 100644
--- a/app/build.gradle.kts
+++ b/app/phone/build.gradle.kts
@@ -19,8 +19,12 @@ android {
applicationId = "dev.jdtech.jellyfin"
minSdk = 27
targetSdk = 33
- versionCode = 14
- versionName = "0.8.0"
+
+ val appVersionCode: Int by rootProject.extra
+ val appVersionName: String by rootProject.extra
+
+ versionCode = appVersionCode
+ versionName = appVersionName
}
buildTypes {
@@ -68,6 +72,11 @@ ktlint {
}
dependencies {
+ implementation(project(":core"))
+ implementation(project(":data"))
+ implementation(project(":preferences"))
+ implementation(project(":player:core"))
+ implementation(project(":player:video"))
implementation(libs.aboutlibraries.core)
implementation(libs.aboutlibraries)
implementation(libs.androidx.activity)
@@ -85,19 +94,13 @@ dependencies {
implementation(libs.androidx.preference)
implementation(libs.androidx.recyclerview)
implementation(libs.androidx.recyclerview.selection)
- implementation(libs.androidx.room.runtime)
- kapt(libs.androidx.room.compiler)
implementation(libs.androidx.room.ktx)
implementation(libs.androidx.swiperefreshlayout)
implementation(libs.glide)
- kapt(libs.glide.compiler)
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
implementation(libs.jellyfin.core)
- implementation(libs.libmpv)
+ compileOnly(libs.libmpv)
implementation(libs.material)
implementation(libs.timber)
-
- // Media3 FFmpeg decoder
- implementation(files("libs/lib-decoder-ffmpeg-release.aar"))
}
diff --git a/app/lint.xml b/app/phone/lint.xml
similarity index 100%
rename from app/lint.xml
rename to app/phone/lint.xml
diff --git a/app/proguard-rules.pro b/app/phone/proguard-rules.pro
similarity index 100%
rename from app/proguard-rules.pro
rename to app/phone/proguard-rules.pro
diff --git a/app/src/main/AndroidManifest.xml b/app/phone/src/main/AndroidManifest.xml
similarity index 100%
rename from app/src/main/AndroidManifest.xml
rename to app/phone/src/main/AndroidManifest.xml
diff --git a/app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt
similarity index 82%
rename from app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt
index 93cdda26..4edd0bbd 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/BaseApplication.kt
@@ -2,14 +2,16 @@ package dev.jdtech.jellyfin
import android.app.Application
import androidx.appcompat.app.AppCompatDelegate
-import androidx.preference.PreferenceManager
import com.google.android.material.color.DynamicColors
import dagger.hilt.android.HiltAndroidApp
-import dev.jdtech.jellyfin.utils.AppPreferences
import timber.log.Timber
+import javax.inject.Inject
@HiltAndroidApp
class BaseApplication : Application() {
+ @Inject
+ lateinit var appPreferences: AppPreferences
+
override fun onCreate() {
super.onCreate()
@@ -17,8 +19,6 @@ class BaseApplication : Application() {
Timber.plant(Timber.DebugTree())
}
- val appPreferences = AppPreferences(PreferenceManager.getDefaultSharedPreferences(this))
-
when (appPreferences.theme) {
"system" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
"light" -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
diff --git a/app/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt
similarity index 98%
rename from app/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt
index ab4df781..1c5c6416 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/BasePlayerActivity.kt
@@ -13,7 +13,7 @@ abstract class BasePlayerActivity : AppCompatActivity() {
abstract val viewModel: PlayerActivityViewModel
- lateinit var mediaSession: MediaSession
+ private lateinit var mediaSession: MediaSession
override fun onStart() {
super.onStart()
diff --git a/app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt
similarity index 95%
rename from app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt
index 50d245d6..a7812758 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/BindingAdapters.kt
@@ -131,11 +131,9 @@ private fun ImageView.loadImage(
}
private fun View.posterDescription(name: String?) {
- contentDescription =
- String.format(context.resources.getString(R.string.image_description_poster), name)
+ contentDescription = context.resources.getString(R.string.image_description_poster, name)
}
private fun View.backdropDescription(name: String?) {
- contentDescription =
- String.format(context.resources.getString(R.string.image_description_backdrop), name)
+ contentDescription = context.resources.getString(R.string.image_description_backdrop, name)
}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt
index 0c6f9c44..f1b1ea9d 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/MainActivity.kt
@@ -15,7 +15,6 @@ import com.google.android.material.navigation.NavigationBarView
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.databinding.ActivityMainBinding
-import dev.jdtech.jellyfin.utils.AppPreferences
import dev.jdtech.jellyfin.utils.loadDownloadLocation
import dev.jdtech.jellyfin.viewmodels.MainViewModel
import javax.inject.Inject
@@ -33,7 +32,7 @@ class MainActivity : AppCompatActivity() {
@Inject
lateinit var appPreferences: AppPreferences
- lateinit var navController: NavController
+ private lateinit var navController: NavController
@OptIn(NavigationUiSaveStateControl::class)
override fun onCreate(savedInstanceState: Bundle?) {
diff --git a/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
similarity index 99%
rename from app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
index 66dc59e3..985ca978 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt
@@ -18,7 +18,6 @@ import dev.jdtech.jellyfin.dialogs.SpeedSelectionDialogFragment
import dev.jdtech.jellyfin.dialogs.TrackSelectionDialogFragment
import dev.jdtech.jellyfin.mpv.MPVPlayer
import dev.jdtech.jellyfin.mpv.TrackType
-import dev.jdtech.jellyfin.utils.AppPreferences
import dev.jdtech.jellyfin.utils.PlayerGestureHelper
import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel
import javax.inject.Inject
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/CollectionListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/CollectionListAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/CollectionListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/CollectionListAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/DiscoveredServerListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DiscoveredServerListAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/DiscoveredServerListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DiscoveredServerListAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/DownloadEpisodeListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DownloadEpisodeListAdapter.kt
similarity index 93%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/DownloadEpisodeListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DownloadEpisodeListAdapter.kt
index 633ef916..1ff7e21f 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/adapters/DownloadEpisodeListAdapter.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DownloadEpisodeListAdapter.kt
@@ -9,10 +9,10 @@ import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import dev.jdtech.jellyfin.databinding.EpisodeItemBinding
import dev.jdtech.jellyfin.databinding.SeasonHeaderBinding
+import dev.jdtech.jellyfin.models.DownloadEpisodeItem
import dev.jdtech.jellyfin.models.DownloadSeriesMetadata
import dev.jdtech.jellyfin.models.PlayerItem
import dev.jdtech.jellyfin.utils.downloadMetadataToBaseItemDto
-import java.util.UUID
import org.jellyfin.sdk.model.api.BaseItemDto
private const val ITEM_VIEW_TYPE_HEADER = 0
@@ -113,16 +113,4 @@ class DownloadEpisodeListAdapter(
class OnClickListener(val clickListener: (item: PlayerItem) -> Unit) {
fun onClick(item: PlayerItem) = clickListener(item)
}
-}
-
-sealed class DownloadEpisodeItem {
- abstract val id: UUID
-
- object Header : DownloadEpisodeItem() {
- override val id: UUID = UUID.randomUUID()
- }
-
- data class Episode(val episode: PlayerItem) : DownloadEpisodeItem() {
- override val id = episode.itemId
- }
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/DownloadSeriesListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DownloadSeriesListAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/DownloadSeriesListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DownloadSeriesListAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/DownloadViewItemListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DownloadViewItemListAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/DownloadViewItemListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DownloadViewItemListAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/DownloadsListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DownloadsListAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/DownloadsListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/DownloadsListAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt
similarity index 94%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt
index e3a97328..b425b552 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/EpisodeListAdapter.kt
@@ -9,6 +9,7 @@ import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import dev.jdtech.jellyfin.databinding.EpisodeItemBinding
import dev.jdtech.jellyfin.databinding.SeasonHeaderBinding
+import dev.jdtech.jellyfin.models.EpisodeItem
import java.util.UUID
import org.jellyfin.sdk.model.api.BaseItemDto
@@ -118,15 +119,3 @@ class EpisodeListAdapter(
fun onClick(item: BaseItemDto) = clickListener(item)
}
}
-
-sealed class EpisodeItem {
- abstract val id: UUID
-
- object Header : EpisodeItem() {
- override val id: UUID = UUID.randomUUID()
- }
-
- data class Episode(val episode: BaseItemDto) : EpisodeItem() {
- override val id = episode.id
- }
-}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/FavoritesListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/FavoritesListAdapter.kt
similarity index 95%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/FavoritesListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/FavoritesListAdapter.kt
index 5985a109..9a131aaf 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/adapters/FavoritesListAdapter.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/FavoritesListAdapter.kt
@@ -5,9 +5,9 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
+import dev.jdtech.jellyfin.Constants
import dev.jdtech.jellyfin.databinding.FavoriteSectionBinding
import dev.jdtech.jellyfin.models.FavoriteSection
-import dev.jdtech.jellyfin.utils.Constants
class FavoritesListAdapter(
private val onClickListener: ViewItemListAdapter.OnClickListener,
@@ -30,6 +30,7 @@ class FavoritesListAdapter(
HomeEpisodeListAdapter(onEpisodeClickListener)
(binding.itemsRecyclerView.adapter as HomeEpisodeListAdapter).submitList(section.items)
}
+ binding.sectionName.text = section.name.asString(binding.root.resources)
binding.executePendingBindings()
}
}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/HomeEpisodeListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/HomeEpisodeListAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/HomeEpisodeListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/HomeEpisodeListAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/PersonListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/PersonListAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/PersonListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/PersonListAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/ServerAddressAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ServerAddressAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/ServerAddressAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ServerAddressAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/ServerGridAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ServerGridAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/ServerGridAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ServerGridAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/UserListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/UserListAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/UserListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/UserListAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/UserLoginListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/UserLoginListAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/UserLoginListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/UserLoginListAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemListAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemListAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemPagingAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemPagingAdapter.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemPagingAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ViewItemPagingAdapter.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt
similarity index 87%
rename from app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt
index 0e6ef7d0..bd0b1028 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/adapters/ViewListAdapter.kt
@@ -8,9 +8,8 @@ import androidx.recyclerview.widget.RecyclerView
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.databinding.NextUpSectionBinding
import dev.jdtech.jellyfin.databinding.ViewItemBinding
-import dev.jdtech.jellyfin.models.HomeSection
+import dev.jdtech.jellyfin.models.HomeItem
import dev.jdtech.jellyfin.models.View
-import java.util.UUID
private const val ITEM_VIEW_TYPE_NEXT_UP = 0
private const val ITEM_VIEW_TYPE_VIEW = 1
@@ -30,7 +29,7 @@ class ViewListAdapter(
) {
val view = dataItem.view
binding.view = view
- binding.viewName.text = String.format(binding.viewName.context.resources.getString(R.string.latest_library), view.name)
+ binding.viewName.text = binding.viewName.context.resources.getString(R.string.latest_library, view.name)
binding.itemsRecyclerView.adapter =
ViewItemListAdapter(onItemClickListener, fixedWidth = true)
binding.viewAll.setOnClickListener {
@@ -105,19 +104,3 @@ class ViewListAdapter(
fun onClick(view: View) = clickListener(view)
}
}
-
-sealed class HomeItem {
- data class Libraries(val section: HomeSection) : HomeItem() {
- override val id = section.id
- }
-
- data class Section(val homeSection: HomeSection) : HomeItem() {
- override val id = homeSection.id
- }
-
- data class ViewItem(val view: View) : HomeItem() {
- override val id = view.id
- }
-
- abstract val id: UUID
-}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/di/AppModule.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/di/AppModule.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/di/AppModule.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/di/AppModule.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt
similarity index 98%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt
index 127a2f06..33106d9a 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt
@@ -99,7 +99,7 @@ class AddServerFragment : Fragment() {
binding.buttonConnect.isEnabled = true
binding.progressCircular.isVisible = false
binding.editTextServerAddressLayout.apply {
- error = uiState.message
+ error = uiState.message.joinToString { it.asString(resources) }
isEnabled = true
}
}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/DownloadFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/DownloadFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadSeriesFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/DownloadSeriesFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/DownloadSeriesFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/DownloadSeriesFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
similarity index 98%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
index 58f6a240..f4887f9c 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/EpisodeBottomSheetFragment.kt
@@ -195,8 +195,8 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
}
}
- binding.episodeName.text = String.format(
- getString(R.string.episode_name_extended),
+ binding.episodeName.text = getString(
+ R.string.episode_name_extended,
episode.parentIndexNumber,
episode.indexNumber,
episode.name
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/FavoriteFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/HomeFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt
similarity index 95%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt
index 76c00f9d..262e59ff 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/LibraryFragment.kt
@@ -1,6 +1,5 @@
package dev.jdtech.jellyfin.fragments
-import android.content.SharedPreferences
import android.os.Bundle
import android.view.LayoutInflater
import android.view.Menu
@@ -20,12 +19,13 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import androidx.paging.LoadState
import dagger.hilt.android.AndroidEntryPoint
+import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.adapters.ViewItemPagingAdapter
import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
import dev.jdtech.jellyfin.dialogs.SortDialogFragment
-import dev.jdtech.jellyfin.utils.SortBy
+import dev.jdtech.jellyfin.models.SortBy
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
import dev.jdtech.jellyfin.viewmodels.LibraryViewModel
import java.lang.IllegalArgumentException
@@ -44,7 +44,7 @@ class LibraryFragment : Fragment() {
private lateinit var errorDialog: ErrorDialogFragment
@Inject
- lateinit var sp: SharedPreferences
+ lateinit var preferences: AppPreferences
override fun onCreateView(
inflater: LayoutInflater,
@@ -146,9 +146,9 @@ class LibraryFragment : Fragment() {
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
// Sorting options
- val sortBy = SortBy.fromString(sp.getString("sortBy", SortBy.defaultValue.name)!!)
+ val sortBy = SortBy.fromString(preferences.sortBy)
val sortOrder = try {
- SortOrder.valueOf(sp.getString("sortOrder", SortOrder.ASCENDING.name)!!)
+ SortOrder.valueOf(preferences.sortOrder)
} catch (e: IllegalArgumentException) {
SortOrder.ASCENDING
}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
similarity index 98%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
index 97dcca75..b8f2bc3f 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt
@@ -18,7 +18,7 @@ import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.adapters.UserLoginListAdapter
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.databinding.FragmentLoginBinding
-import dev.jdtech.jellyfin.utils.AppPreferences
+import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.viewmodels.LoginViewModel
import javax.inject.Inject
import kotlinx.coroutines.launch
@@ -119,7 +119,7 @@ class LoginFragment : Fragment() {
binding.buttonLogin.isEnabled = true
binding.progressCircular.isVisible = false
binding.editTextUsernameLayout.apply {
- error = uiState.message
+ error = uiState.message.asString(resources)
isEnabled = true
}
binding.editTextPasswordLayout.isEnabled = true
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/MediaFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
similarity index 99%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
index e984fbd6..1953e1f8 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/MediaInfoFragment.kt
@@ -272,8 +272,8 @@ class MediaInfoFragment : Fragment() {
binding.writers.text = writersString
binding.description.text = item.overview
binding.nextUpLayout.isVisible = nextUp != null
- binding.nextUpName.text = String.format(
- getString(R.string.episode_name_extended),
+ binding.nextUpName.text = getString(
+ R.string.episode_name_extended,
nextUp?.parentIndexNumber,
nextUp?.indexNumber,
nextUp?.name
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/PersonDetailFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/PersonDetailFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/PersonDetailFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/PersonDetailFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SearchResultFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SeasonFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/ServerAddressesFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ServerAddressesFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/ServerAddressesFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ServerAddressesFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/ServerSelectFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsAppearanceFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsAppearanceFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsAppearanceFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsAppearanceFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsCacheFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsCacheFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsCacheFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsCacheFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsDeviceFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsDeviceFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsDeviceFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsDeviceFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsDownloadsFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsDownloadsFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsDownloadsFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsDownloadsFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt
index 1bf814b9..971a55a3 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsFragment.kt
@@ -8,7 +8,7 @@ import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.R
-import dev.jdtech.jellyfin.utils.AppPreferences
+import dev.jdtech.jellyfin.AppPreferences
import javax.inject.Inject
@AndroidEntryPoint
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsLanguageFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsLanguageFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsLanguageFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsLanguageFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsNetworkFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsNetworkFragment.kt
similarity index 93%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsNetworkFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsNetworkFragment.kt
index c4b1fbfe..e55a4fe4 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsNetworkFragment.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsNetworkFragment.kt
@@ -4,8 +4,8 @@ import android.os.Bundle
import android.text.InputType
import androidx.preference.EditTextPreference
import androidx.preference.PreferenceFragmentCompat
+import dev.jdtech.jellyfin.Constants
import dev.jdtech.jellyfin.R
-import dev.jdtech.jellyfin.utils.Constants
@Suppress("unused")
class SettingsNetworkFragment : PreferenceFragmentCompat() {
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsPlayerFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsPlayerFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/SettingsPlayerFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/SettingsPlayerFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/TwoPaneSettingsFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/TwoPaneSettingsFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/TwoPaneSettingsFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/TwoPaneSettingsFragment.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/UsersFragment.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/fragments/UsersFragment.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/fragments/UsersFragment.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/fragments/UsersFragment.kt
diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/utils/Extensions.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/utils/Extensions.kt
new file mode 100644
index 00000000..e177903f
--- /dev/null
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/utils/Extensions.kt
@@ -0,0 +1,15 @@
+package dev.jdtech.jellyfin.utils
+
+import androidx.fragment.app.Fragment
+import androidx.navigation.fragment.findNavController
+import dev.jdtech.jellyfin.AppNavigationDirections
+import timber.log.Timber
+
+fun Fragment.checkIfLoginRequired(error: String?) {
+ if (error != null) {
+ if (error.contains("401")) {
+ Timber.d("Login required!")
+ findNavController().navigate(AppNavigationDirections.actionGlobalLoginFragment(reLogin = true))
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt
similarity index 99%
rename from app/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt
rename to app/phone/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt
index ef169a12..563b1bc5 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt
@@ -12,6 +12,8 @@ import android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_FULL
import android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF
import androidx.media3.ui.AspectRatioFrameLayout
import androidx.media3.ui.PlayerView
+import dev.jdtech.jellyfin.AppPreferences
+import dev.jdtech.jellyfin.Constants
import dev.jdtech.jellyfin.PlayerActivity
import dev.jdtech.jellyfin.mpv.MPVPlayer
import kotlin.math.abs
diff --git a/app/src/main/res/layout-w600dp/activity_main.xml b/app/phone/src/main/res/layout-w600dp/activity_main.xml
similarity index 100%
rename from app/src/main/res/layout-w600dp/activity_main.xml
rename to app/phone/src/main/res/layout-w600dp/activity_main.xml
diff --git a/app/src/main/res/layout-w600dp/fragment_media_info.xml b/app/phone/src/main/res/layout-w600dp/fragment_media_info.xml
similarity index 100%
rename from app/src/main/res/layout-w600dp/fragment_media_info.xml
rename to app/phone/src/main/res/layout-w600dp/fragment_media_info.xml
diff --git a/app/src/main/res/layout/activity_main.xml b/app/phone/src/main/res/layout/activity_main.xml
similarity index 100%
rename from app/src/main/res/layout/activity_main.xml
rename to app/phone/src/main/res/layout/activity_main.xml
diff --git a/app/src/main/res/layout/activity_player.xml b/app/phone/src/main/res/layout/activity_player.xml
similarity index 100%
rename from app/src/main/res/layout/activity_player.xml
rename to app/phone/src/main/res/layout/activity_player.xml
diff --git a/app/src/main/res/layout/base_item.xml b/app/phone/src/main/res/layout/base_item.xml
similarity index 100%
rename from app/src/main/res/layout/base_item.xml
rename to app/phone/src/main/res/layout/base_item.xml
diff --git a/app/src/main/res/layout/collection_item.xml b/app/phone/src/main/res/layout/collection_item.xml
similarity index 100%
rename from app/src/main/res/layout/collection_item.xml
rename to app/phone/src/main/res/layout/collection_item.xml
diff --git a/app/src/main/res/layout/discovered_server_item.xml b/app/phone/src/main/res/layout/discovered_server_item.xml
similarity index 100%
rename from app/src/main/res/layout/discovered_server_item.xml
rename to app/phone/src/main/res/layout/discovered_server_item.xml
diff --git a/app/src/main/res/layout/download_section.xml b/app/phone/src/main/res/layout/download_section.xml
similarity index 100%
rename from app/src/main/res/layout/download_section.xml
rename to app/phone/src/main/res/layout/download_section.xml
diff --git a/app/src/main/res/layout/episode_bottom_sheet.xml b/app/phone/src/main/res/layout/episode_bottom_sheet.xml
similarity index 100%
rename from app/src/main/res/layout/episode_bottom_sheet.xml
rename to app/phone/src/main/res/layout/episode_bottom_sheet.xml
diff --git a/app/src/main/res/layout/episode_item.xml b/app/phone/src/main/res/layout/episode_item.xml
similarity index 100%
rename from app/src/main/res/layout/episode_item.xml
rename to app/phone/src/main/res/layout/episode_item.xml
diff --git a/app/src/main/res/layout/error_panel.xml b/app/phone/src/main/res/layout/error_panel.xml
similarity index 100%
rename from app/src/main/res/layout/error_panel.xml
rename to app/phone/src/main/res/layout/error_panel.xml
diff --git a/app/src/main/res/layout/exo_player_control_view.xml b/app/phone/src/main/res/layout/exo_player_control_view.xml
similarity index 100%
rename from app/src/main/res/layout/exo_player_control_view.xml
rename to app/phone/src/main/res/layout/exo_player_control_view.xml
diff --git a/app/src/main/res/layout/exo_player_view.xml b/app/phone/src/main/res/layout/exo_player_view.xml
similarity index 100%
rename from app/src/main/res/layout/exo_player_view.xml
rename to app/phone/src/main/res/layout/exo_player_view.xml
diff --git a/app/src/main/res/layout/favorite_section.xml b/app/phone/src/main/res/layout/favorite_section.xml
similarity index 97%
rename from app/src/main/res/layout/favorite_section.xml
rename to app/phone/src/main/res/layout/favorite_section.xml
index 7b4e9a87..9fab4b6a 100644
--- a/app/src/main/res/layout/favorite_section.xml
+++ b/app/phone/src/main/res/layout/favorite_section.xml
@@ -22,7 +22,6 @@
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginBottom="12dp"
- android:text="@{section.name}"
android:textAppearance="@style/TextAppearance.Material3.TitleMedium"
android:textSize="18sp"
tools:text="Movies" />
diff --git a/app/src/main/res/layout/fragment_add_server.xml b/app/phone/src/main/res/layout/fragment_add_server.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_add_server.xml
rename to app/phone/src/main/res/layout/fragment_add_server.xml
diff --git a/app/src/main/res/layout/fragment_download.xml b/app/phone/src/main/res/layout/fragment_download.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_download.xml
rename to app/phone/src/main/res/layout/fragment_download.xml
diff --git a/app/src/main/res/layout/fragment_download_series.xml b/app/phone/src/main/res/layout/fragment_download_series.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_download_series.xml
rename to app/phone/src/main/res/layout/fragment_download_series.xml
diff --git a/app/src/main/res/layout/fragment_favorite.xml b/app/phone/src/main/res/layout/fragment_favorite.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_favorite.xml
rename to app/phone/src/main/res/layout/fragment_favorite.xml
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/phone/src/main/res/layout/fragment_home.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_home.xml
rename to app/phone/src/main/res/layout/fragment_home.xml
diff --git a/app/src/main/res/layout/fragment_library.xml b/app/phone/src/main/res/layout/fragment_library.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_library.xml
rename to app/phone/src/main/res/layout/fragment_library.xml
diff --git a/app/src/main/res/layout/fragment_login.xml b/app/phone/src/main/res/layout/fragment_login.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_login.xml
rename to app/phone/src/main/res/layout/fragment_login.xml
diff --git a/app/src/main/res/layout/fragment_media.xml b/app/phone/src/main/res/layout/fragment_media.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_media.xml
rename to app/phone/src/main/res/layout/fragment_media.xml
diff --git a/app/src/main/res/layout/fragment_media_info.xml b/app/phone/src/main/res/layout/fragment_media_info.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_media_info.xml
rename to app/phone/src/main/res/layout/fragment_media_info.xml
diff --git a/app/src/main/res/layout/fragment_person_detail.xml b/app/phone/src/main/res/layout/fragment_person_detail.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_person_detail.xml
rename to app/phone/src/main/res/layout/fragment_person_detail.xml
diff --git a/app/src/main/res/layout/fragment_search_result.xml b/app/phone/src/main/res/layout/fragment_search_result.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_search_result.xml
rename to app/phone/src/main/res/layout/fragment_search_result.xml
diff --git a/app/src/main/res/layout/fragment_season.xml b/app/phone/src/main/res/layout/fragment_season.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_season.xml
rename to app/phone/src/main/res/layout/fragment_season.xml
diff --git a/app/src/main/res/layout/fragment_server_addresses.xml b/app/phone/src/main/res/layout/fragment_server_addresses.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_server_addresses.xml
rename to app/phone/src/main/res/layout/fragment_server_addresses.xml
diff --git a/app/src/main/res/layout/fragment_server_select.xml b/app/phone/src/main/res/layout/fragment_server_select.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_server_select.xml
rename to app/phone/src/main/res/layout/fragment_server_select.xml
diff --git a/app/src/main/res/layout/fragment_users.xml b/app/phone/src/main/res/layout/fragment_users.xml
similarity index 100%
rename from app/src/main/res/layout/fragment_users.xml
rename to app/phone/src/main/res/layout/fragment_users.xml
diff --git a/app/src/main/res/layout/home_episode_item.xml b/app/phone/src/main/res/layout/home_episode_item.xml
similarity index 100%
rename from app/src/main/res/layout/home_episode_item.xml
rename to app/phone/src/main/res/layout/home_episode_item.xml
diff --git a/app/src/main/res/layout/next_up_section.xml b/app/phone/src/main/res/layout/next_up_section.xml
similarity index 100%
rename from app/src/main/res/layout/next_up_section.xml
rename to app/phone/src/main/res/layout/next_up_section.xml
diff --git a/app/src/main/res/layout/person_item.xml b/app/phone/src/main/res/layout/person_item.xml
similarity index 100%
rename from app/src/main/res/layout/person_item.xml
rename to app/phone/src/main/res/layout/person_item.xml
diff --git a/app/src/main/res/layout/season_header.xml b/app/phone/src/main/res/layout/season_header.xml
similarity index 100%
rename from app/src/main/res/layout/season_header.xml
rename to app/phone/src/main/res/layout/season_header.xml
diff --git a/app/src/main/res/layout/server_address_list_item.xml b/app/phone/src/main/res/layout/server_address_list_item.xml
similarity index 100%
rename from app/src/main/res/layout/server_address_list_item.xml
rename to app/phone/src/main/res/layout/server_address_list_item.xml
diff --git a/app/src/main/res/layout/server_item.xml b/app/phone/src/main/res/layout/server_item.xml
similarity index 100%
rename from app/src/main/res/layout/server_item.xml
rename to app/phone/src/main/res/layout/server_item.xml
diff --git a/app/src/main/res/layout/user_item.xml b/app/phone/src/main/res/layout/user_item.xml
similarity index 100%
rename from app/src/main/res/layout/user_item.xml
rename to app/phone/src/main/res/layout/user_item.xml
diff --git a/app/src/main/res/layout/user_list_item.xml b/app/phone/src/main/res/layout/user_list_item.xml
similarity index 100%
rename from app/src/main/res/layout/user_list_item.xml
rename to app/phone/src/main/res/layout/user_list_item.xml
diff --git a/app/src/main/res/layout/view_item.xml b/app/phone/src/main/res/layout/view_item.xml
similarity index 100%
rename from app/src/main/res/layout/view_item.xml
rename to app/phone/src/main/res/layout/view_item.xml
diff --git a/app/src/main/res/navigation/app_navigation.xml b/app/phone/src/main/res/navigation/app_navigation.xml
similarity index 100%
rename from app/src/main/res/navigation/app_navigation.xml
rename to app/phone/src/main/res/navigation/app_navigation.xml
diff --git a/app/src/main/res/anim/item_animation_slide_in.xml b/app/src/main/res/anim/item_animation_slide_in.xml
deleted file mode 100644
index c035240c..00000000
--- a/app/src/main/res/anim/item_animation_slide_in.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/overview_media_animation.xml b/app/src/main/res/anim/overview_media_animation.xml
deleted file mode 100644
index d197e7e7..00000000
--- a/app/src/main/res/anim/overview_media_animation.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
deleted file mode 100644
index a6b3daec..00000000
--- a/app/src/main/res/values-hr/strings.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
deleted file mode 100644
index d5d3f067..00000000
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ /dev/null
@@ -1,154 +0,0 @@
-
-
- Versão do servidor desatualizada: %1$s. Por favor atualize seu servidor
- Versão do servidor não suportada: %1$s. Por favor atualize seu servidor
- O servidor é lendo demais para responder: %1$s
- Endereço de servidor vazio
- Servidor não possui id, algo parece errado como servidor
- Entrar
- Nome de usuário ou senha incorretos
- Selecione o servidor
- Endereço do servidor
- Senha
- Conectar
- Entrar
- Remover servidor
- Remover
- Cancelar
- Início
- Minhas mídia
- Favoritos
- Configurações
- Downloads
- Ver tudo
- Erro carregando dados
- Tentar novamente
- Gêneros
- Diretor(a)
- Escritores(as)
- Elenco e equipe
- Temporadas
- Tocar a mídia
- Assistir ao trailer
- Favoritar
- Indicador de episódio assistido
- %1$d. %2$s
- E%1$d:T%2$d - %3$s
- Próximo
- Continue assistindo
- Poster da série
- Você não tem favoritos
- Buscar
- Sem resultados
- Idioma
- Idioma de áudio preferido
- Idioma de legenda preferido
- Inicializando…
- Reprodutor
- Gerenciar servidores
- Aparência
- Nome do dispositivo
- Dispositivo
- Cache
- Cache de imagens
- Tamanho do cache (MB)
- Tema
- Erro preparando itens a serem reproduzidos.
- Ver detalhes
- Ver detalhes
- Sobre
- Política de privacidade
- Informações do aplicativo
- Erro desconhecido
- Selecione uma versão
- Selecione uma faixa de áudio
- Selecione uma legenda
- Selecione a velocidade de reprodução
- Reprodutor mpv
- Baixar usando dados móveis
- Baixar
- Deletar
- Detalhes
- Detalhes indisponíveis
- Filmes
- Series de TV
- Esconder
- Ordenar por
- Ordem
- Fechar
- Compartilhar
- %1$s poster
- %1$s imagem de fundo
- Gestos
- Adicionar servidor
- Não é um servidor do jellyfin: %1$s
- Servidor não encontrado
- Nome de usuário
- Tem certeza que deseja remover o servidor %1$s
- Marcar como assistido ou não assistido
- Você não tem nada baixado
- Servidores
- Downloads
- Armazena imagens no disco para acelerar o tempo de carregamento. Surte efeito após reiniciar o aplicativo.
- Busca filmes, shows, episódios…
- Usa o reprodutor experimental mpv para reproduzir vídeos. mpv tem suporte a mais codecs de vidro, áudio e legenda.
- Biblioteca
- Rede
- Data de Lançamento
- [%1$s] %2$s (%3$s)
- Saída de áudio
- Legendas
- Personalize a aparência das legendas
- Classificação Etária
- Externo
- Usar configurações do sistema
- Claro
- Escuro
- Aplicação Jellyfin nativa de terceiros
- Mais recentes %1$s
- Jellyfin banner
- Download quando estiver em roaming
- O aplicativo usará essa quantidade em MB do seu espaço em disco para armazenar imagens do servidor Jellyfin. Valores maiores podem ser benéficos em redes mais lentas.
- Episódios
- Gestos do player
- Lembrar do nível de brilho
- Exibe o título estendido do episódio, incluindo informações sobre a temporada e o episódio (SXX:EXX - NomeEpisódio).
- Exibir título estendido
- Endereço de servidor vazio
- Título
- Usar cores dinâmicas do Material You (disponível apenas no Android 12+)
- Cores dinâmicas
- Gestos de volume e brilho
- Gestos de zoom
- Deslize para cima e para baixo no lado direito da tela para alterar o volume e no lado esquerdo para alterar o brilho
- Aperte para preencher a tela com o vídeo
- Pular
- %1$d minutos
- Selecione a versão
- Sair do player
- Retroceder
- Avanço rápido
- Pausar
- Usuários
- Adicionar usuário
- Decodificação de hardware
- Codecs de decodificação de hardware
- Data de Adição
- Data de Reprodução
- Crescente
- Decrescente
- Saida de vídeo
- Remover usuário
- Tem certeza que deseja remover o usuário (%1$s)
- Avaliação IMDb
- Endereços
- Adicionar endereço
- Adicionar endereço do servidor
- Adicionar
- Buscando
- Incremento para frente (ms)
- Incremento para trás (ms)
- Tempo limite do soquete (ms)
- Tempo limite da requisição (ms)
- Tempo limite da conexão (ms)
-
\ No newline at end of file
diff --git a/app/src/main/res/values/about_libraries.xml b/app/src/main/res/values/about_libraries.xml
deleted file mode 100644
index c34ab3d8..00000000
--- a/app/src/main/res/values/about_libraries.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- true
- true
- @string/app_name
- @string/app_description
- true
-
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index bcb4baaf..38f544bc 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -2,6 +2,7 @@
@Suppress("DSL_SCOPE_VIOLATION") // False positive
plugins {
alias(libs.plugins.android.application) apply false
+ alias(libs.plugins.android.library) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.parcelize) apply false
alias(libs.plugins.kotlin.kapt) apply false
@@ -20,4 +21,7 @@ allprojects {
tasks.create("clean") {
delete(rootProject.buildDir)
-}
\ No newline at end of file
+}
+
+val appVersionCode by extra { 14 }
+val appVersionName by extra { "0.8.0" }
\ No newline at end of file
diff --git a/core/build.gradle.kts b/core/build.gradle.kts
new file mode 100644
index 00000000..3fe6232e
--- /dev/null
+++ b/core/build.gradle.kts
@@ -0,0 +1,65 @@
+@Suppress("DSL_SCOPE_VIOLATION") // False positive
+plugins {
+ alias(libs.plugins.android.library)
+ alias(libs.plugins.kotlin.android)
+ alias(libs.plugins.kotlin.parcelize)
+ alias(libs.plugins.kotlin.kapt)
+ alias(libs.plugins.androidx.navigation.safeargs)
+ alias(libs.plugins.hilt)
+ alias(libs.plugins.ktlint)
+}
+
+android {
+ namespace = "dev.jdtech.jellyfin.core"
+ compileSdk = 33
+ buildToolsVersion = "33.0.1"
+
+ defaultConfig {
+ minSdk = 27
+ targetSdk = 33
+ }
+
+ buildTypes {
+ getByName("release") {
+ isMinifyEnabled = false
+ }
+ create("staging") {
+ initWith(getByName("release"))
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+}
+
+ktlint {
+ android.set(true)
+ ignoreFailures.set(false)
+ disabledRules.add("max-line-length")
+}
+
+dependencies {
+ implementation(project(":data"))
+ implementation(project(":preferences"))
+ implementation(project(":player:core"))
+ implementation(libs.androidx.activity)
+ implementation(libs.androidx.appcompat)
+ implementation(libs.androidx.core)
+ implementation(libs.androidx.lifecycle.runtime)
+ implementation(libs.androidx.lifecycle.viewmodel)
+ implementation(libs.androidx.navigation.fragment)
+ implementation(libs.androidx.paging)
+ implementation(libs.androidx.preference)
+ implementation(libs.androidx.room.runtime)
+ kapt(libs.androidx.room.compiler)
+ implementation(libs.androidx.room.ktx)
+ implementation(libs.glide)
+ kapt(libs.glide.compiler)
+ implementation(libs.hilt.android)
+ kapt(libs.hilt.compiler)
+ implementation(libs.jellyfin.core)
+ implementation(libs.material)
+ implementation(libs.timber)
+}
diff --git a/app/libs/lib-decoder-ffmpeg-release.aar b/core/libs/lib-decoder-ffmpeg-release.aar
similarity index 100%
rename from app/libs/lib-decoder-ffmpeg-release.aar
rename to core/libs/lib-decoder-ffmpeg-release.aar
diff --git a/app/src/debug/res/drawable/ic_banner_foreground.xml b/core/src/debug/res/drawable/ic_banner_foreground.xml
similarity index 100%
rename from app/src/debug/res/drawable/ic_banner_foreground.xml
rename to core/src/debug/res/drawable/ic_banner_foreground.xml
diff --git a/app/src/debug/res/drawable/ic_launcher_foreground.xml b/core/src/debug/res/drawable/ic_launcher_foreground.xml
similarity index 100%
rename from app/src/debug/res/drawable/ic_launcher_foreground.xml
rename to core/src/debug/res/drawable/ic_launcher_foreground.xml
diff --git a/app/src/debug/res/values/strings.xml b/core/src/debug/res/values/strings.xml
similarity index 100%
rename from app/src/debug/res/values/strings.xml
rename to core/src/debug/res/values/strings.xml
diff --git a/app/src/main/ic_launcher-playstore.png b/core/src/main/ic_launcher-playstore.png
similarity index 100%
rename from app/src/main/ic_launcher-playstore.png
rename to core/src/main/ic_launcher-playstore.png
diff --git a/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt b/core/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt
rename to core/src/main/java/dev/jdtech/jellyfin/database/ServerDatabase.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt b/core/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt
rename to core/src/main/java/dev/jdtech/jellyfin/database/ServerDatabaseDao.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt b/core/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt
rename to core/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt
index 535204fd..f1113e95 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/di/ApiModule.kt
@@ -8,7 +8,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.database.ServerDatabaseDao
-import dev.jdtech.jellyfin.utils.AppPreferences
+import dev.jdtech.jellyfin.AppPreferences
import javax.inject.Singleton
@Module
diff --git a/core/src/main/java/dev/jdtech/jellyfin/di/AppPreferencesModule.kt b/core/src/main/java/dev/jdtech/jellyfin/di/AppPreferencesModule.kt
new file mode 100644
index 00000000..16db7eac
--- /dev/null
+++ b/core/src/main/java/dev/jdtech/jellyfin/di/AppPreferencesModule.kt
@@ -0,0 +1,19 @@
+package dev.jdtech.jellyfin.di
+
+import android.content.SharedPreferences
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import dev.jdtech.jellyfin.AppPreferences
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+object AppPreferencesModule {
+ @Singleton
+ @Provides
+ fun provideAppPreferences(sp: SharedPreferences): AppPreferences {
+ return AppPreferences(sp)
+ }
+}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/di/DatabaseModule.kt b/core/src/main/java/dev/jdtech/jellyfin/di/DatabaseModule.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/di/DatabaseModule.kt
rename to core/src/main/java/dev/jdtech/jellyfin/di/DatabaseModule.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt b/core/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt
similarity index 80%
rename from app/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt
rename to core/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt
index 30234fae..8f02e0e1 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt
@@ -9,7 +9,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy.RESOURCE
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory
import com.bumptech.glide.module.AppGlideModule
import com.bumptech.glide.request.RequestOptions
-import dev.jdtech.jellyfin.utils.Constants
+import dev.jdtech.jellyfin.AppPreferences
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import timber.log.Timber
@@ -17,11 +17,11 @@ import timber.log.Timber
@GlideModule
class GlideModule : AppGlideModule() {
override fun applyOptions(context: Context, builder: GlideBuilder) {
- val preferences = PreferenceManager.getDefaultSharedPreferences(context)
- val use = preferences.getBoolean(Constants.PREF_IMAGE_CACHE, true)
+ val preferences = AppPreferences(PreferenceManager.getDefaultSharedPreferences(context))
+ val use = preferences.imageCache
if (use) {
- val sizeMb = preferences.getString(Constants.PREF_IMAGE_CACHE_SIZE, Constants.DEFAULT_CACHE_SIZE.toString())!!.toIntOrNull() ?: Constants.DEFAULT_CACHE_SIZE
+ val sizeMb = preferences.imageCacheSize
val sizeB = 1024L * 1024 * sizeMb
Timber.d("Setting image cache to use $sizeMb MB of disk space")
diff --git a/app/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt b/core/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt
rename to core/src/main/java/dev/jdtech/jellyfin/di/RepositoryModule.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/di/SharedPreferencesModule.kt b/core/src/main/java/dev/jdtech/jellyfin/di/SharedPreferencesModule.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/di/SharedPreferencesModule.kt
rename to core/src/main/java/dev/jdtech/jellyfin/di/SharedPreferencesModule.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/dialogs/AddServerAddressDialog.kt b/core/src/main/java/dev/jdtech/jellyfin/dialogs/AddServerAddressDialog.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/dialogs/AddServerAddressDialog.kt
rename to core/src/main/java/dev/jdtech/jellyfin/dialogs/AddServerAddressDialog.kt
index 332f0e45..37fecf2c 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/dialogs/AddServerAddressDialog.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/dialogs/AddServerAddressDialog.kt
@@ -5,7 +5,7 @@ import android.os.Bundle
import android.widget.EditText
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.viewmodels.ServerAddressesViewModel
import java.lang.IllegalStateException
diff --git a/app/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerAddressDialog.kt b/core/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerAddressDialog.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerAddressDialog.kt
rename to core/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerAddressDialog.kt
index a008d846..a3bd1477 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerAddressDialog.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerAddressDialog.kt
@@ -4,7 +4,7 @@ import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.models.ServerAddress
import dev.jdtech.jellyfin.viewmodels.ServerAddressesViewModel
import java.lang.IllegalStateException
diff --git a/app/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerDialogFragment.kt b/core/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerDialogFragment.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerDialogFragment.kt
rename to core/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerDialogFragment.kt
index 0b93daa2..f8220060 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerDialogFragment.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteServerDialogFragment.kt
@@ -4,7 +4,7 @@ import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.models.Server
import dev.jdtech.jellyfin.viewmodels.ServerSelectViewModel
import java.lang.IllegalStateException
diff --git a/app/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteUserDialogFragment.kt b/core/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteUserDialogFragment.kt
similarity index 96%
rename from app/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteUserDialogFragment.kt
rename to core/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteUserDialogFragment.kt
index 906c9f4d..e2e5e27f 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteUserDialogFragment.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/dialogs/DeleteUserDialogFragment.kt
@@ -4,7 +4,7 @@ import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.models.User
import dev.jdtech.jellyfin.viewmodels.UsersViewModel
import java.lang.IllegalStateException
diff --git a/app/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt b/core/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt
similarity index 98%
rename from app/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt
rename to core/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt
index b0097ecd..3e93f2af 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/dialogs/ErrorDialogFragment.kt
@@ -5,7 +5,7 @@ import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.utils.serializable
import java.io.Serializable
import java.lang.IllegalStateException
diff --git a/app/src/main/java/dev/jdtech/jellyfin/dialogs/SortDialogFragment.kt b/core/src/main/java/dev/jdtech/jellyfin/dialogs/SortDialogFragment.kt
similarity index 80%
rename from app/src/main/java/dev/jdtech/jellyfin/dialogs/SortDialogFragment.kt
rename to core/src/main/java/dev/jdtech/jellyfin/dialogs/SortDialogFragment.kt
index 18b888ca..7c531251 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/dialogs/SortDialogFragment.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/dialogs/SortDialogFragment.kt
@@ -3,35 +3,40 @@ package dev.jdtech.jellyfin.dialogs
import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
-import androidx.preference.PreferenceManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import dev.jdtech.jellyfin.R
-import dev.jdtech.jellyfin.utils.SortBy
+import dagger.hilt.android.AndroidEntryPoint
+import dev.jdtech.jellyfin.AppPreferences
+import dev.jdtech.jellyfin.core.R
+import dev.jdtech.jellyfin.models.SortBy
import dev.jdtech.jellyfin.viewmodels.LibraryViewModel
import java.lang.IllegalStateException
import java.util.UUID
import org.jellyfin.sdk.model.api.SortOrder
+import javax.inject.Inject
+@AndroidEntryPoint
class SortDialogFragment(
private val parentId: UUID,
private val libraryType: String?,
private val viewModel: LibraryViewModel,
private val sortType: String
) : DialogFragment() {
+ @Inject
+ lateinit var appPreferences: AppPreferences
+
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
- val sp = PreferenceManager.getDefaultSharedPreferences(it.applicationContext)
val builder = MaterialAlertDialogBuilder(it)
// Current sort by
- val currentSortByString = sp.getString("sortBy", SortBy.defaultValue.name)!!
+ val currentSortByString = appPreferences.sortBy
val currentSortBy = SortBy.fromString(currentSortByString)
// Current sort order
- val currentSortOrderString = sp.getString("sortOrder", SortOrder.ASCENDING.name)!!
+ val currentSortOrderString = appPreferences.sortOrder
val currentSortOrder = try {
SortOrder.valueOf(currentSortOrderString)
- } catch (e: java.lang.IllegalArgumentException) {
+ } catch (e: IllegalArgumentException) {
SortOrder.ASCENDING
}
@@ -44,11 +49,12 @@ class SortDialogFragment(
.setSingleChoiceItems(
sortByOptions, currentSortBy.ordinal
) { dialog, which ->
- sp.edit().putString("sortBy", sortByValues[which].name).apply()
+ val sortBy = sortByValues[which]
+ appPreferences.sortBy = sortBy.name
viewModel.loadItems(
parentId,
libraryType,
- sortBy = sortByValues[which],
+ sortBy = sortBy,
sortOrder = currentSortOrder
)
dialog.dismiss()
@@ -63,14 +69,14 @@ class SortDialogFragment(
.setSingleChoiceItems(
sortByOptions, currentSortOrder.ordinal
) { dialog, which ->
- sp.edit().putString("sortOrder", sortOrderValues[which].name).apply()
-
val sortOrder = try {
sortOrderValues[which]
} catch (e: IllegalArgumentException) {
SortOrder.ASCENDING
}
+ appPreferences.sortOrder = sortOrder.name
+
viewModel.loadItems(
parentId,
libraryType,
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/CollectionType.kt b/core/src/main/java/dev/jdtech/jellyfin/models/CollectionType.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/CollectionType.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/CollectionType.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/DiscoveredServer.kt b/core/src/main/java/dev/jdtech/jellyfin/models/DiscoveredServer.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/DiscoveredServer.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/DiscoveredServer.kt
diff --git a/core/src/main/java/dev/jdtech/jellyfin/models/DownloadEpisodeItem.kt b/core/src/main/java/dev/jdtech/jellyfin/models/DownloadEpisodeItem.kt
new file mode 100644
index 00000000..1d74d8db
--- /dev/null
+++ b/core/src/main/java/dev/jdtech/jellyfin/models/DownloadEpisodeItem.kt
@@ -0,0 +1,15 @@
+package dev.jdtech.jellyfin.models
+
+import java.util.UUID
+
+sealed class DownloadEpisodeItem {
+ abstract val id: UUID
+
+ object Header : DownloadEpisodeItem() {
+ override val id: UUID = UUID.randomUUID()
+ }
+
+ data class Episode(val episode: PlayerItem) : DownloadEpisodeItem() {
+ override val id = episode.itemId
+ }
+}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/DownloadSection.kt b/core/src/main/java/dev/jdtech/jellyfin/models/DownloadSection.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/DownloadSection.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/DownloadSection.kt
diff --git a/core/src/main/java/dev/jdtech/jellyfin/models/EpisodeItem.kt b/core/src/main/java/dev/jdtech/jellyfin/models/EpisodeItem.kt
new file mode 100644
index 00000000..d7398652
--- /dev/null
+++ b/core/src/main/java/dev/jdtech/jellyfin/models/EpisodeItem.kt
@@ -0,0 +1,16 @@
+package dev.jdtech.jellyfin.models
+
+import org.jellyfin.sdk.model.api.BaseItemDto
+import java.util.UUID
+
+sealed class EpisodeItem {
+ abstract val id: UUID
+
+ object Header : EpisodeItem() {
+ override val id: UUID = UUID.randomUUID()
+ }
+
+ data class Episode(val episode: BaseItemDto) : EpisodeItem() {
+ override val id = episode.id
+ }
+}
\ No newline at end of file
diff --git a/core/src/main/java/dev/jdtech/jellyfin/models/ExceptionUiText.kt b/core/src/main/java/dev/jdtech/jellyfin/models/ExceptionUiText.kt
new file mode 100644
index 00000000..7c65a9d5
--- /dev/null
+++ b/core/src/main/java/dev/jdtech/jellyfin/models/ExceptionUiText.kt
@@ -0,0 +1,9 @@
+package dev.jdtech.jellyfin.models
+
+data class ExceptionUiText(
+ val uiText: UiText
+): Exception()
+
+data class ExceptionUiTexts(
+ val uiTexts: Collection
+): Exception()
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/FavoriteSection.kt b/core/src/main/java/dev/jdtech/jellyfin/models/FavoriteSection.kt
similarity index 88%
rename from app/src/main/java/dev/jdtech/jellyfin/models/FavoriteSection.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/FavoriteSection.kt
index b2d4aca1..0adb8979 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/models/FavoriteSection.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/models/FavoriteSection.kt
@@ -4,6 +4,6 @@ import org.jellyfin.sdk.model.api.BaseItemDto
data class FavoriteSection(
val id: Int,
- val name: String,
+ val name: UiText,
var items: List
)
diff --git a/core/src/main/java/dev/jdtech/jellyfin/models/HomeItem.kt b/core/src/main/java/dev/jdtech/jellyfin/models/HomeItem.kt
new file mode 100644
index 00000000..7e5a99d2
--- /dev/null
+++ b/core/src/main/java/dev/jdtech/jellyfin/models/HomeItem.kt
@@ -0,0 +1,19 @@
+package dev.jdtech.jellyfin.models
+
+import java.util.UUID
+
+sealed class HomeItem {
+ data class Libraries(val section: HomeSection) : HomeItem() {
+ override val id = section.id
+ }
+
+ data class Section(val homeSection: HomeSection) : HomeItem() {
+ override val id = homeSection.id
+ }
+
+ data class ViewItem(val view: View) : HomeItem() {
+ override val id = view.id
+ }
+
+ abstract val id: UUID
+}
\ No newline at end of file
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/HomeSection.kt b/core/src/main/java/dev/jdtech/jellyfin/models/HomeSection.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/HomeSection.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/HomeSection.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/Server.kt b/core/src/main/java/dev/jdtech/jellyfin/models/Server.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/Server.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/Server.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/ServerAddress.kt b/core/src/main/java/dev/jdtech/jellyfin/models/ServerAddress.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/ServerAddress.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/ServerAddress.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/ServerWithAddresses.kt b/core/src/main/java/dev/jdtech/jellyfin/models/ServerWithAddresses.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/ServerWithAddresses.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/ServerWithAddresses.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/ServerWithAddressesAndUsers.kt b/core/src/main/java/dev/jdtech/jellyfin/models/ServerWithAddressesAndUsers.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/ServerWithAddressesAndUsers.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/ServerWithAddressesAndUsers.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/ServerWithUsers.kt b/core/src/main/java/dev/jdtech/jellyfin/models/ServerWithUsers.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/ServerWithUsers.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/ServerWithUsers.kt
diff --git a/core/src/main/java/dev/jdtech/jellyfin/models/UiText.kt b/core/src/main/java/dev/jdtech/jellyfin/models/UiText.kt
new file mode 100644
index 00000000..51af2286
--- /dev/null
+++ b/core/src/main/java/dev/jdtech/jellyfin/models/UiText.kt
@@ -0,0 +1,19 @@
+package dev.jdtech.jellyfin.models
+
+import android.content.res.Resources
+import androidx.annotation.StringRes
+
+sealed class UiText {
+ data class DynamicString(val value: String): UiText()
+ class StringResource(
+ @StringRes val resId: Int,
+ vararg val args: Any?
+ ): UiText()
+
+ fun asString(resources: Resources): String {
+ return when(this) {
+ is DynamicString -> return value
+ is StringResource -> resources.getString(resId, args)
+ }
+ }
+}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/User.kt b/core/src/main/java/dev/jdtech/jellyfin/models/User.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/User.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/User.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/View.kt b/core/src/main/java/dev/jdtech/jellyfin/models/View.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/View.kt
rename to core/src/main/java/dev/jdtech/jellyfin/models/View.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt b/core/src/main/java/dev/jdtech/jellyfin/utils/CoreExtensions.kt
similarity index 75%
rename from app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt
rename to core/src/main/java/dev/jdtech/jellyfin/utils/CoreExtensions.kt
index 6176f5db..40894b37 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/utils/extensions.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/utils/CoreExtensions.kt
@@ -8,13 +8,9 @@ import android.util.TypedValue
import android.widget.ImageButton
import androidx.annotation.AttrRes
import androidx.annotation.ColorRes
-import androidx.fragment.app.Fragment
-import androidx.navigation.fragment.findNavController
-import dev.jdtech.jellyfin.AppNavigationDirections
import dev.jdtech.jellyfin.models.View
import java.io.Serializable
import org.jellyfin.sdk.model.api.BaseItemDto
-import timber.log.Timber
fun BaseItemDto.toView(): View {
return View(
@@ -24,15 +20,6 @@ fun BaseItemDto.toView(): View {
)
}
-fun Fragment.checkIfLoginRequired(error: String?) {
- if (error != null) {
- if (error.contains("401")) {
- Timber.d("Login required!")
- findNavController().navigate(AppNavigationDirections.actionGlobalLoginFragment(reLogin = true))
- }
- }
-}
-
fun Resources.dip(px: Int) = (px * displayMetrics.density).toInt()
fun ImageButton.setTintColor(@ColorRes colorId: Int, theme: Resources.Theme) {
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt
similarity index 81%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt
index 628642b4..d45b8c09 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt
@@ -1,18 +1,18 @@
package dev.jdtech.jellyfin.viewmodels
-import android.content.res.Resources
-import android.widget.Toast
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
-import dev.jdtech.jellyfin.BaseApplication
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.models.DiscoveredServer
+import dev.jdtech.jellyfin.models.ExceptionUiText
+import dev.jdtech.jellyfin.models.ExceptionUiTexts
import dev.jdtech.jellyfin.models.Server
import dev.jdtech.jellyfin.models.ServerAddress
-import dev.jdtech.jellyfin.utils.AppPreferences
+import dev.jdtech.jellyfin.models.UiText
+import dev.jdtech.jellyfin.AppPreferences
import java.util.UUID
import javax.inject.Inject
import kotlinx.coroutines.CancellationException
@@ -32,13 +32,10 @@ import timber.log.Timber
class AddServerViewModel
@Inject
constructor(
- private val application: BaseApplication,
private val appPreferences: AppPreferences,
private val jellyfinApi: JellyfinApi,
private val database: ServerDatabaseDao
) : ViewModel() {
- private val resources: Resources = application.resources
-
private val _uiState = MutableStateFlow(UiState.Normal)
val uiState = _uiState.asStateFlow()
private val _navigateToLogin = MutableSharedFlow()
@@ -52,7 +49,7 @@ constructor(
sealed class UiState {
object Normal : UiState()
object Loading : UiState()
- data class Error(val message: String) : UiState()
+ data class Error(val message: Collection) : UiState()
}
sealed class DiscoveredServersState {
@@ -93,7 +90,7 @@ constructor(
try {
// Check if input value is not empty
if (inputValue.isBlank()) {
- throw Exception(resources.getString(R.string.add_server_error_empty_address))
+ throw ExceptionUiText(UiText.StringResource(R.string.add_server_error_empty_address))
}
val candidates = jellyfinApi.jellyfin.discovery.getAddressCandidates(inputValue)
@@ -123,27 +120,35 @@ constructor(
}
when {
goodServers.isNotEmpty() -> {
- val issuesString = createIssuesString(goodServers.first())
- Toast.makeText(
- application,
- issuesString,
- Toast.LENGTH_LONG
- ).show()
+// val issuesString = createIssuesString(goodServers.first())
+// Toast.makeText(
+// application,
+// issuesString,
+// Toast.LENGTH_LONG
+// ).show()
connectToServer(goodServers.first())
}
okServers.isNotEmpty() -> {
val okServer = okServers.first()
- throw Exception(createIssuesString(okServer))
+ throw ExceptionUiTexts(createIssuesString(okServer))
}
else -> {
- throw Exception(resources.getString(R.string.add_server_error_not_found))
+ throw ExceptionUiText(UiText.StringResource(R.string.add_server_error_not_found))
}
}
} catch (_: CancellationException) {
+ } catch (e: ExceptionUiText) {
+ _uiState.emit(
+ UiState.Error(listOf(e.uiText))
+ )
+ } catch (e: ExceptionUiTexts) {
+ _uiState.emit(
+ UiState.Error(e.uiTexts)
+ )
} catch (e: Exception) {
_uiState.emit(
UiState.Error(
- e.message ?: resources.getString(R.string.unknown_error)
+ listOf(if (e.message != null) UiText.DynamicString(e.message!!) else UiText.StringResource(R.string.unknown_error))
)
)
}
@@ -152,7 +157,7 @@ constructor(
private suspend fun connectToServer(recommendedServerInfo: RecommendedServerInfo) {
val serverInfo = recommendedServerInfo.systemInfo.getOrNull()
- ?: throw Exception(resources.getString(R.string.add_server_error_no_id))
+ ?: throw ExceptionUiText(UiText.StringResource(R.string.add_server_error_no_id))
Timber.d("Connecting to server: ${serverInfo.serverName}")
@@ -210,35 +215,23 @@ constructor(
* @param server The server with issues
* @return A presentable string of issues separated with \n
*/
- private fun createIssuesString(server: RecommendedServerInfo): String {
- return server.issues.joinToString("\n") {
+ private fun createIssuesString(server: RecommendedServerInfo): Collection {
+ return server.issues.map {
when (it) {
is RecommendedServerIssue.OutdatedServerVersion -> {
- String.format(
- resources.getString(R.string.add_server_error_outdated),
- it.version
- )
+ UiText.StringResource(R.string.add_server_error_outdated, it.version)
}
is RecommendedServerIssue.InvalidProductName -> {
- String.format(
- resources.getString(R.string.add_server_error_not_jellyfin),
- it.productName
- )
+ UiText.StringResource(R.string.add_server_error_not_jellyfin, it.productName)
}
is RecommendedServerIssue.UnsupportedServerVersion -> {
- String.format(
- resources.getString(R.string.add_server_error_version),
- it.version
- )
+ UiText.StringResource(R.string.add_server_error_version, it.version)
}
is RecommendedServerIssue.SlowResponse -> {
- String.format(
- resources.getString(R.string.add_server_error_slow),
- it.responseTime
- )
+ UiText.StringResource(R.string.add_server_error_slow, it.responseTime)
}
else -> {
- resources.getString(R.string.unknown_error)
+ UiText.StringResource(R.string.unknown_error)
}
}
}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadSeriesViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadSeriesViewModel.kt
similarity index 96%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadSeriesViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadSeriesViewModel.kt
index ccca57e5..76831574 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadSeriesViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadSeriesViewModel.kt
@@ -3,7 +3,7 @@ package dev.jdtech.jellyfin.viewmodels
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
-import dev.jdtech.jellyfin.adapters.DownloadEpisodeItem
+import dev.jdtech.jellyfin.models.DownloadEpisodeItem
import dev.jdtech.jellyfin.models.DownloadSeriesMetadata
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadViewModel.kt
similarity index 92%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadViewModel.kt
index cf31acce..4f5fd613 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/DownloadViewModel.kt
@@ -50,7 +50,13 @@ constructor(
items.filter { it.item?.type == BaseItemKind.EPISODE }.forEach {
showsMap.computeIfAbsent(it.item!!.seriesId!!) { mutableListOf() } += it
}
- val shows = showsMap.map { DownloadSeriesMetadata(it.key, it.value[0].item!!.seriesName, it.value) }
+ val shows = showsMap.map {
+ DownloadSeriesMetadata(
+ it.key,
+ it.value[0].item!!.seriesName,
+ it.value
+ )
+ }
val downloadSections = mutableListOf()
withContext(Dispatchers.Default) {
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/EpisodeBottomSheetViewModel.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/FavoriteViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/FavoriteViewModel.kt
similarity index 85%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/FavoriteViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/FavoriteViewModel.kt
index ec1c539d..0b57174a 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/FavoriteViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/FavoriteViewModel.kt
@@ -1,14 +1,13 @@
package dev.jdtech.jellyfin.viewmodels
-import android.content.res.Resources
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
-import dev.jdtech.jellyfin.BaseApplication
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.Constants
+import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.models.FavoriteSection
+import dev.jdtech.jellyfin.models.UiText
import dev.jdtech.jellyfin.repository.JellyfinRepository
-import dev.jdtech.jellyfin.utils.Constants
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
@@ -21,11 +20,8 @@ import org.jellyfin.sdk.model.api.BaseItemKind
class FavoriteViewModel
@Inject
constructor(
- application: BaseApplication,
private val jellyfinRepository: JellyfinRepository
) : ViewModel() {
- private val resources: Resources = application.resources
-
private val _uiState = MutableStateFlow(UiState.Loading)
val uiState = _uiState.asStateFlow()
@@ -55,7 +51,7 @@ constructor(
withContext(Dispatchers.Default) {
FavoriteSection(
Constants.FAVORITE_TYPE_MOVIES,
- resources.getString(R.string.movies_label),
+ UiText.StringResource(R.string.movies_label),
items.filter { it.type == BaseItemKind.MOVIE }
).let {
if (it.items.isNotEmpty()) favoriteSections.add(
@@ -64,7 +60,7 @@ constructor(
}
FavoriteSection(
Constants.FAVORITE_TYPE_SHOWS,
- resources.getString(R.string.shows_label),
+ UiText.StringResource(R.string.shows_label),
items.filter { it.type == BaseItemKind.SERIES }
).let {
if (it.items.isNotEmpty()) favoriteSections.add(
@@ -73,7 +69,7 @@ constructor(
}
FavoriteSection(
Constants.FAVORITE_TYPE_EPISODES,
- resources.getString(R.string.episodes_label),
+ UiText.StringResource(R.string.episodes_label),
items.filter { it.type == BaseItemKind.EPISODE }
).let {
if (it.items.isNotEmpty()) favoriteSections.add(
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt
similarity index 92%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt
index 0f22c7b2..6882cc04 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/HomeViewModel.kt
@@ -4,12 +4,10 @@ import android.app.Application
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
-import dev.jdtech.jellyfin.R
-import dev.jdtech.jellyfin.adapters.HomeItem
-import dev.jdtech.jellyfin.adapters.HomeItem.Section
-import dev.jdtech.jellyfin.adapters.HomeItem.ViewItem
+import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.database.DownloadDatabaseDao
import dev.jdtech.jellyfin.models.CollectionType
+import dev.jdtech.jellyfin.models.HomeItem
import dev.jdtech.jellyfin.models.HomeSection
import dev.jdtech.jellyfin.repository.JellyfinRepository
import dev.jdtech.jellyfin.utils.syncPlaybackProgress
@@ -81,7 +79,7 @@ class HomeViewModel @Inject internal constructor(
)
}
- private suspend fun loadDynamicItems(): List {
+ private suspend fun loadDynamicItems(): List {
val resumeItems = repository.getResumeItems()
val nextUpItems = repository.getNextUp()
@@ -106,7 +104,7 @@ class HomeViewModel @Inject internal constructor(
)
}
- return items.map { Section(it) }
+ return items.map { HomeItem.Section(it) }
}
private suspend fun loadViews() = repository
@@ -115,5 +113,5 @@ class HomeViewModel @Inject internal constructor(
.map { view -> view to repository.getLatestMedia(view.id) }
.filter { (_, latest) -> latest.isNotEmpty() }
.map { (view, latest) -> view.toView().apply { items = latest } }
- .map { ViewItem(it) }
+ .map { HomeItem.ViewItem(it) }
}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt
similarity index 98%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt
index f42beac7..3cb3938a 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LibraryViewModel.kt
@@ -5,7 +5,7 @@ import androidx.lifecycle.viewModelScope
import androidx.paging.PagingData
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.repository.JellyfinRepository
-import dev.jdtech.jellyfin.utils.SortBy
+import dev.jdtech.jellyfin.models.SortBy
import java.util.UUID
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
@@ -47,7 +47,6 @@ constructor(
viewModelScope.launch {
_uiState.emit(UiState.Loading)
try {
-
val items = jellyfinRepository.getItemsPaging(
parentId = parentId,
includeTypes = if (itemType != null) listOf(itemType) else null,
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt
similarity index 90%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt
index 7e2e87c5..2820312e 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/LoginViewModel.kt
@@ -1,15 +1,14 @@
package dev.jdtech.jellyfin.viewmodels
-import android.content.res.Resources
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
-import dev.jdtech.jellyfin.BaseApplication
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.database.ServerDatabaseDao
+import dev.jdtech.jellyfin.models.UiText
import dev.jdtech.jellyfin.models.User
-import dev.jdtech.jellyfin.utils.AppPreferences
+import dev.jdtech.jellyfin.AppPreferences
import javax.inject.Inject
import kotlin.Exception
import kotlinx.coroutines.Dispatchers
@@ -25,13 +24,10 @@ import org.jellyfin.sdk.model.api.AuthenticateUserByName
class LoginViewModel
@Inject
constructor(
- application: BaseApplication,
private val appPreferences: AppPreferences,
private val jellyfinApi: JellyfinApi,
private val database: ServerDatabaseDao
) : ViewModel() {
- private val resources: Resources = application.resources
-
private val _uiState = MutableStateFlow(UiState.Normal)
val uiState = _uiState.asStateFlow()
private val _usersState = MutableStateFlow(UsersState.Loading)
@@ -42,7 +38,7 @@ constructor(
sealed class UiState {
object Normal : UiState()
object Loading : UiState()
- data class Error(val message: String) : UiState()
+ data class Error(val message: UiText) : UiState()
}
sealed class UsersState {
@@ -116,7 +112,7 @@ constructor(
_navigateToMain.emit(true)
} catch (e: Exception) {
val message =
- if (e.message?.contains("401") == true) resources.getString(R.string.login_error_wrong_username_password) else resources.getString(
+ if (e.message?.contains("401") == true) UiText.StringResource(R.string.login_error_wrong_username_password) else UiText.StringResource(
R.string.unknown_error
)
_uiState.emit(UiState.Error(message))
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/MainViewModel.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaInfoViewModel.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaViewModel.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/MediaViewModel.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PersonDetailViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/PersonDetailViewModel.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/PersonDetailViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/PersonDetailViewModel.kt
index 9b70979e..847e4c71 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PersonDetailViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/PersonDetailViewModel.kt
@@ -13,7 +13,7 @@ import org.jellyfin.sdk.model.api.BaseItemDto
import org.jellyfin.sdk.model.api.BaseItemKind
@HiltViewModel
-internal class PersonDetailViewModel @Inject internal constructor(
+class PersonDetailViewModel @Inject internal constructor(
private val jellyfinRepository: JellyfinRepository
) : ViewModel() {
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SearchResultViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/SearchResultViewModel.kt
similarity index 85%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/SearchResultViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/SearchResultViewModel.kt
index 6e236ecc..a61c2bd4 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SearchResultViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/SearchResultViewModel.kt
@@ -1,14 +1,13 @@
package dev.jdtech.jellyfin.viewmodels
-import android.content.res.Resources
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
-import dev.jdtech.jellyfin.BaseApplication
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.Constants
+import dev.jdtech.jellyfin.core.R
import dev.jdtech.jellyfin.models.FavoriteSection
+import dev.jdtech.jellyfin.models.UiText
import dev.jdtech.jellyfin.repository.JellyfinRepository
-import dev.jdtech.jellyfin.utils.Constants
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
@@ -21,11 +20,8 @@ import org.jellyfin.sdk.model.api.BaseItemKind
class SearchResultViewModel
@Inject
constructor(
- application: BaseApplication,
private val jellyfinRepository: JellyfinRepository
) : ViewModel() {
- private val resources: Resources = application.resources
-
private val _uiState = MutableStateFlow(UiState.Loading)
val uiState = _uiState.asStateFlow()
@@ -51,7 +47,7 @@ constructor(
withContext(Dispatchers.Default) {
FavoriteSection(
Constants.FAVORITE_TYPE_MOVIES,
- resources.getString(R.string.movies_label),
+ UiText.StringResource(R.string.movies_label),
items.filter { it.type == BaseItemKind.MOVIE }
).let {
if (it.items.isNotEmpty()) sections.add(
@@ -60,7 +56,7 @@ constructor(
}
FavoriteSection(
Constants.FAVORITE_TYPE_SHOWS,
- resources.getString(R.string.shows_label),
+ UiText.StringResource(R.string.shows_label),
items.filter { it.type == BaseItemKind.SERIES }
).let {
if (it.items.isNotEmpty()) sections.add(
@@ -69,7 +65,7 @@ constructor(
}
FavoriteSection(
Constants.FAVORITE_TYPE_EPISODES,
- resources.getString(R.string.episodes_label),
+ UiText.StringResource(R.string.episodes_label),
items.filter { it.type == BaseItemKind.EPISODE }
).let {
if (it.items.isNotEmpty()) sections.add(
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt
index c222ddfd..e5037838 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/SeasonViewModel.kt
@@ -3,7 +3,7 @@ package dev.jdtech.jellyfin.viewmodels
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
-import dev.jdtech.jellyfin.adapters.EpisodeItem
+import dev.jdtech.jellyfin.models.EpisodeItem
import dev.jdtech.jellyfin.repository.JellyfinRepository
import java.util.UUID
import javax.inject.Inject
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerAddressesViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerAddressesViewModel.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerAddressesViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerAddressesViewModel.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt
index b5268148..ce049a9b 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/ServerSelectViewModel.kt
@@ -6,7 +6,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.models.Server
-import dev.jdtech.jellyfin.utils.AppPreferences
+import dev.jdtech.jellyfin.AppPreferences
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SettingsDeviceViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/SettingsDeviceViewModel.kt
similarity index 94%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/SettingsDeviceViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/SettingsDeviceViewModel.kt
index 06c94657..a68c0c0c 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/SettingsDeviceViewModel.kt
+++ b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/SettingsDeviceViewModel.kt
@@ -9,7 +9,7 @@ import kotlinx.coroutines.launch
import timber.log.Timber
@HiltViewModel
-internal class SettingsDeviceViewModel
+class SettingsDeviceViewModel
@Inject internal constructor(
private val jellyfinRepository: JellyfinRepository,
) : ViewModel() {
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/UsersViewModel.kt b/core/src/main/java/dev/jdtech/jellyfin/viewmodels/UsersViewModel.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/UsersViewModel.kt
rename to core/src/main/java/dev/jdtech/jellyfin/viewmodels/UsersViewModel.kt
diff --git a/app/src/main/res/drawable-night/ic_banner.xml b/core/src/main/res/drawable-night/ic_banner.xml
similarity index 100%
rename from app/src/main/res/drawable-night/ic_banner.xml
rename to core/src/main/res/drawable-night/ic_banner.xml
diff --git a/app/src/main/res/drawable/button_accent_background.xml b/core/src/main/res/drawable/button_accent_background.xml
similarity index 100%
rename from app/src/main/res/drawable/button_accent_background.xml
rename to core/src/main/res/drawable/button_accent_background.xml
diff --git a/app/src/main/res/drawable/button_setup_background.xml b/core/src/main/res/drawable/button_setup_background.xml
similarity index 100%
rename from app/src/main/res/drawable/button_setup_background.xml
rename to core/src/main/res/drawable/button_setup_background.xml
diff --git a/app/src/main/res/drawable/circle_background.xml b/core/src/main/res/drawable/circle_background.xml
similarity index 100%
rename from app/src/main/res/drawable/circle_background.xml
rename to core/src/main/res/drawable/circle_background.xml
diff --git a/app/src/main/res/drawable/focus_border.xml b/core/src/main/res/drawable/focus_border.xml
similarity index 100%
rename from app/src/main/res/drawable/focus_border.xml
rename to core/src/main/res/drawable/focus_border.xml
diff --git a/app/src/main/res/drawable/header_gradient.xml b/core/src/main/res/drawable/header_gradient.xml
similarity index 100%
rename from app/src/main/res/drawable/header_gradient.xml
rename to core/src/main/res/drawable/header_gradient.xml
diff --git a/app/src/main/res/drawable/ic_alert_circle.xml b/core/src/main/res/drawable/ic_alert_circle.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_alert_circle.xml
rename to core/src/main/res/drawable/ic_alert_circle.xml
diff --git a/app/src/main/res/drawable/ic_arrow_left.xml b/core/src/main/res/drawable/ic_arrow_left.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_arrow_left.xml
rename to core/src/main/res/drawable/ic_arrow_left.xml
diff --git a/app/src/main/res/drawable/ic_banner.xml b/core/src/main/res/drawable/ic_banner.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_banner.xml
rename to core/src/main/res/drawable/ic_banner.xml
diff --git a/app/src/main/res/drawable/ic_banner_foreground.xml b/core/src/main/res/drawable/ic_banner_foreground.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_banner_foreground.xml
rename to core/src/main/res/drawable/ic_banner_foreground.xml
diff --git a/app/src/main/res/drawable/ic_check.xml b/core/src/main/res/drawable/ic_check.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_check.xml
rename to core/src/main/res/drawable/ic_check.xml
diff --git a/app/src/main/res/drawable/ic_closed_caption.xml b/core/src/main/res/drawable/ic_closed_caption.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_closed_caption.xml
rename to core/src/main/res/drawable/ic_closed_caption.xml
diff --git a/app/src/main/res/drawable/ic_download.xml b/core/src/main/res/drawable/ic_download.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_download.xml
rename to core/src/main/res/drawable/ic_download.xml
diff --git a/app/src/main/res/drawable/ic_fast_forward.xml b/core/src/main/res/drawable/ic_fast_forward.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_fast_forward.xml
rename to core/src/main/res/drawable/ic_fast_forward.xml
diff --git a/app/src/main/res/drawable/ic_film.xml b/core/src/main/res/drawable/ic_film.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_film.xml
rename to core/src/main/res/drawable/ic_film.xml
diff --git a/app/src/main/res/drawable/ic_gauge.xml b/core/src/main/res/drawable/ic_gauge.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_gauge.xml
rename to core/src/main/res/drawable/ic_gauge.xml
diff --git a/app/src/main/res/drawable/ic_globe.xml b/core/src/main/res/drawable/ic_globe.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_globe.xml
rename to core/src/main/res/drawable/ic_globe.xml
diff --git a/app/src/main/res/drawable/ic_heart.xml b/core/src/main/res/drawable/ic_heart.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_heart.xml
rename to core/src/main/res/drawable/ic_heart.xml
diff --git a/app/src/main/res/drawable/ic_heart_filled.xml b/core/src/main/res/drawable/ic_heart_filled.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_heart_filled.xml
rename to core/src/main/res/drawable/ic_heart_filled.xml
diff --git a/app/src/main/res/drawable/ic_home.xml b/core/src/main/res/drawable/ic_home.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_home.xml
rename to core/src/main/res/drawable/ic_home.xml
diff --git a/app/src/main/res/drawable/ic_languages.xml b/core/src/main/res/drawable/ic_languages.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_languages.xml
rename to core/src/main/res/drawable/ic_languages.xml
diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/core/src/main/res/drawable/ic_launcher_foreground.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_launcher_foreground.xml
rename to core/src/main/res/drawable/ic_launcher_foreground.xml
diff --git a/app/src/main/res/drawable/ic_library.xml b/core/src/main/res/drawable/ic_library.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_library.xml
rename to core/src/main/res/drawable/ic_library.xml
diff --git a/app/src/main/res/drawable/ic_lock.xml b/core/src/main/res/drawable/ic_lock.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_lock.xml
rename to core/src/main/res/drawable/ic_lock.xml
diff --git a/app/src/main/res/drawable/ic_minus_fat.xml b/core/src/main/res/drawable/ic_minus_fat.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_minus_fat.xml
rename to core/src/main/res/drawable/ic_minus_fat.xml
diff --git a/app/src/main/res/drawable/ic_network.xml b/core/src/main/res/drawable/ic_network.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_network.xml
rename to core/src/main/res/drawable/ic_network.xml
diff --git a/app/src/main/res/drawable/ic_palette.xml b/core/src/main/res/drawable/ic_palette.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_palette.xml
rename to core/src/main/res/drawable/ic_palette.xml
diff --git a/app/src/main/res/drawable/ic_pause.xml b/core/src/main/res/drawable/ic_pause.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_pause.xml
rename to core/src/main/res/drawable/ic_pause.xml
diff --git a/app/src/main/res/drawable/ic_play.xml b/core/src/main/res/drawable/ic_play.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_play.xml
rename to core/src/main/res/drawable/ic_play.xml
diff --git a/app/src/main/res/drawable/ic_plus.xml b/core/src/main/res/drawable/ic_plus.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_plus.xml
rename to core/src/main/res/drawable/ic_plus.xml
diff --git a/app/src/main/res/drawable/ic_rewind.xml b/core/src/main/res/drawable/ic_rewind.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_rewind.xml
rename to core/src/main/res/drawable/ic_rewind.xml
diff --git a/app/src/main/res/drawable/ic_rotate_ccw.xml b/core/src/main/res/drawable/ic_rotate_ccw.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_rotate_ccw.xml
rename to core/src/main/res/drawable/ic_rotate_ccw.xml
diff --git a/app/src/main/res/drawable/ic_search.xml b/core/src/main/res/drawable/ic_search.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_search.xml
rename to core/src/main/res/drawable/ic_search.xml
diff --git a/app/src/main/res/drawable/ic_server.xml b/core/src/main/res/drawable/ic_server.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_server.xml
rename to core/src/main/res/drawable/ic_server.xml
diff --git a/app/src/main/res/drawable/ic_settings.xml b/core/src/main/res/drawable/ic_settings.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_settings.xml
rename to core/src/main/res/drawable/ic_settings.xml
diff --git a/app/src/main/res/drawable/ic_skip_back.xml b/core/src/main/res/drawable/ic_skip_back.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_skip_back.xml
rename to core/src/main/res/drawable/ic_skip_back.xml
diff --git a/app/src/main/res/drawable/ic_skip_forward.xml b/core/src/main/res/drawable/ic_skip_forward.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_skip_forward.xml
rename to core/src/main/res/drawable/ic_skip_forward.xml
diff --git a/app/src/main/res/drawable/ic_smartphone.xml b/core/src/main/res/drawable/ic_smartphone.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_smartphone.xml
rename to core/src/main/res/drawable/ic_smartphone.xml
diff --git a/app/src/main/res/drawable/ic_speaker.xml b/core/src/main/res/drawable/ic_speaker.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_speaker.xml
rename to core/src/main/res/drawable/ic_speaker.xml
diff --git a/app/src/main/res/drawable/ic_star.xml b/core/src/main/res/drawable/ic_star.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_star.xml
rename to core/src/main/res/drawable/ic_star.xml
diff --git a/app/src/main/res/drawable/ic_sun.xml b/core/src/main/res/drawable/ic_sun.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_sun.xml
rename to core/src/main/res/drawable/ic_sun.xml
diff --git a/app/src/main/res/drawable/ic_trash.xml b/core/src/main/res/drawable/ic_trash.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_trash.xml
rename to core/src/main/res/drawable/ic_trash.xml
diff --git a/app/src/main/res/drawable/ic_user.xml b/core/src/main/res/drawable/ic_user.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_user.xml
rename to core/src/main/res/drawable/ic_user.xml
diff --git a/app/src/main/res/drawable/ic_user_color_on_primary.xml b/core/src/main/res/drawable/ic_user_color_on_primary.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_user_color_on_primary.xml
rename to core/src/main/res/drawable/ic_user_color_on_primary.xml
diff --git a/app/src/main/res/drawable/ic_volume.xml b/core/src/main/res/drawable/ic_volume.xml
similarity index 100%
rename from app/src/main/res/drawable/ic_volume.xml
rename to core/src/main/res/drawable/ic_volume.xml
diff --git a/app/src/main/res/drawable/overlay_background.xml b/core/src/main/res/drawable/overlay_background.xml
similarity index 100%
rename from app/src/main/res/drawable/overlay_background.xml
rename to core/src/main/res/drawable/overlay_background.xml
diff --git a/app/src/main/res/drawable/person_placeholder.xml b/core/src/main/res/drawable/person_placeholder.xml
similarity index 100%
rename from app/src/main/res/drawable/person_placeholder.xml
rename to core/src/main/res/drawable/person_placeholder.xml
diff --git a/app/src/main/res/drawable/progress_scale_drawable.xml b/core/src/main/res/drawable/progress_scale_drawable.xml
similarity index 100%
rename from app/src/main/res/drawable/progress_scale_drawable.xml
rename to core/src/main/res/drawable/progress_scale_drawable.xml
diff --git a/app/src/main/res/drawable/ripple_background.xml b/core/src/main/res/drawable/ripple_background.xml
similarity index 100%
rename from app/src/main/res/drawable/ripple_background.xml
rename to core/src/main/res/drawable/ripple_background.xml
diff --git a/app/src/main/res/drawable/transparent_circle_background.xml b/core/src/main/res/drawable/transparent_circle_background.xml
similarity index 100%
rename from app/src/main/res/drawable/transparent_circle_background.xml
rename to core/src/main/res/drawable/transparent_circle_background.xml
diff --git a/app/src/main/res/drawable/user_placeholder.xml b/core/src/main/res/drawable/user_placeholder.xml
similarity index 100%
rename from app/src/main/res/drawable/user_placeholder.xml
rename to core/src/main/res/drawable/user_placeholder.xml
diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/core/src/main/res/menu/bottom_nav_menu.xml
similarity index 100%
rename from app/src/main/res/menu/bottom_nav_menu.xml
rename to core/src/main/res/menu/bottom_nav_menu.xml
diff --git a/app/src/main/res/menu/home_menu.xml b/core/src/main/res/menu/home_menu.xml
similarity index 100%
rename from app/src/main/res/menu/home_menu.xml
rename to core/src/main/res/menu/home_menu.xml
diff --git a/app/src/main/res/menu/library_menu.xml b/core/src/main/res/menu/library_menu.xml
similarity index 100%
rename from app/src/main/res/menu/library_menu.xml
rename to core/src/main/res/menu/library_menu.xml
diff --git a/app/src/main/res/menu/media_menu.xml b/core/src/main/res/menu/media_menu.xml
similarity index 100%
rename from app/src/main/res/menu/media_menu.xml
rename to core/src/main/res/menu/media_menu.xml
diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/core/src/main/res/mipmap-anydpi/ic_launcher.xml
similarity index 100%
rename from app/src/main/res/mipmap-anydpi/ic_launcher.xml
rename to core/src/main/res/mipmap-anydpi/ic_launcher.xml
diff --git a/app/src/main/res/values-b+es+419/strings.xml b/core/src/main/res/values-b+es+419/strings.xml
similarity index 96%
rename from app/src/main/res/values-b+es+419/strings.xml
rename to core/src/main/res/values-b+es+419/strings.xml
index 2991ca5c..dd27c2c3 100644
--- a/app/src/main/res/values-b+es+419/strings.xml
+++ b/core/src/main/res/values-b+es+419/strings.xml
@@ -75,10 +75,6 @@
Información de aplicación
Error desconocido
Buscar películas, series, episodios…
- Selecciona una versión
- Selecciona la pista de audio
- Selecciona la pista de subtitulo
- Seleccionar la velocidad de reproducción
Reproductor MPV
Usar el reproductor experimental MPV para reproducir contenidos. MPV soporta más códecs de vídeo, audio y subtítulos.
Descarga
@@ -131,7 +127,6 @@
Usar colores dinámicos de Material You (sólo disponible en Android 12+)
Subtítulos
Personalizar apariencia de subtítulos
- Externo
Episodios
Seguir al sistema
Claro
@@ -152,4 +147,4 @@
Tiempo de espera del socket (ms)
Usuarios
Agregar usuario
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-bg/strings.xml b/core/src/main/res/values-bg/strings.xml
similarity index 95%
rename from app/src/main/res/values-bg/strings.xml
rename to core/src/main/res/values-bg/strings.xml
index 180325d1..f63e8e3c 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/core/src/main/res/values-bg/strings.xml
@@ -60,9 +60,6 @@
Ред на сортиране
Свалете с мобилна дата
Възходящ
- Изберете аудиопът
- Изберете писта за субтитри
- Изберете скорост на възпроизвеждане
mpv плейър
Изтрийте
Свалете
@@ -81,7 +78,6 @@
Информация за приложението
Непозната грешка
Търсене на филми, предавания, епизоди…
- Изберете версия
Изберете сървър
Добавете сървър
Версията на сървъра е остаряла: %1$s. Моля ъпдейтнете сървъра
@@ -99,4 +95,4 @@
[%1$s] %2$s (%3$s)
Празен адрес на сървъра
%1$d мин
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/core/src/main/res/values-cs-rCZ/strings.xml
similarity index 97%
rename from app/src/main/res/values-cs-rCZ/strings.xml
rename to core/src/main/res/values-cs-rCZ/strings.xml
index 2d94b6df..31fce5cd 100644
--- a/app/src/main/res/values-cs-rCZ/strings.xml
+++ b/core/src/main/res/values-cs-rCZ/strings.xml
@@ -67,10 +67,8 @@
Zásady ochrany osobních údajů
Informace o aplikaci
Neočekávaná chyba
- Vyberte zvukovou stopu
- Vyberte titulky
mpv přehrávač
Použít experimentální mpv přehrávač k přehrávání videí. mpv má podporu pro více video a audio kodeků a formátů titulků.
%1$s plakát
%1$s pozadí
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-de/strings.xml b/core/src/main/res/values-de/strings.xml
similarity index 96%
rename from app/src/main/res/values-de/strings.xml
rename to core/src/main/res/values-de/strings.xml
index fa0dca05..45a3c52b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/core/src/main/res/values-de/strings.xml
@@ -55,10 +55,6 @@
App Info
Unbekannter Fehler
Suche Filme, Serien, Episoden…
- Wähle eine Version
- Wähle eine Audiospur
- Wähle eine Untertitelspur
- Wähle Wiedergabegeschwindigkeit
MPV Mediaplayer
Über mobile Daten herunterladen
Über Roaming herunterladen
@@ -122,7 +118,6 @@
Suchen
Untertitel
Untertitel anpassen
- Extern
Light
Dark
Episoden
@@ -132,4 +127,4 @@
Zoom-Gesten
Ziehen um den Bildschirm zu füllen
Bibliotheken
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-es-rMX/strings.xml b/core/src/main/res/values-es-rMX/strings.xml
similarity index 96%
rename from app/src/main/res/values-es-rMX/strings.xml
rename to core/src/main/res/values-es-rMX/strings.xml
index d3ec8ab9..3d01fca9 100644
--- a/app/src/main/res/values-es-rMX/strings.xml
+++ b/core/src/main/res/values-es-rMX/strings.xml
@@ -75,10 +75,6 @@
Información de aplicación
Error desconocido
Buscar películas, series, episodios…
- Selecciona una versión
- Selecciona la pista de audio
- Selecciona la pista de subtitulo
- Seleccionar la velocidad de reproducción
Reproductor MPV
Usar el reproductor experimental MPV para reproducir contenidos. MPV soporta más códecs de vídeo, audio y subtítulos.
Descarga
@@ -131,9 +127,8 @@
Usar colores dinámicos de Material You (sólo disponible en Android 12+)
Subtítulos
Personalizar apariencia de subtítulos
- Externo
Seguir al sistema
Claro
Oscuro
Episodios
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-es/strings.xml b/core/src/main/res/values-es/strings.xml
similarity index 95%
rename from app/src/main/res/values-es/strings.xml
rename to core/src/main/res/values-es/strings.xml
index 3ebd7932..b16e3256 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/core/src/main/res/values-es/strings.xml
@@ -75,10 +75,6 @@
Información de la aplicación
Error desconocido
Buscar películas, series, episodios…
- Selecciona una versión
- Selecciona la pista de audio
- Selecciona la pista de subtítulo
- Selecciona la velocidad de reproducción
Reproductor MPV
Usar el reproductor experimental MPV parar reproducir contenidos. MPV soporta mas códecs de vídeo, audio y subtítulos.
Descarga
@@ -95,7 +91,7 @@
Poster de %1$s
Fondo de %1$s
Título
- Calificación IMDB
+ Calificación IMDb
Clasificación de edad
Fecha de adición
Fecha de reproducción
@@ -131,7 +127,6 @@
Bibliotecas
Colores dinámicos
Usar colores dinámicos de Material You (solo en Android 12+)
- Externo
Seguir tema del dispositivo
Claro
Oscuro
@@ -148,4 +143,4 @@
Salida de audio
Quitar usuario
¿Quiere quitar el usuario %1$s\?
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-fr/strings.xml b/core/src/main/res/values-fr/strings.xml
similarity index 96%
rename from app/src/main/res/values-fr/strings.xml
rename to core/src/main/res/values-fr/strings.xml
index 35402a21..bec39855 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/core/src/main/res/values-fr/strings.xml
@@ -75,9 +75,6 @@
Infos sur l\'application
Erreur inconnue
%1$d. %2$s
- Choix de la piste audio
- Choix de la piste des sous-titres
- Vitesse de lecture
Lecteur MPV
Télécharger via données mobiles
Télécharger
@@ -85,7 +82,6 @@
Films
Derniers %1$s
Rechercher…
- Choisissez une version
Bannière Jellyfin
Version du serveur non supportée : %1$s. Veuillez mettre à jour le serveur
Authentification
@@ -129,7 +125,6 @@
Réseau
Sous-titres
Customiser l\'apparence des sous-titres
- Externe
Clair
Sombre
Épisodes
@@ -141,4 +136,4 @@
Voulez-vous vraiment supprimer l\'utilisateur %1$s
Utilisateurs
Décodages matériels supportés
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-hu/strings.xml b/core/src/main/res/values-hu/strings.xml
similarity index 96%
rename from app/src/main/res/values-hu/strings.xml
rename to core/src/main/res/values-hu/strings.xml
index 38724bd6..d23dc7e7 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/core/src/main/res/values-hu/strings.xml
@@ -68,10 +68,6 @@
Bővített cím megjelenítése
Egy egyedi, natív Jellyfin alkalmazás
Szerver törlése
- Verzió kiválasztása
- Hangsáv kiválasztása
- Felirat kiválasztása
- Lejátszási sebesség kiválasztása
mpv lejátszó
Letöltés roaming közben
Letöltés
@@ -119,4 +115,4 @@
%1$s poszter
Húzd az újjad fel és le a képernyő jobb oldán, hogy változtasd a hangerőt, és a bal oldalán, hogy változtasd a fényerőt
[%1$s] %2$s (%3$s)
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-it/strings.xml b/core/src/main/res/values-it/strings.xml
similarity index 96%
rename from app/src/main/res/values-it/strings.xml
rename to core/src/main/res/values-it/strings.xml
index 26bca711..4d0d2941 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/core/src/main/res/values-it/strings.xml
@@ -69,7 +69,6 @@
Dimensione della cache (MB)
Guarda il trailer
L\'app userà questa quantità di MB per salvare le immagini del tuo server Jellyfin. Valori alti potrebbero aiutarti in caso di connessione lenta.
- Seleziona traccia audio
Usa il player MPV sperimentale per riprodurre i video. MPV supporta più video, audio e sottotitoli.
Salta avanti di (ms)
Dettagli
@@ -82,9 +81,6 @@
Info App
Errore sconosciuto
Cerca film, serie, episodi…
- Seleziona una versione
- Seleziona sottotilo
- Seleziona velocità di riproduzione
mpv player
Scarica usando i dati cellulare
Scarica in roaming
@@ -128,7 +124,6 @@
Sottotitoli
Personalizza lo stile dei sottotitoli
Librerie
- Esterno
Colori dinamici
Usa i colori dinamici Material You (disponibile solo per Android 12+)
Rimuovi utente
@@ -151,4 +146,4 @@
Aggiungi indirizzo
Aggiungi indirizzo server
Aggiungi
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-ko/strings.xml b/core/src/main/res/values-ko/strings.xml
similarity index 96%
rename from app/src/main/res/values-ko/strings.xml
rename to core/src/main/res/values-ko/strings.xml
index ca7dc6e7..94d93594 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/core/src/main/res/values-ko/strings.xml
@@ -14,10 +14,6 @@
앱 정보
알 수 없는 오류
영화, 시리즈, 에피소드 검색…
- 버전 선택
- 오디오 트랙 선택
- 자막 트랙 선택
- 재생 속도 선택
모바일 데이터를 사용하여 다운로드
mpv 플레이어
로밍 중에도 다운로드
@@ -130,7 +126,6 @@
라이브러리
자막
자막 스타일 커스텀
- 외부
기기 테마와 동기화
라이트 모드
다크 모드
@@ -151,4 +146,4 @@
주소
주소 추가
추가
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-night/themes.xml b/core/src/main/res/values-night/themes.xml
similarity index 100%
rename from app/src/main/res/values-night/themes.xml
rename to core/src/main/res/values-night/themes.xml
diff --git a/app/src/main/res/values-nl/strings.xml b/core/src/main/res/values-nl/strings.xml
similarity index 95%
rename from app/src/main/res/values-nl/strings.xml
rename to core/src/main/res/values-nl/strings.xml
index 8a01e201..808e79ef 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/core/src/main/res/values-nl/strings.xml
@@ -17,8 +17,8 @@
Server verwijderen
Verwijderen
Server adres
- Inlogen
- Inlogen
+ Inloggen
+ Inloggen
Favorieten
Server heeft geen id, er lijkt iets miss te zijn met de server
Gewenste ondertiteling taal
@@ -26,8 +26,6 @@
Servers
Speler
Weet je zeker dat je de server wilt verwijderen %1$s
- Selecteer ondertiteling
- Selecteer afspeelsnelheid
mpv speler
Download met mobiele data
Download met roaming
@@ -40,7 +38,6 @@
pas het uiterlijk van ondertiteling aan
Zoeken
Terugzoek stappen (ms)
- Extern
Volg systeem
Licht
Donker
@@ -141,8 +138,6 @@
App info
Onbekende fout
Zoek films, series, afleveringen…
- Kies een versie
- Selecteer audiotrack
Gebruik de experimentele mpv speler om videos af te spelen. mpv heeft ondersteuning voor meer video, audio en ondertiteling codecs.
Download
Verwijderen
@@ -151,4 +146,4 @@
Server adres toevoegen
Adressen toevoegen
Toevoegen
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-pl/strings.xml b/core/src/main/res/values-pl/strings.xml
similarity index 96%
rename from app/src/main/res/values-pl/strings.xml
rename to core/src/main/res/values-pl/strings.xml
index e8dbdcf7..32d01327 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/core/src/main/res/values-pl/strings.xml
@@ -4,7 +4,6 @@
Przechowuj obrazy w pamięci podręcznej by przyspieszyć ładowanie. Zadziała po ponownym uruchomieniu aplikacji.
Aplikacja zużyje tyle pamięci urządzenia by przechowywać obrazy z serwera Jellyfin. Większe wartości mogą być korzystne w wolnych sieciach.
Zobacz szczegóły
- Wybierz wersję
Pobieraj używając danych komórkowych
Używaj eksperymentalnego odtwarzacza MPV do odtwarzania wideo. MPV wspiera więcej kodeków wideo, audio i napisów.
Przesuń w górę lub w dół po prawej stronie ekrany by zmienić głośność, po lewej stronie by zmienić jasność
@@ -77,9 +76,6 @@
Informacje o aplikacji
Nieznany błąd
Szukaj filmów, seriali, odcinków…
- Wybierz ścieżkę audio
- Wybierz ścieżkę napisów
- Wybierz prędkość odtwarzania
Odtwarzacz MPV
Pobieraj w roamingu
Pobierz
@@ -133,7 +129,6 @@
Dostosuj wygląd napisów
Napisy
Przesuwanie
- Zewnętrzny
Zgodnie z systemem
Jasny
Ciemny
@@ -151,4 +146,4 @@
Dodaj adres
Dodaj adres serwera
Dodaj
-
\ No newline at end of file
+
diff --git a/core/src/main/res/values-pt-rBR/strings.xml b/core/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 00000000..33b37e62
--- /dev/null
+++ b/core/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Selecione uma versão
+ Selecione uma faixa de áudio
+ Selecione uma legenda
+ Selecione a velocidade de reprodução
+ Externo
+
diff --git a/app/src/main/res/values-pt/strings.xml b/core/src/main/res/values-pt/strings.xml
similarity index 96%
rename from app/src/main/res/values-pt/strings.xml
rename to core/src/main/res/values-pt/strings.xml
index ea9fb318..3771684c 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/core/src/main/res/values-pt/strings.xml
@@ -54,10 +54,6 @@
Info da Aplicação
Erro Desconhecido
Procurar filmes, séries, episódios…
- Selecionar a versão
- Seleccione a faixa de áudio
- Seleccione as legendas
- Seleccionar velocidade de reprodução
Sobre
mpv player
Transferir com dados móveis
@@ -123,7 +119,6 @@
Pausa
Servidores
Transferências
- Externo
Mostrar título de episódio alargado incluindo temporada e informação de episódio (SXX:EXX - EpisodeName).
Indicador de episódio visto
Continuar a ver
@@ -135,4 +130,4 @@
A App irá utilizar esta quantidade de MB do seu espaço em disco para armazenar imagens do servidor Jellyfin. Valores maiores podem ser benéficos em redes mais lentas.
Preferir idioma audio
Cache de imagens em memória para acelerar o tempo de carregamento. Terá efeito após o reinício da aplicação.
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-ru/strings.xml b/core/src/main/res/values-ru/strings.xml
similarity index 96%
rename from app/src/main/res/values-ru/strings.xml
rename to core/src/main/res/values-ru/strings.xml
index 3926d3be..d733df67 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/core/src/main/res/values-ru/strings.xml
@@ -73,11 +73,7 @@
Устройство
Кэшировать изображения
Кэшировать изображения на диск ускорит время загрузки. Требуется перезапуск приложения.
- Выбрать субтитры
- Выбрать скорость воспроизведения
Проигрыватель mpv
- Выбрать версию
- Выбрать аудиодорожку
Скачивать через мобильный интернет
Скачивать в роуминге
Использовать экспериментальный проигрыватель mpv. Он имеет большую поддержку форматов аудио, видео и субтитров.
@@ -118,4 +114,4 @@
%1$d минут
Перемотка
Быстрая перемотка
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/core/src/main/res/values-sw600dp/dimens.xml
similarity index 100%
rename from app/src/main/res/values-sw600dp/dimens.xml
rename to core/src/main/res/values-sw600dp/dimens.xml
diff --git a/app/src/main/res/values-sw720dp/dimens.xml b/core/src/main/res/values-sw720dp/dimens.xml
similarity index 100%
rename from app/src/main/res/values-sw720dp/dimens.xml
rename to core/src/main/res/values-sw720dp/dimens.xml
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/core/src/main/res/values-zh-rCN/strings.xml
similarity index 96%
rename from app/src/main/res/values-zh-rCN/strings.xml
rename to core/src/main/res/values-zh-rCN/strings.xml
index 9912c70d..94eb8980 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/core/src/main/res/values-zh-rCN/strings.xml
@@ -59,10 +59,6 @@
应用详情
您的订阅已到期, 请登录官网续费
搜索电影、节目、集名…
- 选择版本
- 选择音轨
- 选择字幕轨
- 选择播放速度
mpv播放器
使用移动数据下载
漫游时下载
@@ -130,7 +126,6 @@
动态色彩
使用 Material You 动态颜色(仅适用于 Android 12+)
库
- 加载
跟随系统
浅色
深色
@@ -151,4 +146,4 @@
添加地址
添加服务器地址
添加
-
\ No newline at end of file
+
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/core/src/main/res/values-zh-rTW/strings.xml
similarity index 96%
rename from app/src/main/res/values-zh-rTW/strings.xml
rename to core/src/main/res/values-zh-rTW/strings.xml
index 5716cc46..6ebd7983 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/core/src/main/res/values-zh-rTW/strings.xml
@@ -62,9 +62,6 @@
應用程式資訊
未知錯誤
搜尋電影、節目、影集…
- 選擇版本
- 選擇音軌
- 選擇播放速度
漫遊時下載
mpv 播放器
下載
@@ -108,7 +105,6 @@
動態色彩
字幕
自訂字幕外觀
- 外部的
跟隨系統
明亮
黑暗
@@ -134,7 +130,6 @@
應用程式將使用此大小的磁碟空間儲存來自 Jellyfin 伺服器的圖片。 較大的值可能對較慢的網路有益。
查看詳情
查看詳情
- 選擇字幕軌道
使用行動網路下載
使用實驗性 mpv 播放器播放影片。 mpv 支援更多的影片、音訊和字幕編解碼器。
排序方式
@@ -143,4 +138,4 @@
顯示擴展影集標題,包括季和影集資訊 (第XX季:第XX集 - 影集名稱)。
尋回向前增量(毫秒)
使用 Material You Dynamic 顏色(僅適用於 Android 12+)
-
\ No newline at end of file
+
diff --git a/core/src/main/res/values/about_libraries.xml b/core/src/main/res/values/about_libraries.xml
new file mode 100644
index 00000000..3b0a7d8e
--- /dev/null
+++ b/core/src/main/res/values/about_libraries.xml
@@ -0,0 +1,8 @@
+
+
+ true
+ true
+ @string/app_name
+ @string/app_description
+ true
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/core/src/main/res/values/colors.xml
similarity index 100%
rename from app/src/main/res/values/colors.xml
rename to core/src/main/res/values/colors.xml
diff --git a/app/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml
similarity index 100%
rename from app/src/main/res/values/dimens.xml
rename to core/src/main/res/values/dimens.xml
diff --git a/app/src/main/res/values/drawables.xml b/core/src/main/res/values/drawables.xml
similarity index 100%
rename from app/src/main/res/values/drawables.xml
rename to core/src/main/res/values/drawables.xml
diff --git a/app/src/main/res/values/ic_banner_background.xml b/core/src/main/res/values/ic_banner_background.xml
similarity index 100%
rename from app/src/main/res/values/ic_banner_background.xml
rename to core/src/main/res/values/ic_banner_background.xml
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/core/src/main/res/values/ic_launcher_background.xml
similarity index 100%
rename from app/src/main/res/values/ic_launcher_background.xml
rename to core/src/main/res/values/ic_launcher_background.xml
diff --git a/app/src/main/res/values/languages.xml b/core/src/main/res/values/languages.xml
similarity index 100%
rename from app/src/main/res/values/languages.xml
rename to core/src/main/res/values/languages.xml
diff --git a/app/src/main/res/values/shape.xml b/core/src/main/res/values/shape.xml
similarity index 100%
rename from app/src/main/res/values/shape.xml
rename to core/src/main/res/values/shape.xml
diff --git a/app/src/main/res/values/string_arrays.xml b/core/src/main/res/values/string_arrays.xml
similarity index 100%
rename from app/src/main/res/values/string_arrays.xml
rename to core/src/main/res/values/string_arrays.xml
diff --git a/app/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
similarity index 96%
rename from app/src/main/res/values/strings.xml
rename to core/src/main/res/values/strings.xml
index eff68e6d..7bfff49e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -78,10 +78,6 @@
App info
Unknown error
Search movies, shows, episodes…
- "Select a version"
- Select audio track
- Select subtitle track
- Select playback speed
mpv player
Download using mobile data
Download when roaming
@@ -133,7 +129,6 @@
Use Material You Dynamic colors (only available on Android 12+)
Subtitles
Customize subtitles appearance
- External
Follow system
Light
Dark
diff --git a/app/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml
similarity index 100%
rename from app/src/main/res/values/styles.xml
rename to core/src/main/res/values/styles.xml
diff --git a/app/src/main/res/values/themes.xml b/core/src/main/res/values/themes.xml
similarity index 100%
rename from app/src/main/res/values/themes.xml
rename to core/src/main/res/values/themes.xml
diff --git a/app/src/main/res/xml/fragment_settings.xml b/core/src/main/res/xml/fragment_settings.xml
similarity index 100%
rename from app/src/main/res/xml/fragment_settings.xml
rename to core/src/main/res/xml/fragment_settings.xml
diff --git a/app/src/main/res/xml/fragment_settings_appearance.xml b/core/src/main/res/xml/fragment_settings_appearance.xml
similarity index 100%
rename from app/src/main/res/xml/fragment_settings_appearance.xml
rename to core/src/main/res/xml/fragment_settings_appearance.xml
diff --git a/app/src/main/res/xml/fragment_settings_cache.xml b/core/src/main/res/xml/fragment_settings_cache.xml
similarity index 100%
rename from app/src/main/res/xml/fragment_settings_cache.xml
rename to core/src/main/res/xml/fragment_settings_cache.xml
diff --git a/app/src/main/res/xml/fragment_settings_device.xml b/core/src/main/res/xml/fragment_settings_device.xml
similarity index 100%
rename from app/src/main/res/xml/fragment_settings_device.xml
rename to core/src/main/res/xml/fragment_settings_device.xml
diff --git a/app/src/main/res/xml/fragment_settings_downloads.xml b/core/src/main/res/xml/fragment_settings_downloads.xml
similarity index 100%
rename from app/src/main/res/xml/fragment_settings_downloads.xml
rename to core/src/main/res/xml/fragment_settings_downloads.xml
diff --git a/app/src/main/res/xml/fragment_settings_language.xml b/core/src/main/res/xml/fragment_settings_language.xml
similarity index 100%
rename from app/src/main/res/xml/fragment_settings_language.xml
rename to core/src/main/res/xml/fragment_settings_language.xml
diff --git a/app/src/main/res/xml/fragment_settings_network.xml b/core/src/main/res/xml/fragment_settings_network.xml
similarity index 100%
rename from app/src/main/res/xml/fragment_settings_network.xml
rename to core/src/main/res/xml/fragment_settings_network.xml
diff --git a/app/src/main/res/xml/fragment_settings_player.xml b/core/src/main/res/xml/fragment_settings_player.xml
similarity index 100%
rename from app/src/main/res/xml/fragment_settings_player.xml
rename to core/src/main/res/xml/fragment_settings_player.xml
diff --git a/app/src/main/res/xml/network_security_config.xml b/core/src/main/res/xml/network_security_config.xml
similarity index 100%
rename from app/src/main/res/xml/network_security_config.xml
rename to core/src/main/res/xml/network_security_config.xml
diff --git a/app/src/staging/res/drawable/ic_banner_foreground.xml b/core/src/staging/res/drawable/ic_banner_foreground.xml
similarity index 100%
rename from app/src/staging/res/drawable/ic_banner_foreground.xml
rename to core/src/staging/res/drawable/ic_banner_foreground.xml
diff --git a/app/src/staging/res/drawable/ic_launcher_foreground.xml b/core/src/staging/res/drawable/ic_launcher_foreground.xml
similarity index 100%
rename from app/src/staging/res/drawable/ic_launcher_foreground.xml
rename to core/src/staging/res/drawable/ic_launcher_foreground.xml
diff --git a/app/src/staging/res/values/strings.xml b/core/src/staging/res/values/strings.xml
similarity index 100%
rename from app/src/staging/res/values/strings.xml
rename to core/src/staging/res/values/strings.xml
diff --git a/data/build.gradle.kts b/data/build.gradle.kts
new file mode 100644
index 00000000..65caab8e
--- /dev/null
+++ b/data/build.gradle.kts
@@ -0,0 +1,49 @@
+@Suppress("DSL_SCOPE_VIOLATION") // False positive
+plugins {
+ alias(libs.plugins.android.library)
+ alias(libs.plugins.kotlin.android)
+ alias(libs.plugins.ktlint)
+}
+
+android {
+ namespace = "dev.jdtech.jellyfin.data"
+ compileSdk = 33
+ buildToolsVersion = "33.0.1"
+
+ defaultConfig {
+ minSdk = 27
+ targetSdk = 33
+
+ val appVersionCode: Int by rootProject.extra
+ val appVersionName: String by rootProject.extra
+ buildConfigField("int", "VERSION_CODE", appVersionCode.toString())
+ buildConfigField("String", "VERSION_NAME", "\"$appVersionName\"")
+ }
+
+ buildTypes {
+ getByName("release") {
+ isMinifyEnabled = false
+ }
+ create("staging") {
+ initWith(getByName("release"))
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+}
+
+ktlint {
+ android.set(true)
+ ignoreFailures.set(false)
+ disabledRules.add("max-line-length")
+}
+
+dependencies {
+ implementation(project(":preferences"))
+ implementation(libs.androidx.paging)
+ implementation(libs.jellyfin.core)
+ implementation(libs.timber)
+}
diff --git a/data/lint.xml b/data/lint.xml
new file mode 100644
index 00000000..bf11943b
--- /dev/null
+++ b/data/lint.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt b/data/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt
rename to data/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt
index 5b792ae9..10c38d57 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/api/JellyfinApi.kt
@@ -1,8 +1,8 @@
package dev.jdtech.jellyfin.api
import android.content.Context
-import dev.jdtech.jellyfin.BuildConfig
-import dev.jdtech.jellyfin.utils.Constants
+import dev.jdtech.jellyfin.data.BuildConfig
+import dev.jdtech.jellyfin.Constants
import java.util.UUID
import org.jellyfin.sdk.api.client.HttpClientOptions
import org.jellyfin.sdk.api.client.extensions.devicesApi
diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/SortBy.kt b/data/src/main/java/dev/jdtech/jellyfin/models/SortBy.kt
similarity index 93%
rename from app/src/main/java/dev/jdtech/jellyfin/utils/SortBy.kt
rename to data/src/main/java/dev/jdtech/jellyfin/models/SortBy.kt
index 48c4e4b4..5f84ce0f 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/utils/SortBy.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/models/SortBy.kt
@@ -1,4 +1,4 @@
-package dev.jdtech.jellyfin.utils
+package dev.jdtech.jellyfin.models
enum class SortBy(val SortString: String) {
NAME("SortName"),
diff --git a/app/src/main/java/dev/jdtech/jellyfin/repository/ItemsPagingSource.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/ItemsPagingSource.kt
similarity index 97%
rename from app/src/main/java/dev/jdtech/jellyfin/repository/ItemsPagingSource.kt
rename to data/src/main/java/dev/jdtech/jellyfin/repository/ItemsPagingSource.kt
index a0ec0cfa..b38ba255 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/repository/ItemsPagingSource.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/repository/ItemsPagingSource.kt
@@ -3,7 +3,7 @@ package dev.jdtech.jellyfin.repository
import androidx.paging.PagingSource
import androidx.paging.PagingState
import dev.jdtech.jellyfin.api.JellyfinApi
-import dev.jdtech.jellyfin.utils.SortBy
+import dev.jdtech.jellyfin.models.SortBy
import java.util.UUID
import org.jellyfin.sdk.model.api.BaseItemDto
import org.jellyfin.sdk.model.api.BaseItemKind
diff --git a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt
similarity index 98%
rename from app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt
rename to data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt
index 38e6f2f3..d481a214 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepository.kt
@@ -1,7 +1,7 @@
package dev.jdtech.jellyfin.repository
import androidx.paging.PagingData
-import dev.jdtech.jellyfin.utils.SortBy
+import dev.jdtech.jellyfin.models.SortBy
import java.util.UUID
import kotlinx.coroutines.flow.Flow
import org.jellyfin.sdk.model.api.BaseItemDto
diff --git a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt
similarity index 99%
rename from app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt
rename to data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt
index cc6cc137..9f19e661 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt
+++ b/data/src/main/java/dev/jdtech/jellyfin/repository/JellyfinRepositoryImpl.kt
@@ -4,7 +4,7 @@ import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import dev.jdtech.jellyfin.api.JellyfinApi
-import dev.jdtech.jellyfin.utils.SortBy
+import dev.jdtech.jellyfin.models.SortBy
import java.util.UUID
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index e59cb0e9..e34a60cd 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -34,6 +34,7 @@ androidx-core = { module = "androidx.core:core-ktx", version.ref = "androidx-cor
androidx-leanback = { module = "androidx.leanback:leanback", version.ref = "androidx-leanback" }
androidx-lifecycle-runtime = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-lifecycle" }
androidx-lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle" }
+androidx-media3-common = { module = "androidx.media3:media3-common", version.ref = "androidx-media3" }
androidx-media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "androidx-media3" }
androidx-media3-ui = { module = "androidx.media3:media3-ui", version.ref = "androidx-media3" }
androidx-media3-session = { module = "androidx.media3:media3-session", version.ref = "androidx-media3" }
@@ -59,6 +60,7 @@ timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" }
[plugins]
aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries" }
android-application = { id = "com.android.application", version.ref = "android-plugin" }
+android-library = { id = "com.android.library", version.ref = "android-plugin" }
androidx-navigation-safeargs = { id = "androidx.navigation.safeargs.kotlin", version.ref = "androidx-navigation" }
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
diff --git a/player/core/build.gradle.kts b/player/core/build.gradle.kts
new file mode 100644
index 00000000..f647da17
--- /dev/null
+++ b/player/core/build.gradle.kts
@@ -0,0 +1,51 @@
+@Suppress("DSL_SCOPE_VIOLATION") // False positive
+plugins {
+ alias(libs.plugins.android.library)
+ alias(libs.plugins.kotlin.android)
+ alias(libs.plugins.kotlin.parcelize)
+ alias(libs.plugins.kotlin.kapt)
+ alias(libs.plugins.ktlint)
+}
+
+android {
+ namespace = "dev.jdtech.jellyfin.player.core"
+ compileSdk = 33
+ buildToolsVersion = "33.0.1"
+
+ defaultConfig {
+ minSdk = 27
+ targetSdk = 33
+ }
+
+ buildTypes {
+ getByName("release") {
+ isMinifyEnabled = false
+ }
+ create("staging") {
+ initWith(getByName("release"))
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+}
+
+ktlint {
+ android.set(true)
+ ignoreFailures.set(false)
+ disabledRules.add("max-line-length")
+}
+
+dependencies {
+ implementation(project(":data"))
+ implementation(project(":preferences"))
+ implementation(libs.androidx.core)
+ implementation(libs.androidx.preference)
+ implementation(libs.androidx.room.runtime)
+ kapt(libs.androidx.room.compiler)
+ implementation(libs.androidx.room.ktx)
+ implementation(libs.jellyfin.core)
+ implementation(libs.timber)
+}
diff --git a/player/core/lint.xml b/player/core/lint.xml
new file mode 100644
index 00000000..bf11943b
--- /dev/null
+++ b/player/core/lint.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/app/src/main/java/dev/jdtech/jellyfin/database/Converters.kt b/player/core/src/main/java/dev/jdtech/jellyfin/database/Converters.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/database/Converters.kt
rename to player/core/src/main/java/dev/jdtech/jellyfin/database/Converters.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/database/DownloadDatabase.kt b/player/core/src/main/java/dev/jdtech/jellyfin/database/DownloadDatabase.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/database/DownloadDatabase.kt
rename to player/core/src/main/java/dev/jdtech/jellyfin/database/DownloadDatabase.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/database/DownloadDatabaseDao.kt b/player/core/src/main/java/dev/jdtech/jellyfin/database/DownloadDatabaseDao.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/database/DownloadDatabaseDao.kt
rename to player/core/src/main/java/dev/jdtech/jellyfin/database/DownloadDatabaseDao.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/DownloadItem.kt b/player/core/src/main/java/dev/jdtech/jellyfin/models/DownloadItem.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/DownloadItem.kt
rename to player/core/src/main/java/dev/jdtech/jellyfin/models/DownloadItem.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/DownloadSeriesMetadata.kt b/player/core/src/main/java/dev/jdtech/jellyfin/models/DownloadSeriesMetadata.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/DownloadSeriesMetadata.kt
rename to player/core/src/main/java/dev/jdtech/jellyfin/models/DownloadSeriesMetadata.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/ExternalSubtitle.kt b/player/core/src/main/java/dev/jdtech/jellyfin/models/ExternalSubtitle.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/ExternalSubtitle.kt
rename to player/core/src/main/java/dev/jdtech/jellyfin/models/ExternalSubtitle.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/models/PlayerItem.kt b/player/core/src/main/java/dev/jdtech/jellyfin/models/PlayerItem.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/models/PlayerItem.kt
rename to player/core/src/main/java/dev/jdtech/jellyfin/models/PlayerItem.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt b/player/core/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt
similarity index 96%
rename from app/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt
rename to player/core/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt
index b6bde7de..eef41cd5 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt
+++ b/player/core/src/main/java/dev/jdtech/jellyfin/utils/DownloadUtilities.kt
@@ -6,6 +6,7 @@ import android.net.Uri
import android.os.Environment
import androidx.core.content.getSystemService
import androidx.preference.PreferenceManager
+import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.database.DownloadDatabaseDao
import dev.jdtech.jellyfin.models.DownloadItem
import dev.jdtech.jellyfin.models.DownloadSeriesMetadata
@@ -58,13 +59,11 @@ suspend fun requestDownload(
}
private fun downloadFile(request: DownloadManager.Request, context: Context): Long {
- val preferences = PreferenceManager.getDefaultSharedPreferences(context)
- val downloadOverData = preferences.getBoolean("download_mobile_data", false)
- val downloadWhenRoaming = preferences.getBoolean("download_roaming", false)
+ val preferences = AppPreferences(PreferenceManager.getDefaultSharedPreferences(context))
request.apply {
- setAllowedOverMetered(downloadOverData)
- setAllowedOverRoaming(downloadWhenRoaming)
+ setAllowedOverMetered(preferences.downloadOverMobileData)
+ setAllowedOverRoaming(preferences.downloadWhenRoaming)
}
return context.getSystemService()!!.enqueue(request)
}
diff --git a/player/video/build.gradle.kts b/player/video/build.gradle.kts
new file mode 100644
index 00000000..458d4698
--- /dev/null
+++ b/player/video/build.gradle.kts
@@ -0,0 +1,56 @@
+@Suppress("DSL_SCOPE_VIOLATION") // False positive
+plugins {
+ alias(libs.plugins.android.library)
+ alias(libs.plugins.kotlin.android)
+ alias(libs.plugins.kotlin.parcelize)
+ alias(libs.plugins.kotlin.kapt)
+ alias(libs.plugins.hilt)
+ alias(libs.plugins.ktlint)
+}
+
+android {
+ namespace = "dev.jdtech.jellyfin.player.video"
+ compileSdk = 33
+ buildToolsVersion = "33.0.1"
+
+ defaultConfig {
+ minSdk = 27
+ targetSdk = 33
+ }
+
+ buildTypes {
+ getByName("release") {
+ isMinifyEnabled = false
+ }
+ create("staging") {
+ initWith(getByName("release"))
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+}
+
+ktlint {
+ android.set(true)
+ ignoreFailures.set(false)
+ disabledRules.add("max-line-length")
+}
+
+dependencies {
+ implementation(project(":player:core"))
+ implementation(project(":data"))
+ implementation(project(":preferences"))
+ implementation(libs.androidx.core)
+ implementation(libs.androidx.lifecycle.runtime)
+ implementation(libs.androidx.lifecycle.viewmodel)
+ implementation(libs.androidx.media3.exoplayer)
+ implementation(libs.hilt.android)
+ kapt(libs.hilt.compiler)
+ implementation(libs.jellyfin.core)
+ implementation(libs.libmpv)
+ implementation(libs.material)
+ implementation(libs.timber)
+}
diff --git a/player/video/lint.xml b/player/video/lint.xml
new file mode 100644
index 00000000..bf11943b
--- /dev/null
+++ b/player/video/lint.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/app/src/main/assets/mpv.conf b/player/video/src/main/assets/mpv.conf
similarity index 100%
rename from app/src/main/assets/mpv.conf
rename to player/video/src/main/assets/mpv.conf
diff --git a/app/src/main/assets/subfont.ttf b/player/video/src/main/assets/subfont.ttf
similarity index 100%
rename from app/src/main/assets/subfont.ttf
rename to player/video/src/main/assets/subfont.ttf
diff --git a/app/src/main/java/dev/jdtech/jellyfin/dialogs/SpeedSelectionDialogFragment.kt b/player/video/src/main/java/dev/jdtech/jellyfin/dialogs/SpeedSelectionDialogFragment.kt
similarity index 96%
rename from app/src/main/java/dev/jdtech/jellyfin/dialogs/SpeedSelectionDialogFragment.kt
rename to player/video/src/main/java/dev/jdtech/jellyfin/dialogs/SpeedSelectionDialogFragment.kt
index bbd4a110..acde876a 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/dialogs/SpeedSelectionDialogFragment.kt
+++ b/player/video/src/main/java/dev/jdtech/jellyfin/dialogs/SpeedSelectionDialogFragment.kt
@@ -4,7 +4,7 @@ import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.player.video.R
import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel
import java.lang.IllegalStateException
diff --git a/app/src/main/java/dev/jdtech/jellyfin/dialogs/TrackSelectionDialogFragment.kt b/player/video/src/main/java/dev/jdtech/jellyfin/dialogs/TrackSelectionDialogFragment.kt
similarity index 98%
rename from app/src/main/java/dev/jdtech/jellyfin/dialogs/TrackSelectionDialogFragment.kt
rename to player/video/src/main/java/dev/jdtech/jellyfin/dialogs/TrackSelectionDialogFragment.kt
index 52220018..bde2c38c 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/dialogs/TrackSelectionDialogFragment.kt
+++ b/player/video/src/main/java/dev/jdtech/jellyfin/dialogs/TrackSelectionDialogFragment.kt
@@ -4,7 +4,7 @@ import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.player.video.R
import dev.jdtech.jellyfin.mpv.MPVPlayer
import dev.jdtech.jellyfin.mpv.TrackType
import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel
diff --git a/app/src/main/java/dev/jdtech/jellyfin/dialogs/VideoVersionDialogFragment.kt b/player/video/src/main/java/dev/jdtech/jellyfin/dialogs/VideoVersionDialogFragment.kt
similarity index 95%
rename from app/src/main/java/dev/jdtech/jellyfin/dialogs/VideoVersionDialogFragment.kt
rename to player/video/src/main/java/dev/jdtech/jellyfin/dialogs/VideoVersionDialogFragment.kt
index 9189865d..2d83560f 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/dialogs/VideoVersionDialogFragment.kt
+++ b/player/video/src/main/java/dev/jdtech/jellyfin/dialogs/VideoVersionDialogFragment.kt
@@ -4,7 +4,7 @@ import android.app.Dialog
import android.os.Bundle
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.player.video.R
import dev.jdtech.jellyfin.viewmodels.PlayerViewModel
import java.lang.IllegalStateException
import org.jellyfin.sdk.model.api.BaseItemDto
diff --git a/app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt b/player/video/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt
similarity index 99%
rename from app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt
rename to player/video/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt
index 11eaefe5..76dcfbf2 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt
+++ b/player/video/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt
@@ -35,7 +35,7 @@ import androidx.media3.common.util.ListenerSet
import androidx.media3.common.util.Size
import androidx.media3.common.util.Util
import androidx.media3.exoplayer.ExoPlaybackException
-import dev.jdtech.jellyfin.utils.AppPreferences
+import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.mpv.MPVLib
import java.io.File
import java.io.FileOutputStream
diff --git a/app/src/main/java/dev/jdtech/jellyfin/mpv/TrackType.kt b/player/video/src/main/java/dev/jdtech/jellyfin/mpv/TrackType.kt
similarity index 100%
rename from app/src/main/java/dev/jdtech/jellyfin/mpv/TrackType.kt
rename to player/video/src/main/java/dev/jdtech/jellyfin/mpv/TrackType.kt
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
similarity index 99%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
rename to player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
index 761845e1..940416b0 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
+++ b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt
@@ -21,7 +21,7 @@ import dev.jdtech.jellyfin.models.PlayerItem
import dev.jdtech.jellyfin.mpv.MPVPlayer
import dev.jdtech.jellyfin.mpv.TrackType
import dev.jdtech.jellyfin.repository.JellyfinRepository
-import dev.jdtech.jellyfin.utils.AppPreferences
+import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.utils.postDownloadPlaybackProgress
import java.util.UUID
import javax.inject.Inject
diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt
similarity index 99%
rename from app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt
rename to player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt
index 5e5bcc29..aaa48a00 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt
+++ b/player/video/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerViewModel.kt
@@ -7,7 +7,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.media3.common.MimeTypes
import dagger.hilt.android.lifecycle.HiltViewModel
-import dev.jdtech.jellyfin.R
+import dev.jdtech.jellyfin.player.video.R
import dev.jdtech.jellyfin.database.DownloadDatabaseDao
import dev.jdtech.jellyfin.models.ExternalSubtitle
import dev.jdtech.jellyfin.models.PlayerItem
diff --git a/player/video/src/main/res/values-b+es+419/strings.xml b/player/video/src/main/res/values-b+es+419/strings.xml
new file mode 100644
index 00000000..b8425b4a
--- /dev/null
+++ b/player/video/src/main/res/values-b+es+419/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Selecciona una versión
+ Selecciona la pista de audio
+ Selecciona la pista de subtitulo
+ Seleccionar la velocidad de reproducción
+ Externo
+
diff --git a/player/video/src/main/res/values-bg/strings.xml b/player/video/src/main/res/values-bg/strings.xml
new file mode 100644
index 00000000..29e53c10
--- /dev/null
+++ b/player/video/src/main/res/values-bg/strings.xml
@@ -0,0 +1,7 @@
+
+
+ Изберете аудиопът
+ Изберете писта за субтитри
+ Изберете скорост на възпроизвеждане
+ Изберете версия
+
diff --git a/player/video/src/main/res/values-cs-rCZ/strings.xml b/player/video/src/main/res/values-cs-rCZ/strings.xml
new file mode 100644
index 00000000..e2052972
--- /dev/null
+++ b/player/video/src/main/res/values-cs-rCZ/strings.xml
@@ -0,0 +1,4 @@
+
+ Vyberte zvukovou stopu
+ Vyberte titulky
+
diff --git a/player/video/src/main/res/values-de/strings.xml b/player/video/src/main/res/values-de/strings.xml
new file mode 100644
index 00000000..f29832ff
--- /dev/null
+++ b/player/video/src/main/res/values-de/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Wähle eine Version
+ Wähle eine Audiospur
+ Wähle eine Untertitelspur
+ Wähle Wiedergabegeschwindigkeit
+ Extern
+
diff --git a/player/video/src/main/res/values-es-rMX/strings.xml b/player/video/src/main/res/values-es-rMX/strings.xml
new file mode 100644
index 00000000..b8425b4a
--- /dev/null
+++ b/player/video/src/main/res/values-es-rMX/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Selecciona una versión
+ Selecciona la pista de audio
+ Selecciona la pista de subtitulo
+ Seleccionar la velocidad de reproducción
+ Externo
+
diff --git a/player/video/src/main/res/values-es/strings.xml b/player/video/src/main/res/values-es/strings.xml
new file mode 100644
index 00000000..0288d8c1
--- /dev/null
+++ b/player/video/src/main/res/values-es/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Selecciona una versión
+ Selecciona la pista de audio
+ Selecciona la pista de subtítulo
+ Selecciona la velocidad de reproducción
+ Externo
+
diff --git a/player/video/src/main/res/values-fr/strings.xml b/player/video/src/main/res/values-fr/strings.xml
new file mode 100644
index 00000000..f866fdd3
--- /dev/null
+++ b/player/video/src/main/res/values-fr/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Choisissez une version
+ Choix de la piste audio
+ Choix de la piste des sous-titres
+ Vitesse de lecture
+ Externe
+
diff --git a/player/video/src/main/res/values-hu/strings.xml b/player/video/src/main/res/values-hu/strings.xml
new file mode 100644
index 00000000..de36c9ff
--- /dev/null
+++ b/player/video/src/main/res/values-hu/strings.xml
@@ -0,0 +1,7 @@
+
+
+ Verzió kiválasztása
+ Hangsáv kiválasztása
+ Felirat kiválasztása
+ Lejátszási sebesség kiválasztása
+
diff --git a/player/video/src/main/res/values-it/strings.xml b/player/video/src/main/res/values-it/strings.xml
new file mode 100644
index 00000000..a8e7f039
--- /dev/null
+++ b/player/video/src/main/res/values-it/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Seleziona una versione
+ Seleziona traccia audio
+ Seleziona sottotilo
+ Seleziona velocità di riproduzione
+ Esterno
+
diff --git a/player/video/src/main/res/values-ko/strings.xml b/player/video/src/main/res/values-ko/strings.xml
new file mode 100644
index 00000000..c8bd5175
--- /dev/null
+++ b/player/video/src/main/res/values-ko/strings.xml
@@ -0,0 +1,8 @@
+
+
+ 버전 선택
+ 오디오 트랙 선택
+ 자막 트랙 선택
+ 재생 속도 선택
+ 외부
+
diff --git a/player/video/src/main/res/values-nl/strings.xml b/player/video/src/main/res/values-nl/strings.xml
new file mode 100644
index 00000000..ea77d864
--- /dev/null
+++ b/player/video/src/main/res/values-nl/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Kies een versie
+ Selecteer audiotrack
+ Selecteer ondertiteling
+ Selecteer afspeelsnelheid
+ Extern
+
diff --git a/player/video/src/main/res/values-pl/strings.xml b/player/video/src/main/res/values-pl/strings.xml
new file mode 100644
index 00000000..ffaa66da
--- /dev/null
+++ b/player/video/src/main/res/values-pl/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Wybierz wersję
+ Wybierz ścieżkę audio
+ Wybierz ścieżkę napisów
+ Wybierz prędkość odtwarzania
+ Zewnętrzny
+
diff --git a/player/video/src/main/res/values-pt-rBR/strings.xml b/player/video/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 00000000..33b37e62
--- /dev/null
+++ b/player/video/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Selecione uma versão
+ Selecione uma faixa de áudio
+ Selecione uma legenda
+ Selecione a velocidade de reprodução
+ Externo
+
diff --git a/player/video/src/main/res/values-pt/strings.xml b/player/video/src/main/res/values-pt/strings.xml
new file mode 100644
index 00000000..02ac7055
--- /dev/null
+++ b/player/video/src/main/res/values-pt/strings.xml
@@ -0,0 +1,8 @@
+
+
+ Selecionar a versão
+ Seleccione a faixa de áudio
+ Seleccione as legendas
+ Seleccionar velocidade de reprodução
+ Externo
+
diff --git a/player/video/src/main/res/values-ru/strings.xml b/player/video/src/main/res/values-ru/strings.xml
new file mode 100644
index 00000000..d4c6e8d4
--- /dev/null
+++ b/player/video/src/main/res/values-ru/strings.xml
@@ -0,0 +1,7 @@
+
+
+ Выбрать субтитры
+ Выбрать скорость воспроизведения
+ Выбрать версию
+ Выбрать аудиодорожку
+
diff --git a/player/video/src/main/res/values-zh-rCN/strings.xml b/player/video/src/main/res/values-zh-rCN/strings.xml
new file mode 100644
index 00000000..5cf1e851
--- /dev/null
+++ b/player/video/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,8 @@
+
+
+ 选择版本
+ 选择音轨
+ 选择字幕轨
+ 选择播放速度
+ 加载
+
diff --git a/player/video/src/main/res/values-zh-rTW/strings.xml b/player/video/src/main/res/values-zh-rTW/strings.xml
new file mode 100644
index 00000000..0d3d3e89
--- /dev/null
+++ b/player/video/src/main/res/values-zh-rTW/strings.xml
@@ -0,0 +1,8 @@
+
+
+ 選擇版本
+ 選擇音軌
+ 選擇字幕軌道
+ 選擇播放速度
+ 外部的
+
diff --git a/player/video/src/main/res/values/strings.xml b/player/video/src/main/res/values/strings.xml
new file mode 100644
index 00000000..9103e965
--- /dev/null
+++ b/player/video/src/main/res/values/strings.xml
@@ -0,0 +1,7 @@
+
+ Select audio track
+ Select subtitle track
+ Select playback speed
+ "Select a version"
+ External
+
diff --git a/preferences/build.gradle.kts b/preferences/build.gradle.kts
new file mode 100644
index 00000000..c58b1fe0
--- /dev/null
+++ b/preferences/build.gradle.kts
@@ -0,0 +1,43 @@
+@Suppress("DSL_SCOPE_VIOLATION") // False positive
+plugins {
+ alias(libs.plugins.android.library)
+ alias(libs.plugins.kotlin.android)
+ alias(libs.plugins.ktlint)
+}
+
+android {
+ namespace = "dev.jdtech.jellyfin.preferences"
+ compileSdk = 33
+ buildToolsVersion = "33.0.1"
+
+ defaultConfig {
+ minSdk = 27
+ targetSdk = 33
+ }
+
+ buildTypes {
+ getByName("release") {
+ isMinifyEnabled = false
+ }
+ create("staging") {
+ initWith(getByName("release"))
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+}
+
+ktlint {
+ android.set(true)
+ ignoreFailures.set(false)
+ disabledRules.add("max-line-length")
+}
+
+dependencies {
+ implementation(libs.androidx.core)
+ implementation(libs.androidx.media3.common)
+ implementation(libs.hilt.android)
+}
diff --git a/preferences/lint.xml b/preferences/lint.xml
new file mode 100644
index 00000000..bf11943b
--- /dev/null
+++ b/preferences/lint.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt b/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt
similarity index 75%
rename from app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt
rename to preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt
index 3a707d9c..0a9ea951 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt
+++ b/preferences/src/main/java/dev/jdtech/jellyfin/AppPreferences.kt
@@ -1,4 +1,4 @@
-package dev.jdtech.jellyfin.utils
+package dev.jdtech.jellyfin
import android.content.SharedPreferences
import android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
@@ -82,4 +82,46 @@ constructor(
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)
+ }
+ }
}
diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt b/preferences/src/main/java/dev/jdtech/jellyfin/Constants.kt
similarity index 83%
rename from app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt
rename to preferences/src/main/java/dev/jdtech/jellyfin/Constants.kt
index ed5d4332..31504287 100644
--- a/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt
+++ b/preferences/src/main/java/dev/jdtech/jellyfin/Constants.kt
@@ -1,4 +1,4 @@
-package dev.jdtech.jellyfin.utils
+package dev.jdtech.jellyfin
object Constants {
// player
@@ -32,6 +32,10 @@ object Constants {
const val PREF_NETWORK_REQUEST_TIMEOUT = "pref_network_request_timeout"
const val PREF_NETWORK_CONNECT_TIMEOUT = "pref_network_connect_timeout"
const val PREF_NETWORK_SOCKET_TIMEOUT = "pref_network_socket_timeout"
+ const val PREF_DOWNLOADS_MOBILE_DATA = "pref_downloads_mobile_data"
+ const val PREF_DOWNLOADS_ROAMING = "pref_downloads_roaming"
+ const val PREF_SORT_BY = "pref_sort_by"
+ const val PREF_SORT_ORDER = "pref_sort_order"
// caching
const val DEFAULT_CACHE_SIZE = 20
@@ -45,4 +49,9 @@ object Constants {
const val NETWORK_DEFAULT_REQUEST_TIMEOUT = 30_000L
const val NETWORK_DEFAULT_CONNECT_TIMEOUT = 6_000L
const val NETWORK_DEFAULT_SOCKET_TIMEOUT = 10_000L
+
+ // sorting
+ // This values must correspond to a SortString from [SortBy]
+ const val DEFAULT_SORT_BY = "SortName"
+ const val DEFAULT_SORT_ORDER = "Ascending"
}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 10069790..71443c9f 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1,4 +1,9 @@
-include(":app")
+include(":app:phone")
+include(":core")
+include(":data")
+include(":preferences")
+include(":player:core")
+include(":player:video")
pluginManagement {
repositories {