From 7bdcf9e3bd347948dadd38d5c313d734a3440b45 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sun, 6 Nov 2022 12:53:41 +0100 Subject: [PATCH] add a share button --- .../java/com/github/libretube/extensions/ToID.kt | 3 +-- .../main/java/com/github/libretube/obj/ShareData.kt | 7 ++++--- .../github/libretube/ui/adapters/PlaylistAdapter.kt | 3 ++- .../com/github/libretube/ui/dialogs/ShareDialog.kt | 9 ++++----- .../github/libretube/ui/fragments/PlayerFragment.kt | 4 ++-- .../libretube/ui/fragments/PlaylistFragment.kt | 13 ++++++++++++- app/src/main/res/drawable/ic_share_outlined.xml | 12 ++++++++++++ app/src/main/res/layout/dialog_share.xml | 4 ++-- app/src/main/res/layout/fragment_playlist.xml | 6 +++--- app/src/main/res/values/strings.xml | 1 - 10 files changed, 42 insertions(+), 20 deletions(-) create mode 100644 app/src/main/res/drawable/ic_share_outlined.xml diff --git a/app/src/main/java/com/github/libretube/extensions/ToID.kt b/app/src/main/java/com/github/libretube/extensions/ToID.kt index df7b284e0..b3439cb72 100644 --- a/app/src/main/java/com/github/libretube/extensions/ToID.kt +++ b/app/src/main/java/com/github/libretube/extensions/ToID.kt @@ -3,9 +3,8 @@ package com.github.libretube.extensions /** * format a Piped route to an ID */ -fun Any.toID(): String { +fun String.toID(): String { return this - .toString() .replace("/watch?v=", "") // videos .replace("/channel/", "") // channels .replace("/playlist?list=", "") // playlists diff --git a/app/src/main/java/com/github/libretube/obj/ShareData.kt b/app/src/main/java/com/github/libretube/obj/ShareData.kt index 8ad00bb5a..532558af0 100644 --- a/app/src/main/java/com/github/libretube/obj/ShareData.kt +++ b/app/src/main/java/com/github/libretube/obj/ShareData.kt @@ -1,7 +1,8 @@ package com.github.libretube.obj data class ShareData( - val currentChannel: String ? = null, - val currentVideo: String ? = null, - val currentPlaylist: String ? = null + val currentChannel: String? = null, + val currentVideo: String? = null, + val currentPlaylist: String? = null, + var currentPosition: Long? = null ) diff --git a/app/src/main/java/com/github/libretube/ui/adapters/PlaylistAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/PlaylistAdapter.kt index 5f498bfdb..bdba61772 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/PlaylistAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/PlaylistAdapter.kt @@ -9,6 +9,7 @@ import android.view.ViewGroup import androidx.fragment.app.FragmentManager import androidx.recyclerview.widget.RecyclerView import com.github.libretube.api.RetrofitInstance +import com.github.libretube.api.obj.PlaylistId import com.github.libretube.databinding.PlaylistRowBinding import com.github.libretube.extensions.TAG import com.github.libretube.extensions.setFormattedDuration @@ -86,7 +87,7 @@ class PlaylistAdapter( try { RetrofitInstance.authApi.removeFromPlaylist( PreferenceHelper.getToken(), - com.github.libretube.api.obj.PlaylistId( + PlaylistId( playlistId = playlistId, index = position ) diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/ShareDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/ShareDialog.kt index bb686a45f..1e42c2689 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/ShareDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/ShareDialog.kt @@ -20,8 +20,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder class ShareDialog( private val id: String, private val shareObjectType: ShareObjectType, - private val shareData: ShareData, - private val position: Long? = null + private val shareData: ShareData ) : DialogFragment() { private var binding: DialogShareBinding? = null @@ -35,7 +34,7 @@ class ShareDialog( // add instanceUrl option if custom instance frontend url available if (instanceUrl != "") shareOptions += getString(R.string.instance) - if (shareObjectType == ShareObjectType.VIDEO && position != null) { + if (shareObjectType == ShareObjectType.VIDEO) { setupTimeStampBinding() } @@ -57,7 +56,7 @@ class ShareDialog( } var url = "$host$path" - if (shareObjectType == ShareObjectType.VIDEO && position != null && binding!!.timeCodeSwitch.isChecked) { + if (shareObjectType == ShareObjectType.VIDEO && binding!!.timeCodeSwitch.isChecked) { url += "&t=${binding!!.timeStamp.text}" } @@ -85,7 +84,7 @@ class ShareDialog( binding!!.timeCodeSwitch.setOnCheckedChangeListener { _, isChecked -> binding!!.timeStampLayout.visibility = if (isChecked) View.VISIBLE else View.GONE } - binding!!.timeStamp.setText(position.toString()) + binding!!.timeStamp.setText((shareData.currentPosition ?: 0L).toString()) if (binding!!.timeCodeSwitch.isChecked) binding!!.timeStampLayout.visibility = View.VISIBLE } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index 3e8c61ec1..6daac4b26 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -363,12 +363,12 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { // share button binding.relPlayerShare.setOnClickListener { + shareData.currentPosition = exoPlayer.currentPosition / 1000 val shareDialog = ShareDialog( videoId!!, ShareObjectType.VIDEO, - shareData, - exoPlayer.currentPosition / 1000 + shareData ) shareDialog.show(childFragmentManager, ShareDialog::class.java.name) } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt index 580698e6a..b4544288a 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt @@ -14,10 +14,13 @@ import com.github.libretube.R import com.github.libretube.api.RetrofitInstance import com.github.libretube.constants.IntentData import com.github.libretube.databinding.FragmentPlaylistBinding +import com.github.libretube.enums.ShareObjectType import com.github.libretube.extensions.TAG import com.github.libretube.extensions.toID +import com.github.libretube.obj.ShareData import com.github.libretube.ui.adapters.PlaylistAdapter import com.github.libretube.ui.base.BaseFragment +import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet import com.github.libretube.util.ImageHelper import com.github.libretube.util.NavigationHelper @@ -99,11 +102,19 @@ class PlaylistFragment : BaseFragment() { binding.playAll.setOnClickListener { NavigationHelper.navigateVideo( requireContext(), - response.relatedStreams?.first()?.toID(), + response.relatedStreams?.first()?.url?.toID(), playlistId ) } + binding.share.setOnClickListener { + ShareDialog( + playlistId!!, + ShareObjectType.PLAYLIST, + ShareData(currentPlaylist = response.name) + ).show(childFragmentManager, null) + } + playlistAdapter = PlaylistAdapter( response.relatedStreams.orEmpty().toMutableList(), playlistId!!, diff --git a/app/src/main/res/drawable/ic_share_outlined.xml b/app/src/main/res/drawable/ic_share_outlined.xml new file mode 100644 index 000000000..8a0cf890a --- /dev/null +++ b/app/src/main/res/drawable/ic_share_outlined.xml @@ -0,0 +1,12 @@ + + + diff --git a/app/src/main/res/layout/dialog_share.xml b/app/src/main/res/layout/dialog_share.xml index 371a4c138..436338da9 100644 --- a/app/src/main/res/layout/dialog_share.xml +++ b/app/src/main/res/layout/dialog_share.xml @@ -3,7 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical"> + android:orientation="vertical" + android:paddingBottom="25dp"> diff --git a/app/src/main/res/layout/fragment_playlist.xml b/app/src/main/res/layout/fragment_playlist.xml index c3a7894e7..3f9ed8024 100644 --- a/app/src/main/res/layout/fragment_playlist.xml +++ b/app/src/main/res/layout/fragment_playlist.xml @@ -85,14 +85,14 @@ app:icon="@drawable/ic_playlist" /> + android:text="@string/share" + app:icon="@drawable/ic_share_outlined" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7573c7e9e..fe3fb8831 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -359,7 +359,6 @@ Are you sure you want to unsubscribe %1$s? Confirm unsubscribing Show a confirmation dialog before unsubscribing. - Shuffle Play all