Merge pull request #1168 from Bnyro/master

Toggle for sharing with time code
This commit is contained in:
Bnyro 2022-08-26 09:38:18 +02:00 committed by GitHub
commit 3afdb9feaf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 250 additions and 227 deletions

View File

@ -29,21 +29,17 @@ class AddToPlaylistDialog : DialogFragment() {
private lateinit var token: String private lateinit var token: String
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
videoId = arguments?.getString("videoId")!! videoId = arguments?.getString("videoId")!!
val builder = MaterialAlertDialogBuilder(it)
// Get the layout inflater
binding = DialogAddtoplaylistBinding.inflate(layoutInflater) binding = DialogAddtoplaylistBinding.inflate(layoutInflater)
binding.title.text = ThemeHelper.getStyledAppName(requireContext())
token = PreferenceHelper.getToken() token = PreferenceHelper.getToken()
if (token != "") fetchPlaylists() if (token != "") fetchPlaylists()
binding.title.text = ThemeHelper.getStyledAppName(requireContext()) return MaterialAlertDialogBuilder(requireContext())
.setView(binding.root)
builder.setView(binding.root) .show()
builder.create()
} ?: throw IllegalStateException("Activity cannot be null")
} }
private fun fetchPlaylists() { private fun fetchPlaylists() {

View File

@ -23,8 +23,6 @@ class CreatePlaylistDialog : DialogFragment() {
private lateinit var binding: DialogCreatePlaylistBinding private lateinit var binding: DialogCreatePlaylistBinding
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = MaterialAlertDialogBuilder(it)
binding = DialogCreatePlaylistBinding.inflate(layoutInflater) binding = DialogCreatePlaylistBinding.inflate(layoutInflater)
binding.title.text = ThemeHelper.getStyledAppName(requireContext()) binding.title.text = ThemeHelper.getStyledAppName(requireContext())
@ -46,9 +44,9 @@ class CreatePlaylistDialog : DialogFragment() {
} }
} }
builder.setView(binding.root) return MaterialAlertDialogBuilder(requireContext())
builder.create() .setView(binding.root)
} ?: throw IllegalStateException("Activity cannot be null") .show()
} }
private fun createPlaylist(name: String) { private fun createPlaylist(name: String) {

View File

@ -16,8 +16,6 @@ class CustomInstanceDialog : DialogFragment() {
private lateinit var binding: DialogCustomInstanceBinding private lateinit var binding: DialogCustomInstanceBinding
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = MaterialAlertDialogBuilder(it)
binding = DialogCustomInstanceBinding.inflate(layoutInflater) binding = DialogCustomInstanceBinding.inflate(layoutInflater)
binding.cancel.setOnClickListener { binding.cancel.setOnClickListener {
@ -67,8 +65,8 @@ class CustomInstanceDialog : DialogFragment() {
binding.title.text = ThemeHelper.getStyledAppName(requireContext()) binding.title.text = ThemeHelper.getStyledAppName(requireContext())
builder.setView(binding.root) return MaterialAlertDialogBuilder(requireContext())
builder.create() .setView(binding.root)
} ?: throw IllegalStateException("Activity cannot be null") .show()
} }
} }

View File

@ -19,8 +19,6 @@ class DeleteAccountDialog : DialogFragment() {
private lateinit var binding: DialogDeleteAccountBinding private lateinit var binding: DialogDeleteAccountBinding
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = MaterialAlertDialogBuilder(it)
binding = DialogDeleteAccountBinding.inflate(layoutInflater) binding = DialogDeleteAccountBinding.inflate(layoutInflater)
binding.cancelButton.setOnClickListener { binding.cancelButton.setOnClickListener {
@ -37,9 +35,9 @@ class DeleteAccountDialog : DialogFragment() {
binding.title.text = ThemeHelper.getStyledAppName(requireContext()) binding.title.text = ThemeHelper.getStyledAppName(requireContext())
builder.setView(binding.root) return MaterialAlertDialogBuilder(requireContext())
builder.create() .setView(binding.root)
} ?: throw IllegalStateException("Activity cannot be null") .show()
} }
private fun deleteAccount(password: String) { private fun deleteAccount(password: String) {

View File

@ -28,8 +28,6 @@ class DownloadDialog(
private lateinit var binding: DialogDownloadBinding private lateinit var binding: DialogDownloadBinding
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = MaterialAlertDialogBuilder(it)
binding = DialogDownloadBinding.inflate(layoutInflater) binding = DialogDownloadBinding.inflate(layoutInflater)
fetchAvailableSources() fetchAvailableSources()
@ -48,9 +46,9 @@ class DownloadDialog(
binding.videoSpinner.visibility = View.VISIBLE binding.videoSpinner.visibility = View.VISIBLE
} }
builder.setView(binding.root) return MaterialAlertDialogBuilder(requireContext())
builder.create() .setView(binding.root)
} ?: throw IllegalStateException("Activity cannot be null") .show()
} }
private fun fetchAvailableSources() { private fun fetchAvailableSources() {

View File

@ -21,9 +21,6 @@ class LoginDialog : DialogFragment() {
private lateinit var binding: DialogLoginBinding private lateinit var binding: DialogLoginBinding
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = MaterialAlertDialogBuilder(it)
// Get the layout inflater
binding = DialogLoginBinding.inflate(layoutInflater) binding = DialogLoginBinding.inflate(layoutInflater)
binding.login.setOnClickListener { binding.login.setOnClickListener {
@ -52,9 +49,9 @@ class LoginDialog : DialogFragment() {
binding.title.text = ThemeHelper.getStyledAppName(requireContext()) binding.title.text = ThemeHelper.getStyledAppName(requireContext())
builder.setView(binding.root) return MaterialAlertDialogBuilder(requireContext())
builder.create() .setView(binding.root)
} ?: throw IllegalStateException("Activity cannot be null") .show()
} }
private fun login(login: Login) { private fun login(login: Login) {

View File

@ -14,8 +14,6 @@ class LogoutDialog : DialogFragment() {
private lateinit var binding: DialogLogoutBinding private lateinit var binding: DialogLogoutBinding
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
val builder = MaterialAlertDialogBuilder(it)
binding = DialogLogoutBinding.inflate(layoutInflater) binding = DialogLogoutBinding.inflate(layoutInflater)
val user = PreferenceHelper.getUsername() val user = PreferenceHelper.getUsername()
@ -31,8 +29,8 @@ class LogoutDialog : DialogFragment() {
binding.title.text = ThemeHelper.getStyledAppName(requireContext()) binding.title.text = ThemeHelper.getStyledAppName(requireContext())
builder.setView(binding.root) return MaterialAlertDialogBuilder(requireContext())
builder.create() .setView(binding.root)
} ?: throw IllegalStateException("Activity cannot be null") .show()
} }
} }

View File

@ -10,8 +10,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
class RequireRestartDialog : DialogFragment() { class RequireRestartDialog : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let { return MaterialAlertDialogBuilder(requireContext())
MaterialAlertDialogBuilder(requireContext())
.setTitle(R.string.require_restart) .setTitle(R.string.require_restart)
.setMessage(R.string.require_restart_message) .setMessage(R.string.require_restart_message)
.setPositiveButton(R.string.okay) { _, _ -> .setPositiveButton(R.string.okay) { _, _ ->
@ -19,7 +18,6 @@ class RequireRestartDialog : DialogFragment() {
ThemeHelper.restartMainActivity(requireContext()) ThemeHelper.restartMainActivity(requireContext())
} }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.create() .show()
} ?: throw IllegalStateException("Activity cannot be null")
} }
} }

View File

@ -7,6 +7,7 @@ import androidx.fragment.app.DialogFragment
import com.github.libretube.PIPED_FRONTEND_URL import com.github.libretube.PIPED_FRONTEND_URL
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.YOUTUBE_FRONTEND_URL import com.github.libretube.YOUTUBE_FRONTEND_URL
import com.github.libretube.databinding.DialogShareBinding
import com.github.libretube.db.DatabaseHolder import com.github.libretube.db.DatabaseHolder
import com.github.libretube.db.obj.CustomInstance import com.github.libretube.db.obj.CustomInstance
import com.github.libretube.extensions.await import com.github.libretube.extensions.await
@ -17,11 +18,11 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
class ShareDialog( class ShareDialog(
private val id: String, private val id: String,
private val isPlaylist: Boolean, private val isPlaylist: Boolean,
private val position: Long = 0L private val position: Long? = null
) : DialogFragment() { ) : DialogFragment() {
private var binding: DialogShareBinding? = null
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let {
var shareOptions = arrayOf( var shareOptions = arrayOf(
getString(R.string.piped), getString(R.string.piped),
getString(R.string.youtube) getString(R.string.youtube)
@ -31,7 +32,15 @@ class ShareDialog(
// add instanceUrl option if custom instance frontend url available // add instanceUrl option if custom instance frontend url available
if (instanceUrl != "") shareOptions += getString(R.string.instance) if (instanceUrl != "") shareOptions += getString(R.string.instance)
MaterialAlertDialogBuilder(requireContext()) if (position != null) {
binding = DialogShareBinding.inflate(layoutInflater)
binding!!.timeCodeSwitch.isChecked = PreferenceHelper.getBoolean(
PreferenceKeys.SHARE_WITH_TIME_CODE,
true
)
}
return MaterialAlertDialogBuilder(requireContext())
.setTitle(context?.getString(R.string.share)) .setTitle(context?.getString(R.string.share))
.setItems( .setItems(
shareOptions shareOptions
@ -44,11 +53,8 @@ class ShareDialog(
} }
val path = if (!isPlaylist) "/watch?v=$id" else "/playlist?list=$id" val path = if (!isPlaylist) "/watch?v=$id" else "/playlist?list=$id"
var url = "$host$path" var url = "$host$path"
if (PreferenceHelper.getBoolean(
PreferenceKeys.SHARE_WITH_TIME_CODE, if (binding != null && binding!!.timeCodeSwitch.isChecked) {
true
)
) {
url += "?t=$position" url += "?t=$position"
} }
@ -62,8 +68,8 @@ class ShareDialog(
Intent.createChooser(intent, context?.getString(R.string.shareTo)) Intent.createChooser(intent, context?.getString(R.string.shareTo))
) )
} }
.setView(binding?.root)
.show() .show()
} ?: throw IllegalStateException("Activity cannot be null")
} }
// get the frontend url if it's a custom instance // get the frontend url if it's a custom instance

View File

@ -18,8 +18,7 @@ class UpdateDialog(
) : DialogFragment() { ) : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return activity?.let { return MaterialAlertDialogBuilder(requireContext())
MaterialAlertDialogBuilder(requireContext())
.setTitle(context?.getString(R.string.update_available, updateInfo.name)) .setTitle(context?.getString(R.string.update_available, updateInfo.name))
.setMessage(context?.getString(R.string.update_now)) .setMessage(context?.getString(R.string.update_now))
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
@ -37,8 +36,7 @@ class UpdateDialog(
startActivity(intent) startActivity(intent)
} }
} }
.create() .show()
} ?: throw IllegalStateException("Activity cannot be null")
} }
private fun getDownloadUrl(updateInfo: UpdateInfo): String? { private fun getDownloadUrl(updateInfo: UpdateInfo): String? {

View File

@ -37,6 +37,13 @@ class VideoOptionsDialog(
context?.getString(R.string.share) context?.getString(R.string.share)
) )
// remove the add to playlist option if not logged in
if (PreferenceHelper.getToken() == "") {
optionsList.remove(
context?.getString(R.string.addToPlaylist)
)
}
/** /**
* Check whether the player is running by observing the notification * Check whether the player is running by observing the notification
*/ */

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="25dp"
android:layout_marginBottom="15dp"
android:orientation="horizontal"
tools:ignore="UselessParent">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/share_with_time" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/timeCodeSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</LinearLayout>
</FrameLayout>

View File

@ -283,7 +283,7 @@
<string name="error_occurred">Error</string> <string name="error_occurred">Error</string>
<string name="copied">Copied</string> <string name="copied">Copied</string>
<string name="downloadsucceeded">Download succeeded</string> <string name="downloadsucceeded">Download succeeded</string>
<string name="share_with_time">Share with start time</string> <string name="share_with_time">Share with time code</string>
<string name="export_subscriptions">Export Subscriptions</string> <string name="export_subscriptions">Export Subscriptions</string>
<string name="skip_buttons">Skip buttons</string> <string name="skip_buttons">Skip buttons</string>
<string name="skip_buttons_summary">Show buttons to skip to the next or previous video.</string> <string name="skip_buttons_summary">Show buttons to skip to the next or previous video.</string>