From 07bb4bf2223fb4d86f1ca5af1dacfa5f98eeaa36 Mon Sep 17 00:00:00 2001 From: ocean <503259349@qq.com> Date: Thu, 4 Jul 2024 09:48:51 +0800 Subject: [PATCH] update --- .../offline/music/activity/MoBaseActivity.kt | 5 +- .../music/activity/MoListDetailsActivity.kt | 7 ++- .../music/activity/MoPlayDetailsActivity.kt | 51 ++++++++++++++----- .../offline/music/fragment/MoHomeFragment.kt | 1 + .../melody/offline/music/util/AnalysisUtil.kt | 1 + .../offline/music/view/MusicPlayerView.kt | 10 ++++ 6 files changed, 58 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/melody/offline/music/activity/MoBaseActivity.kt b/app/src/main/java/melody/offline/music/activity/MoBaseActivity.kt index 4ff731a..21bc19e 100644 --- a/app/src/main/java/melody/offline/music/activity/MoBaseActivity.kt +++ b/app/src/main/java/melody/offline/music/activity/MoBaseActivity.kt @@ -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() diff --git a/app/src/main/java/melody/offline/music/activity/MoListDetailsActivity.kt b/app/src/main/java/melody/offline/music/activity/MoListDetailsActivity.kt index 9ac8de8..8bc4524 100644 --- a/app/src/main/java/melody/offline/music/activity/MoListDetailsActivity.kt +++ b/app/src/main/java/melody/offline/music/activity/MoListDetailsActivity.kt @@ -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, diff --git a/app/src/main/java/melody/offline/music/activity/MoPlayDetailsActivity.kt b/app/src/main/java/melody/offline/music/activity/MoPlayDetailsActivity.kt index 459f0fa..fdc862f 100644 --- a/app/src/main/java/melody/offline/music/activity/MoPlayDetailsActivity.kt +++ b/app/src/main/java/melody/offline/music/activity/MoPlayDetailsActivity.kt @@ -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) { diff --git a/app/src/main/java/melody/offline/music/fragment/MoHomeFragment.kt b/app/src/main/java/melody/offline/music/fragment/MoHomeFragment.kt index 29e15b8..43b473e 100644 --- a/app/src/main/java/melody/offline/music/fragment/MoHomeFragment.kt +++ b/app/src/main/java/melody/offline/music/fragment/MoHomeFragment.kt @@ -66,6 +66,7 @@ class MoHomeFragment : MoBaseFragment() { private fun initView() { binding.tryAgainBtn.setOnClickListener { + AnalysisUtil.logEvent(AnalysisUtil.HOME_B_MODULE_TRY_AGAIN_ACTION) requests.trySend(Request.TryAgain) } } diff --git a/app/src/main/java/melody/offline/music/util/AnalysisUtil.kt b/app/src/main/java/melody/offline/music/util/AnalysisUtil.kt index f6adf8d..b2c3c16 100644 --- a/app/src/main/java/melody/offline/music/util/AnalysisUtil.kt +++ b/app/src/main/java/melody/offline/music/util/AnalysisUtil.kt @@ -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面播放器曝光 diff --git a/app/src/main/java/melody/offline/music/view/MusicPlayerView.kt b/app/src/main/java/melody/offline/music/view/MusicPlayerView.kt index 9182ac8..3393f7a 100644 --- a/app/src/main/java/melody/offline/music/view/MusicPlayerView.kt +++ b/app/src/main/java/melody/offline/music/view/MusicPlayerView.kt @@ -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(){} + } } \ No newline at end of file