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 new file mode 100644 index 0000000000..02f1512a90 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/Audition.kt @@ -0,0 +1,155 @@ +package com.mogo.och.common.module.manager.auditionmanager + +import android.media.AudioManager +import android.media.MediaPlayer +import android.os.Handler +import android.os.HandlerThread +import android.os.Message +import android.text.TextUtils + +//播放试听 +object Audition: MediaPlayer.OnPreparedListener, + MediaPlayer.OnCompletionListener, MediaPlayer.OnSeekCompleteListener { + private val TAG = "Audition" + var mediaPlayer: MediaPlayer? = null + var oldPath: String? = null + private var listener: OnAuditionListener? = null + private val handler: Handler + + interface OnAuditionListener { + fun onAuditionCompletion(path: String?) + fun onSeekCompletion(currentPlay: Long) + fun onCurrentPosition(currentPlay: Long, duration: Long) + } + + fun registerOnAuditionListener(listener: OnAuditionListener?) { + this.listener = listener + } + + fun unregisterOnAuditionListener() { + listener = null + } + + init { + val frequentThread = HandlerThread("frequent_drawer") + frequentThread.start() + handler = object : Handler(frequentThread.looper) { + override fun handleMessage(msg: Message) { + super.handleMessage(msg) + if (msg.what == 0) { + if (mediaPlayer != null && listener != null) { + val currentPosition = mediaPlayer!!.currentPosition + val duration = mediaPlayer!!.duration + listener!!.onCurrentPosition(currentPosition.toLong(), duration.toLong()) + } + sendEmptyMessageDelayed(0, 500) + } + } + } + } + + val isPlaying: Boolean + get() = mediaPlayer != null && mediaPlayer!!.isPlaying + + fun play(path: String) { + if (TextUtils.equals(oldPath, path)) { + return + } + oldPath = path + if (mediaPlayer != null) { + mediaPlayer!!.release() + mediaPlayer = null + } + if (mediaPlayer == null) { + mediaPlayer = MediaPlayer() + mediaPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC) + mediaPlayer!!.setOnPreparedListener(this) + mediaPlayer!!.setOnCompletionListener(this) + mediaPlayer!!.setOnSeekCompleteListener(this) + } + try { + mediaPlayer!!.setDataSource(path) + } catch (e: Exception) { + e.printStackTrace() + } + mediaPlayer!!.prepareAsync() + } + + fun stop() { + oldPath = null + if (mediaPlayer != null) { + mediaPlayer!!.stop() + mediaPlayer!!.reset() + } + } + + fun pause() { + if (mediaPlayer != null && mediaPlayer!!.isPlaying) { + mediaPlayer!!.pause() + } + } + + fun toggle(path: String):Boolean { + if (mediaPlayer != null) { + if(TextUtils.equals(oldPath, path)) { + if (mediaPlayer!!.isPlaying) { + mediaPlayer!!.pause() + return false + } else { + mediaPlayer!!.start() + return true + } + }else{ + play(path) + return true + } + }else{ + play(path) + return true + } + } + + fun start():Boolean { + if (mediaPlayer != null) { + mediaPlayer!!.start() + return true + } + return false + } + + fun playOrStop(path: String): Boolean { + return if (!TextUtils.equals(oldPath, path)) { + play(path) + true + } else { + stop() + false + } + } + + fun onDestroy() { + stop() + mediaPlayer = null + } + + override fun onPrepared(mp: MediaPlayer) { + mp.start() + if (listener != null) { + listener!!.onCurrentPosition(mp.currentPosition.toLong(), mp.duration.toLong()) + } + handler.sendEmptyMessageDelayed(0, 500) + } + + override fun onCompletion(mp: MediaPlayer) { + if (listener != null) { + listener!!.onAuditionCompletion(oldPath) + } + oldPath = null + } + + override fun onSeekComplete(mp: MediaPlayer) { + if (listener != null) { + listener!!.onSeekCompletion(mp.currentPosition.toLong()) + } + } +} diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionCacheManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionCacheManager.kt new file mode 100644 index 0000000000..15dc2810cb --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionCacheManager.kt @@ -0,0 +1,257 @@ +package com.mogo.och.common.module.manager.auditionmanager + +import android.media.MediaExtractor +import android.media.MediaFormat +import android.net.Uri +import android.os.Environment +import android.text.TextUtils +import com.google.gson.reflect.TypeToken +import com.mogo.commons.AbsMogoApplication +import com.mogo.eagle.core.data.config.FunctionBuildConfig +import com.mogo.eagle.core.utilcode.download.DownloadUtils +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.GsonUtils +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.eagle.core.utilcode.util.Utils +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager +import com.mogo.och.common.module.manager.orderlogmanager.OchChainLogManager.EVENT_KEY_INFE_WITH_MUSIC +import com.mogo.och.common.module.utils.FileUtils +import com.mogo.och.common.module.wigets.media.MediaPlayLogger +import rx.Single +import java.io.File +import java.io.FileOutputStream +import java.io.IOException +import java.io.OutputStream +import com.mogo.eagle.core.utilcode.util.FileUtils as FileHelper + + +object AuditionCacheManager { + + private var dataChangeListener:DataChangeListener?=null + private val context = AbsMogoApplication.getApp() + private const val TAG = "AuditionCacheManager" + + init { + createFileCacheDir() + } + + // 命名规则 缓存文件夹/md5.后缀名 + private fun getMusicDataByLocationConfig() { + ThreadUtils.getIoPool().execute { + val localAdDataList = mutableListOf() + try { + val datas: MusicDataList = GsonUtils.fromJson( + FunctionBuildConfig.musicUrlConfig, object : TypeToken() {}.type + ) + localAdDataList.addAll(datas.musics) + } catch (e: Exception) { + e.printStackTrace() + } + localAdDataList.forEach { + if (isLocalCacheFileExists(it)) { + // 存在 + val locationPath = getCacheFileFullPathByUrl(it) + val fileMD5 = FileHelper.getFileMD5ToString(locationPath) + if(fileMD5==it.md5){// 文件存在切md5一致 + it.path = locationPath + val duration = getDuration(locationPath) + it.duration = duration + dataChangeListener?.addOneData(it) + CallerLogger.d(M_OCHCOMMON+ TAG,"文件已下载添加播放列表中") + addTag("文件已下载添加播放列表中:${it}") + }else{ + // 删除缓存 + FileHelper.delete(locationPath) + if(it.isCloud()) { + // 去下载 + downloadFile(it) + addTag("缓存已下载但md5对应不上:${it}") + }else{ + copyRaw2Music(it.songUrl,locationPath) + it.path = locationPath + val duration = getDuration(locationPath) + it.duration = duration + dataChangeListener?.addOneData(it) + } + } + }else{ + if(it.isCloud()) { + // 不存在 + downloadFile(it) + addTag("第一次下载:${it}") + }else{ + val locationPath = getCacheFileFullPathByUrl(it) + copyRaw2Music(it.songUrl,locationPath) + it.path = locationPath + val duration = getDuration(locationPath) + it.duration = duration + dataChangeListener?.addOneData(it) + } + + } + } + } + } + + + /** + * 创建media缓存文件夹目录(优先放SD卡) + */ + private fun createFileCacheDir(): Boolean { + val cacheDirPath = getFileCacheDir() + MediaPlayLogger.printInfoLog("createFileCacheDir, dirPath=$cacheDirPath") + return FileHelper.createFileDir(cacheDirPath) + } + + + /** + * 获取本地缓存文件的文件全路径 + */ + private fun getFileCacheDir(): String { + // 有些手机需要通过自定义目录 + val relativePath = "mogo" + File.separator + "music" + File.separator + val cacheDir = File(Environment.getExternalStorageDirectory(), relativePath) + if (FileHelper.createOrExistsDir(cacheDir)) { + return cacheDir.absolutePath + } + + return FileUtils.getCacheDirectory(context, "") + relativePath + } + + /** + * 获取文件缓存的缓存path, 文件名以base64编码避免 中文命名,重复文件名的影响 + */ + private fun getCacheFileFullPathByUrl(musicData: MusicData): String { + return getFileCacheDir() +File.separator+ getCacheFileName(musicData) + } + + /** + * 本地是否已经存在下载完成的文件 + */ + private fun isLocalCacheFileExists(musicData: MusicData): Boolean { + val localVideoCacheFilePath = getCacheFileFullPathByUrl(musicData) + return FileHelper.isFileExists(localVideoCacheFilePath) + } + + /** + * 本地缓存文件的文件名,md5编码避免文件名重复或者特殊字符编码问题 + */ + private fun getCacheFileName(musicData: MusicData): String { + val fileSuffix = FileUtils.getExtension(musicData.songUrl) + if (TextUtils.isEmpty(fileSuffix)) { + return "" + } + return musicData.md5 + FileUtils.EXTENSION_SEPARATOR + fileSuffix + } + + + /** + * 下载文件 + */ + private fun downloadFile(musicData: MusicData) { + val downloadUrl = musicData.songUrl + val downloadDir = getFileCacheDir() + val downloadFileName = getCacheFileName(musicData) + DownloadUtils.downLoad(context, downloadUrl, downloadDir, downloadFileName, object :IDownloadListener{ + override fun onStart(url: String) { + addTag("开始下载:${musicData}") + } + + override fun onProgress(url: String, downloaded: Long, total: Long) { + + } + + override fun onFinished(url: String, path: String) { + val fileMD5 = FileHelper.getFileMD5ToString(path) + if(fileMD5==musicData.md5){// 文件存在切md5一致 + musicData.path = path + dataChangeListener?.addOneData(musicData) + addTag("下载完成切md5对应上:${musicData}") + }else{ + // 下载成功但是下载的文件md5不一致不能使用 + } + } + + override fun onError(url: String, error: String?) { + // 下载失败 + addTag("下载失败:${musicData}") + } + }) + } + + fun addDataChangeListener(dataChangeListener: DataChangeListener) { + this.dataChangeListener = dataChangeListener + getMusicDataByLocationConfig() + } + + public interface DataChangeListener{ + fun addOneData(it: MusicData) + + } + + private fun addTag(logInfo:String){ + OchChainLogManager.writeChainLog(TAG,logInfo,eventID=EVENT_KEY_INFE_WITH_MUSIC) + } + + /** + * 获取mp3音频的总时长 单位:ms + * + * @param mp3FilePath MP3文件路径 + * @return 时长 + */ + fun getDuration(mp3FilePath: String): Long { + if (!com.mogo.eagle.core.utilcode.util.FileUtils.isFileExists(mp3FilePath)) { + return 0 + } + if (!mp3FilePath.endsWith("mp3")) { + return 0 + } + var mex: MediaExtractor? = null + try { + mex = MediaExtractor() + mex.setDataSource(mp3FilePath) + val mf = mex.getTrackFormat(0) + return mf.getLong(MediaFormat.KEY_DURATION) / 1000L + } catch (e: IOException) { + + } finally { + mex?.release() + } + return 0 + } + + + fun copyRaw2Music(url:String,dst:String){ + val path = Uri.parse(url).path + path?.let { + val split = it.split("/") + if(split.size==3&&split.get(1)=="raw"){ + + try { + val fileName = split[2] + val nameAndprex = fileName.split(".") + val resourceId: Int = context.resources.getIdentifier(nameAndprex[0], "raw", context.packageName) + val openRawResource = context.resources.openRawResource(resourceId) + val outputStream: OutputStream = FileOutputStream(dst) + val buffer = ByteArray(1024) + var length: Int + + while (openRawResource.read(buffer).also { length = it } > 0) { + outputStream.write(buffer, 0, length) + } + + outputStream.close() + openRawResource.close() + }catch (e:IOException){ + e.printStackTrace() + } + + } + + } + } + + +} \ No newline at end of file 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 new file mode 100644 index 0000000000..2391a389c5 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/AuditionManager.kt @@ -0,0 +1,156 @@ +package com.mogo.och.common.module.manager.auditionmanager + +import com.mogo.och.common.module.manager.distancemamager.IDistanceListener +import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager +import java.util.concurrent.ConcurrentHashMap + +object AuditionManager: AuditionCacheManager.DataChangeListener, Audition.OnAuditionListener { + + val musicList = mutableListOf() + + private val dataChangeListeners: ConcurrentHashMap = ConcurrentHashMap() + + init { + AuditionCacheManager.addDataChangeListener(this) + Audition.registerOnAuditionListener(this) + } + + fun addDataChangeListener(tag: String, listener: MusicDataChangeListener) { + if (dataChangeListeners.containsKey(tag)) { + return + } + dataChangeListeners[tag] = listener + } + + fun removeDataChangeListener(tag: String){ + dataChangeListeners.remove(tag) + } + + + private fun getMusicDataByState(state:PlayState):Pair?{ + musicList.forEachIndexed { index, musicData -> + if(musicData.state==state){ + return Pair(index,musicData) + } + } + return null + } + + fun toggle(musicData: MusicData){ + val toggle = Audition.toggle(musicData.path) + val oldData = resetData() + if(toggle){// 播放 + musicData.state = PlayState.Playing + dataChangeListeners.forEach { + it.value.updateState(oldData,musicData) + } + }else{// 暂停 + musicData.state = PlayState.Pause + dataChangeListeners.forEach { + it.value.updateState(oldData,musicData) + } + } + } + + private fun resetData():MusicData?{ + var tempRusult:MusicData?=null + musicList.forEach { + if(it.state!=PlayState.None){ + tempRusult = it + } + it.state = PlayState.None + } + return tempRusult + } + + override fun addOneData(musicDataNew: MusicData) { + musicList.forEachIndexed { index, musicData -> + if (musicDataNew.id==musicData.id) { + musicList[index] = musicDataNew + return + } + } + musicList.add(musicDataNew) + dataChangeListeners.forEach { + it.value.addOneData(musicDataNew) + } + } + + public interface MusicDataChangeListener{ + fun addOneData(it: MusicData){} + fun updateState(oldData: MusicData?,musicData: MusicData) + fun updatePlayCurrent(currentPlay: Long, duration: Long, second: MusicData){} + fun onMusicCompletion(musicData: MusicData) {} + + } + + /** + * 音乐播放完毕 + */ + override fun onAuditionCompletion(path:String?) { + val oldData = resetData() + if(oldData!=null&&oldData.path==path){ + dataChangeListeners.forEach { + it.value.onMusicCompletion(oldData) + } + }else{ + musicList.forEach {musicData-> + if(musicData.path==path){ + dataChangeListeners.forEach { + it.value.onMusicCompletion(musicData) + } + return + } + } + } + } + + /** + * 拖动跳转完成 + */ + override fun onSeekCompletion(currentPlay: Long) { + + } + + /** + * 当前进度 + */ + override fun onCurrentPosition(currentPlay: Long, duration: Long) { + val musicDataWithIndex = getMusicDataByState(PlayState.Playing) + if (musicDataWithIndex!=null) { + musicDataWithIndex.second.let {musicData-> + dataChangeListeners.forEach { + it.value.updatePlayCurrent(currentPlay,duration,musicData) + } + } + }else{ + musicList.forEachIndexed { index, musicData -> + if(musicData.path==Audition.oldPath){ + dataChangeListeners.forEach { + it.value.updatePlayCurrent(currentPlay,duration,musicData) + } + return + } + } + } + } + + fun getNextMusicData(it: MusicData):MusicData { + val indexOf = musicList.indexOf(it) + if(indexOf== musicList.size-1){ + return musicList.first() + }else{ + return musicList[indexOf+1] + } + } + + fun getPreMusicData(it: MusicData): MusicData { + val indexOf = musicList.indexOf(it) + if(indexOf== 0){ + return musicList.last() + }else{ + return musicList[indexOf-1] + } + } + +} \ No newline at end of file diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/MusicData.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/MusicData.kt new file mode 100644 index 0000000000..afb7438d10 --- /dev/null +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/auditionmanager/MusicData.kt @@ -0,0 +1,36 @@ +package com.mogo.och.common.module.manager.auditionmanager + + +data class MusicDataList(val musics: MutableList) + +/** + * 音乐文件 + */ +data class MusicData( + val id: String, + val md5:String, + val songName: String, + val songUrl: String, + val songUrlType: String, + val coverHeadImageUrl: String, + val coverBottomImageUrl: String, + val tag: MutableList, + var duration:Long, + var path: String, + var state: PlayState = PlayState.None +){ + fun isCloud():Boolean{ + return songUrlType=="cloud" + } +} + +/** + * None -> Playing - Pause + * | | + * None None + */ +enum class PlayState { + None, + Playing, + Pause, +} diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt index 7e958fea09..1d751d5a7b 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/orderlogmanager/OchChainLogManager.kt @@ -17,6 +17,7 @@ object OchChainLogManager { const val EVENT_KEY_INFE_WITH_CHANGE = "event_key_och_common_info_and_changeinfo" const val EVENT_KEY_INFE_WITH_TRAJECTORY = "event_key_och_trajectory_info" + const val EVENT_KEY_INFE_WITH_MUSIC = "event_key_och_music_info" /** * @param Info 订单详细信息 diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicView.kt new file mode 100644 index 0000000000..35091e55f0 --- /dev/null +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicView.kt @@ -0,0 +1,95 @@ +package com.mogo.och.taxi.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.auditionmanager.MusicData +import com.mogo.och.taxi.passenger.R +import com.mogo.och.taxi.passenger.ui.music.list.MusicListView +import kotlinx.android.synthetic.main.taxi_p_music.view.iv_toggle_list_playing +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, MusicListView.CheckListener { + + 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 fun initView() { + LayoutInflater.from(context).inflate(R.layout.taxi_p_music, this, true) + setBackgroundResource(R.drawable.taxt_p_music_bg) + + setListener() + } + + private fun setListener() { + iv_toggle_list_playing.setOnClickListener { + if (mpv_playing.visibility == VISIBLE && mlv_list.visibility == GONE) { + showMusicList() + } else if (mpv_playing.visibility == GONE && mlv_list.visibility == VISIBLE) { + showMusicPlaying() + }else{ + showMusicPlaying() + } + } + mlv_list.setCheckItemListener(this) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + val viewModel = findViewTreeViewModelStoreOwner()?.let { + ViewModelProvider(it).get(MusicViewModel::class.java) + } + + viewModel?.setDistanceCallback(this) + } + + + init { + try { + initView() + } catch (e: Exception) { + e.printStackTrace() + } + } + + private fun showMusicList(){ + mpv_playing.visibility = GONE + mlv_list.visibility = View.VISIBLE + iv_toggle_list_playing.setImageResource(R.drawable.taxt_p_go2_playing) + } + private fun showMusicPlaying(){ + mpv_playing.visibility = VISIBLE + mlv_list.visibility = GONE + iv_toggle_list_playing.setImageResource(R.drawable.taxt_p_go2_list) + } + + override fun checkItem(musicData: MusicData) { + mpv_playing.setData(musicData) + // 详情页显示歌曲 + showMusicPlaying() + } + + +} \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicViewModel.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicViewModel.kt new file mode 100644 index 0000000000..1e6f8a70a9 --- /dev/null +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/MusicViewModel.kt @@ -0,0 +1,31 @@ +package com.mogo.och.taxi.passenger.ui.music + +import androidx.lifecycle.ViewModel +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel + +class MusicViewModel: ViewModel(), IOCHTaxiPassengerOrderStatusCallback { + + private val TAG = MusicViewModel::class.java.simpleName + + private var viewCallback:IMusicViewCallback?=null + + init { + + } + + fun setDistanceCallback(viewCallback:IMusicViewCallback){ + this.viewCallback = viewCallback + } + + override fun onCleared() { + super.onCleared() + this.viewCallback = null + } + + interface IMusicViewCallback{ + + } + + +} \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListItemAdapter.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListItemAdapter.kt new file mode 100644 index 0000000000..21e0350e2e --- /dev/null +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListItemAdapter.kt @@ -0,0 +1,86 @@ +package com.mogo.och.taxi.passenger.ui.music.list + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.PlayState +import com.mogo.och.taxi.passenger.R + +/** + * Created by adityagohad on 06/06/17. + */ +class MusicListItemAdapter( + private val context: Context, + private val dataList: MutableList, + private val clickListener: ClickListener +) : RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TextVH { + val view: View + val inflater = LayoutInflater.from(context) + view = inflater.inflate(R.layout.taxi_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 + }else{ + 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/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListView.kt new file mode 100644 index 0000000000..f8cc5d2f3d --- /dev/null +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListView.kt @@ -0,0 +1,87 @@ +package com.mogo.och.taxi.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.common.module.manager.auditionmanager.MusicData +import com.mogo.och.taxi.passenger.R +import kotlinx.android.synthetic.main.taxi_p_music_list.view.rv_music_list +import me.jessyan.autosize.utils.AutoSizeUtils + +class MusicListView : ConstraintLayout, MusicListViewModel.IMusicListViewCaLillback, + MusicListItemAdapter.ClickListener { + + 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 val dataList = mutableListOf() + private lateinit var lineAdapter:MusicListItemAdapter + private var checkListener:CheckListener?=null + + private fun initView() { + LayoutInflater.from(context).inflate(R.layout.taxi_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/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListViewModel.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListViewModel.kt new file mode 100644 index 0000000000..4dc9eb31b3 --- /dev/null +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/list/MusicListViewModel.kt @@ -0,0 +1,53 @@ +package com.mogo.och.taxi.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 +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback + +class MusicListViewModel : ViewModel(), IOCHTaxiPassengerOrderStatusCallback, + 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) + } + + +} \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingView.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingView.kt new file mode 100644 index 0000000000..8f0672cf6a --- /dev/null +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingView.kt @@ -0,0 +1,186 @@ +package com.mogo.och.taxi.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.common.module.manager.auditionmanager.MusicData +import com.mogo.och.common.module.manager.auditionmanager.PlayState +import com.mogo.och.common.module.utils.DateTimeUtil +import com.mogo.och.taxi.passenger.R +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_music_cover +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_music_cover_bg +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_show_next +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_show_pre +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.iv_toggle +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.sb_musuc_progess +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.tv_music_name +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.tv_playing_during +import kotlinx.android.synthetic.main.taxi_p_music_playing.view.tv_playing_time +import kotlinx.android.synthetic.main.taxi_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 fun initView() { + LayoutInflater.from(context).inflate(R.layout.taxi_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{ + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + CallerLogger.d(TAG,"progress:${progress}----fromUser:${fromUser}") + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) { + + } + + override fun onStopTrackingTouch(seekBar: SeekBar?) { + + } + + }) + + } + + 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.taxi_p_music_pause) + startAnimal() + }else{ + iv_toggle.setImageResource(R.drawable.taxi_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.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(){ + animator?.let { + if (!it.isRunning) { + animator?.start() + return + } + } + animator = ObjectAnimator.ofFloat(iv_music_cover, "rotation", 0f, 360f) + iv_music_cover.pivotX = (iv_music_cover.getWidth() / 2).toFloat() + iv_music_cover.pivotY = 166f + animator?.duration = 4000 + animator?.repeatCount = -1 + animator?.repeatMode = ValueAnimator.RESTART + animator?.interpolator = LinearInterpolator() + animator?.start() + } + private fun endAnimal(){ + if(animator!=null){ + animator?.pause() + } + } + + override fun setPlayOrpause(it: MusicData) { + if(it.state==PlayState.Playing){ + iv_toggle.setImageResource(R.drawable.taxi_p_music_pause) + startAnimal() + }else{ + iv_toggle.setImageResource(R.drawable.taxi_p_music_play) + endAnimal() + } + } + + override fun setProgress(currentPlay: Long, duration: Long) { + 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/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingViewModel.kt b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingViewModel.kt new file mode 100644 index 0000000000..be5adf3e2f --- /dev/null +++ b/OCH/taxi/passenger/src/main/java/com/mogo/och/taxi/passenger/ui/music/playing/MusicPlayingViewModel.kt @@ -0,0 +1,105 @@ +package com.mogo.och.taxi.passenger.ui.music.playing + +import androidx.lifecycle.ViewModel +import com.elegant.utils.UiThreadHandler +import com.mogo.eagle.core.utilcode.util.ThreadUtils +import com.mogo.och.common.module.manager.auditionmanager.AuditionManager +import com.mogo.och.common.module.manager.auditionmanager.MusicData +import com.mogo.och.taxi.passenger.callback.IOCHTaxiPassengerOrderStatusCallback +import com.mogo.och.taxi.passenger.model.TaxiPassengerModel + +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){ + + }else{ + + } + } + + 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() + } +} \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_list_playing.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_list_playing.png new file mode 100644 index 0000000000..6a1a124d21 Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_list_playing.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_next.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_next.png new file mode 100644 index 0000000000..8610c57bfc Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_next.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_pause.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_pause.png new file mode 100644 index 0000000000..af55d1099e Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_pause.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_play.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_play.png new file mode 100644 index 0000000000..32db628355 Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_play.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_pre.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_pre.png new file mode 100644 index 0000000000..97f630aecd Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxi_p_music_pre.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_go2_list.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_go2_list.png new file mode 100644 index 0000000000..bf68468f3b Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_go2_list.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_go2_playing.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_go2_playing.png new file mode 100644 index 0000000000..1f10388ed7 Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_go2_playing.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg.png new file mode 100644 index 0000000000..77fc369149 Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg_middle.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg_middle.png new file mode 100644 index 0000000000..f8cd31bd4d Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg_middle.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_bottom.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_bottom.png new file mode 100644 index 0000000000..32448f1b6f Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_bottom.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_head.png b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_head.png new file mode 100644 index 0000000000..e3c1fc8039 Binary files /dev/null and b/OCH/taxi/passenger/src/main/res/drawable-nodpi/taxt_p_music_bg_relax_head.png differ diff --git a/OCH/taxi/passenger/src/main/res/drawable/taxt_p_music_seekbar_style.xml b/OCH/taxi/passenger/src/main/res/drawable/taxt_p_music_seekbar_style.xml new file mode 100644 index 0000000000..913d8c9679 --- /dev/null +++ b/OCH/taxi/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/taxi/passenger/src/main/res/layout/taxi_p_base_fragment.xml b/OCH/taxi/passenger/src/main/res/layout/taxi_p_base_fragment.xml index 3267295a8f..b750d07ef9 100644 --- a/OCH/taxi/passenger/src/main/res/layout/taxi_p_base_fragment.xml +++ b/OCH/taxi/passenger/src/main/res/layout/taxi_p_base_fragment.xml @@ -4,6 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/layout/taxi_p_music_list.xml b/OCH/taxi/passenger/src/main/res/layout/taxi_p_music_list.xml new file mode 100644 index 0000000000..69dd16f3db --- /dev/null +++ b/OCH/taxi/passenger/src/main/res/layout/taxi_p_music_list.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/layout/taxi_p_music_list_item.xml b/OCH/taxi/passenger/src/main/res/layout/taxi_p_music_list_item.xml new file mode 100644 index 0000000000..9c4a899d8f --- /dev/null +++ b/OCH/taxi/passenger/src/main/res/layout/taxi_p_music_list_item.xml @@ -0,0 +1,37 @@ + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/layout/taxi_p_music_playing.xml b/OCH/taxi/passenger/src/main/res/layout/taxi_p_music_playing.xml new file mode 100644 index 0000000000..260e8bcb29 --- /dev/null +++ b/OCH/taxi/passenger/src/main/res/layout/taxi_p_music_playing.xml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OCH/taxi/passenger/src/main/res/values/colors.xml b/OCH/taxi/passenger/src/main/res/values/colors.xml index 315208e607..79958252ba 100644 --- a/OCH/taxi/passenger/src/main/res/values/colors.xml +++ b/OCH/taxi/passenger/src/main/res/values/colors.xml @@ -39,8 +39,11 @@ #A0B3DA #005D6A8C #5D6A8C + #576887 #995D6A8C #B37E90BF + #488ED0 + #598CFF #464646 diff --git a/app/build.gradle b/app/build.gradle index 052ed58b7d..cb6369e1e0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -149,12 +149,14 @@ android { buildConfigField 'boolean', 'secure', "true" buildConfigField 'String', 'URLs', "\"${readFileToJson("mogo").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("mogo").replace("\"", "\\\"")}\"" + buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("mogo").replace("\"", "\\\"")}\"" } yantai { dimension "project" buildConfigField 'boolean', 'secure', "false" buildConfigField 'String', 'URLs', "\"${readFileToJson("yantai").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("yantai").replace("\"", "\\\"")}\"" + buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("yantai").replace("\"", "\\\"")}\"" } dali { @@ -162,12 +164,14 @@ android { buildConfigField 'boolean', 'secure', "true" buildConfigField 'String', 'URLs', "\"${readFileToJson("dali").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("dali").replace("\"", "\\\"")}\"" + buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("dali").replace("\"", "\\\"")}\"" } saas { dimension "project" buildConfigField 'boolean', 'secure', "true" buildConfigField 'String', 'URLs', "\"${readFileToJson("saas").replace("\"", "\\\"")}\"" buildConfigField 'String', 'mediaUrlConfig', "\"${readMediaUrlConfigFromJsonFile("saas").replace("\"", "\\\"")}\"" + buildConfigField 'String', 'musicUrlConfig', "\"${readMusicUrlConfigFromJsonFile("saas").replace("\"", "\\\"")}\"" } // 配置网络环境,QA、线上、演示 qa { @@ -426,6 +430,36 @@ Object readMediaUrlConfigFromJsonFile(env){ return null } +/** + * 读取各车型宣传视频本地配置 + * @param env + * @return + */ +Object readMusicUrlConfigFromJsonFile(env){ + try { + // 加载config.json 文件 + File file = new File("${rootDir}/app/config/MusicUrlConfig.json") + def jsonSlurper = new JsonSlurper() + // 解析json + def config = jsonSlurper.parse(file) + def flavorNames = variantVehicleName() + def jsonOutput = new JsonOutput() + def getKey = flavorNames + config.get(env).each {key, value -> + // 匹配flavor对应的 json + if(flavorNames.toLowerCase().contains(key)){ + getKey = key + return true + } + } + return jsonOutput.toJson(config.get(env).get(getKey)) + } catch (IOException e) { + e.printStackTrace() + } + return null +} + + def variantVehicleName() { if(gradle.startParameter.taskNames.size()>0) { for (String taskName : gradle.startParameter.taskNames) { diff --git a/app/config/MusicUrlConfig.json b/app/config/MusicUrlConfig.json index a56df21125..0908ccd73c 100644 --- a/app/config/MusicUrlConfig.json +++ b/app/config/MusicUrlConfig.json @@ -1,93 +1,123 @@ { "mogo": { - "taxiunmannedpassengerochdfhq": { + "taxipassengerochdfhq": { "musics": [ { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", "songName": "钢琴曲", "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", "songUrlType": "local", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_05.png", "tag": [ "放松" ] }, { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", "songName": "唯美的梦", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718271475/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", "tag": [ "放松" ] }, { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", "songName": "有趣的时光", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718256470/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718184532/taxt_p_music_bottom_03.png", "tag": [ "欢快" ] }, { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", "songName": "游乐场", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718241926/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", "tag": [ "欢快" ] }, { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", "songName": "鼓舞我", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718228949/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", "songName": "假日乐趣", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718228949/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", "songName": "伟大梦想", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718228949/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", "tag": [ "浪漫" ] }, { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", "songName": "钢琴映像", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718241926/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718167794/taxt_p_music_bottom_02.png", "tag": [ "浪漫" ] }, { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", "songName": "宁静的景色", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718271475/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718199388/taxt_p_music_bottom_04.png", "tag": [ "静谧" ] }, { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", "songName": "困倦小猫", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718228949/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718149545/taxt_p_music_bottom_01.png", "tag": [ "静谧" ] @@ -97,91 +127,121 @@ "charterpassengerochm1": { "musics": [ { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", "songName": "钢琴曲", "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", "songUrlType": "local", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", "tag": [ "放松" ] }, { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", "songName": "唯美的梦", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_04.png", "tag": [ "放松" ] }, { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", "songName": "有趣的时光", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_03.png", "tag": [ "欢快" ] }, { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", "songName": "游乐场", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_02.png", "tag": [ "欢快" ] }, { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", "songName": "鼓舞我", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", "songName": "假日乐趣", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", "songName": "伟大梦想", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "浪漫" ] }, { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", "songName": "钢琴映像", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_02.png", "tag": [ "浪漫" ] }, { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", "songName": "宁静的景色", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_04.png", "tag": [ "静谧" ] }, { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", "songName": "困倦小猫", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "静谧" ] @@ -190,188 +250,124 @@ } }, "dali": { - "taxiunmannedpassengerochdfhq": { - "musics": [ - { - "songName": "钢琴曲", - "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", - "songUrlType": "local", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", - "tag": [ - "放松" - ] - }, - { - "songName": "唯美的梦", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", - "tag": [ - "放松" - ] - }, - { - "songName": "有趣的时光", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", - "tag": [ - "欢快" - ] - }, - { - "songName": "游乐场", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", - "tag": [ - "欢快" - ] - }, - { - "songName": "鼓舞我", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", - "tag": [ - "动感" - ] - }, - { - "songName": "假日乐趣", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", - "tag": [ - "动感" - ] - }, - { - "songName": "伟大梦想", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", - "tag": [ - "浪漫" - ] - }, - { - "songName": "钢琴映像", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", - "tag": [ - "浪漫" - ] - }, - { - "songName": "宁静的景色", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", - "tag": [ - "静谧" - ] - }, - { - "songName": "困倦小猫", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", - "tag": [ - "静谧" - ] - } - ] - }, "charterpassengerochm1": { "musics": [ { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", "songName": "钢琴曲", "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", "songUrlType": "local", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", "tag": [ "放松" ] }, { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", "songName": "唯美的梦", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_04.png", "tag": [ "放松" ] }, { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", "songName": "有趣的时光", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_03.png", "tag": [ "欢快" ] }, { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", "songName": "游乐场", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_02.png", "tag": [ "欢快" ] }, { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", "songName": "鼓舞我", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", "songName": "假日乐趣", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", "songName": "伟大梦想", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "浪漫" ] }, { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", "songName": "钢琴映像", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_02.png", "tag": [ "浪漫" ] }, { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", "songName": "宁静的景色", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_04.png", "tag": [ "静谧" ] }, { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", "songName": "困倦小猫", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "静谧" ] @@ -380,188 +376,124 @@ } }, "yantai": { - "taxiunmannedpassengerochdfhq": { - "musics": [ - { - "songName": "钢琴曲", - "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", - "songUrlType": "local", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", - "tag": [ - "放松" - ] - }, - { - "songName": "唯美的梦", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", - "tag": [ - "放松" - ] - }, - { - "songName": "有趣的时光", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", - "tag": [ - "欢快" - ] - }, - { - "songName": "游乐场", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", - "tag": [ - "欢快" - ] - }, - { - "songName": "鼓舞我", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", - "tag": [ - "动感" - ] - }, - { - "songName": "假日乐趣", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", - "tag": [ - "动感" - ] - }, - { - "songName": "伟大梦想", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", - "tag": [ - "浪漫" - ] - }, - { - "songName": "钢琴映像", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", - "tag": [ - "浪漫" - ] - }, - { - "songName": "宁静的景色", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", - "tag": [ - "静谧" - ] - }, - { - "songName": "困倦小猫", - "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", - "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", - "tag": [ - "静谧" - ] - } - ] - }, "charterpassengerochm1": { "musics": [ { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", "songName": "钢琴曲", "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", "songUrlType": "local", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", "tag": [ "放松" ] }, { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", "songName": "唯美的梦", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_04.png", "tag": [ "放松" ] }, { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", "songName": "有趣的时光", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_03.png", "tag": [ "欢快" ] }, { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", "songName": "游乐场", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_02.png", "tag": [ "欢快" ] }, { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", "songName": "鼓舞我", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", "songName": "假日乐趣", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", "songName": "伟大梦想", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "浪漫" ] }, { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", "songName": "钢琴映像", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_02.png", "tag": [ "浪漫" ] }, { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", "songName": "宁静的景色", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_04.png", "tag": [ "静谧" ] }, { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", "songName": "困倦小猫", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "静谧" ] @@ -569,95 +501,125 @@ ] } }, - "sass": { + "saas": { "taxiunmannedpassengerochdfhq": { "musics": [ { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", "songName": "钢琴曲", "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", "songUrlType": "local", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", "tag": [ "放松" ] }, { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", "songName": "唯美的梦", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_04.png", "tag": [ "放松" ] }, { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", "songName": "有趣的时光", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_03.png", "tag": [ "欢快" ] }, { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", "songName": "游乐场", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_02.png", "tag": [ "欢快" ] }, { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", "songName": "鼓舞我", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", "songName": "假日乐趣", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", "songName": "伟大梦想", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "浪漫" ] }, { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", "songName": "钢琴映像", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_02.png", "tag": [ "浪漫" ] }, { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", "songName": "宁静的景色", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_04.png", "tag": [ "静谧" ] }, { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", "songName": "困倦小猫", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "静谧" ] @@ -667,91 +629,121 @@ "charterpassengerochm1": { "musics": [ { + "id": "1", + "md5": "C24399007B8DBAAEAA6EF448A25393CE", "songName": "钢琴曲", "songUrl": "android.resource://com.mogo.launcher.f/raw/piano_music.mp3", "songUrlType": "local", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_05.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_05.png", "tag": [ "放松" ] }, { + "id": "2", + "md5": "ECA45497D915E0B933E45B5A5411B30E", "songName": "唯美的梦", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523329643/beautiful_dream.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523261936/relax.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_04.png", "tag": [ "放松" ] }, { + "id": "3", + "md5": "8FA0DE702443CD05BCA6DB1B7E6BE036", "songName": "有趣的时光", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523382842/fun_times.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_03.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_03.png", "tag": [ "欢快" ] }, { + "id": "4", + "md5": "FB1EF41BC69216AAA90323F3FBABDDDF", "songName": "游乐场", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523484705/playground_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523427472/lively.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_02.png", "tag": [ "欢快" ] }, { + "id": "5", + "md5": "B721B4FBAE2D472F875A3A539135337A", "songName": "鼓舞我", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523537118/uplift_me.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "6", + "md5": "836B99E70B7BC5C2283D602DF60F45F2", "songName": "假日乐趣", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523604653/summer_fun.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523566881/dynamic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "动感" ] }, { + "id": "7", + "md5": "6B0B9FEF15B0FC8F1A1EAB6793DE5C02", "songName": "伟大梦想", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523656707/dreaming_big.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "浪漫" ] }, { + "id": "8", + "md5": "3E8EE95E9E838709601D8BB8E2CC6B2A", "songName": "钢琴映像", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523740974/piano_reflections.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523695133/romantic.jpg", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_02.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_02.png", "tag": [ "浪漫" ] }, { + "id": "9", + "md5": "59D695BB96DF67DBC0F5B064D727DA4A", "songName": "宁静的景色", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523785714/serene_view.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_04.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_04.png", "tag": [ "静谧" ] }, { + "id": "10", + "md5": "1FBFA6AB04AA76168FDFDAFB0E189F4D", "songName": "困倦小猫", "songUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523857450/sleepy_cat.mp3", "songUrlType": "cloud", - "coverImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709523814937/quiet.png", + "coverHeadImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718285436/taxt_p_music_head_01.png", + "coverBottomImageUrl": "https://img.zhidaohulian.com/fileServer/online_car_hailing/1709718213773/taxt_p_music_bottom_01.png", "tag": [ "静谧" ] diff --git a/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt b/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt index 6d0db996c1..6c1f1e6e8b 100644 --- a/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt +++ b/app/src/main/java/com/mogo/launcher/startup/ConfigStartUp.kt @@ -48,6 +48,7 @@ object ConfigStartUp { FunctionBuildConfig.unableLaunchAutopilotGear = BuildConfig.UNABLE_LAUNCH_AUTOPILOT_GEAR // 各车型宣传视频本地配置json FunctionBuildConfig.mediaUrlConfig = BuildConfig.mediaUrlConfig + FunctionBuildConfig.musicUrlConfig = BuildConfig.musicUrlConfig //是否支持Patch升级 FunctionBuildConfig.isSupportPatchUpgrade = BuildConfig.IS_SUPPORT_PATCH_UPGRADE diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt index 77412a2db3..8adf15a6c3 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/config/FunctionBuildConfig.kt @@ -127,6 +127,14 @@ object FunctionBuildConfig { @JvmField var mediaUrlConfig = "" + /** + * 各车型宣传音频本地配置 + * 广告json + */ + @Volatile + @JvmField + var musicUrlConfig = "" + /** * 配置连接工控机的IP地址 diff --git a/core/mogo-core-res/src/main/res/values/dimens.xml b/core/mogo-core-res/src/main/res/values/dimens.xml index 1cd0ceedec..213bcd185e 100644 --- a/core/mogo-core-res/src/main/res/values/dimens.xml +++ b/core/mogo-core-res/src/main/res/values/dimens.xml @@ -8,6 +8,7 @@ -30dp -27dp -20dp + -17dp -12dp -10dp -8dp diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/DownloadUtils.kt b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/DownloadUtils.kt index b5a8e8f1a7..c4891e5acd 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/DownloadUtils.kt +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/download/DownloadUtils.kt @@ -56,4 +56,32 @@ object DownloadUtils { } .launchIn(scope) } + fun downLoadNoUi(ctx: Context?, url: String, savePath: String, fileName: String, listener: IDownloadListener?) { // FileBean fileBean = new FileBean(0, savePath, fileName, url, 0); + val context = ctx ?: Utils.getApp() ?: throw AssertionError("context must not be null.") + if (!Downloader.hasInit()) { + Downloader.init(context) + Downloader.setLoggable(BuildConfig.DEBUG) + } + Downloader.setNetStatePoller(poller) + Downloader.download(url, File(savePath, fileName)) + .onEach { + when(it) { + is DownloadStart -> + UiThreadHandler.post { listener?.onStart(url) } + is Downloading -> { + UiThreadHandler.post { listener?.onProgress(url, it.downloaded, it.total) } + } + is DownloadSuccess -> { + UiThreadHandler.post { listener?.onFinished(url, it.path)} + } + is DownloadFailed -> { + UiThreadHandler.post { listener?.onError(url, it.msg) } + } + } + } + .filter { + it.isComplete() + } + .launchIn(scope) + } } \ No newline at end of file