diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/MusicModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/MusicModel.kt index 833c4b717b..cf9cc4d332 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/MusicModel.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/model/MusicModel.kt @@ -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 ->{ diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListItemAdapter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListItemAdapter.kt index a82d3dca9e..a06d0d941f 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListItemAdapter.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListItemAdapter.kt @@ -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() { + 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) } } \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListView.kt index 4e0f1ca222..ee326654b2 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListView.kt @@ -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) } diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingView.kt index 6af77b4357..a982c8d708 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingView.kt @@ -105,7 +105,7 @@ class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingVi } fun setData(musicData: MusicData) { - viewModel?.setMusicData(musicData) + viewModel?.setClickMusicData(musicData) } override fun setViewData(musicData: MusicData){ diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingViewModel.kt index 638406ed8b..37979f592d 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingViewModel.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingViewModel.kt @@ -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) + } + } } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/Audition.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/Audition.kt index ee86be2489..a29e86cab9 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/Audition.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/Audition.kt @@ -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 + } } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionManager.kt index c954399e58..7f9de3ac31 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionManager.kt @@ -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) diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/MusicData.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/MusicData.kt index afb7438d10..54b407aba3 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/MusicData.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/MusicData.kt @@ -17,7 +17,8 @@ data class MusicData( val tag: MutableList, 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"