CoursePlugin.kt 11 KB
Newer Older
严久程 committed
1
import android.app.AlertDialog
严久程 committed
2 3
import android.content.Intent
import android.net.Uri
严久程 committed
4
import android.os.Handler
严久程 committed
5
import android.text.TextUtils
6
import com.channel.ydl_flutter_base.base.BaseFlutterFragment
严久程 committed
7
import com.lzf.easyfloat.permission.PermissionUtils
严久程 committed
8 9 10 11 12
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.media.view.PlayerFloatView
严久程 committed
13 14
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
严久程 committed
15
import com.ydl.ydl_router.manager.YDLRouterManager
严久程 committed
16
import com.ydl.ydlcommon.base.BaseApp
严久程 committed
17
import com.ydl.ydlcommon.data.PlatformDataManager
严久程 committed
18
import com.ydl.ydlcommon.modular.ModularServiceManager
严久程 committed
19 20
import com.yidianling.common.tools.LogUtil
import com.yidianling.common.tools.RxDeviceTool
严久程 committed
21
import com.yidianling.common.tools.ToastUtil
严久程 committed
22
import com.yidianling.course.CourseConstants
严久程 committed
23
import com.yidianling.course.bean.ScrollStatusChangeEvent
严久程 committed
24 25 26 27
import com.yidianling.course.courseNew.mine.MyCourseActivity
import com.yidianling.course.course_special_list.activity.CourseSpecialListActivity
import com.yidianling.course.flutterPlugin.CourseSendPlugin
import com.yidianling.course.router.CourseIn
严久程 committed
28
import com.yidianling.course.widget.VideoFloatHelper
严久程 committed
29
import de.greenrobot.event.EventBus
严久程 committed
30 31 32
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.view.FlutterView
严久程 committed
33
import org.json.JSONObject
严久程 committed
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

/**
 * @author jiucheng
 * @描述:
 * @Copyright Copyright (c) 2018
 * @Company 壹点灵
 * @date 2019/10/18
 */
class CoursePlugin : MethodChannel.MethodCallHandler {
    private var mFragment: BaseFlutterFragment? = null

    private constructor(fragment: BaseFlutterFragment) {
        mFragment = fragment
    }

    companion object {
        const val CHANNEL: String = "base/channel/native/get"
        const val GETPUBLICPARAMAS: String = "getPublicParamas"
        const val JUMPURL: String = "jumpUrl"
        const val PLAYCOURSEFILE: String = "playCourseFile"
        const val PAUSECOURSEPLAY: String = "pauseCoursePlay"
严久程 committed
55 56 57 58
        const val REQUESTDATACOMPLETE: String = "requestDataComplete"
        const val REQUESTDATAERROR: String = "requestDataError"
        const val REQUESTSCROLLFOCUS: String = "requestScrollFocus"
        const val RELEASESCROLLFOCUS: String = "releaseScrollFocus"
59
        const val IOSPOP: String = "iosPop"
严久程 committed
60

严久程 committed
61
        fun register(fragment: BaseFlutterFragment, flutterView: FlutterView) {
严久程 committed
62 63 64 65 66 67 68
            MethodChannel(flutterView, CHANNEL).setMethodCallHandler(CoursePlugin(fragment))
        }
    }

