[音乐部分问题]
This commit is contained in:
yangyakun
2024-03-20 11:25:02 +08:00
parent 99148fa61d
commit 2677ecc3f0
8 changed files with 72 additions and 19 deletions

View File

@@ -23,19 +23,22 @@ object MusicModel : IMoGoAutopilotStatusListener, IOrderStatusChangeListener {
override fun onAutopilotStatusResponse(state: Int) {
if(state==IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {
val string = SharedPrefsMgr.getInstance().getString(startMusicWithOrderKey)
CharterPassengerModel.getCurrentOrderInfo()?.orderNo
if (string == null) {
CharterPassengerModel.getCurrentOrderInfo()?.let {
RxUtils.disposeSubscribe(stopMusicDisposable)
SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo)
AuditionManager.playFirst()
if(!AuditionManager.isPlaying()) {
AuditionManager.playFirst()
}
}
} else {
CharterPassengerModel.getCurrentOrderInfo()?.let {
if (it.orderNo != string) {
RxUtils.disposeSubscribe(stopMusicDisposable)
SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo)
AuditionManager.playFirst()
if(!AuditionManager.isPlaying()) {
AuditionManager.playFirst()
}
}
}
}
@@ -51,8 +54,9 @@ object MusicModel : IMoGoAutopilotStatusListener, IOrderStatusChangeListener {
OrderStatusEnum.NoOrderUse -> {
CharterPassengerModel.getCurrentOrderInfo()?.let {
RxUtils.disposeSubscribe(stopMusicDisposable)
SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo)
AuditionManager.playFirst()
stopMusicDisposable = RxUtils.createSubscribe(60_000) {
AuditionManager.stop()
}
}
}
else ->{

View File

@@ -10,9 +10,11 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.charter.passenger.R
import com.mogo.och.common.module.manager.auditionmanager.MusicData
import com.mogo.och.common.module.manager.auditionmanager.PlayState
import me.jessyan.autosize.AutoSizeCompat
/**
* Created by adityagohad on 06/06/17.
@@ -23,6 +25,8 @@ class MusicListItemAdapter(
private val clickListener: ClickListener
) : RecyclerView.Adapter<MusicListItemAdapter.TextVH>() {
private val TAG = "MusicListItemAdapter"
val gradientDrawable = GradientDrawable().also {
it.shape = GradientDrawable.RECTANGLE
val firstColor = ContextCompat.getColor(context, android.R.color.transparent)
@@ -49,21 +53,36 @@ class MusicListItemAdapter(
}
override fun onBindViewHolder(holder: TextVH, position: Int) {
val musicData = dataList[holder.bindingAdapterPosition]
val musicData = dataList[position]
AutoSizeCompat.autoConvertDensityOfGlobal(holder.itemView.resources)
holder.musicName.text = musicData.songName
holder.itemView.setOnClickListener {
clickListener.clickItem(musicData)
dataList.forEachIndexed { index, musicData4Loop ->
if(musicData4Loop.select==true){
musicData4Loop.select = false
notifyItemChanged(index)
CallerLogger.d(TAG,"index${index}----music${musicData4Loop.songName}")
return@forEachIndexed
}
}
musicData.select = true
notifyItemChanged(position)
CallerLogger.d(TAG,"position${position}----music${musicData.songName}")
clickListener.clickItem(musicData,position)
}
if(musicData.tag.size>0){
holder.tvTag.text = musicData.tag.first()
}
if (musicData.state==PlayState.Playing||musicData.state==PlayState.Pause) {
holder.musicPlayState.visibility = View.VISIBLE
if(musicData.select==true){
holder.itemView.background = gradientDrawable
}else{
holder.itemView.background = null
}
if (musicData.state==PlayState.Playing) {
holder.musicPlayState.visibility = View.VISIBLE
}else{
holder.musicPlayState.visibility = View.GONE
}
}
@@ -108,7 +127,7 @@ class MusicListItemAdapter(
}
interface ClickListener {
fun clickItem(musicData: MusicData)
fun clickItem(musicData: MusicData,position: Int)
}
}

View File

@@ -68,7 +68,7 @@ class MusicListView : ConstraintLayout, MusicListViewModel.IMusicListViewCaLillb
CallerLogger.d(TAG,"${Thread.currentThread().name}----更新数据${oldData}-----${musicData}")
}
override fun clickItem(musicData: MusicData) {
override fun clickItem(musicData: MusicData,position: Int) {
// 通知主页面去显示详情
this.checkListener?.checkItem(musicData)
}

View File

@@ -105,7 +105,7 @@ class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingVi
}
fun setData(musicData: MusicData) {
viewModel?.setMusicData(musicData)
viewModel?.setClickMusicData(musicData)
}
override fun setViewData(musicData: MusicData){

View File

@@ -2,6 +2,7 @@ package com.mogo.och.charter.passenger.ui.music.playing
import androidx.lifecycle.ViewModel
import com.elegant.utils.UiThreadHandler
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.common.module.manager.auditionmanager.AuditionManager
import com.mogo.och.common.module.manager.auditionmanager.MusicData
@@ -46,6 +47,7 @@ class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListen
fun toggle() {
checkMusicData?.let {
CallerLogger.d(TAG,"toggle:${it.songName}")
AuditionManager.toggle(it)
}
}
@@ -56,7 +58,7 @@ class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListen
val nextMusicData = AuditionManager.getPreMusicData(it)
setMusicData(nextMusicData)
if(playing){
toggle()
AuditionManager.play(nextMusicData)
}
}
}
@@ -67,7 +69,7 @@ class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListen
val nextMusicData = AuditionManager.getNextMusicData(it)
setMusicData(nextMusicData)
if(playing){
toggle()
AuditionManager.play(nextMusicData)
}
}
}
@@ -109,10 +111,18 @@ class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListen
}
}
showNextMusic()
toggle()
}
fun seekTo(progress: Int) {
AuditionManager.seekTo(progress)
}
fun setClickMusicData(musicData: MusicData) {
CallerLogger.d(TAG,"setClickMusicData:${musicData.songName}")
setMusicData(musicData)
val playing = AuditionManager.isPlaying()
if(playing){
AuditionManager.play(musicData)
}
}
}

View File

@@ -8,7 +8,8 @@ import android.os.Message
import android.text.TextUtils
object Audition: MediaPlayer.OnPreparedListener,
MediaPlayer.OnCompletionListener, MediaPlayer.OnSeekCompleteListener {
MediaPlayer.OnCompletionListener, MediaPlayer.OnSeekCompleteListener,
MediaPlayer.OnErrorListener {
private val TAG = "Audition"
var mediaPlayer: MediaPlayer? = null
var oldPath: String? = null
@@ -70,6 +71,7 @@ object Audition: MediaPlayer.OnPreparedListener,
mediaPlayer!!.setOnPreparedListener(this)
mediaPlayer!!.setOnCompletionListener(this)
mediaPlayer!!.setOnSeekCompleteListener(this)
mediaPlayer!!.setOnErrorListener(this)
}
try {
mediaPlayer!!.setDataSource(path)
@@ -179,4 +181,11 @@ object Audition: MediaPlayer.OnPreparedListener,
listener!!.onSeekCompletion(mp.currentPosition.toLong())
}
}
override fun onError(mp: MediaPlayer?, what: Int, extra: Int): Boolean {
//你自己的逻辑
//此处返回值需要为true不然还是会执行OnCompletionListener中的onCompletion方法
return true
}
}

View File

@@ -73,6 +73,16 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
Audition.stop()
}
fun play(musicData: MusicData){
Audition.play(musicData.path)
val oldData = resetData()
musicDataPlaying = musicData
musicData.state = PlayState.Playing
dataChangeListeners.forEach {
it.value.updateState(oldData,musicData)
}
}
fun playFirst(){
if(!isPlaying()){
toggle(musicList.first())
@@ -116,7 +126,7 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
*/
override fun onAuditionCompletion(path:String?) {
val oldData = resetData()
CallerLogger.d(TAG,"播放完成:${oldData?.songName}--${path}")
CallerLogger.d(TAG,"播放完成:${oldData?.songName}--${path}----${musicDataPlaying?.songName} ----${musicDataPlaying?.path}")
if(oldData!=null&&oldData.path==path){
dataChangeListeners.forEach {
it.value.onMusicCompletion(oldData)

View File

@@ -17,7 +17,8 @@ data class MusicData(
val tag: MutableList<String>,
var duration:Long,
var path: String,
var state: PlayState = PlayState.None
var state: PlayState = PlayState.None,
var select:Boolean?=false
){
fun isCloud():Boolean{
return songUrlType=="cloud"