update
This commit is contained in:
parent
43399079c8
commit
37e6a26daa
@ -260,6 +260,7 @@ abstract class MoBaseActivity : AppCompatActivity(), CoroutineScope by MainScope
|
||||
|
||||
|
||||
suspend fun insertOfflineData(mediaItem: MediaItem) {
|
||||
val currentDownload = DownloadUtil.getCurrentIdDownload(mediaItem.mediaId)
|
||||
val favoriteBean = App.appFavoriteDBManager.getFavoriteBeanByID(mediaItem.mediaId)
|
||||
val bean = OfflineBean(
|
||||
videoId = mediaItem.mediaId,
|
||||
@ -267,7 +268,9 @@ abstract class MoBaseActivity : AppCompatActivity(), CoroutineScope by MainScope
|
||||
name = mediaItem.mediaMetadata.artist.toString(),
|
||||
thumbnail = mediaItem.mediaMetadata.artworkUri.toString(),
|
||||
isOffline = true,
|
||||
isFavorite = favoriteBean?.isFavorite ?: false
|
||||
isFavorite = favoriteBean?.isFavorite ?: false,
|
||||
bytesDownloaded = currentDownload?.bytesDownloaded,
|
||||
size = FileSizeConverter.formatSize(currentDownload?.bytesDownloaded ?: 0)
|
||||
)
|
||||
LogTag.LogD(TAG, "insertOfflineBean bean->${bean}")
|
||||
App.appOfflineDBManager.insertOfflineBean(bean)
|
||||
|
||||
@ -2,14 +2,19 @@ package melody.offline.music.activity
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.Message
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.animation.AnimationUtils
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.OptIn
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.net.toUri
|
||||
import androidx.media3.common.MediaItem
|
||||
import androidx.media3.common.PlaybackException
|
||||
@ -46,6 +51,7 @@ import org.json.JSONObject
|
||||
import melody.offline.music.App
|
||||
import melody.offline.music.ads.AdPlacement
|
||||
import melody.offline.music.ads.LolAdWrapper
|
||||
import melody.offline.music.bean.PlaylistItem
|
||||
import melody.offline.music.util.AnalysisUtil
|
||||
|
||||
@OptIn(UnstableApi::class)
|
||||
@ -57,6 +63,8 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
||||
data object OnFavorites : Request()
|
||||
data class OnDownload(val mediaItem: MediaItem) : Request()
|
||||
data class UpdateFavorite(val id: String) : Request()
|
||||
data class UpdateDownloadUi(val id: String) : Request()
|
||||
data class OnDownloadRemove(val mediaItem: MediaItem) : Request()
|
||||
}
|
||||
|
||||
|
||||
@ -265,25 +273,54 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
||||
}
|
||||
|
||||
is Request.OnDownload -> {
|
||||
LolAdWrapper.shared.showAdTiming(
|
||||
this@MoPlayDetailsActivity, AdPlacement.INST_DOWNLOAD
|
||||
)
|
||||
val contentId = it.mediaItem.mediaId
|
||||
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")
|
||||
} else {
|
||||
LogD(TAG,"Request.OnDownload 22222")
|
||||
//已经存在这条数据,直接写入数据
|
||||
if (DownloadUtil.downloadResourceExist(contentId)) {
|
||||
insertOfflineData(it.mediaItem)
|
||||
requests.trySend(Request.UpdateDownloadUi(contentId))
|
||||
|
||||
insertOfflineData(it.mediaItem)
|
||||
val jsonObject = JSONObject()
|
||||
jsonObject.put(
|
||||
"download_id", "${it.mediaItem.mediaId}"
|
||||
)
|
||||
val songMap = mutableMapOf(
|
||||
Pair(
|
||||
AnalysisUtil.PARAM_VALUE, jsonObject.toString()
|
||||
)
|
||||
)
|
||||
AnalysisUtil.logEvent(AnalysisUtil.PLAYER_B_DOWNLOAD_CLICK, songMap)
|
||||
LogD(TAG,"Request.OnDownload 33333")
|
||||
}else{
|
||||
val downloadRequest = DownloadRequest.Builder(contentId, contentId.toUri())
|
||||
.setCustomCacheKey(contentId).build()
|
||||
|
||||
LolAdWrapper.shared.loadAdIfNotCached(
|
||||
this@MoPlayDetailsActivity, AdPlacement.INST_DOWNLOAD
|
||||
)
|
||||
val downloadCount = DownloadUtil.getCurrentDownloads()
|
||||
if (downloadCount >= 3) {
|
||||
Toast.makeText(this@MoPlayDetailsActivity, getString(R.string.download_tips), Toast.LENGTH_LONG)
|
||||
.show()
|
||||
} else {
|
||||
DownloadService.sendAddDownload(
|
||||
this@MoPlayDetailsActivity, MyDownloadService::class.java, downloadRequest, false
|
||||
)
|
||||
}
|
||||
|
||||
LolAdWrapper.shared.showAdTiming(
|
||||
this@MoPlayDetailsActivity, AdPlacement.INST_DOWNLOAD
|
||||
)
|
||||
|
||||
insertOfflineData(it.mediaItem)
|
||||
val jsonObject = JSONObject()
|
||||
jsonObject.put(
|
||||
"download_id", it.mediaItem.mediaId
|
||||
)
|
||||
val songMap = mutableMapOf(
|
||||
Pair(
|
||||
AnalysisUtil.PARAM_VALUE, jsonObject.toString()
|
||||
)
|
||||
)
|
||||
AnalysisUtil.logEvent(AnalysisUtil.PLAYER_B_DOWNLOAD_CLICK, songMap)
|
||||
|
||||
LolAdWrapper.shared.loadAdIfNotCached(
|
||||
this@MoPlayDetailsActivity, AdPlacement.INST_DOWNLOAD
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
is Request.UpdateFavorite -> {
|
||||
@ -296,6 +333,26 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
||||
updateFavoriteUi(false)
|
||||
}
|
||||
}
|
||||
|
||||
is Request.UpdateDownloadUi -> {
|
||||
val offlineBean = App.appOfflineDBManager.getOfflineBeanByID(it.id)
|
||||
val isOffline = offlineBean?.isOffline ?: false
|
||||
if (DownloadUtil.downloadResourceExist(it.id) && isOffline) {
|
||||
downloadUi(true)
|
||||
} else {
|
||||
downloadUi(false)
|
||||
}
|
||||
}
|
||||
|
||||
is Request.OnDownloadRemove -> {
|
||||
val currentOfflineBean =
|
||||
App.appOfflineDBManager.getOfflineBeanByID(it.mediaItem.mediaId)
|
||||
if (currentOfflineBean != null) {
|
||||
App.appOfflineDBManager.deleteOfflineBean(currentOfflineBean)
|
||||
}
|
||||
|
||||
requests.trySend(Request.UpdateDownloadUi(it.mediaItem.mediaId))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -377,16 +434,18 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
||||
}
|
||||
|
||||
private fun updateDownloadUi(id: String) {
|
||||
if (DownloadUtil.downloadResourceExist(id)) {//已经下载,按钮不可点击
|
||||
requests.trySend(Request.UpdateDownloadUi(id))
|
||||
}
|
||||
|
||||
private fun downloadUi(b: Boolean) {
|
||||
if (b) {
|
||||
binding.downloadLoading.visibility = View.GONE
|
||||
binding.downloadImg.setImageResource(R.drawable.download_done_icon)
|
||||
binding.downloadBtn.isClickable = false
|
||||
binding.downloadBtn.isEnabled = false
|
||||
binding.downloadImg.visibility = View.VISIBLE
|
||||
} else {
|
||||
binding.downloadLoading.visibility = View.GONE
|
||||
binding.downloadImg.setImageResource(R.drawable.download_icon)
|
||||
binding.downloadImg.visibility = View.VISIBLE
|
||||
binding.downloadBtn.isClickable = true
|
||||
binding.downloadBtn.isEnabled = true
|
||||
}
|
||||
}
|
||||
|
||||
@ -571,26 +630,7 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
||||
binding.downloadBtn.setOnClickListener {
|
||||
if (meController != null && meController.currentMediaItem != null) {
|
||||
val currentMediaItem = meController.currentMediaItem
|
||||
val contentId = currentMediaItem?.mediaId ?: ""
|
||||
//如果已经存在就不进行下载
|
||||
if (DownloadUtil.downloadResourceExist(contentId)) {
|
||||
return@setOnClickListener
|
||||
}
|
||||
|
||||
val downloadRequest = DownloadRequest.Builder(contentId, contentId.toUri())
|
||||
.setCustomCacheKey(contentId).build()
|
||||
|
||||
val downloadCount = DownloadUtil.getCurrentDownloads()
|
||||
if (downloadCount >= 3) {
|
||||
Toast.makeText(this, getString(R.string.download_tips), Toast.LENGTH_LONG)
|
||||
.show()
|
||||
} else {
|
||||
DownloadService.sendAddDownload(
|
||||
this, MyDownloadService::class.java, downloadRequest, false
|
||||
)
|
||||
|
||||
requests.trySend(Request.OnDownload(currentMediaItem!!))
|
||||
}
|
||||
requests.trySend(Request.OnDownload(currentMediaItem!!))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -897,4 +937,22 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
||||
private fun showAD() {
|
||||
LolAdWrapper.shared.showAdTiming(this, AdPlacement.INST_INTO_PLAY)
|
||||
}
|
||||
|
||||
private fun showRemoveDownloadDialogHint(mediaItem: MediaItem) {
|
||||
val inflater = LayoutInflater.from(this)
|
||||
val dialogView = inflater.inflate(R.layout.dialog_hint, null)
|
||||
val okBtn = dialogView.findViewById<TextView>(R.id.dialog_ok_btn)
|
||||
val cancelBtn = dialogView.findViewById<TextView>(R.id.dialog_cancel_btn)
|
||||
val dialogBuilder = AlertDialog.Builder(this).setView(dialogView)
|
||||
val dialog = dialogBuilder.create()
|
||||
dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
||||
dialog.show()
|
||||
okBtn.setOnClickListener {
|
||||
dialog.dismiss()
|
||||
requests.trySend(Request.OnDownloadRemove(mediaItem))
|
||||
}
|
||||
cancelBtn.setOnClickListener {
|
||||
dialog.dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -70,9 +70,6 @@ class PlaylistSongsAdapter(
|
||||
name.visibility = View.VISIBLE
|
||||
name.text = bean.name
|
||||
}
|
||||
if (bean.size?.isNotEmpty() == true) {
|
||||
size.text = bean.size
|
||||
}
|
||||
if (bean.isOffline) {
|
||||
size.visibility = View.VISIBLE
|
||||
downloadCoImg.visibility = View.VISIBLE
|
||||
@ -82,6 +79,12 @@ class PlaylistSongsAdapter(
|
||||
downloadImg.setImageResource(R.drawable.download_icon)
|
||||
size.visibility = View.GONE
|
||||
}
|
||||
if (bean.size?.isNotEmpty() == true) {
|
||||
size.text = bean.size
|
||||
size.visibility = View.VISIBLE
|
||||
} else {
|
||||
size.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user