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) @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 private var playerListener: Player.Listener? = null
enum class Event { enum class Event {
@ -93,7 +94,7 @@ abstract class MoBaseActivity : AppCompatActivity(), CoroutineScope by MainScope
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
musicPlayerView = MusicPlayerView(this, meController) musicPlayerView = MusicPlayerView(this, meController, this)
initPlayerListener() initPlayerListener()
launch { launch {
main() main()

View File

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

View File

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

View File

@ -66,6 +66,7 @@ class MoHomeFragment : MoBaseFragment<FragmentMoHomeBinding>() {
private fun initView() { private fun initView() {
binding.tryAgainBtn.setOnClickListener { binding.tryAgainBtn.setOnClickListener {
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_MODULE_TRY_AGAIN_ACTION)
requests.trySend(Request.TryAgain) 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_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_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_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 HOME_B_MODULE_CLICK = "home_b_module_click"//点击首页模块
const val ME_B_PV = "me_b_pv"//B面我的曝光 const val ME_B_PV = "me_b_pv"//B面我的曝光
const val PLAYER_B_PV = "player_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 android.widget.TextView
import androidx.media3.common.MediaItem import androidx.media3.common.MediaItem
import androidx.media3.common.Player import androidx.media3.common.Player
import androidx.media3.exoplayer.offline.Download
import androidx.media3.session.MediaController import androidx.media3.session.MediaController
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import melody.offline.music.R 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.activity.PrimaryActivity
import melody.offline.music.ads.AdPlacement import melody.offline.music.ads.AdPlacement
import melody.offline.music.ads.LolAdWrapper import melody.offline.music.ads.LolAdWrapper
import melody.offline.music.bean.PlaylistItem
import melody.offline.music.fragment.MoHomeFragment import melody.offline.music.fragment.MoHomeFragment
import melody.offline.music.fragment.MoMeFragment import melody.offline.music.fragment.MoMeFragment
import melody.offline.music.fragment.SearchFragment import melody.offline.music.fragment.SearchFragment
@ -30,6 +32,7 @@ import melody.offline.music.util.AnalysisUtil
class MusicPlayerView( class MusicPlayerView(
val context: Activity, val context: Activity,
val meController: MediaController?, val meController: MediaController?,
val listener :PlaySkipForwardListener,
attrs: AttributeSet? = null attrs: AttributeSet? = null
) : ) :
LinearLayout(context, attrs) { LinearLayout(context, attrs) {
@ -78,6 +81,8 @@ class MusicPlayerView(
meController.prepare() meController.prepare()
meController.play() meController.play()
} }
listener.onOnPlaySkipForwardListener()
} }
} }
goDetailsBtn.setOnClickListener { goDetailsBtn.setOnClickListener {
@ -139,4 +144,9 @@ class MusicPlayerView(
val currentPosition = meController.currentPosition val currentPosition = meController.currentPosition
progressBar.setProgress(currentPosition) progressBar.setProgress(currentPosition)
} }
interface PlaySkipForwardListener {
fun onOnPlaySkipForwardListener(){}
}
} }