From 38859c43f6ba009f8a0cca103855778bcb849a14 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Tue, 31 Jan 2023 17:34:40 +0100 Subject: [PATCH 1/3] [Audio player] Swipe listener --- .../ui/fragments/AudioPlayerFragment.kt | 40 ++++++--- .../ui/interfaces/AudioPlayerOptions.kt | 10 +++ .../listeners/AudioPlayerThumbnailListener.kt | 83 +++++++++++++++++++ .../libretube/ui/views/CustomExoPlayerView.kt | 4 +- 4 files changed, 125 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/github/libretube/ui/interfaces/AudioPlayerOptions.kt create mode 100644 app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt diff --git a/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt index 93a6a39b9..375308c6c 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt @@ -1,5 +1,6 @@ package com.github.libretube.ui.fragments +import android.annotation.SuppressLint import android.content.ComponentName import android.content.Context import android.content.Intent @@ -9,6 +10,7 @@ import android.os.Handler import android.os.IBinder import android.os.Looper import android.text.format.DateUtils +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -18,21 +20,26 @@ import com.github.libretube.api.obj.StreamItem import com.github.libretube.databinding.FragmentAudioPlayerBinding import com.github.libretube.enums.ShareObjectType import com.github.libretube.extensions.toID +import com.github.libretube.helpers.AudioHelper +import com.github.libretube.helpers.BackgroundHelper +import com.github.libretube.helpers.ImageHelper +import com.github.libretube.helpers.NavigationHelper import com.github.libretube.obj.ShareData import com.github.libretube.services.BackgroundMode import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.dialogs.ShareDialog +import com.github.libretube.ui.interfaces.AudioPlayerOptions +import com.github.libretube.ui.listeners.AudioPlayerThumbnailListener import com.github.libretube.ui.sheets.PlaybackOptionsSheet import com.github.libretube.ui.sheets.PlayingQueueSheet import com.github.libretube.ui.sheets.VideoOptionsBottomSheet -import com.github.libretube.helpers.BackgroundHelper -import com.github.libretube.helpers.ImageHelper -import com.github.libretube.helpers.NavigationHelper import com.github.libretube.util.PlayingQueue -class AudioPlayerFragment : BaseFragment() { +class AudioPlayerFragment : BaseFragment(), AudioPlayerOptions { private lateinit var binding: FragmentAudioPlayerBinding + private lateinit var audioHelper: AudioHelper + private val onTrackChangeListener: (StreamItem) -> Unit = { updateStreamInfo() } @@ -64,6 +71,7 @@ class AudioPlayerFragment : BaseFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + audioHelper = AudioHelper(requireContext()) Intent(activity, BackgroundMode::class.java).also { intent -> activity?.bindService(intent, connection, Context.BIND_AUTO_CREATE) } @@ -78,6 +86,7 @@ class AudioPlayerFragment : BaseFragment() { return binding.root } + @SuppressLint("ClickableViewAccessibility") override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -129,13 +138,8 @@ class AudioPlayerFragment : BaseFragment() { ).show(childFragmentManager, null) } - binding.thumbnail.setOnClickListener { - val current = PlayingQueue.getCurrent() - current?.let { - VideoOptionsBottomSheet(it.url!!.toID(), it.title!!) - .show(childFragmentManager) - } - } + val listener = AudioPlayerThumbnailListener(binding.thumbnail, this) + binding.thumbnail.setOnTouchListener(listener) // Listen for track changes due to autoplay or the notification PlayingQueue.addOnTrackChangedListener(onTrackChangeListener) @@ -232,4 +236,18 @@ class AudioPlayerFragment : BaseFragment() { super.onDestroy() } + + override fun onSingleTap() { + val current = PlayingQueue.getCurrent() + VideoOptionsBottomSheet(current?.url?.toID() ?: return, current.title ?: return) + .show(childFragmentManager) + } + + override fun onSwipe(distanceY: Float) { + Log.e("swiping", distanceY.toString()) + } + + override fun onSwipeEnd() { + Log.e("ended", "ended") + } } diff --git a/app/src/main/java/com/github/libretube/ui/interfaces/AudioPlayerOptions.kt b/app/src/main/java/com/github/libretube/ui/interfaces/AudioPlayerOptions.kt new file mode 100644 index 000000000..eddb6387b --- /dev/null +++ b/app/src/main/java/com/github/libretube/ui/interfaces/AudioPlayerOptions.kt @@ -0,0 +1,10 @@ +package com.github.libretube.ui.interfaces + +interface AudioPlayerOptions { + + fun onSingleTap() + + fun onSwipe(distanceY: Float) + + fun onSwipeEnd() +} diff --git a/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt b/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt new file mode 100644 index 000000000..ba82efdfc --- /dev/null +++ b/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt @@ -0,0 +1,83 @@ +package com.github.libretube.ui.listeners + +import android.annotation.SuppressLint +import android.os.Handler +import android.os.Looper +import android.view.GestureDetector +import android.view.MotionEvent +import android.view.View +import androidx.core.os.postDelayed +import com.github.libretube.ui.interfaces.AudioPlayerOptions +import kotlin.math.abs + +class AudioPlayerThumbnailListener(private val view: View, private val listener: AudioPlayerOptions) : + View.OnTouchListener { + + private val width get() = view.width + private val height get() = view.height + + private val handler = Handler(Looper.getMainLooper()) + + private val gestureDetector: GestureDetector + + private var isMoving = false + + var wasClick = true + + init { + gestureDetector = GestureDetector(view.context, GestureListener(), handler) + } + + @SuppressLint("ClickableViewAccessibility") + override fun onTouch(v: View, event: MotionEvent): Boolean { + if (event.action == MotionEvent.ACTION_UP && isMoving) { + isMoving = false + listener.onSwipeEnd() + } + + runCatching { + gestureDetector.onTouchEvent(event) + } + + return true + } + + private inner class GestureListener : GestureDetector.SimpleOnGestureListener() { + + override fun onDown(e: MotionEvent): Boolean { + // Initially assume this event is for click + wasClick = true + if (isMoving) return false + + handler.postDelayed(100) { + if (wasClick) listener.onSingleTap() + } + + return true + } + + override fun onScroll( + e1: MotionEvent, + e2: MotionEvent, + distanceX: Float, + distanceY: Float + ): Boolean { + val insideThreshHold = abs(e2.y - e1.y) <= MOVEMENT_THRESHOLD + + // If the movement is inside threshold or scroll is horizontal then return false + if (!isMoving && (insideThreshHold || abs(distanceX) > abs(distanceY))) { + return false + } + + isMoving = true + wasClick = false + + listener.onSwipe(distanceY) + return true + } + } + + companion object { + private const val MOVEMENT_THRESHOLD = 10 + } +} diff --git a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt index 7b5d65c5a..f6681d921 100644 --- a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt +++ b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt @@ -196,7 +196,9 @@ internal class CustomExoPlayerView( } private fun cancelHideControllerTask() { - handler.removeCallbacksAndMessages(HIDE_CONTROLLER_TOKEN) + runCatching { + handler.removeCallbacksAndMessages(HIDE_CONTROLLER_TOKEN) + } } override fun hideController() { From 288067b044e2653db47f8a22a5be175cf7341e88 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Tue, 31 Jan 2023 17:57:24 +0100 Subject: [PATCH 2/3] [Audio Player] Volume controls --- .../java/com/github/libretube/LibreTubeApp.kt | 2 +- .../github/libretube/api/PlaylistsHelper.kt | 2 +- .../libretube/services/BackgroundMode.kt | 2 +- .../libretube/services/DownloadService.kt | 6 +-- .../libretube/ui/activities/MainActivity.kt | 12 +++--- .../ui/activities/NoInternetActivity.kt | 4 +- .../ui/activities/OfflinePlayerActivity.kt | 6 +-- .../libretube/ui/activities/RouterActivity.kt | 2 +- .../libretube/ui/adapters/ChaptersAdapter.kt | 2 +- .../libretube/ui/adapters/CommentsAdapter.kt | 6 +-- .../libretube/ui/adapters/DownloadsAdapter.kt | 2 +- .../ui/adapters/IconsSheetAdapter.kt | 2 +- .../ui/adapters/LegacySubscriptionAdapter.kt | 4 +- .../ui/adapters/PlayingQueueAdapter.kt | 4 +- .../libretube/ui/adapters/PlaylistAdapter.kt | 4 +- .../ui/adapters/PlaylistBookmarkAdapter.kt | 4 +- .../libretube/ui/adapters/PlaylistsAdapter.kt | 4 +- .../libretube/ui/adapters/SearchAdapter.kt | 4 +- .../ui/adapters/SubscriptionChannelAdapter.kt | 4 +- .../libretube/ui/adapters/VideosAdapter.kt | 6 +-- .../ui/adapters/WatchHistoryAdapter.kt | 4 +- .../ui/base/BasePreferenceFragment.kt | 2 +- .../libretube/ui/dialogs/BackupDialog.kt | 2 +- .../ui/dialogs/NavBarOptionsDialog.kt | 2 +- .../libretube/ui/dialogs/ShareDialog.kt | 2 +- .../ui/fragments/AudioPlayerFragment.kt | 39 +++++++++++++++++-- .../libretube/ui/fragments/ChannelFragment.kt | 2 +- .../ui/fragments/DownloadsFragment.kt | 2 +- .../libretube/ui/fragments/HomeFragment.kt | 2 +- .../libretube/ui/fragments/LibraryFragment.kt | 4 +- .../libretube/ui/fragments/PlayerFragment.kt | 16 ++++---- .../ui/fragments/PlaylistFragment.kt | 4 +- .../ui/fragments/SearchResultFragment.kt | 2 +- .../ui/fragments/SubscriptionsFragment.kt | 2 +- .../libretube/ui/fragments/TrendsFragment.kt | 2 +- .../ui/fragments/WatchHistoryFragment.kt | 4 +- .../listeners/AudioPlayerThumbnailListener.kt | 23 +++-------- .../ui/listeners/PlayerGestureController.kt | 2 +- .../ui/listeners/SeekbarPreviewListener.kt | 2 +- .../ui/preferences/AdvancedSettings.kt | 2 +- .../ui/preferences/AppearanceSettings.kt | 2 +- .../ui/preferences/BackupRestoreSettings.kt | 4 +- .../ui/preferences/GeneralSettings.kt | 4 +- .../ui/preferences/InstanceSettings.kt | 2 +- .../ui/preferences/NotificationSettings.kt | 2 +- .../ui/preferences/PlayerSettings.kt | 2 +- .../ui/sheets/ChannelOptionsBottomSheet.kt | 4 +- .../ui/sheets/PlaylistOptionsBottomSheet.kt | 2 +- .../ui/sheets/VideoOptionsBottomSheet.kt | 2 +- .../github/libretube/ui/tools/SleepTimer.kt | 2 +- .../libretube/ui/views/CustomExoPlayerView.kt | 8 ++-- .../libretube/workers/NotificationWorker.kt | 2 +- .../main/res/layout/fragment_audio_player.xml | 35 +++++++++++++++++ 53 files changed, 164 insertions(+), 109 deletions(-) diff --git a/app/src/main/java/com/github/libretube/LibreTubeApp.kt b/app/src/main/java/com/github/libretube/LibreTubeApp.kt index 48e06da95..282d1f6c1 100644 --- a/app/src/main/java/com/github/libretube/LibreTubeApp.kt +++ b/app/src/main/java/com/github/libretube/LibreTubeApp.kt @@ -12,12 +12,12 @@ import com.github.libretube.constants.BACKGROUND_CHANNEL_ID import com.github.libretube.constants.DOWNLOAD_CHANNEL_ID import com.github.libretube.constants.PUSH_CHANNEL_ID import com.github.libretube.db.DatabaseHolder -import com.github.libretube.util.ExceptionHandler import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.NotificationHelper import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.ProxyHelper import com.github.libretube.helpers.ShortcutHelper +import com.github.libretube.util.ExceptionHandler class LibreTubeApp : Application() { override fun onCreate() { diff --git a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt index f96a05282..1f01927fd 100644 --- a/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt +++ b/app/src/main/java/com/github/libretube/api/PlaylistsHelper.kt @@ -16,9 +16,9 @@ import com.github.libretube.extensions.toID import com.github.libretube.extensions.toLocalPlaylistItem import com.github.libretube.extensions.toStreamItem import com.github.libretube.extensions.toastFromMainThread -import com.github.libretube.obj.ImportPlaylist import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.ProxyHelper +import com.github.libretube.obj.ImportPlaylist import java.io.IOException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async diff --git a/app/src/main/java/com/github/libretube/services/BackgroundMode.kt b/app/src/main/java/com/github/libretube/services/BackgroundMode.kt index fd6fa630b..01541746a 100644 --- a/app/src/main/java/com/github/libretube/services/BackgroundMode.kt +++ b/app/src/main/java/com/github/libretube/services/BackgroundMode.kt @@ -29,9 +29,9 @@ import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.query import com.github.libretube.extensions.toID import com.github.libretube.extensions.toStreamItem -import com.github.libretube.util.NowPlayingNotification import com.github.libretube.helpers.PlayerHelper import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams +import com.github.libretube.util.NowPlayingNotification import com.github.libretube.util.PlayingQueue import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.MediaItem diff --git a/app/src/main/java/com/github/libretube/services/DownloadService.kt b/app/src/main/java/com/github/libretube/services/DownloadService.kt index 2fd5d8f07..8f04bf6a6 100644 --- a/app/src/main/java/com/github/libretube/services/DownloadService.kt +++ b/app/src/main/java/com/github/libretube/services/DownloadService.kt @@ -25,14 +25,14 @@ import com.github.libretube.extensions.getContentLength import com.github.libretube.extensions.query import com.github.libretube.extensions.toDownloadItems import com.github.libretube.extensions.toastFromMainThread +import com.github.libretube.helpers.DownloadHelper +import com.github.libretube.helpers.DownloadHelper.getNotificationId +import com.github.libretube.helpers.ImageHelper import com.github.libretube.obj.DownloadStatus import com.github.libretube.receivers.NotificationReceiver import com.github.libretube.receivers.NotificationReceiver.Companion.ACTION_DOWNLOAD_PAUSE import com.github.libretube.receivers.NotificationReceiver.Companion.ACTION_DOWNLOAD_RESUME import com.github.libretube.ui.activities.MainActivity -import com.github.libretube.helpers.DownloadHelper -import com.github.libretube.helpers.DownloadHelper.getNotificationId -import com.github.libretube.helpers.ImageHelper import java.io.File import java.net.HttpURLConnection import java.net.SocketTimeoutException diff --git a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt index 364742269..5c13ab6ca 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt @@ -27,6 +27,12 @@ import com.github.libretube.constants.IntentData import com.github.libretube.constants.PreferenceKeys import com.github.libretube.databinding.ActivityMainBinding import com.github.libretube.extensions.toID +import com.github.libretube.helpers.NavBarHelper +import com.github.libretube.helpers.NavigationHelper +import com.github.libretube.helpers.NetworkHelper +import com.github.libretube.helpers.PreferenceHelper +import com.github.libretube.helpers.ThemeHelper +import com.github.libretube.helpers.WindowHelper import com.github.libretube.services.ClosingService import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.dialogs.ErrorDialog @@ -36,12 +42,6 @@ import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.models.SearchViewModel import com.github.libretube.ui.models.SubscriptionsViewModel import com.github.libretube.ui.tools.SleepTimer -import com.github.libretube.helpers.NavBarHelper -import com.github.libretube.helpers.NavigationHelper -import com.github.libretube.helpers.NetworkHelper -import com.github.libretube.helpers.PreferenceHelper -import com.github.libretube.helpers.ThemeHelper -import com.github.libretube.helpers.WindowHelper import com.google.android.material.elevation.SurfaceColors class MainActivity : BaseActivity() { diff --git a/app/src/main/java/com/github/libretube/ui/activities/NoInternetActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/NoInternetActivity.kt index 06339f0fd..5b3ce4be1 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/NoInternetActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/NoInternetActivity.kt @@ -6,10 +6,10 @@ import androidx.activity.addCallback import androidx.fragment.app.commit import com.github.libretube.R import com.github.libretube.databinding.ActivityNointernetBinding -import com.github.libretube.ui.base.BaseActivity -import com.github.libretube.ui.fragments.DownloadsFragment import com.github.libretube.helpers.NavigationHelper import com.github.libretube.helpers.NetworkHelper +import com.github.libretube.ui.base.BaseActivity +import com.github.libretube.ui.fragments.DownloadsFragment import com.google.android.material.snackbar.Snackbar class NoInternetActivity : BaseActivity() { diff --git a/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt index 2d192ce6d..04367ea19 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt @@ -16,12 +16,12 @@ import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.enums.FileType import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.updateParameters -import com.github.libretube.ui.base.BaseActivity -import com.github.libretube.ui.extensions.setAspectRatio -import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.helpers.PlayerHelper import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams import com.github.libretube.helpers.WindowHelper +import com.github.libretube.ui.base.BaseActivity +import com.github.libretube.ui.extensions.setAspectRatio +import com.github.libretube.ui.models.PlayerViewModel import com.google.android.exoplayer2.C import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.MediaItem diff --git a/app/src/main/java/com/github/libretube/ui/activities/RouterActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/RouterActivity.kt index bae5a0ca8..a6d42a91f 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/RouterActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/RouterActivity.kt @@ -7,8 +7,8 @@ import android.os.Bundle import android.util.Log import com.github.libretube.constants.IntentData import com.github.libretube.extensions.TAG -import com.github.libretube.ui.base.BaseActivity import com.github.libretube.helpers.NavigationHelper +import com.github.libretube.ui.base.BaseActivity import com.github.libretube.util.TextUtils class RouterActivity : BaseActivity() { 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 a7b628c85..3dc32e5a2 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 @@ -7,9 +7,9 @@ import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.github.libretube.api.obj.ChapterSegment import com.github.libretube.databinding.ChapterColumnBinding -import com.github.libretube.ui.viewholders.ChaptersViewHolder import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.ThemeHelper +import com.github.libretube.ui.viewholders.ChaptersViewHolder import com.google.android.exoplayer2.ExoPlayer class ChaptersAdapter( diff --git a/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt index bb8ba390f..575bb82a0 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/CommentsAdapter.kt @@ -19,13 +19,13 @@ import com.github.libretube.api.obj.Comment import com.github.libretube.constants.IntentData import com.github.libretube.databinding.CommentsRowBinding import com.github.libretube.extensions.formatShort -import com.github.libretube.ui.fragments.CommentsRepliesFragment -import com.github.libretube.ui.viewholders.CommentsViewHolder import com.github.libretube.helpers.ClipboardHelper import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.NavigationHelper -import com.github.libretube.util.TextUtils import com.github.libretube.helpers.ThemeHelper +import com.github.libretube.ui.fragments.CommentsRepliesFragment +import com.github.libretube.ui.viewholders.CommentsViewHolder +import com.github.libretube.util.TextUtils class CommentsAdapter( private val fragment: Fragment?, diff --git a/app/src/main/java/com/github/libretube/ui/adapters/DownloadsAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/DownloadsAdapter.kt index 72b1cd834..df46893c3 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/DownloadsAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/DownloadsAdapter.kt @@ -14,9 +14,9 @@ import com.github.libretube.db.DatabaseHolder import com.github.libretube.db.obj.DownloadWithItems import com.github.libretube.extensions.formatAsFileSize import com.github.libretube.extensions.query +import com.github.libretube.helpers.ImageHelper import com.github.libretube.ui.activities.OfflinePlayerActivity import com.github.libretube.ui.viewholders.DownloadsViewHolder -import com.github.libretube.helpers.ImageHelper import com.google.android.material.dialog.MaterialAlertDialogBuilder import java.io.File diff --git a/app/src/main/java/com/github/libretube/ui/adapters/IconsSheetAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/IconsSheetAdapter.kt index 3d14cc083..00daa1f59 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/IconsSheetAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/IconsSheetAdapter.kt @@ -8,9 +8,9 @@ import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R import com.github.libretube.constants.PreferenceKeys import com.github.libretube.databinding.AppIconItemBinding -import com.github.libretube.ui.viewholders.IconsSheetViewHolder import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.helpers.ThemeHelper +import com.github.libretube.ui.viewholders.IconsSheetViewHolder class IconsSheetAdapter : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): IconsSheetViewHolder { diff --git a/app/src/main/java/com/github/libretube/ui/adapters/LegacySubscriptionAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/LegacySubscriptionAdapter.kt index da2242be9..f4ecf65f7 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/LegacySubscriptionAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/LegacySubscriptionAdapter.kt @@ -5,11 +5,11 @@ import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.github.libretube.databinding.LegacySubscriptionChannelBinding import com.github.libretube.extensions.toID +import com.github.libretube.helpers.ImageHelper +import com.github.libretube.helpers.NavigationHelper import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet import com.github.libretube.ui.viewholders.LegacySubscriptionViewHolder -import com.github.libretube.helpers.ImageHelper -import com.github.libretube.helpers.NavigationHelper class LegacySubscriptionAdapter( private val subscriptions: List diff --git a/app/src/main/java/com/github/libretube/ui/adapters/PlayingQueueAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/PlayingQueueAdapter.kt index 2a2bb18b3..dec3d6921 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/PlayingQueueAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/PlayingQueueAdapter.kt @@ -8,10 +8,10 @@ import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.github.libretube.databinding.QueueRowBinding import com.github.libretube.extensions.toID -import com.github.libretube.ui.viewholders.PlayingQueueViewHolder import com.github.libretube.helpers.ImageHelper -import com.github.libretube.util.PlayingQueue import com.github.libretube.helpers.ThemeHelper +import com.github.libretube.ui.viewholders.PlayingQueueViewHolder +import com.github.libretube.util.PlayingQueue class PlayingQueueAdapter : RecyclerView.Adapter() { 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 0285534a4..93d331783 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 @@ -13,13 +13,13 @@ import com.github.libretube.databinding.VideoRowBinding import com.github.libretube.enums.PlaylistType import com.github.libretube.extensions.TAG import com.github.libretube.extensions.toID +import com.github.libretube.helpers.ImageHelper +import com.github.libretube.helpers.NavigationHelper import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.extensions.setFormattedDuration import com.github.libretube.ui.extensions.setWatchProgressLength import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.viewholders.PlaylistViewHolder -import com.github.libretube.helpers.ImageHelper -import com.github.libretube.helpers.NavigationHelper import java.io.IOException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/github/libretube/ui/adapters/PlaylistBookmarkAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/PlaylistBookmarkAdapter.kt index a7fcef33c..d96cf9703 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/PlaylistBookmarkAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/PlaylistBookmarkAdapter.kt @@ -12,10 +12,10 @@ import com.github.libretube.db.DatabaseHolder import com.github.libretube.db.obj.PlaylistBookmark import com.github.libretube.enums.PlaylistType import com.github.libretube.extensions.query -import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet -import com.github.libretube.ui.viewholders.PlaylistBookmarkViewHolder import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.NavigationHelper +import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet +import com.github.libretube.ui.viewholders.PlaylistBookmarkViewHolder class PlaylistBookmarkAdapter( private val bookmarks: List, diff --git a/app/src/main/java/com/github/libretube/ui/adapters/PlaylistsAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/PlaylistsAdapter.kt index a3cf346cd..2a650a922 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/PlaylistsAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/PlaylistsAdapter.kt @@ -7,12 +7,12 @@ import com.github.libretube.R import com.github.libretube.api.obj.Playlists import com.github.libretube.databinding.PlaylistsRowBinding import com.github.libretube.enums.PlaylistType +import com.github.libretube.helpers.ImageHelper +import com.github.libretube.helpers.NavigationHelper import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.dialogs.DeletePlaylistDialog import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet import com.github.libretube.ui.viewholders.PlaylistsViewHolder -import com.github.libretube.helpers.ImageHelper -import com.github.libretube.helpers.NavigationHelper class PlaylistsAdapter( private val playlists: MutableList, diff --git a/app/src/main/java/com/github/libretube/ui/adapters/SearchAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/SearchAdapter.kt index eefc2683e..03c983b24 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/SearchAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/SearchAdapter.kt @@ -13,6 +13,8 @@ import com.github.libretube.databinding.VideoRowBinding import com.github.libretube.enums.PlaylistType import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.toID +import com.github.libretube.helpers.ImageHelper +import com.github.libretube.helpers.NavigationHelper import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.extensions.setFormattedDuration import com.github.libretube.ui.extensions.setWatchProgressLength @@ -21,8 +23,6 @@ import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.viewholders.SearchViewHolder -import com.github.libretube.helpers.ImageHelper -import com.github.libretube.helpers.NavigationHelper import com.github.libretube.util.TextUtils class SearchAdapter( diff --git a/app/src/main/java/com/github/libretube/ui/adapters/SubscriptionChannelAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/SubscriptionChannelAdapter.kt index 104e7cab7..e5ec8d60d 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/SubscriptionChannelAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/SubscriptionChannelAdapter.kt @@ -6,12 +6,12 @@ import androidx.recyclerview.widget.RecyclerView import com.github.libretube.api.obj.Subscription import com.github.libretube.databinding.ChannelSubscriptionRowBinding import com.github.libretube.extensions.toID +import com.github.libretube.helpers.ImageHelper +import com.github.libretube.helpers.NavigationHelper import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.extensions.setupSubscriptionButton import com.github.libretube.ui.sheets.ChannelOptionsBottomSheet import com.github.libretube.ui.viewholders.SubscriptionChannelViewHolder -import com.github.libretube.helpers.ImageHelper -import com.github.libretube.helpers.NavigationHelper class SubscriptionChannelAdapter( private val subscriptions: MutableList diff --git a/app/src/main/java/com/github/libretube/ui/adapters/VideosAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/VideosAdapter.kt index ddbdbd791..cf2139337 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/VideosAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/VideosAdapter.kt @@ -20,14 +20,14 @@ import com.github.libretube.databinding.VideoRowBinding import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.toID +import com.github.libretube.helpers.ImageHelper +import com.github.libretube.helpers.NavigationHelper +import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.extensions.setFormattedDuration import com.github.libretube.ui.extensions.setWatchProgressLength import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.viewholders.VideosViewHolder -import com.github.libretube.helpers.ImageHelper -import com.github.libretube.helpers.NavigationHelper -import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.util.TextUtils class VideosAdapter( diff --git a/app/src/main/java/com/github/libretube/ui/adapters/WatchHistoryAdapter.kt b/app/src/main/java/com/github/libretube/ui/adapters/WatchHistoryAdapter.kt index 7378b42fe..bed0f0b77 100644 --- a/app/src/main/java/com/github/libretube/ui/adapters/WatchHistoryAdapter.kt +++ b/app/src/main/java/com/github/libretube/ui/adapters/WatchHistoryAdapter.kt @@ -8,13 +8,13 @@ import com.github.libretube.databinding.VideoRowBinding import com.github.libretube.db.DatabaseHolder import com.github.libretube.db.obj.WatchHistoryItem import com.github.libretube.extensions.query +import com.github.libretube.helpers.ImageHelper +import com.github.libretube.helpers.NavigationHelper import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.extensions.setFormattedDuration import com.github.libretube.ui.extensions.setWatchProgressLength import com.github.libretube.ui.sheets.VideoOptionsBottomSheet import com.github.libretube.ui.viewholders.WatchHistoryViewHolder -import com.github.libretube.helpers.ImageHelper -import com.github.libretube.helpers.NavigationHelper class WatchHistoryAdapter( private val watchHistory: MutableList diff --git a/app/src/main/java/com/github/libretube/ui/base/BasePreferenceFragment.kt b/app/src/main/java/com/github/libretube/ui/base/BasePreferenceFragment.kt index 1c58428b1..8fcc90d42 100644 --- a/app/src/main/java/com/github/libretube/ui/base/BasePreferenceFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/base/BasePreferenceFragment.kt @@ -7,8 +7,8 @@ import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import com.github.libretube.R import com.github.libretube.databinding.DialogTextPreferenceBinding -import com.github.libretube.ui.activities.SettingsActivity import com.github.libretube.helpers.PreferenceHelper +import com.github.libretube.ui.activities.SettingsActivity import com.google.android.material.dialog.MaterialAlertDialogBuilder /** diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/BackupDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/BackupDialog.kt index 858550188..34c50f58e 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/BackupDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/BackupDialog.kt @@ -7,9 +7,9 @@ import androidx.fragment.app.DialogFragment import androidx.lifecycle.lifecycleScope import com.github.libretube.R import com.github.libretube.db.DatabaseHolder.Companion.Database +import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.obj.BackupFile import com.github.libretube.obj.PreferenceItem -import com.github.libretube.helpers.PreferenceHelper import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/NavBarOptionsDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/NavBarOptionsDialog.kt index 30bcb73e5..181394b3a 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/NavBarOptionsDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/NavBarOptionsDialog.kt @@ -8,8 +8,8 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.github.libretube.R import com.github.libretube.databinding.DialogNavbarOptionsBinding -import com.github.libretube.ui.adapters.NavBarOptionsAdapter import com.github.libretube.helpers.NavBarHelper +import com.github.libretube.ui.adapters.NavBarOptionsAdapter import com.google.android.material.dialog.MaterialAlertDialogBuilder class NavBarOptionsDialog : DialogFragment() { 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 700e3ef8f..08550f499 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 @@ -13,8 +13,8 @@ import com.github.libretube.databinding.DialogShareBinding import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.enums.ShareObjectType import com.github.libretube.extensions.awaitQuery -import com.github.libretube.obj.ShareData import com.github.libretube.helpers.PreferenceHelper +import com.github.libretube.obj.ShareData import com.google.android.material.dialog.MaterialAlertDialogBuilder class ShareDialog( diff --git a/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt index 375308c6c..c42e4e59a 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt @@ -10,7 +10,6 @@ import android.os.Handler import android.os.IBinder import android.os.Looper import android.text.format.DateUtils -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -19,6 +18,7 @@ import com.github.libretube.R import com.github.libretube.api.obj.StreamItem import com.github.libretube.databinding.FragmentAudioPlayerBinding import com.github.libretube.enums.ShareObjectType +import com.github.libretube.extensions.normalize import com.github.libretube.extensions.toID import com.github.libretube.helpers.AudioHelper import com.github.libretube.helpers.BackgroundHelper @@ -138,7 +138,7 @@ class AudioPlayerFragment : BaseFragment(), AudioPlayerOptions { ).show(childFragmentManager, null) } - val listener = AudioPlayerThumbnailListener(binding.thumbnail, this) + val listener = AudioPlayerThumbnailListener(requireContext(), this) binding.thumbnail.setOnTouchListener(listener) // Listen for track changes due to autoplay or the notification @@ -150,6 +150,11 @@ class AudioPlayerFragment : BaseFragment(), AudioPlayerOptions { // load the stream info into the UI updateStreamInfo() + + // update the currently shown volume + binding.volumeProgressBar.let { bar -> + bar.progress = audioHelper.getVolumeWithScale(bar.max) + } } /** @@ -244,10 +249,36 @@ class AudioPlayerFragment : BaseFragment(), AudioPlayerOptions { } override fun onSwipe(distanceY: Float) { - Log.e("swiping", distanceY.toString()) + binding.volumeControls.visibility = View.VISIBLE + updateVolume(distanceY) } override fun onSwipeEnd() { - Log.e("ended", "ended") + binding.volumeControls.visibility = View.GONE + } + + private fun updateVolume(distance: Float) { + val bar = binding.volumeProgressBar + binding.volumeControls.apply { + if (visibility == View.GONE) { + visibility = View.VISIBLE + // Volume could be changed using other mediums, sync progress + // bar with new value. + bar.progress = audioHelper.getVolumeWithScale(bar.max) + } + } + + if (bar.progress == 0) { + binding.volumeImageView.setImageResource( + when { + distance > 0 -> R.drawable.ic_volume_up + else -> R.drawable.ic_volume_off + } + ) + } + bar.incrementProgressBy(distance.toInt() / 3) + audioHelper.setVolumeWithScale(bar.progress, bar.max) + + binding.volumeTextView.text = "${bar.progress.normalize(0, bar.max, 0, 100)}" } } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt index 11ac52e83..af260aa24 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt @@ -19,6 +19,7 @@ import com.github.libretube.enums.ShareObjectType import com.github.libretube.extensions.TAG import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.toID +import com.github.libretube.helpers.ImageHelper import com.github.libretube.obj.ChannelTabs import com.github.libretube.obj.ShareData import com.github.libretube.ui.adapters.SearchAdapter @@ -26,7 +27,6 @@ import com.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.ui.extensions.setupSubscriptionButton -import com.github.libretube.helpers.ImageHelper import java.io.IOException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/github/libretube/ui/fragments/DownloadsFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/DownloadsFragment.kt index b5bf1a17f..b23146823 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/DownloadsFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/DownloadsFragment.kt @@ -19,13 +19,13 @@ import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.obj.DownloadWithItems import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.formatAsFileSize +import com.github.libretube.helpers.DownloadHelper import com.github.libretube.obj.DownloadStatus import com.github.libretube.receivers.DownloadReceiver import com.github.libretube.services.DownloadService import com.github.libretube.ui.adapters.DownloadsAdapter import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.viewholders.DownloadsViewHolder -import com.github.libretube.helpers.DownloadHelper import java.io.File import kotlinx.coroutines.Job import kotlinx.coroutines.flow.collectLatest diff --git a/app/src/main/java/com/github/libretube/ui/fragments/HomeFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/HomeFragment.kt index 68d2b369c..360a6cd7a 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/HomeFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/HomeFragment.kt @@ -18,11 +18,11 @@ import com.github.libretube.databinding.FragmentHomeBinding import com.github.libretube.db.DatabaseHolder import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.toastFromMainThread +import com.github.libretube.helpers.LocaleHelper import com.github.libretube.ui.adapters.PlaylistBookmarkAdapter import com.github.libretube.ui.adapters.PlaylistsAdapter import com.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.base.BaseFragment -import com.github.libretube.helpers.LocaleHelper import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt index 99ccb43ad..d868af09e 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/LibraryFragment.kt @@ -21,13 +21,13 @@ import com.github.libretube.db.DatabaseHolder import com.github.libretube.extensions.TAG import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.dpToPx +import com.github.libretube.helpers.NavBarHelper +import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.adapters.PlaylistBookmarkAdapter import com.github.libretube.ui.adapters.PlaylistsAdapter import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.dialogs.CreatePlaylistDialog import com.github.libretube.ui.models.PlayerViewModel -import com.github.libretube.helpers.NavBarHelper -import com.github.libretube.helpers.PreferenceHelper class LibraryFragment : BaseFragment() { 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 9985a0c67..33514024a 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 @@ -67,6 +67,13 @@ import com.github.libretube.extensions.query import com.github.libretube.extensions.toID import com.github.libretube.extensions.toStreamItem import com.github.libretube.extensions.updateParameters +import com.github.libretube.helpers.BackgroundHelper +import com.github.libretube.helpers.DashHelper +import com.github.libretube.helpers.ImageHelper +import com.github.libretube.helpers.NavigationHelper +import com.github.libretube.helpers.PlayerHelper +import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams +import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.obj.ShareData import com.github.libretube.obj.VideoResolution import com.github.libretube.services.BackgroundMode @@ -81,24 +88,17 @@ import com.github.libretube.ui.dialogs.ShareDialog import com.github.libretube.ui.extensions.setAspectRatio import com.github.libretube.ui.extensions.setupSubscriptionButton import com.github.libretube.ui.interfaces.OnlinePlayerOptions +import com.github.libretube.ui.listeners.SeekbarPreviewListener import com.github.libretube.ui.models.CommentsViewModel import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.sheets.BaseBottomSheet import com.github.libretube.ui.sheets.CommentsSheet import com.github.libretube.ui.sheets.PlayingQueueSheet -import com.github.libretube.helpers.BackgroundHelper -import com.github.libretube.helpers.DashHelper import com.github.libretube.util.DataSaverMode import com.github.libretube.util.HtmlParser -import com.github.libretube.helpers.ImageHelper import com.github.libretube.util.LinkHandler -import com.github.libretube.helpers.NavigationHelper import com.github.libretube.util.NowPlayingNotification -import com.github.libretube.helpers.PlayerHelper -import com.github.libretube.helpers.PlayerHelper.loadPlaybackParams import com.github.libretube.util.PlayingQueue -import com.github.libretube.helpers.PreferenceHelper -import com.github.libretube.ui.listeners.SeekbarPreviewListener import com.github.libretube.util.TextUtils import com.google.android.exoplayer2.C import com.google.android.exoplayer2.ExoPlayer 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 3d775b0a9..980f525fd 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 @@ -26,13 +26,13 @@ import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.query import com.github.libretube.extensions.toID import com.github.libretube.extensions.toPlaylistBookmark +import com.github.libretube.helpers.ImageHelper +import com.github.libretube.helpers.NavigationHelper import com.github.libretube.ui.adapters.PlaylistAdapter import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.extensions.serializable import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet -import com.github.libretube.helpers.ImageHelper -import com.github.libretube.helpers.NavigationHelper import com.github.libretube.util.PlayingQueue import com.github.libretube.util.TextUtils diff --git a/app/src/main/java/com/github/libretube/ui/fragments/SearchResultFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/SearchResultFragment.kt index 51d7fc5e5..e44b0dae6 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/SearchResultFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/SearchResultFragment.kt @@ -16,9 +16,9 @@ import com.github.libretube.db.DatabaseHelper import com.github.libretube.db.obj.SearchHistoryItem import com.github.libretube.extensions.TAG import com.github.libretube.extensions.hideKeyboard +import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.adapters.SearchAdapter import com.github.libretube.ui.base.BaseFragment -import com.github.libretube.helpers.PreferenceHelper import java.io.IOException import retrofit2.HttpException diff --git a/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt index 1cb41c30f..526ec633e 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt @@ -13,13 +13,13 @@ import com.github.libretube.R import com.github.libretube.api.obj.StreamItem import com.github.libretube.constants.PreferenceKeys import com.github.libretube.databinding.FragmentSubscriptionsBinding +import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.adapters.LegacySubscriptionAdapter import com.github.libretube.ui.adapters.SubscriptionChannelAdapter import com.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.models.SubscriptionsViewModel import com.github.libretube.ui.sheets.BaseBottomSheet -import com.github.libretube.helpers.PreferenceHelper class SubscriptionsFragment : BaseFragment() { private lateinit var binding: FragmentSubscriptionsBinding diff --git a/app/src/main/java/com/github/libretube/ui/fragments/TrendsFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/TrendsFragment.kt index ead15d77e..ec2187af8 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/TrendsFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/TrendsFragment.kt @@ -12,10 +12,10 @@ import com.github.libretube.R import com.github.libretube.api.RetrofitInstance import com.github.libretube.databinding.FragmentTrendsBinding import com.github.libretube.extensions.TAG +import com.github.libretube.helpers.LocaleHelper import com.github.libretube.ui.activities.SettingsActivity import com.github.libretube.ui.adapters.VideosAdapter import com.github.libretube.ui.base.BaseFragment -import com.github.libretube.helpers.LocaleHelper import com.google.android.material.snackbar.Snackbar import java.io.IOException import retrofit2.HttpException diff --git a/app/src/main/java/com/github/libretube/ui/fragments/WatchHistoryFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/WatchHistoryFragment.kt index 563829078..f39eca543 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/WatchHistoryFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/WatchHistoryFragment.kt @@ -19,12 +19,12 @@ import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.query +import com.github.libretube.helpers.NavigationHelper +import com.github.libretube.helpers.ProxyHelper import com.github.libretube.ui.adapters.WatchHistoryAdapter import com.github.libretube.ui.base.BaseFragment import com.github.libretube.ui.models.PlayerViewModel -import com.github.libretube.helpers.NavigationHelper import com.github.libretube.util.PlayingQueue -import com.github.libretube.helpers.ProxyHelper import com.google.android.material.dialog.MaterialAlertDialogBuilder class WatchHistoryFragment : BaseFragment() { diff --git a/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt b/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt index ba82efdfc..464bbcdf8 100644 --- a/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt +++ b/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt @@ -1,6 +1,7 @@ package com.github.libretube.ui.listeners import android.annotation.SuppressLint +import android.content.Context import android.os.Handler import android.os.Looper import android.view.GestureDetector @@ -10,29 +11,19 @@ import androidx.core.os.postDelayed import com.github.libretube.ui.interfaces.AudioPlayerOptions import kotlin.math.abs -class AudioPlayerThumbnailListener(private val view: View, private val listener: AudioPlayerOptions) : +class AudioPlayerThumbnailListener(context: Context, private val listener: AudioPlayerOptions) : View.OnTouchListener { - private val width get() = view.width - private val height get() = view.height - private val handler = Handler(Looper.getMainLooper()) - - private val gestureDetector: GestureDetector - + private val gestureDetector = GestureDetector(context, GestureListener(), handler) private var isMoving = false - var wasClick = true - - init { - gestureDetector = GestureDetector(view.context, GestureListener(), handler) - } - @SuppressLint("ClickableViewAccessibility") override fun onTouch(v: View, event: MotionEvent): Boolean { if (event.action == MotionEvent.ACTION_UP && isMoving) { isMoving = false listener.onSwipeEnd() + return false } runCatching { @@ -46,11 +37,10 @@ class AudioPlayerThumbnailListener(private val view: View, private val listener: override fun onDown(e: MotionEvent): Boolean { // Initially assume this event is for click - wasClick = true if (isMoving) return false - handler.postDelayed(100) { - if (wasClick) listener.onSingleTap() + handler.postDelayed(300) { + if (!isMoving) listener.onSingleTap() } return true @@ -70,7 +60,6 @@ class AudioPlayerThumbnailListener(private val view: View, private val listener: } isMoving = true - wasClick = false listener.onSwipe(distanceY) return true diff --git a/app/src/main/java/com/github/libretube/ui/listeners/PlayerGestureController.kt b/app/src/main/java/com/github/libretube/ui/listeners/PlayerGestureController.kt index 60f900ee4..f59d8aa3b 100644 --- a/app/src/main/java/com/github/libretube/ui/listeners/PlayerGestureController.kt +++ b/app/src/main/java/com/github/libretube/ui/listeners/PlayerGestureController.kt @@ -12,10 +12,10 @@ import android.view.ScaleGestureDetector import android.view.View import androidx.activity.viewModels import androidx.core.os.postDelayed +import com.github.libretube.helpers.PlayerHelper import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.interfaces.PlayerGestureOptions import com.github.libretube.ui.models.PlayerViewModel -import com.github.libretube.helpers.PlayerHelper import kotlin.math.abs class PlayerGestureController(activity: BaseActivity, private val listener: PlayerGestureOptions) : diff --git a/app/src/main/java/com/github/libretube/ui/listeners/SeekbarPreviewListener.kt b/app/src/main/java/com/github/libretube/ui/listeners/SeekbarPreviewListener.kt index a21a28b00..5740a9aa9 100644 --- a/app/src/main/java/com/github/libretube/ui/listeners/SeekbarPreviewListener.kt +++ b/app/src/main/java/com/github/libretube/ui/listeners/SeekbarPreviewListener.kt @@ -9,8 +9,8 @@ import androidx.core.math.MathUtils import androidx.core.view.updateLayoutParams import coil.request.ImageRequest import com.github.libretube.api.obj.PreviewFrames -import com.github.libretube.obj.PreviewFrame import com.github.libretube.helpers.ImageHelper +import com.github.libretube.obj.PreviewFrame import com.google.android.exoplayer2.ui.TimeBar class SeekbarPreviewListener( diff --git a/app/src/main/java/com/github/libretube/ui/preferences/AdvancedSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/AdvancedSettings.kt index 44729128d..61b3d3965 100644 --- a/app/src/main/java/com/github/libretube/ui/preferences/AdvancedSettings.kt +++ b/app/src/main/java/com/github/libretube/ui/preferences/AdvancedSettings.kt @@ -6,9 +6,9 @@ import androidx.preference.ListPreference import androidx.preference.Preference import com.github.libretube.R import com.github.libretube.constants.PreferenceKeys -import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.helpers.ImageHelper import com.github.libretube.helpers.PreferenceHelper +import com.github.libretube.ui.base.BasePreferenceFragment import com.google.android.material.dialog.MaterialAlertDialogBuilder class AdvancedSettings : BasePreferenceFragment() { diff --git a/app/src/main/java/com/github/libretube/ui/preferences/AppearanceSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/AppearanceSettings.kt index d2913a214..ecea86cc6 100644 --- a/app/src/main/java/com/github/libretube/ui/preferences/AppearanceSettings.kt +++ b/app/src/main/java/com/github/libretube/ui/preferences/AppearanceSettings.kt @@ -7,12 +7,12 @@ import androidx.preference.Preference import androidx.preference.SwitchPreferenceCompat import com.github.libretube.R import com.github.libretube.constants.PreferenceKeys +import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.adapters.IconsSheetAdapter import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.ui.dialogs.NavBarOptionsDialog import com.github.libretube.ui.dialogs.RequireRestartDialog import com.github.libretube.ui.sheets.IconsBottomSheet -import com.github.libretube.helpers.PreferenceHelper class AppearanceSettings : BasePreferenceFragment() { override val titleResourceId: Int = R.string.appearance diff --git a/app/src/main/java/com/github/libretube/ui/preferences/BackupRestoreSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/BackupRestoreSettings.kt index e478f69b9..63020dc01 100644 --- a/app/src/main/java/com/github/libretube/ui/preferences/BackupRestoreSettings.kt +++ b/app/src/main/java/com/github/libretube/ui/preferences/BackupRestoreSettings.kt @@ -7,11 +7,11 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts.CreateDocument import androidx.preference.Preference import com.github.libretube.R +import com.github.libretube.helpers.BackupHelper +import com.github.libretube.helpers.ImportHelper import com.github.libretube.obj.BackupFile import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.ui.dialogs.BackupDialog -import com.github.libretube.helpers.BackupHelper -import com.github.libretube.helpers.ImportHelper import java.time.LocalDateTime import java.time.format.DateTimeFormatter diff --git a/app/src/main/java/com/github/libretube/ui/preferences/GeneralSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/GeneralSettings.kt index e3d4daf42..a698caef4 100644 --- a/app/src/main/java/com/github/libretube/ui/preferences/GeneralSettings.kt +++ b/app/src/main/java/com/github/libretube/ui/preferences/GeneralSettings.kt @@ -7,10 +7,10 @@ import androidx.preference.Preference import androidx.preference.SwitchPreferenceCompat import com.github.libretube.R import com.github.libretube.constants.PreferenceKeys -import com.github.libretube.ui.base.BasePreferenceFragment -import com.github.libretube.ui.dialogs.RequireRestartDialog import com.github.libretube.helpers.LocaleHelper import com.github.libretube.helpers.PreferenceHelper +import com.github.libretube.ui.base.BasePreferenceFragment +import com.github.libretube.ui.dialogs.RequireRestartDialog class GeneralSettings : BasePreferenceFragment() { override val titleResourceId: Int = R.string.general diff --git a/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt index d17ddab51..662e7034b 100644 --- a/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt +++ b/app/src/main/java/com/github/libretube/ui/preferences/InstanceSettings.kt @@ -15,12 +15,12 @@ import com.github.libretube.constants.PreferenceKeys import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.extensions.awaitQuery import com.github.libretube.extensions.toastFromMainThread +import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.ui.dialogs.CustomInstanceDialog import com.github.libretube.ui.dialogs.DeleteAccountDialog import com.github.libretube.ui.dialogs.LoginDialog import com.github.libretube.ui.dialogs.LogoutDialog -import com.github.libretube.helpers.PreferenceHelper class InstanceSettings : BasePreferenceFragment() { override val titleResourceId: Int = R.string.instance diff --git a/app/src/main/java/com/github/libretube/ui/preferences/NotificationSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/NotificationSettings.kt index ea534f637..3e23d33a4 100644 --- a/app/src/main/java/com/github/libretube/ui/preferences/NotificationSettings.kt +++ b/app/src/main/java/com/github/libretube/ui/preferences/NotificationSettings.kt @@ -6,9 +6,9 @@ import androidx.preference.SwitchPreferenceCompat import androidx.work.ExistingPeriodicWorkPolicy import com.github.libretube.R import com.github.libretube.constants.PreferenceKeys +import com.github.libretube.helpers.NotificationHelper import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.ui.views.TimePickerPreference -import com.github.libretube.helpers.NotificationHelper class NotificationSettings : BasePreferenceFragment() { override val titleResourceId: Int = R.string.notifications diff --git a/app/src/main/java/com/github/libretube/ui/preferences/PlayerSettings.kt b/app/src/main/java/com/github/libretube/ui/preferences/PlayerSettings.kt index 8b4735898..0587ca184 100644 --- a/app/src/main/java/com/github/libretube/ui/preferences/PlayerSettings.kt +++ b/app/src/main/java/com/github/libretube/ui/preferences/PlayerSettings.kt @@ -12,9 +12,9 @@ import androidx.preference.Preference import androidx.preference.SwitchPreferenceCompat import com.github.libretube.R import com.github.libretube.constants.PreferenceKeys -import com.github.libretube.ui.base.BasePreferenceFragment import com.github.libretube.helpers.LocaleHelper import com.github.libretube.helpers.PreferenceHelper +import com.github.libretube.ui.base.BasePreferenceFragment class PlayerSettings : BasePreferenceFragment() { override val titleResourceId: Int = R.string.player diff --git a/app/src/main/java/com/github/libretube/ui/sheets/ChannelOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/ChannelOptionsBottomSheet.kt index e78ff3f05..eaf86e581 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/ChannelOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/ChannelOptionsBottomSheet.kt @@ -7,10 +7,10 @@ import com.github.libretube.api.RetrofitInstance 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.dialogs.ShareDialog import com.github.libretube.helpers.BackgroundHelper import com.github.libretube.helpers.NavigationHelper +import com.github.libretube.obj.ShareData +import com.github.libretube.ui.dialogs.ShareDialog import kotlinx.coroutines.runBlocking /** 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 caac4343c..cf7400f56 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 @@ -12,11 +12,11 @@ import com.github.libretube.extensions.query import com.github.libretube.extensions.toID import com.github.libretube.extensions.toPlaylistBookmark import com.github.libretube.extensions.toastFromMainThread +import com.github.libretube.helpers.BackgroundHelper import com.github.libretube.obj.ShareData import com.github.libretube.ui.dialogs.DeletePlaylistDialog import com.github.libretube.ui.dialogs.RenamePlaylistDialog import com.github.libretube.ui.dialogs.ShareDialog -import com.github.libretube.helpers.BackgroundHelper import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt b/app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt index 2aeb75168..a6243de9c 100644 --- a/app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt +++ b/app/src/main/java/com/github/libretube/ui/sheets/VideoOptionsBottomSheet.kt @@ -5,11 +5,11 @@ import com.github.libretube.R import com.github.libretube.api.RetrofitInstance import com.github.libretube.enums.ShareObjectType import com.github.libretube.extensions.toStreamItem +import com.github.libretube.helpers.BackgroundHelper import com.github.libretube.obj.ShareData import com.github.libretube.ui.dialogs.AddToPlaylistDialog import com.github.libretube.ui.dialogs.DownloadDialog import com.github.libretube.ui.dialogs.ShareDialog -import com.github.libretube.helpers.BackgroundHelper import com.github.libretube.util.PlayingQueue import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/github/libretube/ui/tools/SleepTimer.kt b/app/src/main/java/com/github/libretube/ui/tools/SleepTimer.kt index 5d1401287..45b59a9ac 100644 --- a/app/src/main/java/com/github/libretube/ui/tools/SleepTimer.kt +++ b/app/src/main/java/com/github/libretube/ui/tools/SleepTimer.kt @@ -7,8 +7,8 @@ import android.os.Process import androidx.core.os.postDelayed import com.github.libretube.R import com.github.libretube.constants.PreferenceKeys -import com.github.libretube.ui.activities.MainActivity import com.github.libretube.helpers.PreferenceHelper +import com.github.libretube.ui.activities.MainActivity import com.google.android.material.snackbar.Snackbar object SleepTimer { diff --git a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt index f6681d921..d8a5b309b 100644 --- a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt +++ b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt @@ -23,19 +23,19 @@ import com.github.libretube.databinding.ExoStyledPlayerControlViewBinding import com.github.libretube.databinding.PlayerGestureControlsViewBinding import com.github.libretube.extensions.dpToPx import com.github.libretube.extensions.normalize +import com.github.libretube.helpers.AudioHelper +import com.github.libretube.helpers.BrightnessHelper +import com.github.libretube.helpers.PlayerHelper import com.github.libretube.obj.BottomSheetItem import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.base.BaseActivity import com.github.libretube.ui.interfaces.OnlinePlayerOptions import com.github.libretube.ui.interfaces.PlayerGestureOptions import com.github.libretube.ui.interfaces.PlayerOptions +import com.github.libretube.ui.listeners.PlayerGestureController import com.github.libretube.ui.models.PlayerViewModel import com.github.libretube.ui.sheets.BaseBottomSheet import com.github.libretube.ui.sheets.PlaybackOptionsSheet -import com.github.libretube.helpers.AudioHelper -import com.github.libretube.helpers.BrightnessHelper -import com.github.libretube.ui.listeners.PlayerGestureController -import com.github.libretube.helpers.PlayerHelper import com.github.libretube.util.PlayingQueue import com.google.android.exoplayer2.ExoPlayer import com.google.android.exoplayer2.Player diff --git a/app/src/main/java/com/github/libretube/workers/NotificationWorker.kt b/app/src/main/java/com/github/libretube/workers/NotificationWorker.kt index b910e5552..31d91bb03 100644 --- a/app/src/main/java/com/github/libretube/workers/NotificationWorker.kt +++ b/app/src/main/java/com/github/libretube/workers/NotificationWorker.kt @@ -19,9 +19,9 @@ import com.github.libretube.constants.PUSH_CHANNEL_ID import com.github.libretube.constants.PreferenceKeys import com.github.libretube.extensions.TAG import com.github.libretube.extensions.toID +import com.github.libretube.helpers.PreferenceHelper import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.views.TimePickerPreference -import com.github.libretube.helpers.PreferenceHelper import java.time.LocalTime import kotlinx.coroutines.runBlocking diff --git a/app/src/main/res/layout/fragment_audio_player.xml b/app/src/main/res/layout/fragment_audio_player.xml index 40c1b5a1a..a574140c7 100644 --- a/app/src/main/res/layout/fragment_audio_player.xml +++ b/app/src/main/res/layout/fragment_audio_player.xml @@ -23,6 +23,41 @@ app:shapeAppearanceOverlay="@style/ShapeAppearance.Material3.Corner.Small" tools:src="@tools:sample/backgrounds/scenic" /> + + + + + + + + + + Date: Tue, 31 Jan 2023 18:08:37 +0100 Subject: [PATCH 3/3] Play and pause the video on single touches --- .../libretube/ui/fragments/AudioPlayerFragment.kt | 4 ++++ .../libretube/ui/interfaces/AudioPlayerOptions.kt | 2 ++ .../ui/listeners/AudioPlayerThumbnailListener.kt | 13 +++++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt index c42e4e59a..0a737e5dd 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/AudioPlayerFragment.kt @@ -243,6 +243,10 @@ class AudioPlayerFragment : BaseFragment(), AudioPlayerOptions { } override fun onSingleTap() { + if (isPaused) playerService?.play() else playerService?.pause() + } + + override fun onLongTap() { val current = PlayingQueue.getCurrent() VideoOptionsBottomSheet(current?.url?.toID() ?: return, current.title ?: return) .show(childFragmentManager) diff --git a/app/src/main/java/com/github/libretube/ui/interfaces/AudioPlayerOptions.kt b/app/src/main/java/com/github/libretube/ui/interfaces/AudioPlayerOptions.kt index eddb6387b..91a0198fb 100644 --- a/app/src/main/java/com/github/libretube/ui/interfaces/AudioPlayerOptions.kt +++ b/app/src/main/java/com/github/libretube/ui/interfaces/AudioPlayerOptions.kt @@ -4,6 +4,8 @@ interface AudioPlayerOptions { fun onSingleTap() + fun onLongTap() + fun onSwipe(distanceY: Float) fun onSwipeEnd() diff --git a/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt b/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt index 464bbcdf8..05e747704 100644 --- a/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt +++ b/app/src/main/java/com/github/libretube/ui/listeners/AudioPlayerThumbnailListener.kt @@ -7,6 +7,7 @@ import android.os.Looper import android.view.GestureDetector import android.view.MotionEvent import android.view.View +import android.view.ViewConfiguration import androidx.core.os.postDelayed import com.github.libretube.ui.interfaces.AudioPlayerOptions import kotlin.math.abs @@ -36,10 +37,9 @@ class AudioPlayerThumbnailListener(context: Context, private val listener: Audio private inner class GestureListener : GestureDetector.SimpleOnGestureListener() { override fun onDown(e: MotionEvent): Boolean { - // Initially assume this event is for click if (isMoving) return false - handler.postDelayed(300) { + handler.postDelayed(ACTION_INTERVAL, SINGLE_PRESS_TOKEN) { if (!isMoving) listener.onSingleTap() } @@ -64,9 +64,18 @@ class AudioPlayerThumbnailListener(context: Context, private val listener: Audio listener.onSwipe(distanceY) return true } + + override fun onLongPress(e: MotionEvent) { + // remove to single press action from the queue + handler.removeCallbacksAndMessages(SINGLE_PRESS_TOKEN) + + listener.onLongTap() + } } companion object { private const val MOVEMENT_THRESHOLD = 10 + private val ACTION_INTERVAL = ViewConfiguration.getLongPressTimeout().toLong() + private const val SINGLE_PRESS_TOKEN = "singlePress" } }