Browse Source

Add a confirmation for playlist deletion on TV

merge-requests/213/head
Nicolas Pomepuy 7 years ago
committed by Geoffrey Métais
parent
commit
8a2af6ca15
  1. 12
      vlc-android/AndroidManifest.xml
  2. 2
      vlc-android/res/values/strings.xml
  3. 28
      vlc-android/src/org/videolan/vlc/gui/tv/details/MediaListActivity.kt
  4. 28
      vlc-android/src/org/videolan/vlc/gui/tv/dialogs/ConfirmationTvActivity.kt
  5. 49
      vlc-android/src/org/videolan/vlc/gui/tv/dialogs/ConfirmationTvDialog.kt

12
vlc-android/AndroidManifest.xml

@ -566,10 +566,14 @@
android:screenOrientation="landscape"
android:theme="@style/Theme.VLC.TV" />
<activity
android:name=".gui.tv.DetailsActivity"
android:exported="true"
android:screenOrientation="landscape"
android:theme="@style/Theme.Leanback.Details" />
android:name=".gui.tv.dialogs.ConfirmationTvActivity"
android:screenOrientation="landscape"
android:theme="@style/Theme.VLC.TV"/>
<activity
android:name=".gui.tv.DetailsActivity"
android:exported="true"
android:screenOrientation="landscape"
android:theme="@style/Theme.Leanback.Details"/>
<activity
android:name=".gui.tv.browser.VerticalGridActivity"
android:exported="true"

2
vlc-android/res/values/strings.xml

@ -716,4 +716,6 @@
<string name="appended">Track(s) appended</string>
<string name="inserted">Track(s) inserted</string>
<string name="remove_current">Remove current</string>
<string name="validation_delete_playlist">Are you sure you want to delete this playlist?</string>
<string name="validation_delete_playlist_text">This action cannot be undone.</string>
</resources>

28
vlc-android/src/org/videolan/vlc/gui/tv/details/MediaListActivity.kt

@ -1,5 +1,6 @@
package org.videolan.vlc.gui.tv.details
import android.content.Intent
import android.os.Bundle
import android.os.Parcelable
import android.view.View
@ -21,13 +22,15 @@ import org.videolan.vlc.gui.dialogs.SavePlaylistDialog
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.tv.TvUtil
import org.videolan.vlc.gui.tv.browser.BaseTvActivity
import org.videolan.vlc.gui.tv.dialogs.ConfirmationTvActivity
import org.videolan.vlc.gui.tv.dialogs.ConfirmationTvActivity.Companion.CONFIRMATION_DIALOG_TEXT
import org.videolan.vlc.gui.tv.dialogs.ConfirmationTvActivity.Companion.CONFIRMATION_DIALOG_TITLE
import org.videolan.vlc.gui.tv.updateBackground
import org.videolan.vlc.interfaces.ITVEventsHandler
import org.videolan.vlc.media.MediaUtils
import org.videolan.vlc.util.ITEM
import org.videolan.vlc.viewmodels.mobile.PlaylistViewModel
@ExperimentalCoroutinesApi
@ObsoleteCoroutinesApi
class MediaListActivity : BaseTvActivity(), ITVEventsHandler, CoroutineScope by MainScope() {
@ -41,7 +44,6 @@ class MediaListActivity : BaseTvActivity(), ITVEventsHandler, CoroutineScope by
private lateinit var viewModel: PlaylistViewModel
private var lateSelectedItem: MediaLibraryItem? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_media_list_tv)
@ -74,7 +76,6 @@ class MediaListActivity : BaseTvActivity(), ITVEventsHandler, CoroutineScope by
binding.subtitle = item.description
} else {
binding.albumSubtitle.visibility = View.GONE
}
binding.totalTime = Tools.millisToString(item.tracks.sumByDouble { it.length.toDouble() }.toLong())
@ -86,8 +87,10 @@ class MediaListActivity : BaseTvActivity(), ITVEventsHandler, CoroutineScope by
binding.insertNext.setOnClickListener { MediaUtils.insertNext(this, item.tracks) }
binding.addPlaylist.setOnClickListener { UiTools.addToPlaylist(this, item.tracks, SavePlaylistDialog.KEY_NEW_TRACKS) }
binding.delete.setOnClickListener {
(viewModel.playlist as Playlist).delete()
finish()
val intent = Intent(this, ConfirmationTvActivity::class.java)
intent.putExtra(CONFIRMATION_DIALOG_TITLE, getString(R.string.validation_delete_playlist))
intent.putExtra(CONFIRMATION_DIALOG_TEXT, getString(R.string.validation_delete_playlist_text))
startActivityForResult(intent, REQUEST_DELETE_PLAYLIST)
}
if (item.itemType == MediaLibraryItem.TYPE_PLAYLIST) {
@ -100,8 +103,18 @@ class MediaListActivity : BaseTvActivity(), ITVEventsHandler, CoroutineScope by
} else {
binding.delete.visibility = View.GONE
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_DELETE_PLAYLIST) {
if (resultCode == ConfirmationTvActivity.ACTION_ID_POSITIVE) {
(viewModel.playlist as Playlist).delete()
finish()
}
}
}
override fun onResume() {
@ -138,7 +151,6 @@ class MediaListActivity : BaseTvActivity(), ITVEventsHandler, CoroutineScope by
override fun onClickMoveUp(v: View, position: Int) {
(viewModel.playlist as Playlist).move(position, position - 1)
}
override fun onClickMoveDown(v: View, position: Int) {
@ -153,6 +165,10 @@ class MediaListActivity : BaseTvActivity(), ITVEventsHandler, CoroutineScope by
if (item != lateSelectedItem) updateBackground(this, backgroundManager, item)
lateSelectedItem = item
}
companion object {
private const val REQUEST_DELETE_PLAYLIST = 1
}
}
@ObsoleteCoroutinesApi

