diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/MusicCheckView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/MusicCheckView.kt index c992c777a9..1c996c0931 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/MusicCheckView.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/impl/MusicCheckView.kt @@ -162,6 +162,10 @@ open class MusicCheckView @JvmOverloads constructor( aciv_playing.background = resource } }) + }else{ + default_info.visibility = View.VISIBLE + aciv_playing.visibility = View.GONE + endAnimal() } } } \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/video/ConsultVideoPlayer.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/video/ConsultVideoPlayer.kt index c65bb403e7..38e6d6da91 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/video/ConsultVideoPlayer.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/video/ConsultVideoPlayer.kt @@ -17,11 +17,13 @@ import android.widget.TextView import androidx.appcompat.widget.AppCompatImageView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.app.ActivityCompat +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.util.TimeTransformUtils 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.audiofocusmanager.AudioFocusManager import com.mogo.och.common.module.wigets.media.MediaItem import com.shuyu.gsyvideoplayer.listener.VideoAllCallBack import com.shuyu.gsyvideoplayer.utils.GSYVideoType @@ -40,6 +42,7 @@ import java.lang.reflect.Constructor */ class ConsultVideoPlayer : StandardGSYVideoPlayer { + private val TAG = "ConsultVideoPlayer" private lateinit var start: ImageView lateinit var coverImage: ImageView private lateinit var currentTimeTextView: TextView @@ -128,6 +131,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { start.setImageResource(R.drawable.charter_p_function_video_player_pause_small) } showOrHideStartPlayButton(false) + AudioFocusManager.setVideoFocusChange(true) } else -> { if(isIfCurrentIsFullscreen){ @@ -136,6 +140,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { start.setImageResource(R.drawable.charter_p_function_video_player_start_small) } showOrHideStartPlayButton(true) + AudioFocusManager.setVideoFocusChange(false) } } } @@ -186,6 +191,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { forceChange: Boolean ) { super.setProgressAndTime(progress, secProgress, currentTime, totalTime, forceChange) + CallerLogger.d(TAG,"setProgressAndTime¥${progress}-${secProgress}-${currentTime}") //时间显示 currentTimeTextView.text = TimeTransformUtils.stringForTimeWithHours(currentTime) totalTimeTextView.text = TimeTransformUtils.stringForTimeWithHours(totalTime) @@ -247,6 +253,8 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { } override fun onCompletion() { + CallerLogger.d(TAG,"onCompletion") + AudioFocusManager.setVideoFocusChange(false) start.setImageResource(R.drawable.charter_p_function_video_player_start_small) } @@ -268,6 +276,8 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onError(what: Int, extra: Int) { super.onError(what, extra) + CallerLogger.d(TAG,"onError--${what}--${extra}") + AudioFocusManager.setVideoFocusChange(false) mThumbImageViewLayout?.visibility = View.VISIBLE ToastCharterUtils.showToastLong("哎呀,出错了,看看其他视频吧") currentTime = -1 diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/audiofocusmanager/AudioFocusManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/audiofocusmanager/AudioFocusManager.kt new file mode 100644 index 0000000000..86ac59ffa8 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/audiofocusmanager/AudioFocusManager.kt @@ -0,0 +1,72 @@ +package com.mogo.och.common.module.manager.audiofocusmanager + +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.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.PlayState + +object AudioFocusManager : AuditionManager.MusicDataChangeListener { + + const val TAG = "AudioFocusManager" + + private var isPlayingTTS = false + private var isPlayingMusic = false + private var isPlayingVideo = false + + private var mAudioManager: AudioManager? = null + private var mMaxVolume: Int = 15 + private var musicVolumeInTTS = 0 + + init { + AuditionManager.addDataChangeListener(TAG,this) + mAudioManager = AbsMogoApplication.getApp().getSystemService(Context.AUDIO_SERVICE) as AudioManager + mMaxVolume = mAudioManager?.getStreamMaxVolume(AudioManager.STREAM_MUSIC)?:0 + musicVolumeInTTS = (mMaxVolume*0.1f).toInt() + } + + override fun updateState(oldData: MusicData?, musicData: MusicData) { + val temp = musicData.state==PlayState.Playing + if(temp!= isPlayingMusic){ + isPlayingMusic = temp + } + CallerLogger.d(TAG,"music updateState ${isPlayingTTS}--${isPlayingMusic}---${isPlayingVideo}") + } + + fun setTTSFocusChange(isSpeaking:Boolean){ + if(isSpeaking!= isPlayingTTS) { + isPlayingTTS = isSpeaking + if(isSpeaking){ + if(isPlayingMusic){ + val mCurrentVolume = mAudioManager?.getStreamVolume(AudioManager.STREAM_MUSIC)?:0 + if(mCurrentVolume > musicVolumeInTTS){ + AuditionManager.setVolume(0.3f,0.3f) + } + } + }else{ + if(isPlayingMusic){ + AuditionManager.setVolume(1f,1f) + } + } + } + CallerLogger.d(TAG, "setTTSFocusChange ${isPlayingTTS}--${isPlayingMusic}---${isPlayingVideo}") + } + + fun setVideoFocusChange(isPlaying:Boolean){ + CallerLogger.d(TAG, "setMusicFocusChange ${isPlayingTTS}--${isPlayingMusic}---${isPlayingVideo}") + if(isPlaying!= isPlayingVideo) { + isPlayingVideo = isPlaying + if(isPlaying){ + AuditionManager.stop() + } + } + } + + fun load() { + + } + + +} \ 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 70ecd65cfb..ee86be2489 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 @@ -145,6 +145,14 @@ object Audition: MediaPlayer.OnPreparedListener, } } + fun setVolume(leftVolume:Float, rightVolume:Float){ + try { + mediaPlayer?.setVolume(leftVolume,leftVolume) + }catch (e:IllegalStateException){ + e.printStackTrace() + } + } + fun onDestroy() { stop() mediaPlayer = null 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 398339d4dc..c954399e58 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 @@ -1,8 +1,7 @@ package com.mogo.och.common.module.manager.auditionmanager import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger -import com.mogo.och.common.module.manager.distancemamager.IDistanceListener -import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager +import com.mogo.och.common.module.manager.audiofocusmanager.AudioFocusManager import java.util.concurrent.ConcurrentHashMap object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAuditionListener { @@ -18,6 +17,7 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi init { AuditionCacheManager.addDataChangeListener(this) Audition.registerOnAuditionListener(this) + AudioFocusManager.load() } fun addDataChangeListener(tag: String, listener: MusicDataChangeListener) { @@ -64,6 +64,12 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi } fun stop(){ + val playing = isPlaying() + if(playing){ + musicDataPlaying?.let { + toggle(it) + } + } Audition.stop() } @@ -179,4 +185,8 @@ object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAudi Audition.seekTo(progress) } + fun setVolume(leftVolume:Float, rightVolume:Float){ + Audition.setVolume(leftVolume,rightVolume) + } + } \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt index 1efe8ef10b..7794099b4f 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/voice/VoiceNotice.kt @@ -3,6 +3,7 @@ package com.mogo.och.common.module.voice import com.mogo.commons.AbsMogoApplication import com.mogo.commons.voice.AIAssist import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.manager.audiofocusmanager.AudioFocusManager import com.mogo.tts.base.IMogoTTSCallback import com.mogo.tts.base.LangTtsEntity import com.mogo.tts.base.MultiLangTtsEntity @@ -30,17 +31,17 @@ object VoiceNotice { @JvmStatic - fun showNotice(notice: String?, level: Int, delayed: Long = 0,callback:IMogoTTSCallback?=null) { + fun showNotice(notice: String?, level: Int, delayed: Long = 0,callBack:IMogoTTSCallback?=null) { notice?.let { if (delayed == 0L) { UiThreadHandler.post { AIAssist.getInstance(AbsMogoApplication.getApp()) - .speakTTSVoiceWithLevel(it, level) + .speakTTSVoiceWithLevel(it, level,callCallBack(callBack)) } } else { UiThreadHandler.postDelayed({ AIAssist.getInstance(AbsMogoApplication.getApp()) - .speakTTSVoiceWithLevel(it, level) + .speakTTSVoiceWithLevel(it, level, callCallBack(callBack)) }, delayed) } } @@ -59,6 +60,29 @@ object VoiceNotice { @JvmStatic fun showNotice(listTTS: MutableList, level: Int,callBack: IMogoTTSCallback?=null) { AIAssist.getInstance(AbsMogoApplication.getApp()) - .speakMultiLangTTSWithLevel(MultiLangTtsEntity(listTTS), level, callBack) + .speakMultiLangTTSWithLevel(MultiLangTtsEntity(listTTS), level,callCallBack(callBack)) + } + + + private fun callCallBack(callBack: IMogoTTSCallback?):IMogoTTSCallback{ + return object :IMogoTTSCallback{ + override fun onSpeakStart(speakText: String?) { + super.onSpeakStart(speakText) + callBack?.onSpeakStart(speakText) + AudioFocusManager.setTTSFocusChange(true) + } + + override fun onSpeakEnd(speakText: String?) { + super.onSpeakEnd(speakText) + callBack?.onSpeakEnd(speakText) + AudioFocusManager.setTTSFocusChange(false) + } + + override fun onSpeakError(speakText: String?, errorMsg: String?) { + super.onSpeakError(speakText, errorMsg) + callBack?.onSpeakError(speakText,errorMsg) + AudioFocusManager.setTTSFocusChange(false) + } + } } } \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt index 6e7c3cd1fb..4a5ffdee04 100644 --- a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt @@ -20,6 +20,7 @@ import androidx.core.app.ActivityCompat 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.audiofocusmanager.AudioFocusManager import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.ui.statusview.StatusBarView import com.mogo.och.taxi.passenger.ui.video.FullVideoUtils @@ -135,10 +136,12 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { GSYVideoView.CURRENT_STATE_PLAYING ->{ start.setImageResource(R.drawable.notice_video_pause) aivStartPlay.visibility = View.GONE + AudioFocusManager.setVideoFocusChange(true) } else -> { start.setImageResource(R.drawable.notice_video_after_pause) aivStartPlay.visibility = View.VISIBLE + AudioFocusManager.setVideoFocusChange(false) } } } @@ -279,6 +282,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onCompletion() { start.setImageResource(R.drawable.notice_video_after_pause) + AudioFocusManager.setVideoFocusChange(false) } override fun onSurfaceUpdated(surface: Surface) { @@ -299,6 +303,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onError(what: Int, extra: Int) { super.onError(what, extra) + AudioFocusManager.setVideoFocusChange(false) mThumbImageViewLayout?.visibility = View.VISIBLE ToastUtils.showLong("哎呀,出错了,看看其他视频吧") currentTime = -1 diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/rightbar/RightBarView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/rightbar/RightBarView.kt index e90157382e..c0ab01ef2a 100644 --- a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/rightbar/RightBarView.kt +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/rightbar/RightBarView.kt @@ -19,6 +19,7 @@ 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 import com.mogo.och.common.module.manager.auditionmanager.PlayState +import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.taxi.passenger.common.R import kotlinx.android.synthetic.main.taxi_p_rightbar.view.ck_music import kotlinx.android.synthetic.main.taxi_p_rightbar.view.ck_setting @@ -26,6 +27,7 @@ import kotlinx.android.synthetic.main.taxi_p_rightbar.view.ck_setting_only import kotlinx.android.synthetic.main.taxi_p_rightbar.view.con_only_one_group import kotlinx.android.synthetic.main.taxi_p_rightbar.view.con_third_group import kotlinx.android.synthetic.main.taxi_p_rightbar.view.iv_center_location +import kotlinx.android.synthetic.main.taxi_p_rightbar.view.iv_center_location_bg class RightBarView : ConstraintLayout, AuditionManager.MusicDataChangeListener { @@ -103,6 +105,9 @@ class RightBarView : ConstraintLayout, AuditionManager.MusicDataChangeListener { iv_center_location.onClick { this.rightBarCallback?.setGo2CenterClick() } + iv_center_location_bg.onClick { + VoiceNotice.showNotice("云端暂停任务,注意车辆即将停车!") + } } private fun startAnimal(){ @@ -181,6 +186,9 @@ class RightBarView : ConstraintLayout, AuditionManager.MusicDataChangeListener { }) startAnimal() } + }else{ + ck_music.setBackgroundResource(R.drawable.taxi_p_music_selector) + endAnimal() } } } diff --git a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt index 64ecdb2584..842d3e193e 100644 --- a/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt +++ b/OCH/taxi/unmanned-passenger/src/main/java/com/mogo/och/taxi/passenger/widget/ConsultVideoPlayer.kt @@ -20,6 +20,7 @@ import androidx.core.app.ActivityCompat 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.audiofocusmanager.AudioFocusManager import com.mogo.och.common.module.wigets.media.MediaItem import com.mogo.och.taxi.passenger.R import com.mogo.och.taxi.passenger.ui.statusview.StatusBarView @@ -137,10 +138,12 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { GSYVideoView.CURRENT_STATE_PLAYING ->{ start.setImageResource(R.drawable.notice_video_pause) showOrHideStartPlayButton(false) + AudioFocusManager.setVideoFocusChange(true) } else -> { start.setImageResource(R.drawable.notice_video_after_pause) showOrHideStartPlayButton(true) + AudioFocusManager.setVideoFocusChange(false) } } } @@ -281,6 +284,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onCompletion() { start.setImageResource(R.drawable.notice_video_after_pause) + AudioFocusManager.setVideoFocusChange(false) } override fun onSurfaceUpdated(surface: Surface) { @@ -301,6 +305,7 @@ class ConsultVideoPlayer : StandardGSYVideoPlayer { override fun onError(what: Int, extra: Int) { super.onError(what, extra) + AudioFocusManager.setVideoFocusChange(false) mThumbImageViewLayout?.visibility = View.VISIBLE ToastUtils.showLong("哎呀,出错了,看看其他视频吧") currentTime = -1