Commit 7467ec0e authored by mengcuiguang's avatar mengcuiguang

Merge branch 'dev_new_vedio' of http://gitlab.mints-id.com/android/android_vedio into dev_new_vedio

parents e611b1d6 b3b9e9e7
......@@ -19,6 +19,7 @@ import com.mints.wisdomclean.video.DPHolderManager;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Handler;
/**
* 穿山甲广告
......@@ -46,9 +47,6 @@ public class TTGroMoreAdManagerHolder {
if (!sInit) {
GMMediationAdSdk.initialize(context, buildV2Config(context));
sInit = true;
// 初始化短剧SDK
DPHolderManager.INSTANCE.initDpSdk(context);
}
}
......
......@@ -4,10 +4,14 @@ import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
import com.bytedance.sdk.dp.DPDrama
import com.bytedance.sdk.dp.DPSdk
import com.bytedance.sdk.dp.IDPWidgetFactory
import com.mints.library.utils.json.JsonUtil
import com.mints.wisdomclean.common.Constant
import com.mints.wisdomclean.mvp.model.VedioBean
import com.mints.wisdomclean.utils.AppPreferencesManager
import com.mints.wisdomclean.utils.ToastUtil
import com.mints.wisdomclean.video.DramaApiDetailActivity
import com.mints.wisdomclean.video.VideoActivity
......@@ -79,14 +83,44 @@ object LocalVedioManager {
* 根据类型跳转对应视频详情页 [自有或穿山甲]
*/
fun startVedioDetailActivityForType(activity: Activity, data: VedioBean?) {
val bundle = Bundle()
bundle.putString(Constant.VEDIO_BEAN, JsonUtil.toJson(data))
if (data?.createType == 1) {
//自有短剧
val bundle = Bundle()
bundle.putString(Constant.VEDIO_BEAN, JsonUtil.toJson(data))
readyGo(activity, VideoActivity::class.java, bundle)
} else {
//穿山甲短剧
readyGo(activity, DramaApiDetailActivity::class.java, bundle)
requestDrama(activity, data)
}
}
// 请求穿山甲数据
private fun requestDrama(activity: Activity, data: VedioBean?) {
if (DPSdk.isStartSuccess() && data != null) {
DPSdk.factory().requestDrama(
arrayListOf(data.vedioId.toLong()), object : IDPWidgetFactory.DramaCallback {
override fun onError(p0: Int, p1: String?) {
ToastUtil.show(activity, "网络错误!")
}
override fun onSuccess(
dataList: MutableList<out DPDrama>?,
info: MutableMap<String, Any>?
) {
dataList?.takeIf { it.isNotEmpty() }?.first()?.let {
DramaApiDetailActivity.outerDrama = it
//穿山甲短剧
val bundle = Bundle()
bundle.putString(Constant.VEDIO_BEAN, JsonUtil.toJson(data))
readyGo(activity, DramaApiDetailActivity::class.java, bundle)
}
}
}
)
} else {
ToastUtil.show(activity, "网络错误!")
}
}
......
......@@ -22,6 +22,20 @@ public class VedioBean implements Serializable {
private String scriptAuthor;
private int vedioId;// 视频id,服务器标识
private String hot;// 播放量
private int adGiveVedioNum;// 广告解锁数量
public int getAdGiveVedioNum() {
return adGiveVedioNum;
}
public void setAdGiveVedioNum(int adGiveVedioNum) {
this.adGiveVedioNum = adGiveVedioNum;
}
public void setHot(String hot) {
this.hot = hot;
}
public String getThirdId() {
return thirdId;
}
......
......@@ -27,6 +27,7 @@ import com.mints.wisdomclean.ui.fragment.MyFragment
import com.mints.wisdomclean.ui.fragment.RecommendFragment
import com.mints.wisdomclean.ui.widgets.DialogListener
import com.mints.wisdomclean.ui.widgets.PhoneDialog
import com.mints.wisdomclean.video.DPHolderManager
import kotlinx.android.synthetic.main.activity_main.*
/**
......@@ -86,6 +87,9 @@ class MainActivity : BaseActivity(), View.OnClickListener {
AdManager.instance.preLoadAd(this)
initEditView()
// 初始化短剧SDK
DPHolderManager.initDpSdk(context);
// initEasyFloat()
}
......
......@@ -11,7 +11,7 @@ import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.mints.wisdomclean.R
import com.mints.wisdomclean.mvp.model.EpisodeBean
import com.mints.wisdomclean.mvp.model.IndexList
import com.mints.wisdomclean.mvp.model.VedioBean
import com.mints.wisdomclean.ui.adapter.VideoEpisodeAdapter
import com.mints.wisdomclean.utils.CommonUtils
......@@ -22,7 +22,7 @@ import com.mints.wisdomclean.utils.CommonUtils
*/
class VideoEpisodeDialog(
context: Context,
val indexList: IndexList?,
val vedioBean: VedioBean?,
private val listener: DialogListener
) :
Dialog(context, R.style.dialog) {
......@@ -61,22 +61,21 @@ class VideoEpisodeDialog(
ivClose = findViewById(R.id.close_iv)
ivClose.setOnClickListener(listener)
findViewById<TextView>(R.id.title_tv).text = indexList?.vedioMsg?.title
findViewById<TextView>(R.id.title_tv).text = vedioBean?.title
findViewById<TextView>(R.id.label_tv).text =
if (indexList?.vedioMsg?.completeStatus == 0) "已完结" else "未完结"
if (vedioBean?.completeStatus == 0) "已完结" else "未完结"
initVp()
}
private fun initVp() {
for (i in 0 until indexList!!.vedioMsg.vedioTotal) {
if (i < indexList.list.size) {
val index = indexList.list[i]
for (i in 0 until vedioBean!!.vedioTotal) {
if (i < vedioBean.unlockIndex) {
var playing = false
if (indexList.vedioMsg.seeIndex == i) {
if (vedioBean.seeIndex == i) {
playing = true
}
mData.add(EpisodeBean(index.isLock, playing, "" + (i + 1)))
mData.add(EpisodeBean(false, playing, "" + (i + 1)))
} else {
mData.add(EpisodeBean(lock = true, playing = false, title = "" + (i + 1)))
}
......
......@@ -2,23 +2,33 @@ package com.mints.wisdomclean.video
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import android.widget.ImageView
import android.widget.LinearLayout
import com.airbnb.lottie.LottieAnimationView
import com.airbnb.lottie.LottieComposition
import com.airbnb.lottie.LottieCompositionFactory
import com.airbnb.lottie.LottieDrawable
import com.bytedance.sdk.dp.*
import com.google.gson.Gson
import com.mints.wisdomclean.MintsApplication
import com.mints.wisdomclean.R
import com.mints.wisdomclean.ad.AdManager
import com.mints.wisdomclean.ad.AdStatusListener
import com.mints.wisdomclean.common.Constant
import com.mints.wisdomclean.mvp.model.IndexList
import com.mints.wisdomclean.mvp.model.VedioBean
import com.mints.wisdomclean.mvp.presenters.VideoPresenter
import com.mints.wisdomclean.mvp.views.VideoView
import com.mints.wisdomclean.ui.activitys.VipActivity
import com.mints.wisdomclean.ui.activitys.base.BaseActivity
import com.mints.wisdomclean.ui.adapter.VideoEpisodeAdapter
import com.mints.wisdomclean.ui.widgets.DialogListener
import com.mints.wisdomclean.ui.widgets.VideoEpisodeDialog
import kotlinx.android.synthetic.main.drama_activity_api_detail.*
import kotlinx.android.synthetic.main.drama_activity_api_detail.fm_bottom
import org.json.JSONObject
import java.util.HashMap
......@@ -27,28 +37,21 @@ import java.util.HashMap
* @date 2023/7/6
* @desc
*/
class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClickListener {
class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClickListener,
VideoView, View.OnClickListener {
companion object {
const val KEY_DRAMA_UNLOCK_INDEX = "key_drama_unlock_index"
const val KEY_DRAMA_HISTORY = "drama_history"
const val KEY_DRAMA_MODE = "key_drama_mode"
const val KEY_DRAMA_FREE_SET = "key_drama_free_set"
const val KEY_DRAMA_LOCK_SET = "key_drama_lock_set"
const val KEY_DRAMA_INFINITE_SCROLL_ENABLED = "key_drama_infinite_scroll_enabled"
const val KEY_DRAMA_CUSTOM_REPORT_ENABLED = "key_drama_custom_report_enabled"
const val KEY_DRAMA_HIDE_LEFT_TOP_TIPS = "key_drama_hide_left_top_tips"
private const val TAG = "DramaApiDetailActivity"
const val IS_FROM_CARD = "is_from_card"
const val FROM_GID = "from_gid"
var tipsTopMargin = -1
var outerDrama: DPDrama? = null
}
private val videoPresenter by lazy { VideoPresenter() }
private var sp =
MintsApplication.getContext().getSharedPreferences("pangrowth", Context.MODE_PRIVATE)
......@@ -76,20 +79,37 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
private var hideLeftTopTips = false
private var hideMore = false
private var freeSet = 5 // 仅封装模式生效
private var hideMore = true
private var lockSet = 2 // 仅封装模式生效
private var freeSet = 5
private var lockSet = 2
private var mode = DPDramaDetailConfig.SPECIFIC_DETAIL
private val isFromCard by lazy { intent?.getBooleanExtra(IS_FROM_CARD, false) ?: false }
private val fromGid by lazy { intent?.getLongExtra(FROM_GID, -1L) }
private var mVedioBean: VedioBean? = null
override fun getBundleExtras(extras: Bundle?) {
val json = extras?.getString(Constant.VEDIO_BEAN)
mVedioBean = Gson().fromJson(json, VedioBean::class.java)
freeSet = mVedioBean!!.unlockIndex
lockSet = mVedioBean!!.adGiveVedioNum
hideLeftTopTips = true
mode = DPDramaDetailConfig.SPECIFIC_DETAIL
enableInfiniteScroll = false
enableCustomReport = false
super.getBundleExtras(extras)
}
override fun getContentViewLayoutID() = R.layout.drama_activity_api_detail
override fun initViewsAndEvents() {
videoPresenter.attachView(this)
fm_bottom.setOnClickListener {
showEpisodeDialog()
}
......@@ -104,21 +124,21 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
drama = outerDrama
drama?.let {
mInitUnlockIndex = intent.getIntExtra(KEY_DRAMA_UNLOCK_INDEX, 1)
it.index = mVedioBean!!.seeIndex
mInitUnlockIndex = mVedioBean!!.unlockIndex
mUnlockIndexMap[it.id] = mInitUnlockIndex
tv_info.text = String.format("《%s》共%d集", it.title, it.total)
title_tv.text = it.title
episode_tv.text = String.format("共%d集 已完结", it.total)
info_tv.text = String.format("第%d集", it.index + 1)
unlock.text = String.format("看广告解锁%d集", lockSet)
if (mVedioBean!!.collect == 0) {
zan_iv.setImageResource(R.mipmap.home_collect_img_0)
} else {
zan_iv.setImageResource(R.mipmap.home_collect_img_1)
}
zan_num_tv.text = mVedioBean!!.hot
}
enableInfiniteScroll =
intent.getBooleanExtra(KEY_DRAMA_INFINITE_SCROLL_ENABLED, true)
enableCustomReport =
intent.getBooleanExtra(KEY_DRAMA_CUSTOM_REPORT_ENABLED, false)
mode = intent.getStringExtra(KEY_DRAMA_MODE)
?: DPDramaDetailConfig.SPECIFIC_DETAIL
hideLeftTopTips =
intent.getBooleanExtra(KEY_DRAMA_HIDE_LEFT_TOP_TIPS, false)
freeSet = intent.getIntExtra(KEY_DRAMA_FREE_SET, -1)
lockSet = intent.getIntExtra(KEY_DRAMA_LOCK_SET, -1)
ll_collect.setOnClickListener(this)
if (DPSdk.isStartSuccess()) {
init()
......@@ -156,7 +176,6 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
DPDramaDetailConfig.obtain(mode)
.bottomOffset(20)
.infiniteScrollEnabled(enableInfiniteScroll)
.scriptTipsTopMargin(tipsTopMargin)
.hideLeftTopTips(hideLeftTopTips, null)
.showCellularToast(true)
.hideMore(hideMore)
......@@ -249,7 +268,11 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
override fun onDPPageChange(position: Int, map: MutableMap<String, Any>?) {
super.onDPPageChange(position, map)
Log.d(TAG, "onDPPageChange:" + map?.toString())
info_tv.text = String.format("第%d集", position + 1)
dialog?.setCurrentIndex(position)
if (mUnlockIndexMap[drama!!.id]!! > position) {
blockView?.visibility = View.GONE
}
}
override fun onDPVideoPlay(map: MutableMap<String, Any>?) {
......@@ -337,7 +360,12 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
override fun adFail() {
}
override fun adClose(vo : HashMap<String, Any>?) {
override fun adClose(vo: HashMap<String, Any>?) {
vo?.let {
it["vedioId"] = "" + mVedioBean!!.vedioId
videoPresenter.unlock(it)
}
val hasUnlockList: MutableList<Int> =
mHasUnlockIndexMap[drama.id] ?: mutableListOf()
hasUnlockList.add(widget.currentDramaIndex)
......@@ -359,7 +387,7 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
Log.d(TAG, "onDramaSwitch:" + map?.toString())
val title = map?.get("title") as? String?
val total = map?.get("total") as? Int?
tv_info.text = String.format("《%s》共%d集", title, total)
episode_tv.text = String.format("共%d集 已完结", total)
}
override fun onDramaGalleryClick(map: MutableMap<String, Any>?) {
......@@ -394,27 +422,100 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
private var dialog: VideoEpisodeDialog? = null
private fun showEpisodeDialog() {
if (mVedioBean == null) return
if (dialog != null && !dialog!!.isShowing) {
dialog!!.setCurrentIndex(lastIndex)
dialog!!.setCurrentIndex(lastIndex - 1)
dialog!!.show()
} else {
dialog = VideoEpisodeDialog(this,null, object : DialogListener() {
dialog = VideoEpisodeDialog(this, mVedioBean, object : DialogListener() {
override fun onClick(dialog: Dialog?, v: View?) {
super.onClick(dialog, v)
dialog?.dismiss()
}
})
dialog!!.setOnEpisodeClickListener(this)
dialog!!.setCurrentIndex(lastIndex)
dialog!!.setCurrentIndex(lastIndex - 1)
dialog?.show()
}
}
override fun onEpisodeClick(position: Int) {
dialog?.dismiss()
if (position > mInitUnlockIndex) return
dpWidget?.let { widget ->
widget.currentDramaIndex = position + 1
}
dialog?.dismiss()
}
override fun getIndexListSuc(indexList: IndexList) {
}
override fun getIndexListFail() {
}
override fun collectSuc() {
mVedioBean!!.collect = 1
playCollectAnim(zan_iv)
}
override fun collectFail() {
}
override fun cancelCollectSuc() {
mVedioBean!!.collect = 0
playCancelCollectAnim(zan_iv)
}
override fun cancelCollectFail() {
}
override fun unlockSuc(indexList: IndexList) {
}
override fun unlockFail() {
}
private fun playCollectAnim(view: LottieAnimationView) {
val lottieDrawable = LottieDrawable()
LottieCompositionFactory.fromAsset(context, "home_collect.json")
.addListener { result: LottieComposition? ->
lottieDrawable.setImagesAssetsFolder("images/")
lottieDrawable.composition = result
lottieDrawable.loop(false)
lottieDrawable.playAnimation()
}
view.setImageDrawable(lottieDrawable)
}
private fun playCancelCollectAnim(view: LottieAnimationView) {
val lottieDrawable = LottieDrawable()
LottieCompositionFactory.fromAsset(context, "home_cancel_collect.json")
.addListener { result: LottieComposition? ->
lottieDrawable.setImagesAssetsFolder("images/")
lottieDrawable.composition = result
lottieDrawable.loop(false)
lottieDrawable.playAnimation()
}
view.setImageDrawable(lottieDrawable)
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.ll_collect -> {
if (mVedioBean!!.collect == 0) {
videoPresenter.collect("" + mVedioBean!!.vedioId)
} else {
videoPresenter.cancelCollect("" + mVedioBean!!.vedioId)
}
}
else -> {}
}
}
}
\ No newline at end of file
......@@ -13,7 +13,6 @@ import com.bytedance.sdk.dp.IDPDrawListener
import com.bytedance.sdk.dp.IDPWidget
import com.mints.wisdomclean.R
import com.mints.wisdomclean.ui.fragment.base.BaseFragment
import com.mints.wisdomclean.video.DramaApiDetailActivity.Companion.KEY_DRAMA_UNLOCK_INDEX
/**
* Created by limingqi on 2023/5/10
......@@ -93,7 +92,6 @@ class DrawDramaFragment : BaseFragment() {
val intent = Intent(context, DramaApiDetailActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
DramaApiDetailActivity.outerDrama = drama
intent.putExtra(KEY_DRAMA_UNLOCK_INDEX, 100)
context.startActivity(intent)
}
.freeSet(FREE_SET)
......
......@@ -203,13 +203,12 @@ class VideoActivity : BaseActivity(), View.OnClickListener, VideoView,
dialog?.setCurrentIndex(mCurrentPosition)
dialog!!.show()
} else {
dialog = VideoEpisodeDialog(this,
indexBean!!, object : DialogListener() {
override fun onClick(dialog: Dialog?, v: View?) {
super.onClick(dialog, v)
dialog?.dismiss()
}
})
dialog = VideoEpisodeDialog(this, mVedioBean, object : DialogListener() {
override fun onClick(dialog: Dialog?, v: View?) {
super.onClick(dialog, v)
dialog?.dismiss()
}
})
dialog?.setCurrentIndex(mCurrentPosition)
dialog?.setOnEpisodeClickListener(this)
dialog?.show()
......
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:background="#77090909">
<FrameLayout
android:id="@+id/fl_container"
......@@ -9,6 +11,76 @@
android:layout_height="match_parent"
android:layout_marginBottom="50dp" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginBottom="100dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent">
<TextView
android:id="@+id/title_tv"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:ellipsize="end"
android:gravity="center"
android:maxEms="9"
android:maxLines="1"
android:text="-"
android:textColor="#fff"
android:textSize="16sp" />
<TextView
android:id="@+id/info_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxEms="14"
android:maxLines="3"
android:text="-"
android:textColor="#fff"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_collect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="15dp"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@id/ll"
app:layout_constraintRight_toRightOf="parent">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/zan_iv"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginTop="10dp"
android:src="@mipmap/home_collect_img_0" />
<TextView
android:id="@+id/zan_num_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="-"
android:textColor="#fff"
android:textSize="14sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/fm_bottom"
android:layout_width="match_parent"
......@@ -51,22 +123,60 @@
</FrameLayout>
<LinearLayout
<FrameLayout
android:id="@+id/block_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_marginBottom="50dp"
android:background="#99000000">
<ImageView
android:id="@+id/iv_bg"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/tv_info"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="试看已结束"
android:textColor="@color/white"
android:textSize="16sp" />
<Button
android:id="@+id/unlock"
android:layout_width="280dp"
android:layout_height="40dp"
android:layout_marginBottom="10dp"
android:background="@drawable/shape_red"
android:text="看广告解锁1集"
android:textColor="@color/white" />
<Button
android:id="@+id/vip"
android:layout_width="280dp"
android:layout_height="40dp"
android:background="@drawable/shape_green"
android:text="开通会员"
android:textColor="@color/white" />
</LinearLayout>
<ImageView
android:id="@+id/leave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:textColor="#FFFFFFFF"
android:textSize="16sp" />
android:layout_marginTop="20dp"
android:padding="10dp"
android:src="@mipmap/ic_arrow_white" />
</LinearLayout>
</FrameLayout>
<include layout="@layout/item_block_view" />
</FrameLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment