|
|
@@ -5,12 +5,20 @@ import android.text.TextUtils
|
|
|
import android.view.MotionEvent
|
|
|
import android.view.View
|
|
|
import com.alibaba.android.arouter.facade.annotation.Route
|
|
|
+import com.alibaba.android.arouter.launcher.ARouter
|
|
|
+import com.hjq.permissions.OnPermissionCallback
|
|
|
+import com.hjq.permissions.XXPermissions
|
|
|
import com.yingyang.livebroadcast.R
|
|
|
import com.yingyang.livebroadcast.databinding.ActivityLiveDetailsBinding
|
|
|
import com.yingyang.livebroadcast.entity.Record
|
|
|
-import com.yingyangfly.baselib.base.BaseActivity
|
|
|
+import com.yingyangfly.baselib.dialog.TipDialogFragment
|
|
|
import com.yingyangfly.baselib.ext.getEndAnimation
|
|
|
import com.yingyangfly.baselib.ext.getScaleAnimation
|
|
|
+import com.yingyangfly.baselib.ext.show
|
|
|
+import com.yingyangfly.baselib.ext.toast
|
|
|
+import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
|
|
|
+import com.yingyangfly.baselib.permissions.EsayPermissions
|
|
|
+import com.yingyangfly.baselib.permissions.Permission
|
|
|
import com.yingyangfly.baselib.router.RouterUrlCommon
|
|
|
import com.yingyangfly.baselib.utils.GsonUtil
|
|
|
|
|
|
@@ -18,24 +26,74 @@ import com.yingyangfly.baselib.utils.GsonUtil
|
|
|
* 直播详情
|
|
|
*/
|
|
|
@Route(path = RouterUrlCommon.liveDetails)
|
|
|
-class LiveDetailsActivity : BaseActivity<ActivityLiveDetailsBinding>(),
|
|
|
+class LiveDetailsActivity : BaseMVVMActivity<ActivityLiveDetailsBinding, LiveDetailsViewModel>(),
|
|
|
View.OnTouchListener {
|
|
|
|
|
|
+ private val permissions = mutableListOf(
|
|
|
+ Permission.WRITE_EXTERNAL_STORAGE,
|
|
|
+ Permission.CAMERA,
|
|
|
+ Permission.RECORD_AUDIO,
|
|
|
+ Permission.READ_EXTERNAL_STORAGE
|
|
|
+ )
|
|
|
+
|
|
|
private var url = ""
|
|
|
+ private var record: Record? = null
|
|
|
|
|
|
+ @SuppressLint("SetTextI18n")
|
|
|
override fun initViews() {
|
|
|
url = intent.getStringExtra("url") ?: ""
|
|
|
if (TextUtils.isEmpty(url).not()) {
|
|
|
- val record = GsonUtil.GsonToBean(url, Record::class.java)
|
|
|
+ record = GsonUtil.GsonToBean(url, Record::class.java)
|
|
|
if (record != null) {
|
|
|
binding.data = record
|
|
|
+ when (record?.liveStatus) {
|
|
|
+ "1" -> {
|
|
|
+ binding {
|
|
|
+ if (TextUtils.equals("1", record?.isReservation)) {
|
|
|
+ tvStatus.text = "未开始"
|
|
|
+ } else {
|
|
|
+ tvStatus.text = "预约直播"
|
|
|
+ }
|
|
|
+ tvLiveTime.text = "直播时间:" + record?.getLiveTime()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ "2" -> {
|
|
|
+ binding {
|
|
|
+ tvStatus.text = "直播中"
|
|
|
+ tvLiveTime.text = "直播时间:" + record?.getLiveTime()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ "3" -> {
|
|
|
+ binding {
|
|
|
+ tvStatus.text = "直播中断"
|
|
|
+ tvLiveTime.text = "直播时间:" + record?.getLiveTime()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ "4" -> {
|
|
|
+ binding {
|
|
|
+ tvStatus.text = "直播取消"
|
|
|
+ tvLiveTime.text = "直播时间:" + record?.getLiveTime()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else -> {
|
|
|
+ binding.tvLiveTime.text = "直播时间:" + record?.getBeginTimeInfo()
|
|
|
+ if (TextUtils.isEmpty(record?.liveVideo)) {
|
|
|
+ binding.tvStatus.text = "直播结束"
|
|
|
+ } else {
|
|
|
+ binding.tvStatus.text = "观看回放"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@SuppressLint("ClickableViewAccessibility")
|
|
|
override fun initListener() {
|
|
|
- binding.layoutHome.setOnTouchListener(this)
|
|
|
+ binding {
|
|
|
+ layoutHome.setOnTouchListener(this@LiveDetailsActivity)
|
|
|
+ tvStatus.setOnTouchListener(this@LiveDetailsActivity)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun initData() {
|
|
|
@@ -46,7 +104,7 @@ class LiveDetailsActivity : BaseActivity<ActivityLiveDetailsBinding>(),
|
|
|
override fun onTouch(v: View, event: MotionEvent): Boolean {
|
|
|
when (event.action) {
|
|
|
MotionEvent.ACTION_DOWN -> {
|
|
|
- if (v.id == R.id.layoutHome) {
|
|
|
+ if (v.id == R.id.layoutHome || v.id == R.id.tvStatus) {
|
|
|
v.startAnimation(getScaleAnimation())
|
|
|
}
|
|
|
}
|
|
|
@@ -54,10 +112,45 @@ class LiveDetailsActivity : BaseActivity<ActivityLiveDetailsBinding>(),
|
|
|
v.startAnimation(getEndAnimation())
|
|
|
if (v.id == R.id.layoutHome) {
|
|
|
finish()
|
|
|
+ } else if (v.id == R.id.tvStatus) {
|
|
|
+ if (record != null) {
|
|
|
+ when (record?.liveStatus) {
|
|
|
+ "1" -> {
|
|
|
+ binding {
|
|
|
+ tvStatus.show(
|
|
|
+ TextUtils.equals("1", record?.isReservation).not()
|
|
|
+ )
|
|
|
+ if (TextUtils.equals("1", record?.isReservation)) {
|
|
|
+ "您好,本次直播尚未开始,请耐心等待,感谢您的参与!".toast()
|
|
|
+ } else {
|
|
|
+ if (TextUtils.isEmpty(record?.id).not()) {
|
|
|
+ appointmentLive(record?.id!!)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ "2" -> {
|
|
|
+ initPermission()
|
|
|
+ }
|
|
|
+ "3" -> {
|
|
|
+ "您好,本次直播已中断,请您刷新列表重试,,感谢您的参与!".toast()
|
|
|
+ }
|
|
|
+ "4" -> {
|
|
|
+ "您好,本次直播已取消,您可以预约观看其他直播,感谢您的参与!".toast()
|
|
|
+ }
|
|
|
+ else -> {
|
|
|
+ if (TextUtils.isEmpty(record?.liveVideo)) {
|
|
|
+ "您好,本次直播已经结束,您可以选择观看直播回放,也可以预约观看其他直播。感谢您的参与!".toast()
|
|
|
+ } else {
|
|
|
+ videoPlayer()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
MotionEvent.ACTION_CANCEL -> {
|
|
|
- if (v.id == R.id.layoutHome) {
|
|
|
+ if (v.id == R.id.layoutHome || v.id == R.id.tvStatus) {
|
|
|
v.startAnimation(getEndAnimation())
|
|
|
}
|
|
|
}
|
|
|
@@ -65,4 +158,98 @@ class LiveDetailsActivity : BaseActivity<ActivityLiveDetailsBinding>(),
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 直播回放
|
|
|
+ */
|
|
|
+ private fun videoPlayer() {
|
|
|
+ if (record != null) {
|
|
|
+ ARouter.getInstance().build(RouterUrlCommon.videoPlayer)
|
|
|
+ .withString("url", record?.liveVideo)
|
|
|
+ .withString("title", record?.liveName)
|
|
|
+ .withTransition(
|
|
|
+ R.anim.leftin,
|
|
|
+ R.anim.leftout
|
|
|
+ ).navigation(mContext)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 预约直播
|
|
|
+ */
|
|
|
+ private fun appointmentLive(id: String) {
|
|
|
+ viewModel.reservationLive(id, fail = {
|
|
|
+ "预约直播失败".toast()
|
|
|
+ }, success = {
|
|
|
+ runOnUiThread {
|
|
|
+ if (record != null) {
|
|
|
+ record?.isReservation = "1"
|
|
|
+ }
|
|
|
+ binding.tvStatus.text = "已预约"
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取应用权限
|
|
|
+ */
|
|
|
+ private fun initPermission() {
|
|
|
+ val isHasPermission = XXPermissions.isGranted(this, permissions)
|
|
|
+ if (isHasPermission) {
|
|
|
+ getUserSign()
|
|
|
+ } else {
|
|
|
+ XXPermissions.with(this).permission(permissions).request(object : OnPermissionCallback {
|
|
|
+ override fun onGranted(permissions: List<String>, all: Boolean) {
|
|
|
+ if (all) { // 全部获取权限成功
|
|
|
+ getUserSign()
|
|
|
+ } else { // 部分获取权限成功
|
|
|
+ // 需要弹框处理
|
|
|
+ showTipDialog()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onDenied(permissions: List<String>, never: Boolean) {
|
|
|
+ if (never) { // 被永久拒绝
|
|
|
+ // 如果是被永久拒绝就跳转到应用权限系统设置页面
|
|
|
+ XXPermissions.startPermissionActivity(
|
|
|
+ this@LiveDetailsActivity,
|
|
|
+ permissions
|
|
|
+ )
|
|
|
+ } else {
|
|
|
+ // 需要弹框处理
|
|
|
+ showTipDialog()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 跳转设置页面
|
|
|
+ */
|
|
|
+ private fun showTipDialog() {
|
|
|
+ TipDialogFragment.TipDialogBuilder()
|
|
|
+ .content("当前应用缺少必要权限,请点击“设置”-“权限”-“权限管理”打开所需权限")
|
|
|
+ .leftBtnText("退出")
|
|
|
+ .rightBtnText("设置")
|
|
|
+ .leftClick({
|
|
|
+ }, dimiss = true)
|
|
|
+ .rightClick({
|
|
|
+ EsayPermissions.gotoPermissionSettings(mContext)
|
|
|
+ }, dimiss = true)
|
|
|
+ .show(supportFragmentManager)
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 跳转直播页面
|
|
|
+ */
|
|
|
+ private fun getUserSign() {
|
|
|
+ if (record != null && record?.streamInfo != null) {
|
|
|
+ ARouter.getInstance().build(RouterUrlCommon.liveBroadcast)
|
|
|
+ .withString("url", record?.streamInfo?.webrtcPull)
|
|
|
+ .withString("liveId", record?.id)
|
|
|
+ .withString("title", record?.liveName)
|
|
|
+ .withTransition(R.anim.leftin, R.anim.leftout)
|
|
|
+ .navigation(mContext)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|