28
vlc-android/src/org/videolan/vlc/gui/tv/dialogs/ConfirmationTvActivity.kt

@ -0,0 +1,28 @@
package org.videolan.vlc.gui.tv.dialogs
import android.os.Bundle
import androidx.leanback.app.GuidedStepSupportFragment
import org.videolan.vlc.gui.tv.browser.BaseTvActivity
class ConfirmationTvActivity : BaseTvActivity() {
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null) {
val title = intent.getStringExtra(CONFIRMATION_DIALOG_TITLE)
val text = intent.getStringExtra(CONFIRMATION_DIALOG_TEXT)
val fragment = ConfirmationTvDialog.newInstance(title, text)
GuidedStepSupportFragment.addAsRoot(this, fragment, android.R.id.content)
}
}
companion object {
const val CONFIRMATION_DIALOG_TITLE = "confirmation_dialog_title"
const val CONFIRMATION_DIALOG_TEXT = "confirmation_dialog_text"
const val ACTION_ID_POSITIVE = 1
const val ACTION_ID_NEGATIVE = ACTION_ID_POSITIVE + 1
}
override fun refresh() {}
}

49
vlc-android/src/org/videolan/vlc/gui/tv/dialogs/ConfirmationTvDialog.kt

@ -0,0 +1,49 @@
package org.videolan.vlc.gui.tv.dialogs
import android.os.Bundle
import androidx.leanback.app.GuidedStepSupportFragment
import androidx.leanback.widget.GuidanceStylist
import androidx.leanback.widget.GuidedAction
import org.videolan.vlc.R
import org.videolan.vlc.gui.tv.dialogs.ConfirmationTvActivity.Companion.ACTION_ID_NEGATIVE
import org.videolan.vlc.gui.tv.dialogs.ConfirmationTvActivity.Companion.ACTION_ID_POSITIVE
import org.videolan.vlc.gui.tv.dialogs.ConfirmationTvActivity.Companion.CONFIRMATION_DIALOG_TEXT
import org.videolan.vlc.gui.tv.dialogs.ConfirmationTvActivity.Companion.CONFIRMATION_DIALOG_TITLE
class ConfirmationTvDialog : GuidedStepSupportFragment() {
override fun onCreateGuidance(savedInstanceState: Bundle?): GuidanceStylist.Guidance {
return GuidanceStylist.Guidance(arguments!!.getString(CONFIRMATION_DIALOG_TITLE),
arguments!!.getString(CONFIRMATION_DIALOG_TEXT),
"", null)
}
override fun onCreateActions(actions: MutableList<GuidedAction>, savedInstanceState: Bundle?) {
var action = GuidedAction.Builder(requireActivity())
.id(ACTION_ID_POSITIVE.toLong())
.title(getString(R.string.yes)).build()
actions.add(action)
action = GuidedAction.Builder(requireActivity())
.id(ACTION_ID_NEGATIVE.toLong())
.title(getString(R.string.no)).build()
actions.add(action)
}
override fun onGuidedActionClicked(action: GuidedAction?) {
if (ACTION_ID_POSITIVE.toLong() == action!!.id) {
requireActivity().setResult(ACTION_ID_POSITIVE)
} else {
requireActivity().setResult(ACTION_ID_NEGATIVE)
}
requireActivity().finish()
}
companion object {
fun newInstance(title: String, text: String): ConfirmationTvDialog = ConfirmationTvDialog().also {
val args = Bundle()
args.putString(CONFIRMATION_DIALOG_TITLE, title)
args.putString(CONFIRMATION_DIALOG_TEXT, text)
it.arguments = args
}
}
}
Loading…
Cancel
Save