From 03686dd4ff4c4c6e1710619ff7161f1cf077575a Mon Sep 17 00:00:00 2001 From: Bnyro Date: Tue, 26 Jul 2022 07:40:21 +0200 Subject: [PATCH 1/3] fix playlists --- .../github/libretube/fragments/PlaylistFragment.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/github/libretube/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/fragments/PlaylistFragment.kt index 6c35edcd9..c39217a16 100644 --- a/app/src/main/java/com/github/libretube/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/fragments/PlaylistFragment.kt @@ -56,7 +56,9 @@ class PlaylistFragment : Fragment() { fun run() { lifecycleScope.launchWhenCreated { val response = try { - RetrofitInstance.api.getPlaylist(playlistId!!) + // load locally stored playlists with the auth api + if (isPipedPlaylist()) RetrofitInstance.authApi.getPlaylist(playlistId!!) + else RetrofitInstance.api.getPlaylist(playlistId!!) } catch (e: IOException) { println(e) Log.e(TAG, "IOException, you might not have internet connection") @@ -118,6 +120,8 @@ class PlaylistFragment : Fragment() { fun run() { lifecycleScope.launchWhenCreated { val response = try { + // load locally stored playlists with the auth api + if (isPipedPlaylist()) RetrofitInstance.authApi.getPlaylistNextPage(playlistId!!, nextPage!!) RetrofitInstance.api.getPlaylistNextPage(playlistId!!, nextPage!!) } catch (e: IOException) { println(e) @@ -135,6 +139,11 @@ class PlaylistFragment : Fragment() { run() } + private fun isPipedPlaylist(): Boolean { + val regex = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" + return playlistId?.contains(regex) == true + } + private fun Fragment?.runOnUiThread(action: () -> Unit) { this ?: return if (!isAdded) return // Fragment not attached to an Activity From fc603ea54049ee833032090f97c7aa89c5c9e039 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Tue, 26 Jul 2022 07:42:36 +0200 Subject: [PATCH 2/3] improve --- .../java/com/github/libretube/fragments/PlaylistFragment.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/github/libretube/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/fragments/PlaylistFragment.kt index c39217a16..39066fd10 100644 --- a/app/src/main/java/com/github/libretube/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/fragments/PlaylistFragment.kt @@ -22,6 +22,7 @@ class PlaylistFragment : Fragment() { private lateinit var binding: FragmentPlaylistBinding private var playlistId: String? = null + private var isOwner: Boolean = false var nextPage: String? = null private var playlistAdapter: PlaylistAdapter? = null private var isLoading = true @@ -78,7 +79,7 @@ class PlaylistFragment : Fragment() { val user = PreferenceHelper.getUsername() // check whether the user owns the playlist - val isOwner = response.uploaderUrl == null && + isOwner = response.uploaderUrl == null && response.uploader.equals(user, true) // show playlist options @@ -141,7 +142,7 @@ class PlaylistFragment : Fragment() { private fun isPipedPlaylist(): Boolean { val regex = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" - return playlistId?.contains(regex) == true + return playlistId?.contains(regex) == true || isOwner } private fun Fragment?.runOnUiThread(action: () -> Unit) { From 0c5b4c51dedacdaff6a52e0f4d3d635ca207010d Mon Sep 17 00:00:00 2001 From: Bnyro Date: Tue, 26 Jul 2022 07:55:07 +0200 Subject: [PATCH 3/3] cleanup --- .../libretube/fragments/PlayerFragment.kt | 25 ++++++++++++++++--- .../{KeyboardHelper.kt => HideKeyboard.kt} | 0 2 files changed, 21 insertions(+), 4 deletions(-) rename app/src/main/java/com/github/libretube/util/{KeyboardHelper.kt => HideKeyboard.kt} (100%) diff --git a/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt index 84ba5fb56..7947ba2ed 100644 --- a/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt @@ -1,5 +1,6 @@ package com.github.libretube.fragments +import android.app.ActivityManager import android.app.NotificationManager import android.app.PictureInPictureParams import android.content.Context @@ -57,6 +58,7 @@ import com.github.libretube.obj.Streams import com.github.libretube.obj.Subscribe import com.github.libretube.preferences.PreferenceHelper import com.github.libretube.preferences.PreferenceKeys +import com.github.libretube.services.BackgroundMode import com.github.libretube.util.BackgroundHelper import com.github.libretube.util.ConnectionHelper import com.github.libretube.util.CronetHelper @@ -1708,14 +1710,29 @@ class PlayerFragment : Fragment() { } fun onUserLeaveHint() { + if (SDK_INT >= Build.VERSION_CODES.O && shouldStartPiP()) { + activity?.enterPictureInPictureMode(updatePipParams()) + } + } + + private fun shouldStartPiP(): Boolean { val bounds = Rect() binding.playerScrollView.getHitRect(bounds) - if (SDK_INT >= Build.VERSION_CODES.O && - (binding.playerScrollView.getLocalVisibleRect(bounds) || Globals.IS_FULL_SCREEN) - ) { - activity?.enterPictureInPictureMode(updatePipParams()) + val backgroundModeRunning = isServiceRunning(requireContext(), BackgroundMode::class.java) + + return (binding.playerScrollView.getLocalVisibleRect(bounds) || Globals.IS_FULL_SCREEN) && + (exoPlayer.isPlaying || !backgroundModeRunning) + } + + private fun isServiceRunning(context: Context, serviceClass: Class<*>): Boolean { + val manager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager + for (service in manager.getRunningServices(Int.MAX_VALUE)) { + if (serviceClass.name == service.service.className) { + return true + } } + return false } private fun updatePipParams() = PictureInPictureParams.Builder() diff --git a/app/src/main/java/com/github/libretube/util/KeyboardHelper.kt b/app/src/main/java/com/github/libretube/util/HideKeyboard.kt similarity index 100% rename from app/src/main/java/com/github/libretube/util/KeyboardHelper.kt rename to app/src/main/java/com/github/libretube/util/HideKeyboard.kt