    override fun onMethodCall(methodCall: MethodCall, result: MethodChannel.Result) {
        when (methodCall.method) {
            GETPUBLICPARAMAS -> {
严久程 committed
69
                val loginBean = ModularServiceManager.getPlatformUserService()?.getUser()
严久程 committed
70
                val mMap = mutableMapOf<String, Any>()
71
                var uid = loginBean?.userId ?: ""
严久程 committed
72
                mMap["isDevelopment"] = false
73
                mMap["uid"] = if (TextUtils.isEmpty(uid)) "0" else uid
严久程 committed
74 75
                mMap["accessToken"] = loginBean?.token ?: ""
                        ?: ""
严久程 committed
76
                mMap["isFromApp"] = "1"
严久程 committed
77
                mMap["ffrom"] = PlatformDataManager.getRam().getChannelName()
严久程 committed
78
                mMap["version"] = RxDeviceTool.getAppVersionName(BaseApp.getApp())
严久程 committed
79 80 81 82
                mMap["osBuild"] =
                    RxDeviceTool.getBuildMANUFACTURER() + "," + RxDeviceTool.getBuildBrandModel() + "," + RxDeviceTool.getOsBuileVersion() + "," + RxDeviceTool.getAppVersionName(
                        BaseApp.getApp()
                    )
严久程 committed
83 84 85 86 87
                result.success(mMap)
            }
            JUMPURL -> {
                var jumpUrl: String? = methodCall.arguments.toString()
                if (!TextUtils.isEmpty(jumpUrl)) {
严久程 committed
88 89 90
                    if (jumpUrl!!.startsWith("http")) {
                        val h5Params = H5Params(jumpUrl, "")
                        NewH5Activity.start(mFragment!!.activity, h5Params)
91 92 93
                        PlayerFloatHelper.hide()
                        PlayerFloatHelper.removeView(mFragment!!.activity!!)
                        AudioPlayer.get().stopPlayer()
严久程 committed
94
                        CourseSendPlugin.sendMsg(false)
严久程 committed
95 96
                        return
                    }
严久程 committed
97
                    when {
严久程 committed
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
                        jumpUrl!!.contains("user/login") -> {
                            //TODO flutter 登录状态判断需要更改
                            val loginBean =
                                ModularServiceManager.getPlatformUserService()?.getUser()
                            if (loginBean == null || TextUtils.isEmpty(loginBean.userId) || TextUtils.equals(
                                    loginBean.userId,
                                    "0"
                                )
                            ) {
                                mFragment!!.startActivity(CourseIn.loginWayIntent(mFragment!!.activity!!))
                            } else {
                                MyCourseActivity.start(mFragment!!.activity)
                            }

                        }
严久程 committed
113 114
                        jumpUrl.contains("course/myCourse") -> MyCourseActivity.start(mFragment!!.activity)
                        jumpUrl.contains("course/specialList") -> //跳转专题列表页
严久程 committed
115
                            mFragment!!.activity!!.startActivity(
严久程 committed
116 117 118 119 120
                                Intent(
                                    mFragment!!.activity,
                                    CourseSpecialListActivity::class.java
                                )
                            )
严久程 committed
121 122
                        jumpUrl.contains("course/detail") -> {
                            var uri = Uri.parse(jumpUrl)
严久程 committed
123 124
                            var resultParams = uri.getQueryParameter("params")
                            val jsonObject = JSONObject(resultParams)
125 126 127 128
                            val h5Params = H5Params(
                                CourseConstants.COURSE_DETAIL_H5 + jsonObject.getString("id"),
                                "课程详情"
                            )
严久程 committed
129 130 131 132
                            NewH5Activity.start(mFragment!!.activity, h5Params)
                        }
                        else -> YDLRouterManager.router(jumpUrl)
                    }
133 134 135
                    PlayerFloatHelper.hide()
                    PlayerFloatHelper.removeView(mFragment!!.activity!!)
                    AudioPlayer.get().stopPlayer()
严久程 committed
136
                    CourseSendPlugin.sendMsg(false)
严久程 committed
137 138 139 140 141 142 143 144
                }
            }
            PLAYCOURSEFILE -> {
                var fileInfo: Map<*, *> = methodCall.arguments as Map<*, *>
                LogUtil.e("播放地址:$fileInfo")
                playMedia(fileInfo)
            }
            PAUSECOURSEPLAY -> {
严久程 committed
145 146
                if (AudioPlayer.get().isPlaying) {
                    AudioPlayer.get().playPause()
严久程 committed
147 148 149
                    PlayerFloatHelper.updatePlayState()
                }
            }
严久程 committed
150 151 152 153 154 155 156 157 158 159 160 161
            REQUESTDATACOMPLETE -> {
                LogUtil.e("数据加载完成了")
            }
            REQUESTDATAERROR -> {
                LogUtil.e("接口数据请求失败")
            }
            REQUESTSCROLLFOCUS -> {
                EventBus.getDefault().post(ScrollStatusChangeEvent(false))
            }
            RELEASESCROLLFOCUS -> {
                EventBus.getDefault().post(ScrollStatusChangeEvent(true))
            }
162 163 164 165 166 167 168
            IOSPOP -> {
                PlayerFloatHelper.hide()
                PlayerFloatHelper.removeView(mFragment!!.activity!!)
                AudioPlayer.get().stopPlayer()
                CourseSendPlugin.sendMsg(false)
                mFragment!!.activity.finish()
            }
严久程 committed
169 170 171 172
        }
    }

