This commit is contained in:
ocean 2024-07-04 09:48:51 +08:00
parent f04a25ead9
commit 07bb4bf222
6 changed files with 58 additions and 17 deletions

View File

@ -70,7 +70,8 @@ import org.json.JSONObject
@OptIn(UnstableApi::class)
abstract class MoBaseActivity : AppCompatActivity(), CoroutineScope by MainScope(), LifecycleOwner {
abstract class MoBaseActivity : AppCompatActivity(), MusicPlayerView.PlaySkipForwardListener,
CoroutineScope by MainScope(), LifecycleOwner {
private var playerListener: Player.Listener? = null
enum class Event {
@ -93,7 +94,7 @@ abstract class MoBaseActivity : AppCompatActivity(), CoroutineScope by MainScope
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
musicPlayerView = MusicPlayerView(this, meController)
musicPlayerView = MusicPlayerView(this, meController, this)
initPlayerListener()
launch {
main()

View File

@ -278,6 +278,12 @@ class MoListDetailsActivity : MoBaseActivity(), DetailsListAdapter.OnItemMoreCli
}
}
override fun onOnPlaySkipForwardListener() {
if (adapter != null) {
adapter?.notifyDataSetChanged()
}
}
@SuppressLint("NotifyDataSetChanged")
private fun activityOnResume() {
addMusicPlayerViewToLayout(binding.playMusicLayout)
@ -374,7 +380,6 @@ class MoListDetailsActivity : MoBaseActivity(), DetailsListAdapter.OnItemMoreCli
val mapList = it.moPlaylistOrAlbumListBean.map { item ->
val offlineBean = App.appOfflineDBManager.getOfflineBeanByID(item.videoId!!)
val favoriteBean = App.appFavoriteDBManager.getFavoriteBeanByID(item.videoId)
LogD(TAG,"offlineBean->$offlineBean")
item.copy(
isOffline = offlineBean?.isOffline ?: false,
isFavorite = favoriteBean?.isFavorite ?: false,

View File

@ -274,29 +274,37 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
is Request.OnDownload -> {
val contentId = it.mediaItem.mediaId
val offBean = App.appOfflineDBManager.getOfflineBeanByID(contentId)//得到当前ID的本地数据
val offBean =
App.appOfflineDBManager.getOfflineBeanByID(contentId)//得到当前ID的本地数据
if (offBean != null && offBean.bytesDownloaded?.let { bytes -> bytes > 0 } == true) {//判断当前数据库是否有这条数据。
showRemoveDownloadDialogHint(it.mediaItem)
LogD(TAG,"Request.OnDownload 11111")
LogD(TAG, "Request.OnDownload 11111")
} else {
LogD(TAG,"Request.OnDownload 22222")
LogD(TAG, "Request.OnDownload 22222")
//已经存在这条数据,直接写入数据
if (DownloadUtil.downloadResourceExist(contentId)) {
insertOfflineData(it.mediaItem)
requests.trySend(Request.UpdateDownloadUi(contentId))
LogD(TAG,"Request.OnDownload 33333")
}else{
val downloadRequest = DownloadRequest.Builder(contentId, contentId.toUri())
.setCustomCacheKey(contentId).build()
LogD(TAG, "Request.OnDownload 33333")
} else {
val downloadRequest =
DownloadRequest.Builder(contentId, contentId.toUri())
.setCustomCacheKey(contentId).build()
val downloadCount = DownloadUtil.getCurrentDownloads()
if (downloadCount >= 3) {
Toast.makeText(this@MoPlayDetailsActivity, getString(R.string.download_tips), Toast.LENGTH_LONG)
.show()
Toast.makeText(
this@MoPlayDetailsActivity,
getString(R.string.download_tips),
Toast.LENGTH_LONG
).show()
} else {
DownloadService.sendAddDownload(
this@MoPlayDetailsActivity, MyDownloadService::class.java, downloadRequest, false
this@MoPlayDetailsActivity,
MyDownloadService::class.java,
downloadRequest,
false
)
}
@ -314,7 +322,9 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
AnalysisUtil.PARAM_VALUE, jsonObject.toString()
)
)
AnalysisUtil.logEvent(AnalysisUtil.PLAYER_B_DOWNLOAD_CLICK, songMap)
AnalysisUtil.logEvent(
AnalysisUtil.PLAYER_B_DOWNLOAD_CLICK, songMap
)
LolAdWrapper.shared.loadAdIfNotCached(
this@MoPlayDetailsActivity, AdPlacement.INST_DOWNLOAD
@ -338,9 +348,9 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
val offlineBean = App.appOfflineDBManager.getOfflineBeanByID(it.id)
val isOffline = offlineBean?.isOffline ?: false
if (DownloadUtil.downloadResourceExist(it.id) && isOffline) {
downloadUi(true)
downloadUi(true, it.id)
} else {
downloadUi(false)
downloadUi(false, it.id)
}
}
@ -386,6 +396,7 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
}
private fun updateDownloadUI(download: Download) {
LogD(TAG, "download.state")
when (download.state) {
Download.STATE_DOWNLOADING -> {
binding.downloadLoading.visibility = View.VISIBLE
@ -439,7 +450,8 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
requests.trySend(Request.UpdateDownloadUi(id))
}
private fun downloadUi(b: Boolean) {
private fun downloadUi(b: Boolean, id: String) {
LogD(TAG, "downloadUi 1111")
if (b) {
binding.downloadLoading.visibility = View.GONE
binding.downloadImg.setImageResource(R.drawable.download_done_icon)
@ -449,6 +461,17 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
binding.downloadImg.setImageResource(R.drawable.download_icon)
binding.downloadImg.visibility = View.VISIBLE
}
val currentDownload = DownloadUtil.getCurrentIdDownload(id)
if (currentDownload != null && currentDownload.state == Download.STATE_DOWNLOADING) {
binding.downloadLoading.visibility = View.VISIBLE
binding.downloadImg.visibility = View.GONE
binding.downloadBtn.isClickable = false
binding.downloadBtn.isEnabled = false
} else {
binding.downloadBtn.isClickable = true
binding.downloadBtn.isEnabled = true
}
}
private fun updateFavoriteUi(b: Boolean) {

View File

@ -66,6 +66,7 @@ class MoHomeFragment : MoBaseFragment<FragmentMoHomeBinding>() {
private fun initView() {
binding.tryAgainBtn.setOnClickListener {
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_MODULE_TRY_AGAIN_ACTION)
requests.trySend(Request.TryAgain)
}
}

View File

@ -18,6 +18,7 @@ object AnalysisUtil {
const val HOME_B_PV = "home_b_pv"//B面首页曝光
const val HOME_B_MODULE_SHOW_SUCCESS_ACTION = "home_b_module_show_success_action"//首页资源曝光成功
const val HOME_B_MODULE_SHOW_FAIL_ACTION = "home_b_module_show_fail_action"//首页资源曝光失败
const val HOME_B_MODULE_TRY_AGAIN_ACTION = "home_b_module_try_again_action"//首页资源曝光失败
const val HOME_B_MODULE_CLICK = "home_b_module_click"//点击首页模块
const val ME_B_PV = "me_b_pv"//B面我的曝光
const val PLAYER_B_PV = "player_b_pv"//B面播放器曝光

View File

@ -13,6 +13,7 @@ import android.widget.LinearLayout
import android.widget.TextView
import androidx.media3.common.MediaItem
import androidx.media3.common.Player
import androidx.media3.exoplayer.offline.Download
import androidx.media3.session.MediaController
import com.bumptech.glide.Glide
import melody.offline.music.R
@ -20,6 +21,7 @@ import melody.offline.music.activity.MoPlayDetailsActivity
import melody.offline.music.activity.PrimaryActivity
import melody.offline.music.ads.AdPlacement
import melody.offline.music.ads.LolAdWrapper
import melody.offline.music.bean.PlaylistItem
import melody.offline.music.fragment.MoHomeFragment
import melody.offline.music.fragment.MoMeFragment
import melody.offline.music.fragment.SearchFragment
@ -30,6 +32,7 @@ import melody.offline.music.util.AnalysisUtil
class MusicPlayerView(
val context: Activity,
val meController: MediaController?,
val listener :PlaySkipForwardListener,
attrs: AttributeSet? = null
) :
LinearLayout(context, attrs) {
@ -78,6 +81,8 @@ class MusicPlayerView(
meController.prepare()
meController.play()
}
listener.onOnPlaySkipForwardListener()
}
}
goDetailsBtn.setOnClickListener {
@ -139,4 +144,9 @@ class MusicPlayerView(
val currentPosition = meController.currentPosition
progressBar.setProgress(currentPosition)
}
interface PlaySkipForwardListener {
fun onOnPlaySkipForwardListener(){}
}
}