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) {
|
suspend fun insertOfflineData(mediaItem: MediaItem) {
|
||||||
|
val currentDownload = DownloadUtil.getCurrentIdDownload(mediaItem.mediaId)
|
||||||
val favoriteBean = App.appFavoriteDBManager.getFavoriteBeanByID(mediaItem.mediaId)
|
val favoriteBean = App.appFavoriteDBManager.getFavoriteBeanByID(mediaItem.mediaId)
|
||||||
val bean = OfflineBean(
|
val bean = OfflineBean(
|
||||||
videoId = mediaItem.mediaId,
|
videoId = mediaItem.mediaId,
|
||||||
@ -267,7 +268,9 @@ abstract class MoBaseActivity : AppCompatActivity(), CoroutineScope by MainScope
|
|||||||
name = mediaItem.mediaMetadata.artist.toString(),
|
name = mediaItem.mediaMetadata.artist.toString(),
|
||||||
thumbnail = mediaItem.mediaMetadata.artworkUri.toString(),
|
thumbnail = mediaItem.mediaMetadata.artworkUri.toString(),
|
||||||
isOffline = true,
|
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}")
|
LogTag.LogD(TAG, "insertOfflineBean bean->${bean}")
|
||||||
App.appOfflineDBManager.insertOfflineBean(bean)
|
App.appOfflineDBManager.insertOfflineBean(bean)
|
||||||
|
|||||||
@ -2,14 +2,19 @@ package melody.offline.music.activity
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.graphics.drawable.ColorDrawable
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.os.Message
|
import android.os.Message
|
||||||
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.AnimationUtils
|
import android.view.animation.AnimationUtils
|
||||||
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.annotation.OptIn
|
import androidx.annotation.OptIn
|
||||||
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.media3.common.MediaItem
|
import androidx.media3.common.MediaItem
|
||||||
import androidx.media3.common.PlaybackException
|
import androidx.media3.common.PlaybackException
|
||||||
@ -46,6 +51,7 @@ import org.json.JSONObject
|
|||||||
import melody.offline.music.App
|
import melody.offline.music.App
|
||||||
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.util.AnalysisUtil
|
import melody.offline.music.util.AnalysisUtil
|
||||||
|
|
||||||
@OptIn(UnstableApi::class)
|
@OptIn(UnstableApi::class)
|
||||||
@ -57,6 +63,8 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
|||||||
data object OnFavorites : Request()
|
data object OnFavorites : Request()
|
||||||
data class OnDownload(val mediaItem: MediaItem) : Request()
|
data class OnDownload(val mediaItem: MediaItem) : Request()
|
||||||
data class UpdateFavorite(val id: String) : Request()
|
data class UpdateFavorite(val id: String) : Request()
|
||||||
|
data class UpdateDownloadUi(val id: String) : Request()
|
||||||
|
data class OnDownloadRemove(val mediaItem: MediaItem) : Request()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -265,6 +273,33 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
is Request.OnDownload -> {
|
is Request.OnDownload -> {
|
||||||
|
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))
|
||||||
|
|
||||||
|
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()
|
||||||
|
} else {
|
||||||
|
DownloadService.sendAddDownload(
|
||||||
|
this@MoPlayDetailsActivity, MyDownloadService::class.java, downloadRequest, false
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
LolAdWrapper.shared.showAdTiming(
|
LolAdWrapper.shared.showAdTiming(
|
||||||
this@MoPlayDetailsActivity, AdPlacement.INST_DOWNLOAD
|
this@MoPlayDetailsActivity, AdPlacement.INST_DOWNLOAD
|
||||||
)
|
)
|
||||||
@ -272,7 +307,7 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
|||||||
insertOfflineData(it.mediaItem)
|
insertOfflineData(it.mediaItem)
|
||||||
val jsonObject = JSONObject()
|
val jsonObject = JSONObject()
|
||||||
jsonObject.put(
|
jsonObject.put(
|
||||||
"download_id", "${it.mediaItem.mediaId}"
|
"download_id", it.mediaItem.mediaId
|
||||||
)
|
)
|
||||||
val songMap = mutableMapOf(
|
val songMap = mutableMapOf(
|
||||||
Pair(
|
Pair(
|
||||||
@ -285,6 +320,8 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
|||||||
this@MoPlayDetailsActivity, AdPlacement.INST_DOWNLOAD
|
this@MoPlayDetailsActivity, AdPlacement.INST_DOWNLOAD
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
is Request.UpdateFavorite -> {
|
is Request.UpdateFavorite -> {
|
||||||
val currentFavoriteBean =
|
val currentFavoriteBean =
|
||||||
@ -296,6 +333,26 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
|||||||
updateFavoriteUi(false)
|
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) {
|
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.downloadImg.setImageResource(R.drawable.download_done_icon)
|
||||||
binding.downloadBtn.isClickable = false
|
binding.downloadImg.visibility = View.VISIBLE
|
||||||
binding.downloadBtn.isEnabled = false
|
|
||||||
} else {
|
} else {
|
||||||
binding.downloadLoading.visibility = View.GONE
|
binding.downloadLoading.visibility = View.GONE
|
||||||
binding.downloadImg.setImageResource(R.drawable.download_icon)
|
binding.downloadImg.setImageResource(R.drawable.download_icon)
|
||||||
binding.downloadImg.visibility = View.VISIBLE
|
binding.downloadImg.visibility = View.VISIBLE
|
||||||
binding.downloadBtn.isClickable = true
|
|
||||||
binding.downloadBtn.isEnabled = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,29 +630,10 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
|||||||
binding.downloadBtn.setOnClickListener {
|
binding.downloadBtn.setOnClickListener {
|
||||||
if (meController != null && meController.currentMediaItem != null) {
|
if (meController != null && meController.currentMediaItem != null) {
|
||||||
val currentMediaItem = meController.currentMediaItem
|
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!!))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun updatePlayModeUi() {
|
private fun updatePlayModeUi() {
|
||||||
binding.modePlayImg.setImageResource(
|
binding.modePlayImg.setImageResource(
|
||||||
@ -897,4 +937,22 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
|
|||||||
private fun showAD() {
|
private fun showAD() {
|
||||||
LolAdWrapper.shared.showAdTiming(this, AdPlacement.INST_INTO_PLAY)
|
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.visibility = View.VISIBLE
|
||||||
name.text = bean.name
|
name.text = bean.name
|
||||||
}
|
}
|
||||||
if (bean.size?.isNotEmpty() == true) {
|
|
||||||
size.text = bean.size
|
|
||||||
}
|
|
||||||
if (bean.isOffline) {
|
if (bean.isOffline) {
|
||||||
size.visibility = View.VISIBLE
|
size.visibility = View.VISIBLE
|
||||||
downloadCoImg.visibility = View.VISIBLE
|
downloadCoImg.visibility = View.VISIBLE
|
||||||
@ -82,6 +79,12 @@ class PlaylistSongsAdapter(
|
|||||||
downloadImg.setImageResource(R.drawable.download_icon)
|
downloadImg.setImageResource(R.drawable.download_icon)
|
||||||
size.visibility = View.GONE
|
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