diff --git a/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt b/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt index ce69b89ba..d08256704 100644 --- a/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt +++ b/app/src/main/java/com/github/libretube/dialogs/CreatePlaylistDialog.kt @@ -8,12 +8,11 @@ import android.view.View import android.widget.Button import android.widget.TextView import android.widget.Toast -import androidx.core.os.bundleOf import androidx.core.text.HtmlCompat import androidx.fragment.app.DialogFragment -import androidx.fragment.app.setFragmentResult import androidx.lifecycle.lifecycleScope import com.github.libretube.R +import com.github.libretube.fragments.Library import com.github.libretube.obj.Playlists import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.RetrofitInstance @@ -87,8 +86,13 @@ class CreatePlaylistDialog : DialogFragment() { Toast.makeText(context, getString(R.string.unknown_error), Toast.LENGTH_SHORT) .show() } - // tell the Subscription Activity to fetch the playlists again - setFragmentResult("fetchPlaylists", bundleOf("" to "")) + // refresh the playlists in the library + try { + val parent = parentFragment as Library + parent.fetchPlaylists() + } catch (e: Exception) { + Log.e(TAG, e.toString()) + } dismiss() } } diff --git a/app/src/main/java/com/github/libretube/fragments/Library.kt b/app/src/main/java/com/github/libretube/fragments/Library.kt index ead5eceb7..4c844066e 100644 --- a/app/src/main/java/com/github/libretube/fragments/Library.kt +++ b/app/src/main/java/com/github/libretube/fragments/Library.kt @@ -28,6 +28,7 @@ class Library : Fragment() { lateinit var token: String private lateinit var playlistRecyclerView: RecyclerView private lateinit var refreshLayout: SwipeRefreshLayout + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.let { @@ -52,26 +53,32 @@ class Library : Fragment() { if (token != "") { view.findViewById(R.id.boogh2).visibility = View.GONE view.findViewById(R.id.textLike2).visibility = View.GONE - fetchPlaylists(view) + fetchPlaylists() refreshLayout.isEnabled = true refreshLayout.setOnRefreshListener { - Log.d(TAG, "hmm") - fetchPlaylists(view) + fetchPlaylists() } - view.findViewById(R.id.create_playlist).setOnClickListener { + val createPlaylistButton = view.findViewById(R.id.create_playlist) + createPlaylistButton.setOnClickListener { val newFragment = CreatePlaylistDialog() newFragment.show(childFragmentManager, "Create Playlist") } - childFragmentManager.setFragmentResultListener("fetchPlaylists", this) { _, _ -> - fetchPlaylists(view) - } } else { refreshLayout.isEnabled = false view.findViewById(R.id.create_playlist).visibility = View.GONE } } - private fun fetchPlaylists(view: View) { + override fun onResume() { + // optimize CreatePlaylistFab bottom margin if miniPlayer active + val createPlaylistButton = view?.findViewById(R.id.create_playlist) + val layoutParams = createPlaylistButton?.layoutParams as ViewGroup.MarginLayoutParams + layoutParams.bottomMargin = if (isMiniPlayerVisible) 180 else 64 + createPlaylistButton?.layoutParams = layoutParams + super.onResume() + } + + fun fetchPlaylists() { fun run() { refreshLayout.isRefreshing = true lifecycleScope.launchWhenCreated { @@ -91,12 +98,8 @@ class Library : Fragment() { } if (response.isNotEmpty()) { runOnUiThread { - with(view.findViewById(R.id.boogh2)) { - visibility = View.GONE - } - with(view.findViewById(R.id.textLike2)) { - visibility = View.GONE - } + view?.findViewById(R.id.boogh2)?.visibility = View.GONE + view?.findViewById(R.id.textLike2)?.visibility = View.GONE } val playlistsAdapter = PlaylistsAdapter( response.toMutableList(), @@ -105,13 +108,13 @@ class Library : Fragment() { playlistRecyclerView.adapter = playlistsAdapter } else { runOnUiThread { - with(view.findViewById(R.id.boogh2)) { - visibility = View.VISIBLE - setImageResource(R.drawable.ic_list) + view?.findViewById(R.id.boogh2).apply { + this?.visibility = View.VISIBLE + this?.setImageResource(R.drawable.ic_list) } - with(view.findViewById(R.id.textLike2)) { - visibility = View.VISIBLE - text = getString(R.string.emptyList) + view?.findViewById(R.id.textLike2).apply { + this?.visibility = View.VISIBLE + this?.text = getString(R.string.emptyList) } } } 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 1701158d4..1f81707c6 100644 --- a/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt @@ -2,6 +2,7 @@ package com.github.libretube.fragments import android.annotation.SuppressLint import android.app.NotificationManager +import android.app.PictureInPictureParams import android.content.Context import android.content.Intent import android.content.pm.ActivityInfo @@ -92,6 +93,7 @@ import java.util.concurrent.Executors import kotlin.math.abs var isFullScreen = false +var isMiniPlayerVisible = false class PlayerFragment : Fragment() { @@ -197,9 +199,11 @@ class PlayerFragment : Fragment() { val mainMotionLayout = mainActivity.findViewById(R.id.mainMotionLayout) if (currentId == eId) { + isMiniPlayerVisible = true exoPlayerView.useController = false mainMotionLayout.progress = 1F } else if (currentId == sId) { + isMiniPlayerVisible = false exoPlayerView.useController = true mainMotionLayout.progress = 0F } @@ -218,6 +222,7 @@ class PlayerFragment : Fragment() { playerMotionLayout.transitionToStart() view.findViewById(R.id.close_imageView).setOnClickListener { + isMiniPlayerVisible = false motionLayout.transitionToEnd() val mainActivity = activity as MainActivity mainActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT @@ -226,6 +231,7 @@ class PlayerFragment : Fragment() { .commit() } view.findViewById(R.id.close_imageButton).setOnClickListener { + isMiniPlayerVisible = false motionLayout.transitionToEnd() val mainActivity = activity as MainActivity mainActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT @@ -434,17 +440,20 @@ class PlayerFragment : Fragment() { createExoPlayer(view) prepareExoPlayerView() if (response.chapters != null) initializeChapters(response.chapters) + // set media sources for the player setResolutionAndSubtitles(view, response) + exoPlayer.prepare() + initializePlayerView(view, response) // support for time stamped links if (arguments?.getLong("timeStamp") != null) { val position = arguments?.getLong("timeStamp")!! * 1000 exoPlayer.seekTo(position) } - exoPlayer.prepare() exoPlayer.play() - initializePlayerView(view, response) + exoPlayerView.useController = true initializePlayerNotification(requireContext()) fetchSponsorBlockSegments() + // show comments if related streams disabled if (!relatedStreamsEnabled) toggleComments() } } @@ -537,6 +546,7 @@ class PlayerFragment : Fragment() { setRepeatToggleModes(RepeatModeUtil.REPEAT_TOGGLE_MODE_ALL) // controllerShowTimeoutMs = 1500 controllerHideOnTouch = true + useController = false player = exoPlayer } } @@ -1124,7 +1134,11 @@ class PlayerFragment : Fragment() { isFullScreen ) ) { - requireActivity().enterPictureInPictureMode() + activity?.enterPictureInPictureMode(updatePipParams()) } } + + private fun updatePipParams() = PictureInPictureParams.Builder() + .setActions(emptyList()) + .build() } diff --git a/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt b/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt index 950d17d13..310a02578 100644 --- a/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt +++ b/app/src/main/java/com/github/libretube/util/PreferenceHelper.kt @@ -55,14 +55,12 @@ object PreferenceHelper { fun clearPreferences(context: Context) { val editor = getDefaultSharedPreferencesEditor(context) - editor.clear() - editor.commit() + editor.clear().apply() } fun removePreference(context: Context, value: String?) { val editor = getDefaultSharedPreferencesEditor(context) - editor.remove(value) - editor.commit() + editor.remove(value).apply() } fun getToken(context: Context): String { @@ -72,7 +70,7 @@ object PreferenceHelper { fun setToken(context: Context, newValue: String) { val editor = context.getSharedPreferences("token", Context.MODE_PRIVATE).edit() - editor.putString("token", newValue) + editor.putString("token", newValue).apply() } fun getUsername(context: Context): String { @@ -82,7 +80,7 @@ object PreferenceHelper { fun setUsername(context: Context, newValue: String) { val editor = context.getSharedPreferences("username", Context.MODE_PRIVATE).edit() - editor.putString("username", newValue) + editor.putString("username", newValue).apply() } fun saveCustomInstance(context: Context, customInstance: CustomInstance) { @@ -93,7 +91,7 @@ object PreferenceHelper { customInstancesList += customInstance val json = gson.toJson(customInstancesList) - editor.putString("customInstances", json).commit() + editor.putString("customInstances", json).apply() } fun getCustomInstances(context: Context): ArrayList { diff --git a/app/src/main/res/layout/exo_styled_player_control_view.xml b/app/src/main/res/layout/exo_styled_player_control_view.xml index 291b9d370..6c1566c57 100644 --- a/app/src/main/res/layout/exo_styled_player_control_view.xml +++ b/app/src/main/res/layout/exo_styled_player_control_view.xml @@ -166,27 +166,6 @@ - - - - - - - - - -