[media]
[收束music]
This commit is contained in:
yangyakun
2025-07-18 18:14:22 +08:00
parent a8dff28566
commit b6b4c21327
36 changed files with 508 additions and 239 deletions

View File

@@ -3,10 +3,9 @@ package com.mogo.och.charter.passenger.model
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.utilcode.util.TAG
import com.mogo.och.common.module.manager.audition.AuditionManager
import com.mogo.och.common.module.manager.audition.PlayState
import com.mogo.och.bridge.autopilot.autopilot.IOchAutopilotStatusListener
import com.mogo.och.bridge.autopilot.autopilot.OchAutoPilotStatusListenerManager
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.utils.RxUtils
import io.reactivex.disposables.Disposable
@@ -23,36 +22,21 @@ object MusicModel : IOchAutopilotStatusListener, IOrderStatusChangeListener {
override fun onAutopilotStatusResponse(state: Int) {
// 自驾状态变化 第一次进入自驾 如果音乐属于暂停状态 开始播放 如果没有播放就播放第一首
if(state==IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {
val string = SharedPrefsMgr.getInstance().getString(startMusicWithOrderKey)
if (string == null) {
CharterPassengerModel.getCurrentOrderInfo()?.let {
RxUtils.disposeSubscribe(stopMusicDisposable)
SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo)
AuditionManager.musicList.forEach {music->
if(music.state==PlayState.Pause){
AuditionManager.toggle(music)
return
}
}
if(!AuditionManager.isPlaying()) {
AuditionManager.playFirst()
}
MediaManager.Audition.replayOrplayFirst()
}
} else {
CharterPassengerModel.getCurrentOrderInfo()?.let {
if (it.orderNo != string) {
RxUtils.disposeSubscribe(stopMusicDisposable)
SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo)
AuditionManager.musicList.forEach {music->
if(music.state==PlayState.Pause){
AuditionManager.toggle(music)
return
}
}
if(!AuditionManager.isPlaying()) {
AuditionManager.playFirst()
}
MediaManager.Audition.replayOrplayFirst()
}
}
}
@@ -69,7 +53,7 @@ object MusicModel : IOchAutopilotStatusListener, IOrderStatusChangeListener {
CharterPassengerModel.getCurrentOrderInfo()?.let {
RxUtils.disposeSubscribe(stopMusicDisposable)
stopMusicDisposable = RxUtils.createSubscribe(60_000) {
AuditionManager.stop()
MediaManager.Audition.stop()
}
}
}

View File

@@ -14,9 +14,10 @@ import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.SimpleTarget
import com.bumptech.glide.request.transition.Transition
import com.mogo.och.charter.passenger.R
import com.mogo.och.common.module.manager.audition.AuditionManager
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.manager.audition.PlayState
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.biz.media.MusicDataChangeListener
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.biz.media.data.PlayState
import kotlinx.android.synthetic.main.charter_p_bottom_music.view.aciv_center_image
import kotlinx.android.synthetic.main.charter_p_bottom_music.view.actv_title
import kotlinx.android.synthetic.main.charter_p_bottom_music.view.aciv_playing
@@ -27,7 +28,7 @@ open class MusicCheckView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr), AuditionManager.MusicDataChangeListener {
) : ConstraintLayout(context, attrs, defStyleAttr), MusicDataChangeListener {
companion object {
private const val TAG = "StopSiteView"
@@ -87,11 +88,12 @@ open class MusicCheckView @JvmOverloads constructor(
actv_title.setTextColor(context.getColor(R.color.charter_p_090f28))
aciv_center_image.setImageResource(normalDrawable)
if(AuditionManager.isPlaying()){
if(MediaManager.Audition.isPlaying()==true){
default_info.visibility = View.GONE
aciv_playing.visibility = View.VISIBLE
aciv_playing_bg.visibility = View.VISIBLE
AuditionManager.musicDataPlaying?.let {
MediaManager.Audition.getPlaying()?.let {
Glide.with(context)
.load(it.coverHeadImageUrl)
.apply(RequestOptions().placeholder(R.drawable.charter_p_music_bg_relax_head))
@@ -140,7 +142,7 @@ open class MusicCheckView @JvmOverloads constructor(
override fun onAttachedToWindow() {
super.onAttachedToWindow()
AuditionManager.addDataChangeListener(TAG,this)
MediaManager.Audition.addListener(TAG,this)
parent?.let {
if (parent is ConstraintLayout) {
if (backageViewId > 0) {
@@ -155,7 +157,7 @@ open class MusicCheckView @JvmOverloads constructor(
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
AuditionManager.removeDataChangeListener(TAG)
MediaManager.Audition.removeListener(TAG)
}
override fun updateState(oldData: MusicData?, musicData: MusicData) {

View File

@@ -8,7 +8,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import com.mogo.och.charter.passenger.R
import com.mogo.och.charter.passenger.ui.music.list.MusicListView
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.biz.media.data.MusicData
import kotlinx.android.synthetic.main.charter_p_music.view.mlv_list
import kotlinx.android.synthetic.main.charter_p_music.view.mpv_music_info

View File

@@ -13,8 +13,8 @@ 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.audition.MusicData
import com.mogo.och.common.module.manager.audition.PlayState
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.biz.media.data.PlayState
import me.jessyan.autosize.AutoSizeCompat
/**
@@ -83,7 +83,7 @@ class MusicListItemAdapter(
holder.musicName.setTypeface(null,Typeface.NORMAL)
}
if (musicData.state==PlayState.Playing) {
if (musicData.state== PlayState.Playing) {
holder.musicPlayState.visibility = View.VISIBLE
}else{
holder.musicPlayState.visibility = View.GONE
@@ -105,7 +105,7 @@ class MusicListItemAdapter(
notifyItemInserted(dataList.size)
}
fun upDateMusicData(oldData: MusicData?,musicData: MusicData) {
fun upDateMusicData(oldData: MusicData?, musicData: MusicData) {
dataList.forEachIndexed { index, musicDataIn ->
if (musicDataIn.id==musicData.id) {
musicDataIn.state = musicData.state
@@ -143,7 +143,7 @@ class MusicListItemAdapter(
}
interface ClickListener {
fun clickItem(musicData: MusicData,position: Int)
fun clickItem(musicData: MusicData, position: Int)
}
}

View File

@@ -9,7 +9,7 @@ import androidx.lifecycle.findViewTreeViewModelStoreOwner
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.charter.passenger.R
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.biz.media.data.MusicData
import kotlinx.android.synthetic.main.charter_p_music_list.view.rv_music_list
class MusicListView : ConstraintLayout, MusicListViewModel.IMusicListViewCaLillback,
@@ -64,7 +64,7 @@ class MusicListView : ConstraintLayout, MusicListViewModel.IMusicListViewCaLillb
lineAdapter.addOneData(it)
}
override fun updateMusicData(oldData: MusicData?,musicData: MusicData) {
override fun updateMusicData(oldData: MusicData?, musicData: MusicData) {
lineAdapter.upDateMusicData(oldData,musicData)
CallerLogger.d(TAG,"${Thread.currentThread().name}----更新数据${oldData}-----${musicData}")
}
@@ -73,7 +73,7 @@ class MusicListView : ConstraintLayout, MusicListViewModel.IMusicListViewCaLillb
lineAdapter.setSelect(nextMusicData,preMusicData)
}
override fun clickItem(musicData: MusicData,position: Int) {
override fun clickItem(musicData: MusicData, position: Int) {
// 通知主页面去显示详情
this.checkListener?.checkItem(musicData)
}

View File

@@ -3,29 +3,23 @@ package com.mogo.och.charter.passenger.ui.music.list
import androidx.lifecycle.ViewModel
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.manager.audition.AuditionManager
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.biz.media.MusicDataChangeListener
import com.mogo.och.common.module.biz.media.data.MusicData
class MusicListViewModel : ViewModel(),
AuditionManager.MusicDataChangeListener {
class MusicListViewModel : ViewModel(), MusicDataChangeListener {
private val TAG = MusicListViewModel::class.java.simpleName
private var viewCallback: IMusicListViewCaLillback? = null
init {
}
fun setDistanceCallback(viewCallback: IMusicListViewCaLillback) {
this.viewCallback = viewCallback
viewCallback.addAllData(AuditionManager.musicList)
CallerLogger.d(TAG,"初始化音乐${AuditionManager.musicList.size}")
AuditionManager.addDataChangeListener(TAG,this)
MediaManager.Audition.addListener(TAG,this)
}
override fun onCleared() {
AuditionManager.removeDataChangeListener(TAG)
MediaManager.Audition.removeListener(TAG)
super.onCleared()
this.viewCallback = null
}
@@ -33,10 +27,15 @@ class MusicListViewModel : ViewModel(),
interface IMusicListViewCaLillback {
fun addAllData(data:MutableList<MusicData>)
fun addOneData(it: MusicData)
fun updateMusicData(oldData: MusicData?,musicData: MusicData)
fun updateMusicData(oldData: MusicData?, musicData: MusicData)
fun upDateSelectMusic(nextMusicData: MusicData, preMusicData: MusicData?)
}
override fun onDataDis(musicList: MutableList<MusicData>) {
viewCallback?.addAllData(musicList)
CallerLogger.d(TAG,"初始化音乐${musicList.size}")
}
override fun addOneData(it: MusicData) {
CallerLogger.d(TAG,"添加音乐:${it.songName}--${it.path}")
UiThreadHandler.post({
@@ -44,7 +43,7 @@ class MusicListViewModel : ViewModel(),
}, UiThreadHandler.MODE.QUEUE)
}
override fun updateState(oldData: MusicData?,musicData: MusicData) {
override fun updateState(oldData: MusicData?, musicData: MusicData) {
UiThreadHandler.post({
viewCallback?.updateMusicData(oldData, musicData)
}, UiThreadHandler.MODE.QUEUE)

View File

@@ -17,8 +17,8 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.TimeTransformUtils
import com.mogo.och.charter.passenger.R
import com.mogo.och.charter.passenger.ui.music.list.MusicListViewModel
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.manager.audition.PlayState
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.biz.media.data.PlayState
import com.mogo.och.common.module.utils.DateTimeUtil
import kotlinx.android.synthetic.main.charter_p_music_playing.view.iv_music_cover
import kotlinx.android.synthetic.main.charter_p_music_playing.view.iv_music_cover_bg
@@ -123,7 +123,7 @@ class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingVi
tv_tag.text = musicData.tag.first()
tv_playing_time.text = DateTimeUtil.second2Time(0)
tv_playing_during.text = TimeTransformUtils.stringForTime(musicData.duration.toInt())
if(musicData.state==PlayState.Playing){
if(musicData.state== PlayState.Playing){
iv_toggle.setImageResource(R.drawable.charter_p_music_pause)
startAnimal()
}else{
@@ -168,7 +168,7 @@ class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingVi
}
override fun setPlayOrpause(it: MusicData) {
if(it.state==PlayState.Playing){
if(it.state== PlayState.Playing){
iv_toggle.setImageResource(R.drawable.charter_p_music_pause)
startAnimal()
}else{
@@ -193,7 +193,7 @@ class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingVi
tv_playing_during.text = TimeTransformUtils.stringForTime(duration.toInt())
}
override fun setSelect(currentMusicData: MusicData,preMusicData: MusicData?) {
override fun setSelect(currentMusicData: MusicData, preMusicData: MusicData?) {
viewListModel?.selectMusic(currentMusicData,preMusicData)
}

View File

@@ -3,32 +3,39 @@ 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.audition.AuditionManager
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.biz.media.MusicDataChangeListener
import com.mogo.och.common.module.biz.media.data.MusicData
class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListener {
class MusicPlayingViewModel : ViewModel(), MusicDataChangeListener {
private val TAG = MusicPlayingViewModel::class.java.simpleName
private var viewCallback: IMusicPlayingViewCallback? = null
private var checkMusicData:MusicData?=null
private var checkMusicData: MusicData?=null
init {
}
private val musicDataList = mutableListOf<MusicData>()
fun setDistanceCallback(viewCallback: IMusicPlayingViewCallback) {
this.viewCallback = viewCallback
AuditionManager.addDataChangeListener(TAG,this)
MediaManager.Audition.addListener(TAG,this)
}
override fun onCleared() {
super.onCleared()
AuditionManager.removeDataChangeListener(TAG)
MediaManager.Audition.removeListener(TAG)
this.viewCallback = null
}
override fun onDataDis(musicList: MutableList<MusicData>) {
musicDataList.addAll(musicDataList)
}
override fun addOneData(it: MusicData) {
musicDataList.add(it)
}
fun setMusicData(musicData: MusicData) {
this.checkMusicData = musicData
this.viewCallback?.setViewData(musicData)
@@ -38,9 +45,8 @@ class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListen
if(checkMusicData!=null){
setMusicData(this.checkMusicData!!)
}else{
val musicList = AuditionManager.musicList
if(musicList.size>0){
val first = musicList.first()
if (musicDataList.isNotEmpty()) {
val first = musicDataList.first()
setMusicData(first)
viewCallback?.setSelect(first,null)
}
@@ -50,33 +56,34 @@ class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListen
fun toggle() {
checkMusicData?.let {
CallerLogger.d(TAG,"toggle:${it.songName}")
AuditionManager.toggle(it)
MediaManager.Audition.toggle(it)
}
}
fun showPreMusic() {
checkMusicData?.let {
val playing = AuditionManager.isPlaying()
val nextMusicData = AuditionManager.getPreMusicData(it)
val preTempMusic = checkMusicData
setMusicData(nextMusicData)
viewCallback?.setSelect(nextMusicData,preTempMusic)
if(playing){
AuditionManager.play(nextMusicData)
MediaManager.Audition.getPreAuditionData(it)?.let {
val preTempMusic = checkMusicData
setMusicData(it)
viewCallback?.setSelect(it,preTempMusic)
if(MediaManager.Audition.isPlaying()==true){
MediaManager.Audition.play(it)
}
}
}
}
fun showNextMusic() {
checkMusicData?.let {
val playing = AuditionManager.isPlaying()
val nextMusicData = AuditionManager.getNextMusicData(it)
val preTempMusic = checkMusicData
setMusicData(nextMusicData)
viewCallback?.setSelect(nextMusicData,preTempMusic)
if(playing){
AuditionManager.play(nextMusicData)
MediaManager.Audition.getNextAuditionData(it)?.let {
val preTempMusic = checkMusicData
setMusicData(it)
viewCallback?.setSelect(it,preTempMusic)
if(MediaManager.Audition.isPlaying()==true){
MediaManager.Audition.play(it)
}
}
}
}
@@ -84,10 +91,10 @@ class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListen
fun setViewData(musicData: MusicData)
fun setPlayOrpause(it: MusicData)
fun setProgress(currentPlay: Long, duration: Long)
fun setSelect(currentMusicData: MusicData,preMusicData: MusicData?)
fun setSelect(currentMusicData: MusicData, preMusicData: MusicData?)
}
override fun updateState(oldData:MusicData?,musicData: MusicData) {
override fun updateState(oldData: MusicData?, musicData: MusicData) {
checkMusicData?.let {
if(it.id==musicData.id){
it.state = musicData.state
@@ -115,24 +122,25 @@ class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListen
viewCallback?.setPlayOrpause(it)
}
}
val nextMusicData = AuditionManager.getNextMusicData(it)
val preTempMusic = checkMusicData
setMusicData(nextMusicData)
viewCallback?.setSelect(nextMusicData,preTempMusic)
AuditionManager.play(nextMusicData)
MediaManager.Audition.getNextAuditionData(it)?.let { nextMusicData->
val preTempMusic = checkMusicData
setMusicData(nextMusicData)
viewCallback?.setSelect(nextMusicData,preTempMusic)
MediaManager.Audition.play(nextMusicData)
}
}
}
fun seekTo(progress: Int) {
AuditionManager.seekTo(progress)
MediaManager.Audition.seekTo(progress)
}
fun setClickMusicData(musicData: MusicData) {
CallerLogger.d(TAG,"setClickMusicData:${musicData.songName}")
setMusicData(musicData)
val playing = AuditionManager.isPlaying()
if(playing){
AuditionManager.play(musicData)
if(MediaManager.Audition.isPlaying()==true){
MediaManager.Audition.play(musicData)
}
}
}

View File

@@ -24,7 +24,7 @@ import com.mogo.och.common.module.wigets.toast.ToastCharterUtils
import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider
import com.mogo.och.charter.passenger.R
import com.mogo.och.charter.passenger.utils.FullVideoUtils
import com.mogo.och.common.module.manager.audiofocus.AudioFocusManager
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.wigets.media.MediaItem
import com.mogo.skin.widget.SkinImageView
import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack
@@ -133,7 +133,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
start.setImageResource(R.drawable.charter_p_function_video_player_pause_small)
}
showOrHideStartPlayButton(false)
AudioFocusManager.setVideoFocusChange(true)
MediaManager.setVideoFocusChange(true)
}
else -> {
if(isIfCurrentIsFullscreen){
@@ -142,7 +142,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
start.setImageResource(R.drawable.charter_p_function_video_player_start_small)
}
showOrHideStartPlayButton(true)
AudioFocusManager.setVideoFocusChange(false)
MediaManager.setVideoFocusChange(false)
}
}
}
@@ -256,7 +256,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
override fun onCompletion() {
CallerLogger.d(TAG,"onCompletion")
AudioFocusManager.setVideoFocusChange(false)
MediaManager.setVideoFocusChange(false)
start.setImageResource(R.drawable.charter_p_function_video_player_start_small)
}
@@ -279,7 +279,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
override fun onError(what: Int, extra: Int) {
super.onError(what, extra)
CallerLogger.d(TAG,"onError--${what}--${extra}")
AudioFocusManager.setVideoFocusChange(false)
MediaManager.setVideoFocusChange(false)
mThumbImageViewLayout?.visibility = View.VISIBLE
ToastCharterUtils.showToastLong("哎呀,出错了,看看其他视频吧")
currentTime = -1

View File

@@ -1,16 +1,17 @@
package com.mogo.och.common.module.manager.audiofocus
package com.mogo.och.biz.media
import android.content.Context
import android.media.AudioManager
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.common.module.manager.EnvManager
import com.mogo.och.common.module.manager.audition.AuditionManager
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.manager.audition.PlayState
import com.mogo.och.biz.media.audition.AuditionManager
import com.mogo.och.common.module.biz.media.MusicDataChangeListener
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.biz.media.data.PlayState
import com.shuyu.gsyvideoplayer.GSYVideoManager
object AudioFocusManager : AuditionManager.MusicDataChangeListener {
object AudioFocusManager : MusicDataChangeListener {
const val TAG = "AudioFocusManager"
@@ -23,14 +24,14 @@ object AudioFocusManager : AuditionManager.MusicDataChangeListener {
private var musicVolumeInTTS = 0
init {
AuditionManager.addDataChangeListener(TAG,this)
AuditionManager.addMusicListener(TAG,this)
mAudioManager = AbsMogoApplication.getApp().getSystemService(Context.AUDIO_SERVICE) as AudioManager
mMaxVolume = mAudioManager?.getStreamMaxVolume(AudioManager.STREAM_MUSIC)?:0
musicVolumeInTTS = (mMaxVolume*0.1f).toInt()
musicVolumeInTTS = (mMaxVolume *0.1f).toInt()
}
override fun updateState(oldData: MusicData?, musicData: MusicData) {
val temp = musicData.state==PlayState.Playing
val temp = musicData.state== PlayState.Playing
if(temp!= isPlayingMusic){
isPlayingMusic = temp
}
@@ -38,7 +39,7 @@ object AudioFocusManager : AuditionManager.MusicDataChangeListener {
// 播放音乐需要把视频暂停掉
GSYVideoManager.onPause()
}
CallerLogger.d(TAG,"music updateState ${isPlayingTTS}--${isPlayingMusic}---${isPlayingVideo}")
CallerLogger.d(TAG,"music updateState $isPlayingTTS--$isPlayingMusic---$isPlayingVideo")
}
fun setTTSFocusChange(isSpeaking:Boolean){
@@ -57,11 +58,11 @@ object AudioFocusManager : AuditionManager.MusicDataChangeListener {
}
}
}
CallerLogger.d(TAG, "setTTSFocusChange ${isPlayingTTS}--${isPlayingMusic}---${isPlayingVideo}")
CallerLogger.d(TAG, "setTTSFocusChange $isPlayingTTS--$isPlayingMusic---$isPlayingVideo")
}
fun setVideoFocusChange(isPlaying:Boolean){
CallerLogger.d(TAG, "setMusicFocusChange ${isPlayingTTS}--${isPlayingMusic}---${isPlayingVideo}")
CallerLogger.d(TAG, "setMusicFocusChange $isPlayingTTS--$isPlayingMusic---$isPlayingVideo")
if(isPlaying!= isPlayingVideo) {
isPlayingVideo = isPlaying
if(isPlaying){

View File

@@ -0,0 +1,115 @@
package com.mogo.och.biz.media
import android.content.Context
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.eagle.core.function.call.base.CallerBase
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
import com.mogo.och.biz.media.audition.AuditionManager
import com.mogo.och.common.module.biz.media.IMediaListener
import com.mogo.och.common.module.biz.media.MediaService
import com.mogo.och.common.module.biz.media.MusicDataChangeListener
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.constant.OchCommonConst
import com.mogo.och.common.module.wigets.media.MediaItem
/**
* eye 桥
*/
@Route(path = OchCommonConst.BIZ_Media)
class MediaProvider : MediaService, CallerBase<IMediaListener>() {
private var context: Context? = null
private val tag = M_OCHCOMMON + "MediaProvider"
override fun init(context: Context?) {
this.context = context
}
override fun addMediaListener(tag: String, listener: IMediaListener) {
addListener(tag, listener)
}
override fun removeBridgeListener(tag: String) {
removeListener(tag)
}
override fun postSiteIntroduceInfo(list: MutableList<MediaItem>) {
M_LISTENERS.forEach {
it.value.diapatchMedia(list)
}
}
override fun setMediaResume() {
M_LISTENERS.forEach {
it.value.setMediaResume()
}
}
override fun setMediaPause() {
M_LISTENERS.forEach {
it.value.setMediaPause()
}
}
override fun setTTSFocusChange(speaking: Boolean) {
AudioFocusManager.setTTSFocusChange(speaking)
}
override fun setVideoFocusChange(playing: Boolean) {
AudioFocusManager.setVideoFocusChange(playing)
}
override fun musicStop() {
AuditionManager.stop()
}
override fun musicReplayOrplayFirst() {
AuditionManager.replayOrplayFirst()
}
override fun removeAuditionListener(tag: String) {
AuditionManager.removeMusicListener(tag)
}
override fun addAuditionListener(tag: String, listener: MusicDataChangeListener) {
AuditionManager.addMusicListener(tag,listener)
}
override fun auditionIsPlaying(): Boolean {
return AuditionManager.isPlaying()
}
override fun getPlaying(): MusicData? {
return AuditionManager.musicDataPlaying
}
override fun palyAudition(musicData: MusicData) {
AuditionManager.play(musicData)
}
override fun getPreAuditionData(it: MusicData): MusicData {
return AuditionManager.getPreMusicData(it)
}
override fun getNextAuditionData(it: MusicData): MusicData {
return AuditionManager.getNextMusicData(it)
}
override fun toggle(musicData: MusicData) {
AuditionManager.toggle(musicData)
}
override fun seekTo(progress: Int) {
AuditionManager.seekTo(progress)
}
override fun getAuditionDataList(): MutableList<MusicData> {
return AuditionManager.musicList
}
}

View File

@@ -0,0 +1,18 @@
package com.mogo.och.biz.media
import android.annotation.SuppressLint
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
import com.mogo.och.common.module.constant.OchCommonConst
object MediaServiceManager {
private const val TAG = M_OCHCOMMON+"MediaServiceManager"
@SuppressLint("StaticFieldLeak")
private var mediaService: MediaProvider? =
ARouter.getInstance().build(OchCommonConst.BIZ_Media).navigation() as MediaProvider
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.common.module.manager.audition
package com.mogo.och.biz.media.audition
import android.media.AudioManager
import android.media.MediaPlayer
@@ -24,7 +24,7 @@ object Audition: MediaPlayer.OnPreparedListener,
}
fun registerOnAuditionListener(listener: OnAuditionListener?) {
this.listener = listener
Audition.listener = listener
}
fun unregisterOnAuditionListener() {

View File

@@ -1,4 +1,4 @@
package com.mogo.och.common.module.manager.audition
package com.mogo.och.biz.media.audition
import android.media.MediaExtractor
import android.media.MediaFormat
@@ -11,6 +11,7 @@ import com.mogo.eagle.core.utilcode.download.callback.IDownloadListener
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager.EVENT_KEY_INFE_WITH_MUSIC
import com.mogo.och.common.module.utils.FileUtils
@@ -25,7 +26,7 @@ import com.mogo.eagle.core.utilcode.util.FileUtils as FileHelper
object AuditionCacheManager {
private var dataChangeListener:DataChangeListener?=null
private var dataChangeListener: DataChangeListener?=null
private val context = AbsMogoApplication.getApp()
private const val TAG = "AuditionCacheManager"
@@ -175,7 +176,7 @@ object AuditionCacheManager {
}
fun addDataChangeListener(dataChangeListener: DataChangeListener) {
this.dataChangeListener = dataChangeListener
AuditionCacheManager.dataChangeListener = dataChangeListener
getMusicDataByLocationConfig()
}

View File

@@ -1,8 +1,10 @@
package com.mogo.och.common.module.manager.audition
package com.mogo.och.biz.media.audition
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.och.common.module.manager.audiofocus.AudioFocusManager
import com.mogo.och.common.module.biz.media.MusicDataChangeListener
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.biz.media.data.PlayState
import java.util.concurrent.ConcurrentHashMap
object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAuditionListener {
@@ -18,22 +20,22 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
init {
AuditionCacheManager.addDataChangeListener(this)
Audition.registerOnAuditionListener(this)
AudioFocusManager.load()
}
fun addDataChangeListener(tag: String, listener: MusicDataChangeListener) {
fun addMusicListener(tag: String, listener: MusicDataChangeListener) {
if (dataChangeListeners.containsKey(tag)) {
return
}
dataChangeListeners[tag] = listener
listener.onDataDis(musicList)
}
fun removeDataChangeListener(tag: String){
fun removeMusicListener(tag: String){
dataChangeListeners.remove(tag)
}
private fun getMusicDataByState(state:PlayState):Pair<Int,MusicData>?{
private fun getMusicDataByState(state: PlayState):Pair<Int, MusicData>?{
musicList.forEachIndexed { index, musicData ->
if(musicData.state==state){
return Pair(index,musicData)
@@ -103,10 +105,23 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
}
}
private fun resetData():MusicData?{
var tempRusult:MusicData?=null
//如果音乐属于暂停状态 开始播放 如果没有播放就播放第一首
fun replayOrplayFirst(){
musicList.forEach {music->
if(music.state==PlayState.Pause){
toggle(music)
return
}
}
if(!isPlaying()) {
playFirst()
}
}
private fun resetData(): MusicData?{
var tempRusult: MusicData?=null
musicList.forEach {
if(it.state!=PlayState.None){
if(it.state!= PlayState.None){
tempRusult = it
}
it.state = PlayState.None
@@ -127,20 +142,6 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
}
}
public interface MusicDataChangeListener{
fun addOneData(it: MusicData){}
/**
* toggle 修改播放器状态
* @param oldData 上一个不是 PlayState.None 的歌曲
* @param musicData 当前播放状态发生变化的歌曲
*/
fun updateState(oldData: MusicData?,musicData: MusicData)
fun updatePlayCurrent(currentPlay: Long, duration: Long, second: MusicData){}
fun onMusicCompletion(musicData: MusicData) {}
}
/**
* 音乐播放完毕
*/
@@ -152,7 +153,7 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
it.value.onMusicCompletion(oldData)
}
}else{
musicList.forEach {musicData->
musicList.forEach { musicData->
if(musicData.path==path){
dataChangeListeners.forEach {
it.value.onMusicCompletion(musicData)
@@ -183,7 +184,7 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
}
}else{
musicList.forEachIndexed { index, musicData ->
if(musicData.path==Audition.oldPath){
if(musicData.path== Audition.oldPath){
dataChangeListeners.forEach {
it.value.updatePlayCurrent(currentPlay,duration,musicData)
}
@@ -193,7 +194,7 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
}
}
fun getNextMusicData(it: MusicData):MusicData {
fun getNextMusicData(it: MusicData): MusicData {
val indexOf = musicList.indexOf(it)
if(indexOf== musicList.size-1){
return musicList.first()
@@ -216,7 +217,7 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi
}
fun setVolume(leftVolume:Float, rightVolume:Float){
Audition.setVolume(leftVolume,rightVolume)
Audition.setVolume(leftVolume, rightVolume)
}
}

View File

@@ -1,9 +0,0 @@
package com.mogo.och.common.module.biz.media
import com.mogo.och.common.module.wigets.media.MediaItem
interface IMediaDispatch {
fun diapatchMedia(list :MutableList<MediaItem>)
fun setMediaPause(){}
fun setMediaResume(){}
}

View File

@@ -0,0 +1,28 @@
package com.mogo.och.common.module.biz.media
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.wigets.media.MediaItem
interface IMediaListener {
fun diapatchMedia(list :MutableList<MediaItem>)
fun setMediaPause(){}
fun setMediaResume(){}
}
interface MusicDataChangeListener{
fun addOneData(it: MusicData){}
/**
* toggle 修改播放器状态
* @param oldData 上一个不是 PlayState.None 的歌曲
* @param musicData 当前播放状态发生变化的歌曲
*/
fun updateState(oldData: MusicData?, musicData: MusicData)
fun updatePlayCurrent(currentPlay: Long, duration: Long, second: MusicData){}
fun onMusicCompletion(musicData: MusicData) {}
fun onDataDis(musicList: MutableList<MusicData>){}
}

View File

@@ -1,29 +1,92 @@
package com.mogo.och.common.module.biz.media
import com.mogo.och.common.module.utils.CallerBase
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.constant.OchCommonConst
import com.mogo.och.common.module.wigets.media.MediaItem
object MediaManager : CallerBase<IMediaDispatch>() {
object MediaManager {
private var mediaService: MediaService? =
ARouter.getInstance().build(OchCommonConst.BIZ_Media).navigation() as MediaService
fun addListener(tag:String, listener: IMediaListener){
mediaService?.addMediaListener(tag,listener)
}
fun removeListener(tag: String){
mediaService?.removeBridgeListener(tag)
}
fun postSiteIntroduceInfo(list: MutableList<MediaItem>){
M_LISTENERS.forEach {
val listener = it.value
listener.diapatchMedia(list)
}
mediaService?.postSiteIntroduceInfo(list)
}
fun setMediaResume(){
M_LISTENERS.forEach {
val listener = it.value
listener.setMediaResume()
}
mediaService?.setMediaResume()
}
fun setMediaPause(){
M_LISTENERS.forEach {
val listener = it.value
listener.setMediaPause()
mediaService?.setMediaPause()
}
fun setTTSFocusChange(isSpeaking:Boolean){
mediaService?.setTTSFocusChange(isSpeaking)
}
fun setVideoFocusChange(isPlaying:Boolean){
mediaService?.setVideoFocusChange(isPlaying)
}
object Audition{
fun stop() {
mediaService?.musicStop()
}
fun replayOrplayFirst(){
mediaService?.musicReplayOrplayFirst()
}
fun removeListener(tag: String) {
mediaService?.removeAuditionListener(tag)
}
fun addListener(tag: String, listener: MusicDataChangeListener) {
mediaService?.addAuditionListener(tag,listener)
}
fun isPlaying():Boolean?{
return mediaService?.auditionIsPlaying()
}
fun getPlaying(): MusicData? {
return mediaService?.getPlaying()
}
fun play(musicData: MusicData) {
mediaService?.palyAudition(musicData)
}
fun getPreAuditionData(it: MusicData): MusicData? {
return mediaService?.getPreAuditionData(it)
}
fun getNextAuditionData(it: MusicData): MusicData? {
return mediaService?.getNextAuditionData(it)
}
fun getAuditionDataList(): MutableList<MusicData>? {
return mediaService?.getAuditionDataList()
}
fun toggle(musicData: MusicData) {
mediaService?.toggle(musicData)
}
fun seekTo(progress: Int) {
mediaService?.seekTo(progress)
}
}
}

View File

@@ -0,0 +1,47 @@
package com.mogo.och.common.module.biz.media
import com.alibaba.android.arouter.facade.template.IProvider
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.wigets.media.MediaItem
interface MediaService : IProvider {
fun addMediaListener(tag: String, listener: IMediaListener)
fun removeBridgeListener(tag: String)
fun postSiteIntroduceInfo(list: MutableList<MediaItem>)
fun setMediaResume()
fun setMediaPause()
fun setTTSFocusChange(speaking: Boolean)
fun setVideoFocusChange(playing: Boolean)
fun musicStop()
fun musicReplayOrplayFirst()
fun removeAuditionListener(tag: String)
fun addAuditionListener(tag: String, listener: MusicDataChangeListener)
fun auditionIsPlaying(): Boolean
fun getPlaying(): MusicData?
fun palyAudition(musicData: MusicData)
fun getPreAuditionData(it: MusicData): MusicData
fun getNextAuditionData(it: MusicData): MusicData
fun toggle(musicData: MusicData)
fun seekTo(progress: Int)
fun getAuditionDataList(): MutableList<MusicData>
}

View File

@@ -1,4 +1,4 @@
package com.mogo.och.common.module.manager.audition
package com.mogo.och.common.module.biz.media.data
/**
* 音乐文件

View File

@@ -37,6 +37,8 @@ class OchCommonConst {
const val BIZ_SKIN = "/ochbiz/common/skin"
const val BIZ_SCANNER = "/ochbiz/common/scanner"
const val BIZ_TIME = "/ochbiz/common/time"
const val BIZ_Media = "/ochbiz/common/media"
const val BIZ_OFFLINE = "/offlinedriver/offlinedata"
const val BIZ_Bridge = "/birdge/bridge"

View File

@@ -5,7 +5,7 @@ import com.mogo.commons.voice.AIAssist
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.manager.audiofocus.AudioFocusManager
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.manager.socket.lan.LanSocketManager
import com.mogo.och.common.module.manager.socket.lan.bean.OutofVoice
@@ -112,21 +112,21 @@ object VoiceNotice {
override fun onSpeakStart(speakText: String?) {
super.onSpeakStart(speakText)
callBack?.onSpeakStart(speakText)
AudioFocusManager.setTTSFocusChange(true)
MediaManager.setTTSFocusChange(true)
save2Log("开始播放${speakText}")
}
override fun onSpeakEnd(speakText: String?) {
super.onSpeakEnd(speakText)
callBack?.onSpeakEnd(speakText)
AudioFocusManager.setTTSFocusChange(false)
MediaManager.setTTSFocusChange(false)
save2Log("结束播放${speakText}")
}
override fun onSpeakError(speakText: String?, errorMsg: String?) {
super.onSpeakError(speakText, errorMsg)
callBack?.onSpeakError(speakText,errorMsg)
AudioFocusManager.setTTSFocusChange(false)
MediaManager.setTTSFocusChange(false)
save2Log("播放错误,内容:${speakText}、errorMsg:${errorMsg}")
}
}

View File

@@ -5,7 +5,7 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.Vehicle
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.biz.media.data.MusicData
object MediaBeanManager {

View File

@@ -9,7 +9,7 @@ import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.R
import com.mogo.och.common.module.biz.media.IMediaDispatch
import com.mogo.och.common.module.biz.media.IMediaListener
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.manager.download.DownloadManager
import com.mogo.och.common.module.manager.loop.BizLoopManager
@@ -24,7 +24,7 @@ import kotlinx.android.synthetic.main.fragment_video_player.imageVideoRotationVi
* @date: 2022/4/12
*/
class MediaPlayerFragment :
MvpFragment<MediaPlayerFragment?, MediaPlayerPresenter?>(), IMediaDispatch {
MvpFragment<MediaPlayerFragment?, MediaPlayerPresenter?>(), IMediaListener {
companion object {
private val TAG = MediaPlayerFragment::class.java.simpleName

View File

@@ -15,12 +15,12 @@ import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.SimpleTarget
import com.bumptech.glide.request.transition.Transition
import com.elegant.utils.UiThreadHandler
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.common.module.manager.audition.AuditionManager
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.manager.audition.PlayState
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.biz.media.MusicDataChangeListener
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.biz.media.data.PlayState
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.unmanned.passenger.ui.music.playing.MusicPlayingViewModel
import com.mogo.och.unmanned.taxi.passenger.R
@@ -34,7 +34,7 @@ import kotlinx.android.synthetic.main.taxi_p_rightbar.view.con_third_group
import me.jessyan.autosize.utils.AutoSizeUtils
class RightBarView : ConstraintLayout, AuditionManager.MusicDataChangeListener {
class RightBarView : ConstraintLayout, MusicDataChangeListener {
private val TAG = "RightBarView"
@@ -88,8 +88,8 @@ class RightBarView : ConstraintLayout, AuditionManager.MusicDataChangeListener {
ck_music.setBackgroundResource(R.drawable.taxi_p_music_selector)
endAnimal()
} else {
if(AuditionManager.isPlaying()){
AuditionManager.musicDataPlaying?.let {
if(MediaManager.Audition.isPlaying()==true){
MediaManager.Audition.getPlaying()?.let {
Glide.with(context)
.load(it.coverHeadImageUrl)
.apply(RequestOptions().placeholder(R.drawable.taxt_p_music_bg_relax_head))
@@ -151,7 +151,7 @@ class RightBarView : ConstraintLayout, AuditionManager.MusicDataChangeListener {
override fun onAttachedToWindow() {
super.onAttachedToWindow()
CallerLogger.d(TAG, "onAttachedToWindow")
AuditionManager.addDataChangeListener(TAG,this)
MediaManager.Audition.addListener(TAG,this)
// RightBarView启动的时候必须把MusicPlayingViewModel初始化了否则和AuditionManager的回掉及逻辑会有问题
try {
val musicPlayingViewModel = findViewTreeViewModelStoreOwner()?.let {
@@ -165,7 +165,7 @@ class RightBarView : ConstraintLayout, AuditionManager.MusicDataChangeListener {
}
override fun onDetachedFromWindow() {
AuditionManager.removeDataChangeListener(TAG)
MediaManager.Audition.removeListener(TAG)
super.onDetachedFromWindow()
}

View File

@@ -3,10 +3,11 @@ package com.mogo.och.unmanned.passenger.ui.music
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.common.module.manager.audition.AuditionManager
import com.mogo.och.bridge.autopilot.autopilot.IOchAutopilotStatusListener
import com.mogo.och.bridge.autopilot.autopilot.OchAutoPilotStatusListenerManager
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.biz.media.MusicDataChangeListener
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.common.module.utils.CallerBase
import com.mogo.och.common.module.utils.RxUtils
@@ -16,7 +17,8 @@ import io.reactivex.disposables.Disposable
import com.mogo.och.unmanned.taxi.utils.order.OrderListener
import com.mogo.och.unmanned.taxi.utils.order.OrderModel
object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, IOchAutopilotStatusListener, AuditionManager.MusicDataChangeListener {
object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, IOchAutopilotStatusListener,
MusicDataChangeListener {
private const val TAG = "MusicModel"
@@ -24,12 +26,19 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
OrderModel.setOrderStatusCallback(TAG,this)
//自动驾驶状态监听
OchAutoPilotStatusListenerManager.addListener(TAG, this)
AuditionManager.addDataChangeListener(TAG,this)
MediaManager.Audition.addListener(TAG,this)
}
private var stopMusicDisposable: Disposable? = null
private var orderInfo: BaseOrderBean? = null
override fun addOneData(musicData: MusicData) {
M_LISTENERS.forEach{
it.value.addOneData(musicData)
}
}
private const val startMusicWithOrderKey = "STARTMUSICWITHORDER"
override fun onCurrentOrderStatusChanged(order: BaseOrderBean?) {
@@ -51,13 +60,13 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
TaxiOrderStatusEnum.JourneyCompleted -> {
cancelStopMusicDisposable()
stopMusicDisposable = RxUtils.createSubscribe(60_000) {
AuditionManager.stop()
MediaManager.Audition.stop()
}
}
TaxiOrderStatusEnum.Cancel -> {
cancelStopMusicDisposable()
stopMusicDisposable = RxUtils.createSubscribe(60_000) {
AuditionManager.stop()
MediaManager.Audition.stop()
}
}
}
@@ -71,7 +80,12 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
cancelStopMusicDisposable()
SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo)
BizLoopManager.runInMainThread{
checkMusic(AuditionManager.musicList.first(),true)
MediaManager.Audition.getAuditionDataList()?.let {list->
if(list.isNotEmpty()) {
checkMusic(list.first(), true)
}
}
}
}
} else {
@@ -80,7 +94,11 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
cancelStopMusicDisposable()
SharedPrefsMgr.getInstance().putString(startMusicWithOrderKey, it.orderNo)
BizLoopManager.runInMainThread {
checkMusic(AuditionManager.musicList.first(), true)
MediaManager.Audition.getAuditionDataList()?.let { list ->
if(list.isNotEmpty()) {
checkMusic(list.first(), true)
}
}
}
}
}
@@ -90,7 +108,7 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
private fun cancelStopMusicDisposable() {
if (stopMusicDisposable != null) {
AuditionManager.stop()
MediaManager.Audition.stop()
}
RxUtils.disposeSubscribe(stopMusicDisposable)
stopMusicDisposable = null
@@ -102,7 +120,7 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
fun getCheckMusic(): MusicData? {
AuditionManager.musicList.forEach {
MediaManager.Audition.getAuditionDataList()?.forEach {
if (it.select==true) {
return it
}
@@ -111,13 +129,7 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
}
fun seekTo(progress: Int) {
AuditionManager.seekTo(progress)
}
override fun addOneData(musicData: MusicData) {
M_LISTENERS.forEach{
it.value.addOneData(musicData)
}
MediaManager.Audition.seekTo(progress)
}
/**
@@ -125,7 +137,7 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
* 2、如果正在播放 需要开始播放选中音乐
*/
fun checkMusic(musicData: MusicData,startPlay:Boolean = true){
AuditionManager.musicList.forEach {
MediaManager.Audition.getAuditionDataList()?.forEach {
// 上一个选中歌曲
if (it.select==true) {
if(it!=musicData){
@@ -142,7 +154,7 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
}
notifySelectChange(musicData)
if(startPlay) {
AuditionManager.play(musicData)
MediaManager.Audition.play(musicData)
}
}
@@ -155,23 +167,25 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
fun clickPreMusic(){
val checkMusic = getCheckMusic()
checkMusic?.let {
val preMusicData = AuditionManager.getPreMusicData(it)
checkMusic(preMusicData)
MediaManager.Audition.getPreAuditionData(it)?.let { preData->
checkMusic(preData)
}
}
}
fun clickNextMusic(){
val checkMusic = getCheckMusic()
checkMusic?.let {
val nextMusicData = AuditionManager.getNextMusicData(it)
checkMusic(nextMusicData)
MediaManager.Audition.getNextAuditionData(it)?.let { nextData->
checkMusic(nextData)
}
}
}
fun toggleMusic(){
val checkMusic = getCheckMusic()
checkMusic?.let {
AuditionManager.toggle(it)
MediaManager.Audition.toggle(it)
}
}
@@ -205,7 +219,7 @@ object MusicModel : CallerBase<MusicModel.MusicDataListener>(), OrderListener, I
// return false
// }
// return true
return AuditionManager.isPlaying()
return MediaManager.Audition.isPlaying()==true
}
interface MusicDataListener{

View File

@@ -3,15 +3,10 @@ package com.mogo.och.unmanned.passenger.ui.music
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.unmanned.passenger.ui.music.list.MusicListView
import com.mogo.och.unmanned.taxi.passenger.R
import kotlinx.android.synthetic.main.taxi_p_music.view.mlv_list
import kotlinx.android.synthetic.main.taxi_p_music.view.mpv_playing
class MusicView : ConstraintLayout, MusicViewModel.IMusicViewCallback {

View File

@@ -13,8 +13,8 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import com.mogo.eagle.core.utilcode.kotlin.onClick
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.manager.audition.PlayState
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.biz.media.data.PlayState
import com.mogo.och.unmanned.taxi.passenger.R
import kotlinx.android.synthetic.main.taxi_p_music_bar.view.aciv_music_next_bar
import kotlinx.android.synthetic.main.taxi_p_music_bar.view.aciv_music_toggle_bar

View File

@@ -1,7 +1,7 @@
package com.mogo.och.unmanned.passenger.ui.music.bar
import androidx.lifecycle.ViewModel
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.unmanned.passenger.ui.music.MusicModel

View File

@@ -10,8 +10,8 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.manager.audition.PlayState
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.biz.media.data.PlayState
import com.mogo.och.unmanned.taxi.passenger.R
/**
@@ -74,7 +74,7 @@ class MusicListItemAdapter(
holder.itemView.background = null
}
if (musicData.state==PlayState.Playing) {
if (musicData.state== PlayState.Playing) {
holder.musicPlayState.visibility = View.VISIBLE
}else{
holder.musicPlayState.visibility = View.GONE

View File

@@ -8,7 +8,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.unmanned.passenger.ui.music.MusicModel
import com.mogo.och.unmanned.taxi.passenger.R
import kotlinx.android.synthetic.main.taxi_p_music_list.view.rv_music_list

View File

@@ -2,9 +2,8 @@ package com.mogo.och.unmanned.passenger.ui.music.list
import androidx.lifecycle.ViewModel
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.och.common.module.manager.audition.AuditionManager
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.unmanned.passenger.ui.music.MusicModel
@@ -14,11 +13,13 @@ class MusicListViewModel : ViewModel(), MusicModel.MusicDataListener {
private var viewCallback: IMusicListViewCaLillback? = null
fun setDistanceCallback(viewCallback: IMusicListViewCaLillback) {
this.viewCallback = viewCallback
viewCallback.addAllData(AuditionManager.musicList)
CallerLogger.d(TAG, "初始化音乐${AuditionManager.musicList.size}")
MediaManager.Audition.getAuditionDataList()?.let {
viewCallback.addAllData(it)
CallerLogger.d(TAG, "初始化音乐${it.size}")
}
MusicModel.addListener(TAG, this)
}

View File

@@ -13,9 +13,8 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.findViewTreeViewModelStoreOwner
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.TimeTransformUtils
import com.mogo.och.common.module.manager.audiofocus.AudioFocusManager
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.manager.audition.PlayState
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.biz.media.data.PlayState
import com.mogo.och.common.module.utils.DateTimeUtil
import com.mogo.och.unmanned.taxi.passenger.R
import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_music_cover
@@ -112,7 +111,7 @@ class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingVi
tv_tag.text = musicData.tag.first()
tv_playing_time.text = DateTimeUtil.second2Time(0)
tv_playing_during.text = TimeTransformUtils.stringForTime(musicData.duration.toInt())
if(musicData.state==PlayState.Playing){
if(musicData.state== PlayState.Playing){
iv_toggle.setImageResource(R.drawable.taxi_p_music_pause)
startAnimal()
}else{
@@ -181,7 +180,7 @@ class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingVi
}
override fun setPlayOrpause(it: MusicData) {
if(it.state==PlayState.Playing){
if(it.state== PlayState.Playing){
iv_toggle.setImageResource(R.drawable.taxi_p_music_pause)
startAnimal()
}else{

View File

@@ -2,7 +2,7 @@ package com.mogo.och.unmanned.passenger.ui.music.playing
import androidx.lifecycle.ViewModel
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.och.common.module.manager.audition.MusicData
import com.mogo.och.common.module.biz.media.data.MusicData
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.unmanned.passenger.ui.music.MusicModel

View File

@@ -16,7 +16,7 @@ import com.mogo.eagle.core.function.main.MainMoGoApplication
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.common.module.manager.audiofocus.AudioFocusManager
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.manager.loop.BizLoopManager
import com.mogo.och.common.module.wigets.WrapContentLinearLayoutManager
import com.mogo.och.common.module.wigets.media.IMediaDataSourceListener
@@ -165,12 +165,12 @@ internal class InfoVideoView @JvmOverloads constructor(
GSYVideoView.CURRENT_STATE_PLAYING ->{
currentMedia?.isPlayiing = true
infoVideoPlaylist.adapter?.notifyItemChanged(currentMediaIndex)
AudioFocusManager.setVideoFocusChange(true)
MediaManager.setVideoFocusChange(true)
}
else ->{
currentMedia?.isPlayiing = false
infoVideoPlaylist.adapter?.notifyItemChanged(currentMediaIndex)
AudioFocusManager.setVideoFocusChange(false)
MediaManager.setVideoFocusChange(false)
}
}
}

View File

@@ -26,7 +26,7 @@ import com.mogo.eagle.core.utilcode.util.TAG
import com.mogo.eagle.core.utilcode.util.TimeTransformUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.widget.media.video.TextureVideoViewOutlineProvider
import com.mogo.och.common.module.manager.audiofocus.AudioFocusManager
import com.mogo.och.common.module.biz.media.MediaManager
import com.mogo.och.common.module.wigets.media.MediaItem
import com.mogo.och.unmanned.passenger.bean.TaxiPassengerVideoPlay
import com.mogo.och.unmanned.passenger.ui.statusview.StatusBarView
@@ -154,12 +154,12 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
GSYVideoView.CURRENT_STATE_PLAYING ->{
start.setImageResource(R.drawable.notice_video_pause)
showOrHideStartPlayButton(false)
AudioFocusManager.setVideoFocusChange(true)
MediaManager.setVideoFocusChange(true)
}
else -> {
start.setImageResource(R.drawable.notice_video_after_pause)
showOrHideStartPlayButton(true)
AudioFocusManager.setVideoFocusChange(false)
MediaManager.setVideoFocusChange(false)
}
}
}
@@ -314,7 +314,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
override fun onCompletion() {
start.setImageResource(R.drawable.notice_video_after_pause)
AudioFocusManager.setVideoFocusChange(false)
MediaManager.setVideoFocusChange(false)
}
override fun onSurfaceUpdated(surface: Surface) {
@@ -335,7 +335,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer {
override fun onError(what: Int, extra: Int) {
super.onError(what, extra)
AudioFocusManager.setVideoFocusChange(false)
MediaManager.setVideoFocusChange(false)
mThumbImageViewLayout?.visibility = View.VISIBLE
ToastUtils.showLong("哎呀,出错了,看看其他视频吧")
currentTime = -1