From 6578921fe3dd84305ecd92544ed8a6323c4f5f59 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 5 Nov 2022 17:41:00 +0100 Subject: [PATCH 1/2] clone feedback toast --- .../java/com/github/libretube/api/PipedApi.kt | 2 +- .../extensions/ToastFromMainThread.kt | 16 ++++++++++++++ .../ui/dialogs/AddToPlaylistDialog.kt | 21 ++++--------------- .../ui/sheets/PlaylistOptionsBottomSheet.kt | 6 +++--- app/src/main/res/values/strings.xml | 1 + 5 files changed, 25 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/com/github/libretube/extensions/ToastFromMainThread.kt diff --git a/app/src/main/java/com/github/libretube/api/PipedApi.kt b/app/src/main/java/com/github/libretube/api/PipedApi.kt index f182fcae6..03c1b8aa7 100644 --- a/app/src/main/java/com/github/libretube/api/PipedApi.kt +++ b/app/src/main/java/com/github/libretube/api/PipedApi.kt @@ -141,7 +141,7 @@ interface PipedApi { suspend fun importPlaylist( @Header("Authorization") token: String, @Body playlistId: PlaylistId - ): Message + ): PlaylistId @GET("user/playlists") suspend fun playlists(@Header("Authorization") token: String): List diff --git a/app/src/main/java/com/github/libretube/extensions/ToastFromMainThread.kt b/app/src/main/java/com/github/libretube/extensions/ToastFromMainThread.kt new file mode 100644 index 000000000..9bad80911 --- /dev/null +++ b/app/src/main/java/com/github/libretube/extensions/ToastFromMainThread.kt @@ -0,0 +1,16 @@ +package com.github.libretube.extensions + +import android.content.Context +import android.os.Handler +import android.os.Looper +import android.widget.Toast + +fun Context.toastFromMainThread(stringId: Int) { + Handler(Looper.getMainLooper()).post { + Toast.makeText( + this, + stringId, + Toast.LENGTH_SHORT + ).show() + } +} diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt index 38d7269c4..d5dbb27ae 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/AddToPlaylistDialog.kt @@ -1,10 +1,7 @@ package com.github.libretube.ui.dialogs import android.app.Dialog -import android.content.Context import android.os.Bundle -import android.os.Handler -import android.os.Looper import android.util.Log import android.widget.ArrayAdapter import android.widget.Toast @@ -18,6 +15,7 @@ import com.github.libretube.api.obj.PlaylistId import com.github.libretube.constants.IntentData import com.github.libretube.databinding.DialogAddtoplaylistBinding import com.github.libretube.extensions.TAG +import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.models.PlaylistViewModel import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.ThemeHelper @@ -104,30 +102,19 @@ class AddToPlaylistDialog : DialogFragment() { } catch (e: IOException) { println(e) Log.e(TAG(), "IOException, you might not have internet connection") - toastFromMainThread(appContext, R.string.unknown_error) + appContext.toastFromMainThread(R.string.unknown_error) return@launch } catch (e: HttpException) { Log.e(TAG(), "HttpException, unexpected response") - toastFromMainThread(appContext, R.string.server_error) + appContext.toastFromMainThread(R.string.server_error) return@launch } - toastFromMainThread( - appContext, + appContext.toastFromMainThread( if (response.message == "ok") R.string.added_to_playlist else R.string.fail ) } } - private fun toastFromMainThread(context: Context, stringId: Int) { - Handler(Looper.getMainLooper()).post { - Toast.makeText( - context, - stringId, - Toast.LENGTH_SHORT - ).show() - } - } - private fun Fragment?.runOnUiThread(action: () -> Unit) { this ?: return if (!isAdded) return // Fragment not attached to an Activity diff --git a/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt index fc95e5df2..06344bd02 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/PlaylistOptionsBottomSheet.kt @@ -2,15 +2,14 @@ package com.github.libretube.ui.sheets import android.os.Bundle import android.text.InputType -import android.util.Log import android.widget.Toast import com.github.libretube.R import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.obj.PlaylistId import com.github.libretube.constants.ShareObjectType import com.github.libretube.databinding.DialogTextPreferenceBinding -import com.github.libretube.extensions.TAG import com.github.libretube.extensions.toID +import com.github.libretube.extensions.toastFromMainThread import com.github.libretube.obj.ShareData import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.util.BackgroundHelper @@ -114,6 +113,7 @@ class PlaylistOptionsBottomSheet( } private fun importPlaylist(token: String, playlistId: String) { + val appContext = context?.applicationContext CoroutineScope(Dispatchers.IO).launch { val response = try { RetrofitInstance.authApi.importPlaylist( @@ -126,7 +126,7 @@ class PlaylistOptionsBottomSheet( } catch (e: HttpException) { return@launch } - Log.e(TAG(), response.toString()) + appContext?.toastFromMainThread(if (response.playlistId != null) R.string.playlistCloned else R.string.server_error) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5811cc8d4..fd274b7cd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -355,6 +355,7 @@ Livestreams Alternative videos layout Default light + Playlist cloned Download Service From 51bdc79d34f0b4133ff9c64c5208ef9773c28b21 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 5 Nov 2022 18:02:42 +0100 Subject: [PATCH 2/2] chapter timestamps --- .../libretube/ui/adapters/ChaptersAdapter.kt | 13 ++++--- .../libretube/ui/fragments/PlayerFragment.kt | 5 +-- app/src/main/res/layout/chapter_column.xml | 38 ++++++++++++++++--- 3 files changed, 41 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/adapters/ChaptersAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/ChaptersAdapter.kt index b0c65a972..16caf2ecc 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/ChaptersAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/ChaptersAdapter.kt @@ -1,6 +1,7 @@ package com.github.libretube.ui.adapters import android.graphics.Color +import android.text.format.DateUtils import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView @@ -27,15 +28,15 @@ class ChaptersAdapter( holder.binding.apply { ImageHelper.loadImage(chapter.image, chapterImage) chapterTitle.text = chapter.title + timeStamp.text = chapter.start?.let { DateUtils.formatElapsedTime(it) } - if (selectedPosition == position) { - // get the color for highlighted controls - val color = - ThemeHelper.getThemeColor(root.context, android.R.attr.colorControlHighlight) - chapterLL.setBackgroundColor(color) + val color = if (selectedPosition == position) { + ThemeHelper.getThemeColor(root.context, android.R.attr.colorControlHighlight) } else { - chapterLL.setBackgroundColor(Color.TRANSPARENT) + Color.TRANSPARENT } + chapterLL.setBackgroundColor(color) + root.setOnClickListener { updateSelectedPosition(position) val chapterStart = chapter.start!! * 1000 // s -> ms 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 fd71d1b38..411150682 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 @@ -991,10 +991,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions { binding.chaptersRecView.adapter = ChaptersAdapter(chapters, exoPlayer) // enable the chapters dialog in the player - val titles = mutableListOf() - chapters.forEach { - titles += it.title!! - } + val titles = chapters.map { "${it.title} (${it.start?.let { DateUtils.formatElapsedTime(it) }})" } playerBinding.chapterLL.setOnClickListener { if (viewModel.isFullscreen.value!!) { MaterialAlertDialogBuilder(requireContext()) diff --git a/app/src/main/res/layout/chapter_column.xml b/app/src/main/res/layout/chapter_column.xml index 243941ae7..220f7990e 100644 --- a/app/src/main/res/layout/chapter_column.xml +++ b/app/src/main/res/layout/chapter_column.xml @@ -15,12 +15,40 @@ android:orientation="vertical" android:paddingHorizontal="5dp"> - + android:layout_height="55dp"> + + + + + + + + + +