[6.3.0]
[音乐、视频和tts 焦点问题]
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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<LangTtsEntity>, 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user