diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt index 2fd138c7a3..95bb001ece 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/MainFragment.kt @@ -41,6 +41,7 @@ import kotlinx.android.synthetic.main.charter_p_main_fragment.biz_selectline import kotlinx.android.synthetic.main.charter_p_main_fragment.biz_softcontrol import kotlinx.android.synthetic.main.charter_p_main_fragment.biz_video import kotlinx.android.synthetic.main.charter_p_main_fragment.mapBizView +import kotlinx.android.synthetic.main.charter_p_main_fragment.mcv_play_music import kotlinx.android.synthetic.main.charter_p_main_fragment.omvOverMap //import kotlinx.android.synthetic.main.charter_p_main_fragment.viewBusPM1MsgBoxBubble //import kotlinx.android.synthetic.main.charter_p_main_fragment.viewBusPM1MsgBoxButton @@ -140,6 +141,7 @@ class MainFragment : MvpFragment(), IMogo BottomBar.SelectView.SETTING -> showBizView(softControl = true) BottomBar.SelectView.LINE -> showBizView(selectLine = true) BottomBar.SelectView.VIDEO -> showBizView(showVideo = true) + BottomBar.SelectView.MUSIC -> showBizView(showMusic = true) else -> { showBizView() statusBarView?.setBackgroudColor(R.color.charter_p_80ffffff) @@ -178,7 +180,8 @@ class MainFragment : MvpFragment(), IMogo orderinfo: Boolean = false, softControl: Boolean = false, selectLine: Boolean = false, - showVideo: Boolean = false + showVideo: Boolean = false, + showMusic: Boolean = false ) { if (orderinfo) { biz_orderinfo.visibility = View.VISIBLE @@ -204,6 +207,12 @@ class MainFragment : MvpFragment(), IMogo } else { biz_video.visibility = View.GONE } + if(showMusic) { + mcv_play_music.visibility = View.VISIBLE + statusBarView?.setBackgroudColor(R.color.charter_p_40ffffff) + }else{ + mcv_play_music.visibility = View.GONE + } } fun setCarModel(rawInfo: Int) { diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/BottomBar.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/BottomBar.kt index b9e2224053..ee37d2f090 100644 --- a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/BottomBar.kt +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/bottom/BottomBar.kt @@ -9,6 +9,7 @@ import com.mogo.och.charter.passenger.R import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.aciv_center_image import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_close_door import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_line +import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_music import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_open_door import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_setting import kotlinx.android.synthetic.main.charter_p_bottom_bar.view.actv_stop_site @@ -40,6 +41,10 @@ class BottomBar @JvmOverloads constructor( actv_line.onClick { setCheckIndex(SelectView.LINE) } + actv_music.onClick { + + setCheckIndex(SelectView.MUSIC) + } } fun setCheckChangeListener(overMapViewApply:ApplyClickLintener){ this.overMapViewApply = overMapViewApply @@ -79,11 +84,16 @@ class BottomBar @JvmOverloads constructor( }else{ actv_line.setCheckItem(false) } + if(checkIndex == SelectView.MUSIC){ + actv_music.setCheckItem(true) + }else{ + actv_music.setCheckItem(false) + } } enum class SelectView{ - NONE,ORDERINFO,SETTING,LINE,VIDEO + NONE,ORDERINFO,SETTING,LINE,VIDEO,MUSIC } interface ApplyClickLintener{ diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlView.kt new file mode 100644 index 0000000000..e5c79fd29a --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlView.kt @@ -0,0 +1,62 @@ +package com.mogo.och.charter.passenger.ui.music + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +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.auditionmanager.MusicData +import kotlinx.android.synthetic.main.charter_p_music.view.mlv_list +import kotlinx.android.synthetic.main.charter_p_music.view.mpv_music_info + + +class MusicControlView : ConstraintLayout, MusicControlViewModel.MusicCallback { + + private val TAG = "MusicControlView" + + private var viewModel: MusicControlViewModel? = null + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super( + context, attributeSet, defStyleAttr + ) + + constructor( + context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int + ) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.charter_p_music, this, true) + + mlv_list.setCheckItemListener(object : MusicListView.CheckListener{ + override fun checkItem(musicData: MusicData) { + mpv_music_info.setData(musicData) + } + }) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicControlViewModel::class.java) + } + viewModel?.setViewCallback(this) + } + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlViewModel.kt new file mode 100644 index 0000000000..9ce59719b3 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/MusicControlViewModel.kt @@ -0,0 +1,42 @@ +package com.mogo.och.charter.passenger.ui.music + +import androidx.lifecycle.ViewModel +import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P +import com.mogo.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.wigets.toast.ToastCharterUtils +import com.mogo.och.common.module.manager.devicemanage.callback.LightAirconditionDoorCallback +import com.mogo.och.common.module.manager.devicemanage.LightAirconditionDoorStatusManager +import com.mogo.och.common.module.manager.devicemanage.data.AirconditionStatus +import com.mogo.och.common.module.manager.devicemanage.data.HeaterStatue +import com.mogo.och.common.module.manager.devicemanage.data.LightStatus +import com.mogo.och.common.module.utils.RxUtils +import io.reactivex.disposables.Disposable + +class MusicControlViewModel : ViewModel() { + + private val TAG = MusicControlViewModel::class.java.simpleName + + private var viewCallback: MusicCallback? = null + + + init { + + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + fun setViewCallback(viewCallback: MusicCallback) { + this.viewCallback = viewCallback + } + + + interface MusicCallback { + + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListItemAdapter.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListItemAdapter.kt new file mode 100644 index 0000000000..cb154eac67 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListItemAdapter.kt @@ -0,0 +1,109 @@ +package com.mogo.och.charter.passenger.ui.music.list + +import android.content.Context +import android.graphics.drawable.GradientDrawable +import android.os.Build +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +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 + +/** + * Created by adityagohad on 06/06/17. + */ +class MusicListItemAdapter( + private val context: Context, + private val dataList: MutableList, + private val clickListener: ClickListener +) : RecyclerView.Adapter() { + + val gradientDrawable = GradientDrawable().also { + it.shape = GradientDrawable.RECTANGLE + val firstColor = ContextCompat.getColor(context, android.R.color.transparent) + val setondColor = ContextCompat.getColor(context, R.color.charter_p_4DFFFFFF) + val thirdColor = ContextCompat.getColor(context, R.color.charter_p_4DFFFFFF) + val fourceColor = ContextCompat.getColor(context, R.color.charter_p_4DFFFFFF) + val fifthColor = ContextCompat.getColor(context, android.R.color.transparent) + + it.orientation = GradientDrawable.Orientation.LEFT_RIGHT + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + it.setColors(intArrayOf(firstColor, setondColor, thirdColor, fourceColor,fifthColor), + floatArrayOf(0.0f,0.3f,0.6f,0.9f,1f) + ) + }else{ + it.colors = intArrayOf(firstColor, setondColor, thirdColor, fourceColor) + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TextVH { + val view: View + val inflater = LayoutInflater.from(context) + view = inflater.inflate(R.layout.charter_p_music_list_item, parent, false) + return TextVH(view) + } + + override fun onBindViewHolder(holder: TextVH, position: Int) { + val musicData = dataList[holder.bindingAdapterPosition] + + holder.musicName.text = musicData.songName + holder.itemView.setOnClickListener { + clickListener.clickItem(musicData) + } + + if (musicData.state==PlayState.Playing||musicData.state==PlayState.Pause) { + holder.musicPlayState.visibility = View.VISIBLE + holder.itemView.background = gradientDrawable + }else{ + holder.itemView.background = null + holder.musicPlayState.visibility = View.GONE + } + } + + override fun getItemCount(): Int { + return dataList.size + } + + fun setNewData(data: MutableList) { + dataList.clear() + dataList.addAll(data) + notifyDataSetChanged() + } + + fun addOneData(musicData: MusicData){ + dataList.add(musicData) + notifyItemInserted(dataList.size) + } + + fun upDateMusicData(oldData: MusicData?,musicData: MusicData) { + dataList.forEachIndexed { index, musicDataIn -> + if (musicDataIn.id==musicData.id) { + musicDataIn.state = musicData.state + notifyItemChanged(index,0) + } + if(oldData?.id==musicDataIn.id){ + notifyItemChanged(index,0) + } + } + } + + inner class TextVH(itemView: View) : RecyclerView.ViewHolder(itemView) { + var musicName: TextView + var musicPlayState: ImageView + + init { + musicName = itemView.findViewById(R.id.tv_song_name) + musicPlayState = itemView.findViewById(R.id.iv_music_playing) + } + } + + interface ClickListener { + fun clickItem(musicData: MusicData) + } + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListView.kt new file mode 100644 index 0000000000..4e0f1ca222 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListView.kt @@ -0,0 +1,86 @@ +package com.mogo.och.charter.passenger.ui.music.list + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +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.auditionmanager.MusicData +import kotlinx.android.synthetic.main.charter_p_music_list.view.rv_music_list + +class MusicListView : ConstraintLayout, MusicListViewModel.IMusicListViewCaLillback, + MusicListItemAdapter.ClickListener { + + private val TAG = "MusicListView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private val dataList = mutableListOf() + private lateinit var lineAdapter: MusicListItemAdapter + private var checkListener: CheckListener?=null + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.charter_p_music_list, this, true) + rv_music_list.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + lineAdapter = MusicListItemAdapter(context,dataList,this) + rv_music_list.adapter = lineAdapter + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicListViewModel::class.java) + } + + viewModel?.setDistanceCallback(this) + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun addAllData(data: MutableList) { + lineAdapter.setNewData(data) + } + + override fun addOneData(it: MusicData) { + lineAdapter.addOneData(it) + } + + override fun updateMusicData(oldData: MusicData?,musicData: MusicData) { + lineAdapter.upDateMusicData(oldData,musicData) + CallerLogger.d(TAG,"${Thread.currentThread().name}----更新数据${oldData}-----${musicData}") + } + + override fun clickItem(musicData: MusicData) { + // 通知主页面去显示详情 + this.checkListener?.checkItem(musicData) + } + + fun setCheckItemListener(checkListener: CheckListener) { + this.checkListener = checkListener + } + + interface CheckListener { + fun checkItem(musicData: MusicData) + } + + + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListViewModel.kt new file mode 100644 index 0000000000..ec00328ea4 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/list/MusicListViewModel.kt @@ -0,0 +1,57 @@ +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.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData + +class MusicListViewModel : ViewModel(), + AuditionManager.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) + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + interface IMusicListViewCaLillback { + fun addAllData(data:MutableList) + fun addOneData(it: MusicData) + fun updateMusicData(oldData: MusicData?,musicData: MusicData) + } + + override fun addOneData(it: MusicData) { + CallerLogger.d(TAG,"添加音乐:${it.songName}--${it.path}") + UiThreadHandler.post({ + this.viewCallback?.addOneData(it) + }, UiThreadHandler.MODE.QUEUE) + } + + override fun updateState(oldData: MusicData?,musicData: MusicData) { + UiThreadHandler.post({ + viewCallback?.updateMusicData(oldData, musicData) + }, UiThreadHandler.MODE.QUEUE) + } + + override fun onMusicCompletion(musicData: MusicData) { + super.onMusicCompletion(musicData) + UiThreadHandler.post({ + viewCallback?.updateMusicData(musicData, musicData) + }, UiThreadHandler.MODE.QUEUE) + } +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingView.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingView.kt new file mode 100644 index 0000000000..b497e339c3 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingView.kt @@ -0,0 +1,200 @@ +package com.mogo.och.charter.passenger.ui.music.playing + +import android.animation.ObjectAnimator +import android.animation.ValueAnimator +import android.content.Context +import android.os.Build +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.animation.LinearInterpolator +import android.widget.SeekBar +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.findViewTreeViewModelStoreOwner +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +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.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.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 +import kotlinx.android.synthetic.main.charter_p_music_playing.view.iv_show_next +import kotlinx.android.synthetic.main.charter_p_music_playing.view.iv_show_pre +import kotlinx.android.synthetic.main.charter_p_music_playing.view.iv_toggle +import kotlinx.android.synthetic.main.charter_p_music_playing.view.sb_musuc_progess +import kotlinx.android.synthetic.main.charter_p_music_playing.view.tv_music_name +import kotlinx.android.synthetic.main.charter_p_music_playing.view.tv_playing_during +import kotlinx.android.synthetic.main.charter_p_music_playing.view.tv_playing_time +import kotlinx.android.synthetic.main.charter_p_music_playing.view.tv_tag + + +class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingViewCallback { + + private val TAG = "ItineraryView" + + constructor(context: Context) : super(context) + + constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr) + + constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes) + + private var viewModel: MusicPlayingViewModel?=null + + private var animator:ObjectAnimator?=null + + private var isSeekBarTouch = false + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.charter_p_music_playing, this, true) + + + iv_toggle.setOnClickListener { + viewModel?.toggle() + } + iv_show_pre.setOnClickListener { + viewModel?.showPreMusic() + } + iv_show_next.setOnClickListener { + viewModel?.showNextMusic() + } + sb_musuc_progess.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener{ + var seekToProgress = 0 + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + if(isSeekBarTouch) { + CallerLogger.d(TAG, "progress:${progress}----fromUser:${fromUser}") + seekToProgress = progress + }else{ + + } + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) { + isSeekBarTouch = true + } + + override fun onStopTrackingTouch(seekBar: SeekBar?) { + isSeekBarTouch = false + viewModel?.seekTo(seekToProgress) + seekToProgress = 0 + } + + }) + + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicPlayingViewModel::class.java) + } + + viewModel?.setDistanceCallback(this) + } + + override fun onVisibilityAggregated(isVisible: Boolean) { + super.onVisibilityAggregated(isVisible) + if(isVisible){ + viewModel?.showData() + } + } + + fun setData(musicData: MusicData) { + viewModel?.setMusicData(musicData) + } + + override fun setViewData(musicData: MusicData){ + tv_music_name.text = musicData.songName + 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){ + iv_toggle.setImageResource(R.drawable.charter_p_music_pause) + startAnimal() + }else{ + iv_toggle.setImageResource(R.drawable.charter_p_music_play) + endAnimal() + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + sb_musuc_progess.setProgress(0,true) + }else{ + sb_musuc_progess.progress=0.toInt() + } + + Glide.with(context) + .load(musicData.coverHeadImageUrl) + .apply(RequestOptions().placeholder(R.drawable.charter_p_music_bg_relax_head)) + .into(iv_music_cover) + Glide.with(context) + .load(musicData.coverBottomImageUrl) + .apply(RequestOptions().placeholder(R.drawable.charter_p_music_bg_relax_bottom)) + .into(iv_music_cover_bg) + } + + private fun startAnimal(){ + if(animator!=null){ + animator?.cancel() + animator = null + } + animator = ObjectAnimator.ofFloat(iv_music_cover, "rotation", 0f, 360f) + iv_music_cover.pivotX = (iv_music_cover.getWidth() / 2).toFloat() + iv_music_cover.pivotY = iv_music_cover.height*174.5f/390f + animator?.duration = 4000 + animator?.repeatCount = -1 + animator?.repeatMode = ValueAnimator.RESTART + animator?.interpolator = LinearInterpolator() + animator?.start() + } + private fun endAnimal(){ + if(animator!=null){ + animator?.cancel() + animator = null + } + } + + override fun setPlayOrpause(it: MusicData) { + if(it.state==PlayState.Playing){ + iv_toggle.setImageResource(R.drawable.charter_p_music_pause) + startAnimal() + }else{ + iv_toggle.setImageResource(R.drawable.charter_p_music_play) + endAnimal() + } + } + + override fun setProgress(currentPlay: Long, duration: Long) { + if(isSeekBarTouch){ + + }else{ + sb_musuc_progess.max = duration.toInt() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + sb_musuc_progess.setProgress(currentPlay.toInt(),true) + }else{ + sb_musuc_progess.progress=currentPlay.toInt() + } + } + + tv_playing_time.text = TimeTransformUtils.stringForTime(currentPlay.toInt()) + tv_playing_during.text = TimeTransformUtils.stringForTime(duration.toInt()) + } + + fun listenerPlaying(){ + + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingViewModel.kt b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingViewModel.kt new file mode 100644 index 0000000000..0fb8395c13 --- /dev/null +++ b/OCH/charter/passenger/src/main/java/com/mogo/och/charter/passenger/ui/music/playing/MusicPlayingViewModel.kt @@ -0,0 +1,110 @@ +package com.mogo.och.charter.passenger.ui.music.playing + +import androidx.lifecycle.ViewModel +import com.elegant.utils.UiThreadHandler +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData + +class MusicPlayingViewModel : ViewModel(), AuditionManager.MusicDataChangeListener { + + private val TAG = MusicPlayingViewModel::class.java.simpleName + + private var viewCallback: IMusicPlayingViewCallback? = null + + private var checkMusicData:MusicData?=null + + init { + + } + + fun setDistanceCallback(viewCallback: IMusicPlayingViewCallback) { + this.viewCallback = viewCallback + AuditionManager.addDataChangeListener(TAG,this) + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + fun setMusicData(musicData: MusicData) { + this.checkMusicData = musicData + this.viewCallback?.setViewData(musicData) + } + + fun showData() { + if(checkMusicData!=null){ + setMusicData(this.checkMusicData!!) + }else{ + val musicList = AuditionManager.musicList + if(musicList.size>0){ + val first = musicList.first() + setMusicData(first) + } + } + } + + fun toggle() { + checkMusicData?.let { + AuditionManager.toggle(it) + } + } + + fun showPreMusic() { + checkMusicData?.let { + val nextMusicData = AuditionManager.getPreMusicData(it) + setMusicData(nextMusicData) + } + } + + fun showNextMusic() { + checkMusicData?.let { + val nextMusicData = AuditionManager.getNextMusicData(it) + setMusicData(nextMusicData) + } + } + + interface IMusicPlayingViewCallback { + fun setViewData(musicData: MusicData) + fun setPlayOrpause(it: MusicData) + fun setProgress(currentPlay: Long, duration: Long) + } + + override fun updateState(oldData:MusicData?,musicData: MusicData) { + checkMusicData?.let { + if(it.id==musicData.id){ + it.state = musicData.state + UiThreadHandler.post { + viewCallback?.setPlayOrpause(it) + } + } + } + } + override fun updatePlayCurrent(currentPlay: Long, duration: Long, musicData: MusicData){ + checkMusicData?.let { + if(it.id==musicData.id){ + UiThreadHandler.post { + viewCallback?.setProgress(currentPlay, duration) + } + } + } + } + + override fun onMusicCompletion(musicData: MusicData) { + super.onMusicCompletion(musicData) + checkMusicData?.let { + if(it.id==musicData.id){ + it.state = musicData.state + UiThreadHandler.post { + viewCallback?.setPlayOrpause(it) + } + } + } + showNextMusic() + toggle() + } + + fun seekTo(progress: Int) { + AuditionManager.seekTo(progress) + } +} \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_bar_select_bg.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_bar_select_bg.png index d033e0a51c..c5928e398c 100644 Binary files a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_bar_select_bg.png and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_bar_select_bg.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_center_normal.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_center_normal.png index 859e4950b1..50e791912e 100644 Binary files a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_center_normal.png and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_center_normal.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_normal.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_normal.png new file mode 100644 index 0000000000..f06bb07dc6 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_normal.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_press.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_press.png new file mode 100644 index 0000000000..f2750192b9 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_bottom_music_press.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg.png new file mode 100644 index 0000000000..f032609d39 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_middle.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_middle.png new file mode 100644 index 0000000000..c88126dfbd Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_middle.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_bottom.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_bottom.png new file mode 100755 index 0000000000..cf1cf89466 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_bottom.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_head.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_head.png new file mode 100755 index 0000000000..f725b43295 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_bg_relax_head.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_list_playing.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_list_playing.png new file mode 100644 index 0000000000..6a1a124d21 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_list_playing.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_next.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_next.png new file mode 100644 index 0000000000..8610c57bfc Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_next.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pause.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pause.png new file mode 100644 index 0000000000..af55d1099e Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pause.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_play.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_play.png new file mode 100644 index 0000000000..32db628355 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_play.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pre.png b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pre.png new file mode 100644 index 0000000000..97f630aecd Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable-nodpi/charter_p_music_pre.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable/charter_p_music_bg_relax_head.png b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_bg_relax_head.png new file mode 100755 index 0000000000..f725b43295 Binary files /dev/null and b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_bg_relax_head.png differ diff --git a/OCH/charter/passenger/src/main/res/drawable/charter_p_music_center_split.xml b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_center_split.xml new file mode 100644 index 0000000000..27676b534c --- /dev/null +++ b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_center_split.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/drawable/charter_p_music_list_tag_bg.xml b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_list_tag_bg.xml new file mode 100644 index 0000000000..1dceb47936 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/drawable/charter_p_music_list_tag_bg.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/drawable/taxt_p_music_seekbar_style.xml b/OCH/charter/passenger/src/main/res/drawable/taxt_p_music_seekbar_style.xml new file mode 100644 index 0000000000..7f1666f670 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/drawable/taxt_p_music_seekbar_style.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_bar.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_bar.xml index aed841ff58..f6eebeba3a 100644 --- a/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_bar.xml +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_bar.xml @@ -13,7 +13,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:textColor="@android:color/white" - android:layout_width="@dimen/dp_489" + android:layout_width="@dimen/dp_430" android:layout_height="@dimen/dp_107"/> @@ -36,7 +36,7 @@ app:layout_constraintEnd_toStartOf="@+id/actv_close_door" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" - android:layout_width="wrap_content" + android:layout_width="@dimen/dp_176" android:layout_height="match_parent"/> + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_go.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_go.xml index e7fc539809..329faa0046 100644 --- a/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_go.xml +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_bottom_go.xml @@ -1,7 +1,7 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_music_list.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_music_list.xml new file mode 100644 index 0000000000..5691db52b9 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_music_list.xml @@ -0,0 +1,30 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_music_list_item.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_music_list_item.xml new file mode 100644 index 0000000000..4187241d48 --- /dev/null +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_music_list_item.xml @@ -0,0 +1,46 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/layout/charter_p_music_playing.xml b/OCH/charter/passenger/src/main/res/layout/charter_p_music_playing.xml new file mode 100644 index 0000000000..ca124815ad --- /dev/null +++ b/OCH/charter/passenger/src/main/res/layout/charter_p_music_playing.xml @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/charter/passenger/src/main/res/values/color.xml b/OCH/charter/passenger/src/main/res/values/color.xml index 031e97bb88..bca4baf24f 100644 --- a/OCH/charter/passenger/src/main/res/values/color.xml +++ b/OCH/charter/passenger/src/main/res/values/color.xml @@ -54,4 +54,14 @@ #F0E0EFFF #66000000 #FF6D2C + #4DFFFFFF + #253A5A + #303C52 + #425877 + #576887 + #488ED0 + #598CFF + #4D6A83A5 + #6A83A5 + \ No newline at end of file diff --git a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingView.kt b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingView.kt index 826960c92e..54cc4a8a6d 100644 --- a/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingView.kt +++ b/OCH/taxi/pcommon/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingView.kt @@ -126,14 +126,14 @@ class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingVi sb_musuc_progess.progress=0.toInt() } - Glide.with(context) - .load(musicData.coverHeadImageUrl) - .apply(RequestOptions().placeholder(R.drawable.taxt_p_music_bg_relax_head)) - .into(iv_music_cover) - Glide.with(context) - .load(musicData.coverBottomImageUrl) - .apply(RequestOptions().placeholder(R.drawable.taxt_p_music_bg_relax_bottom)) - .into(iv_music_cover_bg) +// Glide.with(context) +// .load(musicData.coverHeadImageUrl) +// .apply(RequestOptions().placeholder(R.drawable.taxt_p_music_bg_relax_head)) +// .into(iv_music_cover) +// Glide.with(context) +// .load(musicData.coverBottomImageUrl) +// .apply(RequestOptions().placeholder(R.drawable.taxt_p_music_bg_relax_bottom)) +// .into(iv_music_cover_bg) } private fun startAnimal(){ @@ -143,7 +143,7 @@ class MusicPlayingView : ConstraintLayout, MusicPlayingViewModel.IMusicPlayingVi } animator = ObjectAnimator.ofFloat(iv_music_cover, "rotation", 0f, 360f) iv_music_cover.pivotX = (iv_music_cover.getWidth() / 2).toFloat() - iv_music_cover.pivotY = 166f + iv_music_cover.pivotY = 174.5f animator?.duration = 4000 animator?.repeatCount = -1 animator?.repeatMode = ValueAnimator.RESTART