0
0
mirror of https://github.com/mediathekview/zapp.git synced 2024-09-20 12:22:15 +02:00

Remove 'targetFragment' usage from SelectQualityDialog

This commit is contained in:
Christine Coenen 2021-10-10 13:33:39 +02:00
parent dac3070386
commit fa893dd21a
2 changed files with 22 additions and 30 deletions

View File

@ -8,6 +8,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.setFragmentResultListener
import androidx.lifecycle.lifecycleScope
import com.google.android.material.snackbar.Snackbar
import de.christinecoenen.code.zapp.R
@ -31,8 +32,7 @@ import kotlinx.coroutines.flow.*
import org.koin.android.ext.android.inject
import timber.log.Timber
class MediathekDetailFragment : Fragment(), ConfirmFileDeletionDialog.Listener,
SelectQualityDialog.Listener {
class MediathekDetailFragment : Fragment(), ConfirmFileDeletionDialog.Listener {
companion object {
@ -103,14 +103,6 @@ class MediathekDetailFragment : Fragment(), ConfirmFileDeletionDialog.Listener,
downloadController.deleteDownload(persistedMediathekShow!!.id)
}
override fun onDownloadQualitySelected(quality: Quality) {
download(quality)
}
override fun onShareQualitySelected(quality: Quality) {
share(quality)
}
private fun onShowLoaded(persistedMediathekShow: PersistedMediathekShow) {
this.persistedMediathekShow = persistedMediathekShow
@ -188,7 +180,15 @@ class MediathekDetailFragment : Fragment(), ConfirmFileDeletionDialog.Listener,
private fun showSelectQualityDialog(mode: SelectQualityDialog.Mode) {
val dialog = SelectQualityDialog.newInstance(persistedMediathekShow!!.mediathekShow, mode)
dialog.setTargetFragment(this, 0)
setFragmentResultListener(SelectQualityDialog.REQUEST_KEY_SELECT_QUALITY) { _, bundle ->
val quality = SelectQualityDialog.getSelectedQuality(bundle)
when (mode) {
SelectQualityDialog.Mode.DOWNLOAD -> download(quality)
SelectQualityDialog.Mode.SHARE -> share(quality)
}
}
dialog.show(parentFragmentManager, null)
}

View File

@ -1,11 +1,11 @@
package de.christinecoenen.code.zapp.app.mediathek.ui.detail.dialogs
import android.app.Dialog
import android.content.Context
import android.content.DialogInterface
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatDialogFragment
import androidx.fragment.app.setFragmentResult
import de.christinecoenen.code.zapp.R
import de.christinecoenen.code.zapp.models.shows.MediathekShow
import de.christinecoenen.code.zapp.models.shows.Quality
@ -14,6 +14,8 @@ class SelectQualityDialog : AppCompatDialogFragment() {
companion object {
const val REQUEST_KEY_SELECT_QUALITY = "REQUEST_KEY_SELECT_QUALITY"
private const val REQUEST_KEY_SELECT_QUALITY_KEY_QUALITY = "REQUEST_KEY_SELECT_QUALITY_KEY_QUALITY"
private const val ARGUMENT_MEDIATHEK_SHOW = "ARGUMENT_MEDIATHEK_SHOW"
private const val ARGUMENT_MODE = "ARGUMENT_MODE"
@ -27,12 +29,15 @@ class SelectQualityDialog : AppCompatDialogFragment() {
}
}
@JvmStatic
fun getSelectedQuality(bundle: Bundle): Quality {
return bundle.getSerializable(REQUEST_KEY_SELECT_QUALITY_KEY_QUALITY) as Quality
}
}
private lateinit var mode: Mode
private lateinit var qualities: List<Quality>
private lateinit var qualityLabels: List<String>
private lateinit var listener: Listener
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -49,15 +54,6 @@ class SelectQualityDialog : AppCompatDialogFragment() {
qualityLabels = qualities.map { getString(it.labelResId) }
}
override fun onAttach(context: Context) {
super.onAttach(context)
listener = if (targetFragment is Listener) {
targetFragment as Listener
} else {
throw IllegalArgumentException("Parent fragment must implement ConfirmFileDeletionDialog.Listener interface.")
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return AlertDialog.Builder(requireActivity())
.setTitle(R.string.fragment_mediathek_qualities_title)
@ -68,18 +64,14 @@ class SelectQualityDialog : AppCompatDialogFragment() {
private fun onItemSelected(dialogInterface: DialogInterface, i: Int) {
val quality = qualities[i]
when (mode) {
Mode.DOWNLOAD -> listener.onDownloadQualitySelected(quality)
Mode.SHARE -> listener.onShareQualitySelected(quality)
val bundle = Bundle().apply {
putSerializable(REQUEST_KEY_SELECT_QUALITY_KEY_QUALITY, quality)
}
setFragmentResult(REQUEST_KEY_SELECT_QUALITY, bundle)
}
enum class Mode {
DOWNLOAD, SHARE
}
internal interface Listener {
fun onDownloadQualitySelected(quality: Quality)
fun onShareQualitySelected(quality: Quality)
}
}