    private fun playMedia(fileInfo: Map<*, *>) {
严久程 committed
173
        if (PlayerFloatHelper.isShow(mFragment!!.activity!!)) {
严久程 committed
174
            PlayerFloatHelper.hide()
严久程 committed
175
            PlayerFloatHelper.removeView(mFragment!!.activity!!)
严久程 committed
176
            AudioPlayer.get().stopPlayer()
严久程 committed
177
        } else {
严久程 committed
178
            PlayerFloatHelper.removeView(mFragment!!.activity!!)
严久程 committed
179 180 181
        }


严久程 committed
182 183 184 185 186
        val music = Music()
        music.title = fileInfo["title"].toString()
        music.artist = fileInfo["name"].toString()
        music.coverPath = fileInfo["cover"].toString()
        PlayerFloatHelper.isCanClick = false
严久程 committed
187 188 189 190 191

        var demoType = fileInfo["demoType"] as Int
        var url = fileInfo["url"].toString()

        if (demoType == 1) {
严久程 committed
192
            music.path = url
严久程 committed
193
            PlayerFloatHelper.playTempData.clear()
严久程 committed
194 195
            val hashMap = HashMap<String, String>()
            hashMap["course_id"] = fileInfo["courseId"].toString()
严久程 committed
196
            AudioPlayer.get().singlePlay(music)
197 198
            PlayerFloatHelper.show(
                mFragment!!.activity,
严久程 committed
199 200
                playTypeEnum = PlayTypeEnum.PLAY_TYPE_COURSE,
                playData = hashMap
201
            )
严久程 committed
202
            VideoFloatHelper.dismissFloat(mFragment!!.activity)
严久程 committed
203 204
        }
        if (demoType == 2) {
严久程 committed
205 206 207 208 209 210 211 212 213 214 215 216
            VideoFloatHelper.setVideoInfo(
                fileInfo["courseId"].toString(),
                fileInfo["url"].toString(),
                false
            )
            checkPermission()

            if (PlayerFloatHelper.isShow(mFragment!!.activity!!)) {
                PlayerFloatHelper.hide()
                PlayerFloatHelper.removeView(mFragment!!.activity!!)
                AudioPlayer.get().stopPlayer()
            }
严久程 committed
217 218
        }

严久程 committed
219
        Handler().postDelayed({ CourseSendPlugin.sendMsg(true) }, 300)
严久程 committed
220 221 222

        PlayerFloatHelper.addClickListener(object : PlayerFloatView.FloatViewPlayListener {
            override fun onStartClick() {
严久程 committed
223
                if (!PlayerFloatHelper.isCanClick && PlayerFloatHelper.playingType == PlayTypeEnum.PLAY_TYPE_COURSE) {
严久程 committed
224 225 226 227 228 229
                    CourseSendPlugin.sendMsg(true)
                }
            }

            override fun onPlayFinish() {
                PlayerFloatHelper.hide()
严久程 committed
230
                AudioPlayer.get().stopPlayer()
严久程 committed
231
                CourseSendPlugin.sendMsg(false)
严久程 committed
232 233 234
            }

            override fun onPauseClick() {
严久程 committed
235
                if (!PlayerFloatHelper.isCanClick && PlayerFloatHelper.playingType == PlayTypeEnum.PLAY_TYPE_COURSE) {
严久程 committed
236 237 238 239 240
                    CourseSendPlugin.sendMsg(false)
                }
            }
        })
    }
严久程 committed
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264


    /**
     * 检测浮窗权限是否开启,若没有给与申请提示框(非必须,申请依旧是EasyFloat内部内保进行)
     */
    private fun checkPermission() {
        if (PermissionUtils.checkPermission(mFragment!!.activity)) {

            VideoFloatHelper.showVideoFloat(mFragment!!.activity)
        } else {
            AlertDialog.Builder(mFragment!!.activity)
                .setMessage("使用浮窗功能,需要您授权悬浮窗权限。")
                .setPositiveButton("去开启") { _, _ ->
                    VideoFloatHelper.showVideoFloat(mFragment!!.activity)
                }
                .setNegativeButton("取消") { _, _ ->
                    ToastUtil.toastLong(
                        mFragment!!.activity,
                        "App正常工作需要内部存储使用权限,请开启"
                    )
                }
                .show()
        }
    }
严久程 committed
265
}