[6.3.0]
[音乐部分问题]
This commit is contained in:
@@ -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 ->{
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingVi
|
||||
}
|
||||
|
||||
fun setData(musicData: MusicData) {
|
||||
viewModel?.setMusicData(musicData)
|
||||
viewModel?.setClickMusicData(musicData)
|
||||
}
|
||||
|
||||
override fun setViewData(musicData: MusicData){
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user