@@ -46,6 +46,7 @@ import com.github.libretube.helpers.PreferenceHelper
4646import com.github.libretube.obj.DownloadStatus
4747import com.github.libretube.receivers.DownloadReceiver
4848import com.github.libretube.services.DownloadService
49+ import com.github.libretube.ui.activities.OfflinePlayerActivity
4950import com.github.libretube.ui.adapters.DownloadPlaylistAdapter
5051import com.github.libretube.ui.adapters.DownloadsAdapter
5152import com.github.libretube.ui.base.DynamicLayoutManagerFragment
@@ -118,7 +119,7 @@ class DownloadsFragmentAdapter(fragment: Fragment) : FragmentStateAdapter(fragme
118119 }
119120
120121 return DownloadsFragmentPage ().apply {
121- arguments = bundleOf(IntentData .currentPosition to DownloadTab .entries[position])
122+ arguments = bundleOf(IntentData .downloadTab to DownloadTab .entries[position])
122123 }
123124 }
124125}
@@ -135,7 +136,7 @@ class DownloadsFragmentPage : DynamicLayoutManagerFragment(R.layout.fragment_dow
135136 private val downloadReceiver = DownloadReceiver ()
136137
137138 // Either downloadTab or downloadPlaylistId are set, never both at the same time!
138- private var downloadTab: DownloadTab ? = null
139+ private lateinit var downloadTab: DownloadTab
139140 private var downloadPlaylistId: String? = null
140141
141142 private var selectedSortType
@@ -171,11 +172,11 @@ class DownloadsFragmentPage : DynamicLayoutManagerFragment(R.layout.fragment_dow
171172 override fun onCreate (savedInstanceState : Bundle ? ) {
172173 super .onCreate(savedInstanceState)
173174
174- this .downloadTab = requireArguments().serializable(IntentData .currentPosition)
175+ this .downloadTab = requireArguments().serializable(IntentData .downloadTab) !!
175176 this .downloadPlaylistId = requireArguments().getString(IntentData .playlistId)
176177
177- if (downloadPlaylistId == null && downloadTab == null )
178- throw IllegalArgumentException (" either downloadTab or downloadPlaylistId must be set " )
178+ if (downloadTab == DownloadTab . PLAYLIST && downloadPlaylistId == null )
179+ throw IllegalArgumentException (" downloadTab unspecified or missing playlist id " )
179180 }
180181
181182 override fun setLayoutManagers (gridItems : Int ) {
@@ -185,7 +186,7 @@ class DownloadsFragmentPage : DynamicLayoutManagerFragment(R.layout.fragment_dow
185186 override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
186187 _binding = FragmentDownloadContentBinding .bind(view)
187188 super .onViewCreated(view, savedInstanceState)
188- adapter = DownloadsAdapter (requireContext(), downloadTab ? : DownloadTab . VIDEO ) {
189+ adapter = DownloadsAdapter (requireContext(), downloadTab, downloadPlaylistId ) {
189190 var isDownloading = false
190191 val ids = it.downloadItems
191192 .filter { item -> item.path.fileSize() < item.downloadSize }
@@ -229,7 +230,7 @@ class DownloadsFragmentPage : DynamicLayoutManagerFragment(R.layout.fragment_dow
229230 val downloads = withContext(Dispatchers .IO ) {
230231 Database .downloadDao().getAll()
231232 }.let { downloads ->
232- if (downloadTab != null ) downloads.filterByTab(downloadTab!! )
233+ if (downloadTab != DownloadTab . PLAYLIST ) downloads.filterByTab(downloadTab)
233234 else downloads.filter { playlistItems.orEmpty().contains(it.download.videoId) }
234235 }
235236
@@ -268,14 +269,22 @@ class DownloadsFragmentPage : DynamicLayoutManagerFragment(R.layout.fragment_dow
268269 }
269270
270271 binding.shuffleAll.setOnClickListener {
271- BackgroundHelper .playOnBackgroundOffline(
272- requireContext(),
273- null ,
274- downloadTab ? : DownloadTab .VIDEO ,
275- shuffle = true
276- )
272+ if (downloadTab == DownloadTab .AUDIO ) {
273+ BackgroundHelper .playOnBackgroundOffline(
274+ requireContext(),
275+ videoId = null ,
276+ playlistId = null ,
277+ downloadTab,
278+ shuffle = true
279+ )
277280
278- NavigationHelper .openAudioPlayerFragment(requireContext(), offlinePlayer = true )
281+ NavigationHelper .openAudioPlayerFragment(requireContext(), offlinePlayer = true )
282+ } else {
283+ val intent = Intent (context, OfflinePlayerActivity ::class .java)
284+ .putExtra(IntentData .playlistId, downloadPlaylistId)
285+ .putExtra(IntentData .shuffle, true )
286+ requireContext().startActivity(intent)
287+ }
279288 }
280289
281290 playerViewModel.isMiniPlayerVisible.observe(viewLifecycleOwner) { isMiniPlayerVisible ->
@@ -305,7 +314,7 @@ class DownloadsFragmentPage : DynamicLayoutManagerFragment(R.layout.fragment_dow
305314 binding.downloadsEmpty.isVisible = isEmpty
306315 binding.downloadsContainer.isGone = isEmpty
307316 binding.deleteAll.isGone = isEmpty
308- binding.shuffleAll.isGone = isEmpty || downloadTab != DownloadTab . AUDIO
317+ binding.shuffleAll.isGone = isEmpty
309318 }
310319
311320 private fun showDeleteAllDialog (context : Context , adapter : DownloadsAdapter ) {
@@ -438,7 +447,10 @@ class PlaylistDownloadsFragmentPage : Fragment(R.layout.fragment_download_conten
438447 childFragmentManager.commit {
439448 replace<DownloadsFragmentPage >(
440449 binding.fragment.id,
441- args = bundleOf(IntentData .playlistId to playlist.downloadPlaylist.playlistId)
450+ args = bundleOf(
451+ IntentData .downloadTab to DownloadTab .PLAYLIST ,
452+ IntentData .playlistId to playlist.downloadPlaylist.playlistId
453+ )
442454 )
443455 }
444456 backPressedCallback.isEnabled = true
0 commit comments