chore(deps): update android-plugin to v8 (major) (#333)

* Update android-plugin to v8

* ci: upgrade to java 17

* fix: transitive R classes and buildconfig

* lint: fix ktlint issues

* lint: fix ktlint issues

* lint: fix ktlint issues

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: jarnedemeulemeester <jarnedemeulemeester@gmail.com>
This commit is contained in:
renovate[bot] 2023-04-15 00:43:42 +02:00 committed by GitHub
parent 0d4c38d34b
commit 22542614cd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 118 additions and 115 deletions

View file

@ -13,10 +13,10 @@ jobs:
uses: actions/checkout@v3
- name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@v1
- name: Set up JDK 11
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 11
java-version: 17
distribution: temurin
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
@ -30,10 +30,10 @@ jobs:
uses: actions/checkout@v3
- name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@v1
- name: Set up JDK 11
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 11
java-version: 17
distribution: temurin
- name: Setup Gradle
uses: gradle/gradle-build-action@v2

View file

@ -55,8 +55,8 @@ android {
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
buildFeatures {

View file

@ -11,6 +11,7 @@ import dev.jdtech.jellyfin.adapters.HomeEpisodeListAdapter
import dev.jdtech.jellyfin.adapters.ServerGridAdapter
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
import dev.jdtech.jellyfin.api.JellyfinApi
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.models.Server
import dev.jdtech.jellyfin.models.User
import java.util.UUID
@ -58,7 +59,7 @@ fun bindItemBackdropById(imageView: ImageView, itemId: UUID) {
@BindingAdapter("personImage")
fun bindPersonImage(imageView: ImageView, person: BaseItemPerson) {
imageView
.loadImage("/items/${person.id}/Images/${ImageType.PRIMARY}", placeholderId = R.drawable.person_placeholder)
.loadImage("/items/${person.id}/Images/${ImageType.PRIMARY}", placeholderId = CoreR.drawable.person_placeholder)
.posterDescription(person.name)
}
@ -108,13 +109,13 @@ fun bindSeasonPoster(imageView: ImageView, seasonId: UUID) {
@BindingAdapter("userImage")
fun bindUserImage(imageView: ImageView, user: User) {
imageView
.loadImage("/users/${user.id}/Images/${ImageType.PRIMARY}", placeholderId = R.drawable.user_placeholder)
.loadImage("/users/${user.id}/Images/${ImageType.PRIMARY}", placeholderId = CoreR.drawable.user_placeholder)
.posterDescription(user.name)
}
private fun ImageView.loadImage(
url: String,
@DrawableRes placeholderId: Int = R.color.neutral_800,
@DrawableRes placeholderId: Int = CoreR.color.neutral_800,
@DrawableRes errorPlaceHolderId: Int? = null
): View {
val api = JellyfinApi.getInstance(context.applicationContext)
@ -131,9 +132,9 @@ private fun ImageView.loadImage(
}
private fun View.posterDescription(name: String?) {
contentDescription = context.resources.getString(R.string.image_description_poster, name)
contentDescription = context.resources.getString(CoreR.string.image_description_poster, name)
}
private fun View.backdropDescription(name: String?) {
contentDescription = context.resources.getString(R.string.image_description_backdrop, name)
contentDescription = context.resources.getString(CoreR.string.image_description_backdrop, name)
}

View file

@ -13,6 +13,7 @@ import androidx.navigation.ui.NavigationUiSaveStateControl
import androidx.navigation.ui.setupActionBarWithNavController
import com.google.android.material.navigation.NavigationBarView
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.databinding.ActivityMainBinding
import dev.jdtech.jellyfin.utils.loadDownloadLocation
@ -39,7 +40,7 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
if (appPreferences.amoledTheme) {
setTheme(R.style.Theme_FindroidAMOLED)
setTheme(CoreR.style.Theme_FindroidAMOLED)
}
binding = ActivityMainBinding.inflate(layoutInflater)
@ -81,11 +82,11 @@ class MainActivity : AppCompatActivity() {
navController.addOnDestinationChangedListener { _, destination, _ ->
binding.navView.visibility = when (destination.id) {
R.id.twoPaneSettingsFragment, R.id.serverSelectFragment, R.id.addServerFragment, R.id.loginFragment, R.id.about_libraries_dest, R.id.usersFragment, R.id.serverAddressesFragment -> View.GONE
R.id.twoPaneSettingsFragment, R.id.serverSelectFragment, R.id.addServerFragment, R.id.loginFragment, com.mikepenz.aboutlibraries.R.id.about_libraries_dest, R.id.usersFragment, R.id.serverAddressesFragment -> View.GONE
else -> View.VISIBLE
}
if (destination.id == R.id.about_libraries_dest) binding.mainToolbar.title =
getString(R.string.app_info)
if (destination.id == com.mikepenz.aboutlibraries.R.id.about_libraries_dest) binding.mainToolbar.title =
getString(CoreR.string.app_info)
}
loadDownloadLocation(applicationContext)

View file

@ -22,6 +22,7 @@ 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.player.video.R as PlayerVideoR
import dev.jdtech.jellyfin.utils.PlayerGestureHelper
import dev.jdtech.jellyfin.utils.PreviewScrubListener
import dev.jdtech.jellyfin.viewmodels.PlayerActivityViewModel
@ -109,7 +110,7 @@ class PlayerActivity : BasePlayerActivity() {
val trackSelectionDialogBuilder = TrackSelectionDialogBuilder(
this,
resources.getString(R.string.select_audio_track),
resources.getString(PlayerVideoR.string.select_audio_track),
viewModel.player,
C.TRACK_TYPE_AUDIO
)
@ -142,7 +143,7 @@ class PlayerActivity : BasePlayerActivity() {
val trackSelectionDialogBuilder = TrackSelectionDialogBuilder(
this,
resources.getString(R.string.select_subtile_track),
resources.getString(PlayerVideoR.string.select_subtile_track),
viewModel.player,
C.TRACK_TYPE_TEXT
)

View file

@ -5,7 +5,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.BaseItemBinding
import dev.jdtech.jellyfin.models.DownloadSeriesMetadata
import dev.jdtech.jellyfin.utils.downloadSeriesMetadataToBaseItemDto
@ -23,7 +23,7 @@ class DownloadSeriesListAdapter(
binding.itemCount.text = item.episodes.size.toString()
if (fixedWidth) {
binding.itemLayout.layoutParams.width =
parent.resources.getDimension(R.dimen.overview_media_width).toInt()
parent.resources.getDimension(CoreR.dimen.overview_media_width).toInt()
(binding.itemLayout.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin = 0
}
binding.executePendingBindings()

View file

@ -6,7 +6,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.BaseItemBinding
import dev.jdtech.jellyfin.models.PlayerItem
import dev.jdtech.jellyfin.utils.downloadMetadataToBaseItemDto
@ -24,7 +24,7 @@ class DownloadViewItemListAdapter(
binding.itemName.text = item.name
binding.itemCount.visibility = View.GONE
if (fixedWidth) {
binding.itemLayout.layoutParams.width = parent.resources.getDimension(R.dimen.overview_media_width).toInt()
binding.itemLayout.layoutParams.width = parent.resources.getDimension(CoreR.dimen.overview_media_width).toInt()
(binding.itemLayout.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin = 0
}
binding.executePendingBindings()

View file

@ -6,7 +6,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.BaseItemBinding
import org.jellyfin.sdk.model.api.BaseItemDto
import org.jellyfin.sdk.model.api.BaseItemKind
@ -25,7 +25,7 @@ class ViewItemListAdapter(
if (item.userData?.unplayedItemCount != null && item.userData?.unplayedItemCount!! > 0) View.VISIBLE else View.GONE
if (fixedWidth) {
binding.itemLayout.layoutParams.width =
parent.resources.getDimension(R.dimen.overview_media_width).toInt()
parent.resources.getDimension(CoreR.dimen.overview_media_width).toInt()
(binding.itemLayout.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin = 0
}
binding.executePendingBindings()

View file

@ -6,7 +6,7 @@ import android.view.ViewGroup
import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.BaseItemBinding
import org.jellyfin.sdk.model.api.BaseItemDto
import org.jellyfin.sdk.model.api.BaseItemKind
@ -26,7 +26,7 @@ class ViewItemPagingAdapter(
if (item.userData?.unplayedItemCount != null && item.userData?.unplayedItemCount!! > 0) View.VISIBLE else View.GONE
if (fixedWidth) {
binding.itemLayout.layoutParams.width =
parent.resources.getDimension(R.dimen.overview_media_width).toInt()
parent.resources.getDimension(CoreR.dimen.overview_media_width).toInt()
(binding.itemLayout.layoutParams as ViewGroup.MarginLayoutParams).bottomMargin = 0
}
binding.executePendingBindings()

View file

@ -5,7 +5,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.NextUpSectionBinding
import dev.jdtech.jellyfin.databinding.ViewItemBinding
import dev.jdtech.jellyfin.models.HomeItem
@ -29,7 +29,7 @@ class ViewListAdapter(
) {
val view = dataItem.view
binding.view = view
binding.viewName.text = binding.viewName.context.resources.getString(R.string.latest_library, view.name)
binding.viewName.text = binding.viewName.context.resources.getString(CoreR.string.latest_library, view.name)
binding.itemsRecyclerView.adapter =
ViewItemListAdapter(onItemClickListener, fixedWidth = true)
binding.viewAll.setOnClickListener {

View file

@ -13,12 +13,13 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.google.android.material.R as MaterialR
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.bindBaseItemImage
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.EpisodeBottomSheetBinding
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
import dev.jdtech.jellyfin.models.PlayerItem
@ -91,11 +92,11 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
when (viewModel.played) {
true -> {
viewModel.markAsUnplayed(episodeId)
binding.checkButton.setTintColorAttribute(R.attr.colorOnSecondaryContainer, requireActivity().theme)
binding.checkButton.setTintColorAttribute(MaterialR.attr.colorOnSecondaryContainer, requireActivity().theme)
}
false -> {
viewModel.markAsPlayed(episodeId)
binding.checkButton.setTintColor(R.color.red, requireActivity().theme)
binding.checkButton.setTintColor(CoreR.color.red, requireActivity().theme)
}
}
}
@ -104,13 +105,13 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
when (viewModel.favorite) {
true -> {
viewModel.unmarkAsFavorite(episodeId)
binding.favoriteButton.setImageResource(R.drawable.ic_heart)
binding.favoriteButton.setTintColorAttribute(R.attr.colorOnSecondaryContainer, requireActivity().theme)
binding.favoriteButton.setImageResource(CoreR.drawable.ic_heart)
binding.favoriteButton.setTintColorAttribute(MaterialR.attr.colorOnSecondaryContainer, requireActivity().theme)
}
false -> {
viewModel.markAsFavorite(episodeId)
binding.favoriteButton.setImageResource(R.drawable.ic_heart_filled)
binding.favoriteButton.setTintColor(R.color.red, requireActivity().theme)
binding.favoriteButton.setImageResource(CoreR.drawable.ic_heart_filled)
binding.favoriteButton.setTintColor(CoreR.color.red, requireActivity().theme)
}
}
}
@ -118,7 +119,7 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
binding.downloadButton.setOnClickListener {
binding.downloadButton.isEnabled = false
viewModel.download()
binding.downloadButton.setTintColor(R.color.red, requireActivity().theme)
binding.downloadButton.setTintColor(CoreR.color.red, requireActivity().theme)
}
viewModel.loadEpisode(episodeId)
@ -131,7 +132,7 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
binding.deleteButton.setOnClickListener {
viewModel.deleteEpisode()
dismiss()
findNavController().navigate(R.id.downloadFragment)
findNavController().navigate(CoreR.id.downloadFragment)
}
binding.checkButton.isVisible = false
@ -163,7 +164,7 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
val clickable = canPlay && (available || canRetry)
binding.playButton.isEnabled = clickable
binding.playButton.alpha = if (!clickable) 0.5F else 1.0F
binding.playButton.setImageResource(if (!canRetry) R.drawable.ic_play else R.drawable.ic_rotate_ccw)
binding.playButton.setImageResource(if (!canRetry) CoreR.drawable.ic_play else CoreR.drawable.ic_rotate_ccw)
if (!(available || canRetry)) {
binding.playButton.setImageResource(android.R.color.transparent)
binding.progressCircular.isVisible = true
@ -171,24 +172,24 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
// Check icon
when (played) {
true -> binding.checkButton.setTintColor(R.color.red, requireActivity().theme)
false -> binding.checkButton.setTintColorAttribute(R.attr.colorOnSecondaryContainer, requireActivity().theme)
true -> binding.checkButton.setTintColor(CoreR.color.red, requireActivity().theme)
false -> binding.checkButton.setTintColorAttribute(MaterialR.attr.colorOnSecondaryContainer, requireActivity().theme)
}
// Favorite icon
val favoriteDrawable = when (favorite) {
true -> R.drawable.ic_heart_filled
false -> R.drawable.ic_heart
true -> CoreR.drawable.ic_heart_filled
false -> CoreR.drawable.ic_heart
}
binding.favoriteButton.setImageResource(favoriteDrawable)
if (favorite) binding.favoriteButton.setTintColor(R.color.red, requireActivity().theme)
if (favorite) binding.favoriteButton.setTintColor(CoreR.color.red, requireActivity().theme)
when (canDownload) {
true -> {
binding.downloadButtonWrapper.isVisible = true
binding.downloadButton.isEnabled = !downloaded
if (downloaded) binding.downloadButton.setTintColor(R.color.red, requireActivity().theme)
if (downloaded) binding.downloadButton.setTintColor(CoreR.color.red, requireActivity().theme)
}
false -> {
binding.downloadButtonWrapper.isVisible = false
@ -196,7 +197,7 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
}
binding.episodeName.text = getString(
R.string.episode_name_extended,
CoreR.string.episode_name_extended,
episode.parentIndexNumber,
episode.indexNumber,
episode.name
@ -233,7 +234,7 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
binding.playButton.setImageDrawable(
ContextCompat.getDrawable(
requireActivity(),
R.drawable.ic_play
CoreR.drawable.ic_play
)
)
binding.progressCircular.visibility = View.INVISIBLE
@ -246,7 +247,7 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
binding.playButton.setImageDrawable(
ContextCompat.getDrawable(
requireActivity(),
R.drawable.ic_play
CoreR.drawable.ic_play
)
)
binding.progressCircular.visibility = View.INVISIBLE

View file

@ -21,10 +21,10 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.adapters.HomeEpisodeListAdapter
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
import dev.jdtech.jellyfin.adapters.ViewListAdapter
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.FragmentHomeBinding
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
@ -64,12 +64,12 @@ class HomeFragment : Fragment() {
menuHost.addMenuProvider(
object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.home_menu, menu)
menuInflater.inflate(CoreR.menu.home_menu, menu)
val settings = menu.findItem(R.id.action_settings)
val search = menu.findItem(R.id.action_search)
val settings = menu.findItem(CoreR.id.action_settings)
val search = menu.findItem(CoreR.id.action_search)
val searchView = search.actionView as SearchView
searchView.queryHint = getString(R.string.search_hint)
searchView.queryHint = getString(CoreR.string.search_hint)
search.setOnActionExpandListener(
object : MenuItem.OnActionExpandListener {
@ -101,7 +101,7 @@ class HomeFragment : Fragment() {
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
return when (menuItem.itemId) {
R.id.action_settings -> {
CoreR.id.action_settings -> {
navigateToSettingsFragment()
true
}
@ -148,7 +148,7 @@ class HomeFragment : Fragment() {
when (item.type) {
BaseItemKind.EPISODE -> navigateToEpisodeBottomSheetFragment(item)
BaseItemKind.MOVIE -> navigateToMediaInfoFragment(item)
else -> Toast.makeText(requireContext(), R.string.unknown_error, LENGTH_LONG)
else -> Toast.makeText(requireContext(), CoreR.string.unknown_error, LENGTH_LONG)
.show()
}
}

View file

@ -20,8 +20,8 @@ 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.core.R as CoreR
import dev.jdtech.jellyfin.databinding.FragmentLibraryBinding
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
import dev.jdtech.jellyfin.dialogs.SortDialogFragment
@ -63,12 +63,12 @@ class LibraryFragment : Fragment() {
menuHost.addMenuProvider(
object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.library_menu, menu)
menuInflater.inflate(CoreR.menu.library_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
return when (menuItem.itemId) {
R.id.action_sort_by -> {
CoreR.id.action_sort_by -> {
SortDialogFragment(
args.libraryId,
args.libraryType,
@ -80,7 +80,7 @@ class LibraryFragment : Fragment() {
)
true
}
R.id.action_sort_order -> {
CoreR.id.action_sort_order -> {
SortDialogFragment(
args.libraryId,
args.libraryType,

View file

@ -16,8 +16,8 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.adapters.UserLoginListAdapter
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.database.ServerDatabaseDao
import dev.jdtech.jellyfin.databinding.FragmentLoginBinding
import dev.jdtech.jellyfin.viewmodels.LoginViewModel
@ -109,7 +109,7 @@ class LoginFragment : Fragment() {
}
is LoginViewModel.QuickConnectUiState.Normal -> {
binding.buttonQuickconnectLayout.isVisible = true
binding.buttonQuickconnect.text = resources.getString(R.string.quick_connect)
binding.buttonQuickconnect.text = resources.getString(CoreR.string.quick_connect)
binding.buttonQuickconnectProgress.isVisible = false
}
is LoginViewModel.QuickConnectUiState.Waiting -> {

View file

@ -19,8 +19,8 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.adapters.CollectionListAdapter
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.FragmentMediaBinding
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
@ -84,11 +84,11 @@ class MediaFragment : Fragment() {
menuHost.addMenuProvider(
object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.media_menu, menu)
menuInflater.inflate(CoreR.menu.media_menu, menu)
val search = menu.findItem(R.id.action_search)
val search = menu.findItem(CoreR.id.action_search)
val searchView = search.actionView as SearchView
searchView.queryHint = getString(R.string.search_hint)
searchView.queryHint = getString(CoreR.string.search_hint)
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(p0: String?): Boolean {

View file

@ -16,13 +16,14 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.google.android.material.R as MaterialR
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.adapters.PersonListAdapter
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
import dev.jdtech.jellyfin.bindBaseItemImage
import dev.jdtech.jellyfin.bindItemBackdropImage
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.FragmentMediaInfoBinding
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
import dev.jdtech.jellyfin.dialogs.VideoVersionDialogFragment
@ -165,14 +166,14 @@ class MediaInfoFragment : Fragment() {
true -> {
viewModel.markAsUnplayed(args.itemId)
binding.checkButton.setTintColorAttribute(
R.attr.colorOnSecondaryContainer,
MaterialR.attr.colorOnSecondaryContainer,
requireActivity().theme
)
}
false -> {
viewModel.markAsPlayed(args.itemId)
binding.checkButton.setTintColor(R.color.red, requireActivity().theme)
binding.checkButton.setTintColor(CoreR.color.red, requireActivity().theme)
}
}
}
@ -181,17 +182,17 @@ class MediaInfoFragment : Fragment() {
when (viewModel.favorite) {
true -> {
viewModel.unmarkAsFavorite(args.itemId)
binding.favoriteButton.setImageResource(R.drawable.ic_heart)
binding.favoriteButton.setImageResource(CoreR.drawable.ic_heart)
binding.favoriteButton.setTintColorAttribute(
R.attr.colorOnSecondaryContainer,
MaterialR.attr.colorOnSecondaryContainer,
requireActivity().theme
)
}
false -> {
viewModel.markAsFavorite(args.itemId)
binding.favoriteButton.setImageResource(R.drawable.ic_heart_filled)
binding.favoriteButton.setTintColor(R.color.red, requireActivity().theme)
binding.favoriteButton.setImageResource(CoreR.drawable.ic_heart_filled)
binding.favoriteButton.setTintColor(CoreR.color.red, requireActivity().theme)
}
}
}
@ -201,7 +202,7 @@ class MediaInfoFragment : Fragment() {
viewModel.download()
binding.downloadButton.imageTintList = ColorStateList.valueOf(
resources.getColor(
R.color.red,
CoreR.color.red,
requireActivity().theme
)
)
@ -214,7 +215,7 @@ class MediaInfoFragment : Fragment() {
binding.deleteButton.setOnClickListener {
viewModel.deleteItem()
findNavController().navigate(R.id.downloadFragment)
findNavController().navigate(CoreR.id.downloadFragment)
}
}
}
@ -231,7 +232,7 @@ class MediaInfoFragment : Fragment() {
val clickable = canPlay && (available || canRetry)
binding.playButton.isEnabled = clickable
binding.playButton.alpha = if (!clickable) 0.5F else 1.0F
binding.playButton.setImageResource(if (!canRetry) R.drawable.ic_play else R.drawable.ic_rotate_ccw)
binding.playButton.setImageResource(if (!canRetry) CoreR.drawable.ic_play else CoreR.drawable.ic_rotate_ccw)
if (!(available || canRetry)) {
binding.playButton.setImageResource(android.R.color.transparent)
binding.progressCircular.isVisible = true
@ -239,20 +240,20 @@ class MediaInfoFragment : Fragment() {
// Check icon
when (played) {
true -> binding.checkButton.setTintColor(R.color.red, requireActivity().theme)
true -> binding.checkButton.setTintColor(CoreR.color.red, requireActivity().theme)
false -> binding.checkButton.setTintColorAttribute(
R.attr.colorOnSecondaryContainer,
MaterialR.attr.colorOnSecondaryContainer,
requireActivity().theme
)
}
// Favorite icon
val favoriteDrawable = when (favorite) {
true -> R.drawable.ic_heart_filled
false -> R.drawable.ic_heart
true -> CoreR.drawable.ic_heart_filled
false -> CoreR.drawable.ic_heart
}
binding.favoriteButton.setImageResource(favoriteDrawable)
if (favorite) binding.favoriteButton.setTintColor(R.color.red, requireActivity().theme)
if (favorite) binding.favoriteButton.setTintColor(CoreR.color.red, requireActivity().theme)
when (canDownload) {
true -> {
@ -260,7 +261,7 @@ class MediaInfoFragment : Fragment() {
binding.downloadButton.isEnabled = !downloaded
if (downloaded) binding.downloadButton.setTintColor(
R.color.red,
CoreR.color.red,
requireActivity().theme
)
}
@ -355,7 +356,7 @@ class MediaInfoFragment : Fragment() {
binding.description.text = item.overview
binding.nextUpLayout.isVisible = nextUp != null
binding.nextUpName.text = getString(
R.string.episode_name_extended,
CoreR.string.episode_name_extended,
nextUp?.parentIndexNumber,
nextUp?.indexNumber,
nextUp?.name
@ -391,7 +392,7 @@ class MediaInfoFragment : Fragment() {
binding.playButton.setImageDrawable(
ContextCompat.getDrawable(
requireActivity(),
R.drawable.ic_play
CoreR.drawable.ic_play
)
)
binding.progressCircular.visibility = View.INVISIBLE
@ -403,7 +404,7 @@ class MediaInfoFragment : Fragment() {
binding.playButton.setImageDrawable(
ContextCompat.getDrawable(
requireActivity(),
R.drawable.ic_play
CoreR.drawable.ic_play
)
)
binding.progressCircular.visibility = View.INVISIBLE

View file

@ -15,9 +15,9 @@ import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.adapters.ViewItemListAdapter
import dev.jdtech.jellyfin.bindItemImage
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.databinding.FragmentPersonDetailBinding
import dev.jdtech.jellyfin.dialogs.ErrorDialogFragment
import dev.jdtech.jellyfin.utils.checkIfLoginRequired
@ -126,11 +126,11 @@ internal class PersonDetailFragment : Fragment() {
with(binding.overview) {
if (layoutParams.height == ConstraintLayout.LayoutParams.WRAP_CONTENT) {
updateLayoutParams { height = ConstraintLayout.LayoutParams.MATCH_CONSTRAINT }
binding.readAll.text = getString(R.string.view_all)
binding.readAll.text = getString(CoreR.string.view_all)
binding.overviewGradient.isVisible = true
} else {
updateLayoutParams { height = ConstraintLayout.LayoutParams.WRAP_CONTENT }
binding.readAll.text = getString(R.string.hide)
binding.readAll.text = getString(CoreR.string.hide)
binding.overviewGradient.isVisible = false
}
}

View file

@ -5,12 +5,12 @@ import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.ListPreference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreferenceCompat
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
@Suppress("unused")
class SettingsAppearanceFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.fragment_settings_appearance, rootKey)
setPreferencesFromResource(CoreR.xml.fragment_settings_appearance, rootKey)
findPreference<ListPreference>("theme")?.setOnPreferenceChangeListener { _, newValue ->
when (newValue) {

View file

@ -4,12 +4,12 @@ import android.os.Bundle
import android.text.InputType
import androidx.preference.EditTextPreference
import androidx.preference.PreferenceFragmentCompat
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
@Suppress("unused")
class SettingsCacheFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.fragment_settings_cache, rootKey)
setPreferencesFromResource(CoreR.xml.fragment_settings_cache, rootKey)
findPreference<EditTextPreference>("pref_image_cache_size")?.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER

View file

@ -5,7 +5,7 @@ import androidx.fragment.app.viewModels
import androidx.preference.EditTextPreference
import androidx.preference.PreferenceFragmentCompat
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
import dev.jdtech.jellyfin.viewmodels.SettingsDeviceViewModel
@AndroidEntryPoint
@ -15,7 +15,7 @@ class SettingsDeviceFragment : PreferenceFragmentCompat() {
private val viewModel: SettingsDeviceViewModel by viewModels()
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.fragment_settings_device, rootKey)
setPreferencesFromResource(CoreR.xml.fragment_settings_device, rootKey)
findPreference<EditTextPreference>("deviceName")?.setOnPreferenceChangeListener { _, name ->
viewModel.updateDeviceName(name.toString())

View file

@ -2,11 +2,11 @@ package dev.jdtech.jellyfin.fragments
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
@Suppress("unused")
class SettingsDownloadsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.fragment_settings_downloads, rootKey)
setPreferencesFromResource(CoreR.xml.fragment_settings_downloads, rootKey)
}
}

View file

@ -8,7 +8,7 @@ import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import dagger.hilt.android.AndroidEntryPoint
import dev.jdtech.jellyfin.AppPreferences
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
import javax.inject.Inject
@AndroidEntryPoint
@ -17,7 +17,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
lateinit var appPreferences: AppPreferences
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.fragment_settings, rootKey)
setPreferencesFromResource(CoreR.xml.fragment_settings, rootKey)
findPreference<Preference>("switchServer")?.setOnPreferenceClickListener {
findNavController().navigate(TwoPaneSettingsFragmentDirections.actionNavigationSettingsToServerSelectFragment())

View file

@ -2,11 +2,11 @@ package dev.jdtech.jellyfin.fragments
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
@Suppress("unused")
class SettingsLanguageFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.fragment_settings_language, rootKey)
setPreferencesFromResource(CoreR.xml.fragment_settings_language, rootKey)
}
}

View file

@ -5,12 +5,12 @@ 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.core.R as CoreR
@Suppress("unused")
class SettingsNetworkFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.fragment_settings_network, rootKey)
setPreferencesFromResource(CoreR.xml.fragment_settings_network, rootKey)
findPreference<EditTextPreference>(Constants.PREF_NETWORK_SOCKET_TIMEOUT)?.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER

View file

@ -7,12 +7,12 @@ import android.text.InputType
import androidx.preference.EditTextPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import dev.jdtech.jellyfin.R
import dev.jdtech.jellyfin.core.R as CoreR
@Suppress("unused")
class SettingsPlayerFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.fragment_settings_player, rootKey)
setPreferencesFromResource(CoreR.xml.fragment_settings_player, rootKey)
findPreference<EditTextPreference>("pref_player_seek_back_inc")?.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER
}

View file

@ -28,8 +28,8 @@ android {
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}

View file

@ -32,8 +32,8 @@ android {
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}

View file

@ -18,6 +18,4 @@ android.useAndroidX=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
android.injected.testOnly=false
# For compatibility with AGP 7.4. Should be removed when AGP 8.0 is released
android.experimental.legacyTransform.forceNonIncremental=true
android.defaults.buildfeatures.buildconfig=true

View file

@ -1,6 +1,6 @@
[versions]
aboutlibraries = "10.6.2"
android-plugin = "7.4.2"
android-plugin = "8.0.0"
androidx-activity = "1.7.0"
androidx-appcompat = "1.6.1"
androidx-constraintlayout = "2.1.4"

View file

@ -26,8 +26,8 @@ android {
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}

View file

@ -27,8 +27,8 @@ android {
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}

View file

@ -24,8 +24,8 @@ android {
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}