package com.yidianling.muse.handler
import android.graphics.drawable.Drawable
import com.google.gson.Gson
import com.ydl.media.audio.AudioPlayer
import com.ydl.media.audio.model.Music
import com.ydl.media.view.PlayTypeEnum
import com.ydl.media.view.PlayerFloatHelper
import com.ydl.ydlcommon.utils.YDLCacheUtils
import com.ydl.ydlcommon.view.dialog.YDLShareDialog
import com.yidianling.common.tools.ToastUtil
import com.yidianling.muse.R
import com.yidianling.muse.bean.MuseModuleBean
import io.flutter.app.FlutterActivity
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
/**
* Created by xj on 2019/9/6.
*/
class MusePlugin : MethodChannel.MethodCallHandler {
companion object {
const val CHANNEL: String = "lib/fm_module/channel"
const val ACTION_GET_APPINFO_INITIAL_DATA = "action_get_initial_app_info_data" //获取主包信息的数据
const val ACTION_GET_MUSIC_INITIAL_DATA = "action_get_initial_music_data" //获取音乐原生的数据
const val ACTION_PLAY_MUSIC = "action_play_music" //播放音乐
const val ACTION_PAUSE_MUSIC = "action_pause_music" //暂停音乐
const val ACTION_STOP_MUSIC = "action_stop_music" //暂停(销毁)音乐
const val ACTION_SET_DEFAULT_TIME = "action_set_default_time" //时间控制页面设置时间
const val ACTION_POP_PAGE = "action_pop_page" //pop当前页面
const val ACTION_SHARE_WX = "action_share_wx" //分享至微信
const val ACTION_SET_BGIMG = "action_set_bgImg"; //设置背景图片
var currentMusicUrl: String = "" //当前正在播放的冥想url
var data: MuseModuleBean? = null //冥想数据
fun rigister(activity: FlutterActivity, currentUrl: String?, dataJson: String) {
currentUrl?.let {
currentMusicUrl = currentUrl
}
data = Gson().fromJson(dataJson, MuseModuleBean::class.java)
MethodChannel(activity.flutterView, CHANNEL).setMethodCallHandler(MusePlugin(activity))
}
}
private var mActivity: FlutterActivity? = null
private constructor(activity: FlutterActivity) {
mActivity = activity
}
override fun onMethodCall(methodCall: MethodCall, result: MethodChannel.Result) {
methodCall?.let {
when (methodCall.method) {
// flutter获取原生的音乐数据
ACTION_GET_MUSIC_INITIAL_DATA -> {
val mMap = mutableMapOf<String, Any>()
mMap["defaultTime"] = getDefaultTime()
mMap["currentMusicUrl"] = currentMusicUrl
mMap["dataJson"] = Gson().toJson(data)
result?.success(mMap)
}
// 播放音乐
ACTION_PLAY_MUSIC -> {
var musicUrl: String? = methodCall.argument<String>("url")
var mContinue: Boolean = methodCall.argument<Boolean>("mContinue")!!
if (mContinue) {
AudioPlayer.get().seekTo(-1, AudioPlayer.get().audioPosition)
AudioPlayer.get().startPlayer()
}else {
val music = Music()
music.path = musicUrl ?: currentMusicUrl
music.album = ""
music.artist = ""
music.coverPath = ""
music.title = ""
PlayerFloatHelper.playingType = PlayTypeEnum.PLAY_TYPE_MUSE
AudioPlayer.get().singleCirclePlay(music)
}
}
// 暂停音乐
ACTION_PAUSE_MUSIC -> {
AudioPlayer.get().pausePlayer()
}
// 暂停(销毁)音乐
ACTION_STOP_MUSIC -> {
AudioPlayer.get().stopPlayer()
}
// 设置默认时间
ACTION_SET_DEFAULT_TIME -> {
YDLCacheUtils.saveMuseDefaultTime(methodCall.argument<Int>("time").toString())
}
// 退出flutteractivity
ACTION_POP_PAGE -> {
mActivity?.finish()
}
// 分享
ACTION_SHARE_WX -> {
share(methodCall)
}
//设置背景图片
ACTION_SET_BGIMG -> {
var mDrawable: Drawable?
when (methodCall.arguments) {
"sleeps_icon_default" -> {
mDrawable = mActivity?.resources?.getDrawable(R.drawable.muse_sleeps_icon_default)
}
"sleeps_icon_playing" -> {
mDrawable = mActivity?.resources?.getDrawable(R.drawable.muse_sleeps_icon_playing)
}
"muse_icon_default" -> {
mDrawable = mActivity?.resources?.getDrawable(R.drawable.muse_muse_icon_default)
}
"muse_icon_playing" -> {
mDrawable = mActivity?.resources?.getDrawable(R.drawable.muse_muse_icon_playing)
}
else -> {
mDrawable = mActivity?.resources?.getDrawable(R.drawable.muse_sleeps_icon_default)
}
}
mDrawable?.let {
mActivity?.window?.setBackgroundDrawable(mDrawable)
}
}
else -> {
}
}
}
}
/**
* 分享,跟FM一致
*/
private fun share(methodCall: MethodCall?) {
var shareUrl = methodCall?.argument<String>("shareUrl")?:""
var title = methodCall?.argument<String>("title")?:""
var path = methodCall?.argument<String>("path")?:""
var appId = methodCall?.argument<String>("appId")?:""
if (shareUrl.isEmpty()) {
ToastUtil.toastShort("分享数据获取失败")
}else {
val dialog = YDLShareDialog.style7(mActivity!!, title, shareUrl, "壹点零冥想", "https://img.yidianling.com/file/2019/06/10/fm0vovijx0p2br9s.png", path, appId)
dialog.setCallBack(object : YDLShareDialog.ICallBack {
override fun callBack(type: Int) {
}
})
dialog.show(mActivity!!.fragmentManager, "lose")
}
}
/**
* 获取默认时间
*/
private fun getDefaultTime(): Int {
var time = YDLCacheUtils.getMuseDefaultTime()
return try {
time.toInt()
} catch (e: Exception) {
600
}
}
}