package com.player.musicoo.activity import android.annotation.SuppressLint import android.view.View import androidx.media3.common.util.UnstableApi import androidx.recyclerview.widget.LinearLayoutManager import com.bumptech.glide.Glide import com.gyf.immersionbar.ktx.immersionBar import com.player.musicoo.App import com.player.musicoo.adapter.DetailsListAdapter import com.player.musicoo.adapter.OfflineSongsAdapter import com.player.musicoo.bean.OfflineBean import com.player.musicoo.databinding.ActivityDetailsBinding import com.player.musicoo.databinding.ActivityOfflineSongsBinding import com.player.musicoo.innertube.Innertube import com.player.musicoo.innertube.requests.moPlaylistPage import com.player.musicoo.util.DownloadUtil import com.player.musicoo.util.LogTag.LogD import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.isActive import kotlinx.coroutines.selects.select @UnstableApi class MoOfflineSongsActivity : MoBaseActivity() { private val requests: Channel = Channel(Channel.UNLIMITED) enum class Request { TryAgain, } private lateinit var binding: ActivityOfflineSongsBinding private var adapter: OfflineSongsAdapter? = null private var offlineList: MutableList = mutableListOf() override suspend fun main() { binding = ActivityOfflineSongsBinding.inflate(layoutInflater) setContentView(binding.root) initImmersionBar() initView() initAdapter() initData() onReceive() } private fun initImmersionBar() { immersionBar { statusBarDarkFont(false) statusBarView(binding.view) } } @SuppressLint("NotifyDataSetChanged") private suspend fun onReceive() { while (isActive) { select { requests.onReceive { when (it) { Request.TryAgain -> { initData() } } } events.onReceive { when (it) { Event.ActivityOnResume -> { activityOnResume() } Event.AutomaticallySwitchSongs -> { if (adapter != null) { adapter?.notifyDataSetChanged() } } else -> {} } } } } } @SuppressLint("NotifyDataSetChanged") private fun activityOnResume() { addMusicPlayerViewToLayout(binding.playMusicLayout) if (adapter != null) { adapter?.notifyDataSetChanged() } } private fun initView() { binding.backBtn.setOnClickListener { finish() } binding.tryAgainBtn.setOnClickListener { requests.trySend(Request.TryAgain) } } private fun initAdapter() { adapter = OfflineSongsAdapter(this, offlineList) binding.rv.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) binding.rv.adapter = adapter } @SuppressLint("NotifyDataSetChanged") private suspend fun initData() { showLoadingUi() offlineList.clear() offlineList.addAll(App.appOfflineDBManager.getAllOfflineBeans()) for (offline in offlineList){ LogD(TAG,"offline id->${offline.videoId}") } if (offlineList.size > 0) { showDataUi() } else { showNoContentUi() } if (adapter != null) { adapter?.notifyDataSetChanged() } } private fun showDataUi() { binding.loadingLayout.visibility = View.GONE binding.noContentLayout.visibility = View.GONE } private fun showLoadingUi() { binding.loadingLayout.visibility = View.VISIBLE binding.noContentLayout.visibility = View.GONE } private fun showNoContentUi() { binding.loadingLayout.visibility = View.GONE binding.noContentLayout.visibility = View.VISIBLE } }