mirror of
https://github.com/NiciDieNase/chaosflix
synced 2024-11-23 12:53:08 +00:00
Touch: fix Downloading
This commit is contained in:
parent
e9ab5526e9
commit
e14811ccbe
2 changed files with 46 additions and 42 deletions
|
@ -1,17 +1,21 @@
|
|||
package de.nicidienase.chaosflix.touch.eventdetails
|
||||
|
||||
import android.Manifest
|
||||
import android.arch.lifecycle.Observer
|
||||
import android.arch.lifecycle.ViewModelProviders
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.support.design.widget.Snackbar
|
||||
import android.support.v7.app.AlertDialog
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.view.Menu
|
||||
import de.nicidienase.chaosflix.common.ChaosflixUtil
|
||||
import de.nicidienase.chaosflix.common.OfflineItemManager
|
||||
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Event
|
||||
import de.nicidienase.chaosflix.common.mediadata.entities.recording.persistence.Recording
|
||||
import de.nicidienase.chaosflix.common.viewmodel.DetailsViewModel
|
||||
|
@ -30,6 +34,7 @@ class EventDetailsActivity : AppCompatActivity(),
|
|||
private lateinit var castService: CastService
|
||||
|
||||
private var selectDialog: AlertDialog? = null
|
||||
private var pendingDownload: Bundle? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
@ -43,9 +48,9 @@ class EventDetailsActivity : AppCompatActivity(),
|
|||
if(liveEvent == null){
|
||||
return@Observer
|
||||
}
|
||||
val localFile = liveEvent.data?.getString(DetailsViewModel.KEY_LOCAL_PATH)
|
||||
val recording = liveEvent.data?.getParcelable<Recording>(DetailsViewModel.RECORDING)
|
||||
val event = liveEvent.data?.getParcelable<Event>(DetailsViewModel.EVENT)
|
||||
val recording = liveEvent.data?.getParcelable<Recording>(DetailsViewModel.RECORDING)
|
||||
val localFile = liveEvent.data?.getString(DetailsViewModel.KEY_LOCAL_PATH)
|
||||
val selectItems: Array<Recording>? = liveEvent.data?.getParcelableArray(DetailsViewModel.KEY_SELECT_RECORDINGS) as Array<Recording>?
|
||||
when(liveEvent.state){
|
||||
DetailsViewModel.State.DisplayEvent -> {
|
||||
|
@ -73,7 +78,20 @@ class EventDetailsActivity : AppCompatActivity(),
|
|||
DetailsViewModel.State.DownloadRecording -> {
|
||||
if (event != null && selectItems != null) {
|
||||
selectRecording(event,selectItems.asList()) { e,r ->
|
||||
viewModel.download(e,r)
|
||||
viewModel.download(e,r).observe(this, Observer {
|
||||
when(it?.state){
|
||||
OfflineItemManager.State.Downloading -> {
|
||||
Snackbar.make(fragment_container, "Download started", Snackbar.LENGTH_LONG).show()
|
||||
}
|
||||
OfflineItemManager.State.PermissionRequired -> {
|
||||
pendingDownload = liveEvent.data
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
this.requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
|
||||
WRITE_PERMISSION_REQUEST)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -99,6 +117,23 @@ class EventDetailsActivity : AppCompatActivity(),
|
|||
showFragmentForEvent(event)
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
|
||||
if(requestCode == WRITE_PERMISSION_REQUEST){
|
||||
if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
|
||||
pendingDownload?.let {
|
||||
val recording = it.getParcelable<Recording>(DetailsViewModel.RECORDING)
|
||||
val event = it.getParcelable<Event>(DetailsViewModel.EVENT)
|
||||
if(event != null && recording != null){
|
||||
viewModel.download(event, recording)
|
||||
}
|
||||
}
|
||||
pendingDownload = null
|
||||
}
|
||||
} else {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun showSnackbar(message: String, duration: Int = Snackbar.LENGTH_LONG ){
|
||||
Snackbar.make(fragment_container, message, duration)
|
||||
|
@ -154,7 +189,7 @@ class EventDetailsActivity : AppCompatActivity(),
|
|||
invalidateOptionsMenu()
|
||||
}
|
||||
|
||||
override fun playItem(event: Event, recording: Recording, localFile: String?) {
|
||||
private fun playItem(event: Event, recording: Recording, localFile: String? = null) {
|
||||
if (castService.connected) {
|
||||
castService.loadMediaAndPlay(recording, event)
|
||||
} else {
|
||||
|
@ -176,10 +211,12 @@ class EventDetailsActivity : AppCompatActivity(),
|
|||
|
||||
companion object {
|
||||
|
||||
private val EXTRA_EVENT = "extra_event"
|
||||
private val EXTRA_URI = "extra_uri"
|
||||
private const val EXTRA_EVENT = "extra_event"
|
||||
private const val EXTRA_URI = "extra_uri"
|
||||
private const val WRITE_PERMISSION_REQUEST = 23
|
||||
private val TAG = EventDetailsActivity::class.java.simpleName
|
||||
|
||||
|
||||
fun launch(context: Context, event: Event) {
|
||||
val intent = Intent(context, EventDetailsActivity::class.java)
|
||||
intent.putExtra(EXTRA_EVENT, event)
|
||||
|
|
|
@ -143,9 +143,6 @@ class EventDetailsFragment : Fragment() {
|
|||
}
|
||||
|
||||
private fun play() {
|
||||
if(listener == null){
|
||||
return
|
||||
}
|
||||
viewModel.playEvent(event)
|
||||
}
|
||||
|
||||
|
@ -191,7 +188,7 @@ class EventDetailsFragment : Fragment() {
|
|||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
|
||||
when (item!!.itemId) {
|
||||
when (item?.itemId) {
|
||||
android.R.id.home -> {
|
||||
activity?.finish()
|
||||
return true
|
||||
|
@ -208,7 +205,7 @@ class EventDetailsFragment : Fragment() {
|
|||
R.id.action_unbookmark -> {
|
||||
viewModel.removeBookmark(event.guid)
|
||||
watchlistItem = null
|
||||
listener!!.invalidateOptionsMenu()
|
||||
listener?.invalidateOptionsMenu()
|
||||
return true
|
||||
}
|
||||
R.id.action_download -> {
|
||||
|
@ -227,7 +224,7 @@ class EventDetailsFragment : Fragment() {
|
|||
val shareIntent = Intent(Intent.ACTION_SEND, Uri.parse(event.frontendLink))
|
||||
shareIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.watch_this))
|
||||
shareIntent.putExtra(Intent.EXTRA_TEXT, event.frontendLink)
|
||||
shareIntent.setType("text/plain")
|
||||
shareIntent.type = "text/plain"
|
||||
startActivity(shareIntent)
|
||||
return true
|
||||
}
|
||||
|
@ -239,39 +236,9 @@ class EventDetailsFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
private var recordingToDownload: Recording? = null
|
||||
|
||||
private fun downloadRecording(recording: Recording) {
|
||||
recordingToDownload = recording
|
||||
viewModel.download(event, recording).observe(this, Observer {
|
||||
when(it?.state){
|
||||
OfflineItemManager.State.Downloading -> {
|
||||
layout?.let {
|
||||
Snackbar.make(it, "Download started", Snackbar.LENGTH_LONG).show()
|
||||
}
|
||||
}
|
||||
OfflineItemManager.State.PermissionRequired -> {
|
||||
this.requestPermissions(arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
|
||||
WRITE_PERMISSION_REQUEST)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
|
||||
if(requestCode == WRITE_PERMISSION_REQUEST){
|
||||
if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
|
||||
recordingToDownload?.let { viewModel.download(event, it) }
|
||||
}
|
||||
} else {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
}
|
||||
}
|
||||
|
||||
interface OnEventDetailsFragmentInteractionListener {
|
||||
fun onToolbarStateChange()
|
||||
fun invalidateOptionsMenu()
|
||||
fun playItem(event: Event, recording: Recording, localFile: String? = null)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
Loading…
Reference in a new issue