Commit 30866098 authored by jyx's avatar jyx

代码优化

parent f8b20b46
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_15" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
......
......@@ -25,6 +25,24 @@ public class VedioBean implements Serializable {
private int adGiveVedioNum;// 广告解锁数量
private String recommendUrl;// 推荐视频地址
private int recommendIndex;// 推荐视频第几集
private long seeUpdateTime;// 时间戳
private boolean checked;// 选中
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
public long getSeeUpdateTime() {
return seeUpdateTime;
}
public void setSeeUpdateTime(long seeUpdateTime) {
this.seeUpdateTime = seeUpdateTime;
}
public String getRecommendUrl() {
return recommendUrl;
......
package com.mints.wisdomclean.mvp.model
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
data class WatchRecordBean(
var name: String = "",
var group: String = "",
var collect: Boolean = false,
) : Parcelable, java.io.Serializable
\ No newline at end of file
......@@ -48,9 +48,9 @@ class FollowPresenter : BasePresenter<FollowView>() {
}
fun cancelCollect(videoId: String) {
fun cancelCollect(videoId: List<String>) {
val vo = HashMap<String, Any>()
vo["videoId"] = videoId
vo["list"] = videoId
AppHttpManager.getInstance(loanApplication)
.call(
loanService.cancelCollect(vo),
......
......@@ -248,7 +248,7 @@ public interface LoanService {
* @return
*/
@POST("api/vedio/history")
Observable<BaseResponse<Object>> history();
Observable<BaseResponse<BannerList>> history();
/**
* 提交视频信息
......
package com.mints.wisdomclean.ui.activitys
import android.view.LayoutInflater
import android.view.View
import androidx.recyclerview.widget.LinearLayoutManager
import com.mints.wisdomclean.R
import com.mints.wisdomclean.manager.LocalVedioManager
import com.mints.wisdomclean.mvp.model.BannerList
import com.mints.wisdomclean.mvp.model.WatchRecordBean
import com.mints.wisdomclean.mvp.model.VedioBean
import com.mints.wisdomclean.mvp.presenters.WatchRecordPresenter
import com.mints.wisdomclean.mvp.views.WatchRecordView
import com.mints.wisdomclean.ui.activitys.base.BaseActivity
import com.mints.wisdomclean.ui.adapter.WatchRecordAdapter
import com.mints.wisdomclean.ui.widgets.StickHeaderDecoration
import com.mints.wisdomclean.utils.TimeHelp
import kotlinx.android.synthetic.main.activity_watch_record.*
import kotlinx.android.synthetic.main.header_layout.*
......@@ -23,6 +26,7 @@ class WatchRecordActivity : BaseActivity(), WatchRecordView {
private val watchRecordPresenter by lazy { WatchRecordPresenter() }
private var mWatchRecordAdapter: WatchRecordAdapter? = null
private var datas = mutableListOf<VedioBean>()
override fun getContentViewLayoutID() = R.layout.activity_watch_record
......@@ -34,22 +38,25 @@ class WatchRecordActivity : BaseActivity(), WatchRecordView {
iv_left_icon.setImageResource(R.mipmap.ic_arrow_back)
iv_left_icon.setOnClickListener { finish() }
val beanList: MutableList<WatchRecordBean> = ArrayList()
for (i in 0..5) {
beanList.add(WatchRecordBean(String.format("第一组%d号", i + 1), "第一组"))
}
for (i in 0..5) {
beanList.add(WatchRecordBean(String.format("第二组%d号", i + 1), "第二组"))
}
for (i in 0..5) {
beanList.add(WatchRecordBean(String.format("第三组%d号", i + 1), "第三组"))
}
for (i in 0..9) {
beanList.add(WatchRecordBean(String.format("第四组%d号", i + 1), "第四组"))
}
watchRecordPresenter.getHistory()
mWatchRecordAdapter = WatchRecordAdapter()
mWatchRecordAdapter?.setNewInstance(beanList)
val emptyView = LayoutInflater.from(this).inflate(R.layout.item_empty_history, null)
mWatchRecordAdapter?.setEmptyView(emptyView)
mWatchRecordAdapter?.setNewInstance(datas)
mWatchRecordAdapter?.setOnItemClickListener { adapter, view, position ->
LocalVedioManager.startVedioDetailActivityForType(
this@WatchRecordActivity,
datas[position]
)
}
mWatchRecordAdapter?.setOnItemChildClickListener { adapter, view, position ->
if (datas[position].collect == 0) {
watchRecordPresenter.collect("" + datas[position].vedioId)
} else {
watchRecordPresenter.cancelCollect("" + datas[position].vedioId)
}
}
rv_watch_record.layoutManager = LinearLayoutManager(this)
rv_watch_record.addItemDecoration(StickHeaderDecoration(this))
rv_watch_record.adapter = mWatchRecordAdapter
......@@ -63,7 +70,14 @@ class WatchRecordActivity : BaseActivity(), WatchRecordView {
}
override fun getHistorySuc(historyBean: BannerList) {
datas.clear()
val data = historyBean.list
for (datum in data) {
datum.topTabsReamrk = TimeHelp.format(datum.seeUpdateTime * 1000)
datas.add(datum)
}
mWatchRecordAdapter?.setNewInstance(datas)
mWatchRecordAdapter?.notifyDataSetChanged()
}
override fun getHistoryFail() {
......
......@@ -2,6 +2,7 @@ package com.mints.wisdomclean.ui.adapter
import android.app.Activity
import android.view.View
import android.widget.CheckBox
import android.widget.TextView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
......@@ -20,6 +21,10 @@ class FollowAdapter(var activity: Activity) :
private var showEdit = false
override fun convert(holder: BaseViewHolder, item: VedioBean) {
holder.getView<CheckBox>(R.id.cb).isChecked = item.isChecked
holder.getView<CheckBox>(R.id.cb).setOnCheckedChangeListener { buttonView, isChecked ->
item.isChecked = isChecked
}
holder.getView<View>(R.id.fm_mask).visibility = if (showEdit) View.VISIBLE else View.GONE
holder.getView<TextView>(R.id.title_tv).text = item.title
holder.getView<TextView>(R.id.info_tv).text = item.vedioDesc
......@@ -36,6 +41,9 @@ class FollowAdapter(var activity: Activity) :
// 全选
fun fullChoice() {
for (datum in data) {
datum.isChecked = true
}
notifyDataSetChanged()
}
}
\ No newline at end of file
......@@ -6,7 +6,6 @@ import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.mints.wisdomclean.R
import com.mints.wisdomclean.mvp.model.EpisodeBean
import com.mints.wisdomclean.utils.ToastUtil
/**
* @author Assen
......@@ -23,8 +22,10 @@ class VideoEpisodeAdapter :
rv.adapter = itemVideoEpisodeAdapter
val list = mutableListOf<EpisodeBean>()
itemVideoEpisodeAdapter.addChildClickViewIds(R.id.item_tv)
itemVideoEpisodeAdapter.setOnItemChildClickListener { adapter, view, position ->
mOnEpisodeClickListener?.onEpisodeClick(position)
itemVideoEpisodeAdapter.setOnItemClickListener { adapter, view, position ->
mOnEpisodeClickListener?.onEpisodeClick(
position
)
}
list.addAll(item)
itemVideoEpisodeAdapter.setNewInstance(list)
......
package com.mints.wisdomclean.ui.adapter
import android.view.View
import android.widget.TextView
import com.airbnb.lottie.LottieAnimationView
import com.airbnb.lottie.LottieComposition
import com.airbnb.lottie.LottieCompositionFactory
import com.airbnb.lottie.LottieDrawable
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.mints.library.utils.GlideUtils
import com.mints.wisdomclean.R
import com.mints.wisdomclean.mvp.model.WatchRecordBean
import com.mints.wisdomclean.mvp.model.VedioBean
/**
* @author Assen
......@@ -16,16 +18,27 @@ import com.mints.wisdomclean.mvp.model.WatchRecordBean
* @desc
*/
class WatchRecordAdapter :
BaseQuickAdapter<WatchRecordBean, BaseViewHolder>(R.layout.item_watch_record) {
BaseQuickAdapter<VedioBean, BaseViewHolder>(R.layout.item_watch_record) {
override fun convert(holder: BaseViewHolder, item: WatchRecordBean) {
override fun convert(holder: BaseViewHolder, item: VedioBean) {
GlideUtils.loadImageViewNoAnim2(context, item.coverImage, holder.getView(R.id.image_iv))
holder.getView<TextView>(R.id.title_tv).text = item.title
holder.getView<TextView>(R.id.info_tv).text = item.vedioDesc
if (item.collect == 0) {
// 未收藏
holder.getView<LottieAnimationView>(R.id.iv_collect)
.setImageResource(R.mipmap.home_collect_img_0)
} else {
// 已收藏
holder.getView<LottieAnimationView>(R.id.iv_collect)
.setImageResource(R.mipmap.home_collect_img_1)
}
holder.getView<View>(R.id.ll_collect).setOnClickListener {
if (!item.collect) {
// data[holder.layoutPosition].collect = true
if (item.collect == 0) {
playCollectAnim(holder.getView(R.id.iv_collect))
} else {
// data[holder.layoutPosition].collect = false
playCancelCollectAnim(holder.getView(R.id.iv_collect))
}
}
......@@ -38,11 +51,12 @@ class WatchRecordAdapter :
* @return
*/
fun isItemHeader(position: Int): Boolean {
if (data.size == 0) return false
return if (position == 0) {
true
} else {
val lastGroupName: String = data[position - 1].group
val currentGroupName: String = data[position].group
val lastGroupName: String = data[position - 1].topTabsReamrk
val currentGroupName: String = data[position].topTabsReamrk
//判断上一个数据的组别和下一个数据的组别是否一致,如果不一致则是不同组,也就是为第一项(头部)
lastGroupName != currentGroupName
}
......@@ -55,7 +69,8 @@ class WatchRecordAdapter :
* @return
*/
fun getGroupName(position: Int): String {
return data[position].group
if (data.size == 0) return ""
return data[position].topTabsReamrk
}
private fun playCollectAnim(view: LottieAnimationView) {
......
......@@ -88,16 +88,14 @@ class FollowVideoFragment : BaseFragment(), FollowView {
}
override fun getCollectListSuc(bannerList: BannerList) {
datas.clear()
if (bannerList.list.isNotEmpty()) {
datas.clear()
datas.addAll(bannerList.list)
followAdapter.setNewInstance(datas)
followAdapter.notifyDataSetChanged()
showEditView(true)
} else {
showEditView(false)
}
showEditView(true)
followAdapter.setEditStyle(false)
followAdapter.notifyDataSetChanged()
}
override fun getCollectListFail() {
......@@ -105,11 +103,22 @@ class FollowVideoFragment : BaseFragment(), FollowView {
}
override fun cancelCollectSuc() {
followPresenter.getCollectList()
(requireActivity() as MainActivity).showEdit(false)
}
override fun cancelCollectFail() {
}
fun delete() {
val strArr = arrayListOf<String>()
for (datum in followAdapter.data) {
if (datum.isChecked) {
strArr.add("" + datum.vedioId)
}
}
followPresenter.cancelCollect(strArr)
}
}
\ No newline at end of file
......@@ -173,7 +173,7 @@ class RecommendFragment : BaseFragment(), View.OnClickListener {
}
}
private fun handleEditStyle(isEdit: Boolean) {
fun handleEditStyle(isEdit: Boolean) {
if (isEdit) {
// 禁止滑动
vp2_recommend.isUserInputEnabled = false
......@@ -198,11 +198,14 @@ class RecommendFragment : BaseFragment(), View.OnClickListener {
}
fun showEditView(show: Boolean) {
if (show) {
iv_edit.visibility = View.VISIBLE
} else {
iv_edit.visibility = View.GONE
}
handleEditStyle(!show)
// if (show) {
// iv_edit_close.visibility = View.GONE
// iv_edit.visibility = View.VISIBLE
// } else {
// iv_edit_close.visibility = View.VISIBLE
// iv_edit.visibility = View.GONE
// }
}
fun fullChoice() {
......@@ -214,11 +217,12 @@ class RecommendFragment : BaseFragment(), View.OnClickListener {
}
fun delete() {
(fragments[0] as FollowVideoFragment).delete()
}
override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
fragments[1].onHiddenChanged(hidden)
// 传递生命周期
if (hidden) {
fragments[1].onPause()
......
......@@ -35,7 +35,7 @@ public class StickHeaderDecoration extends RecyclerView.ItemDecoration {
public StickHeaderDecoration(Context context) {
mItemHeaderHeight = dp2px(context, 40);
mTextPaddingLeft = dp2px(context, 6);
mTextPaddingLeft = dp2px(context, 10);
mTextRect = new Rect();
......
package com.mints.wisdomclean.utils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class TimeHelp {
public static String format(long timeMillis) {
return format(new Date(timeMillis));
}
private static String format(Date date) {
Calendar calendar = Calendar.getInstance();
//当前年
int currYear = calendar.get(Calendar.YEAR);
//当前日
int currDay = calendar.get(Calendar.DAY_OF_YEAR);
//当前时
int currHour = calendar.get(Calendar.HOUR_OF_DAY);
//当前分
int currMinute = calendar.get(Calendar.MINUTE);
//当前秒
int currSecond = calendar.get(Calendar.SECOND);
calendar.setTime(date);
int msgYear = calendar.get(Calendar.YEAR);
//说明不是同一年
if (currYear != msgYear) {
return new SimpleDateFormat("yyyy年MM月dd日", Locale.getDefault()).format(date);
}
int msgDay = calendar.get(Calendar.DAY_OF_YEAR);
//超过7天,直接显示xx月xx日
if (currDay - msgDay > 7) {
return new SimpleDateFormat("MM月dd日", Locale.getDefault()).format(date);
}
//不是当天
if (currDay - msgDay > 0) {
if (currDay - msgDay == 1) {
return "昨天";
} else {
return currDay - msgDay + "天前";
}
}
int msgHour = calendar.get(Calendar.HOUR_OF_DAY);
int msgMinute = calendar.get(Calendar.MINUTE);
//不是当前小时内
if (currHour - msgHour > 0) {
//如果当前分钟小,说明最后一个不满一小时
if (currMinute < msgMinute) {
if (currHour - msgHour == 1) {//当前只大一个小时值,说明不够一小时
return 60 - msgMinute + currMinute + "分钟前";
} else {
return currHour - msgHour - 1 + "小时前";
}
}
//如果当前分钟数大,够了一个周期
return currHour - msgHour + "小时前";
}
int msgSecond = calendar.get(Calendar.SECOND);
//不是当前分钟内
if (currMinute - msgMinute > 0) {
//如果当前秒数小,说明最后一个不满一分钟
if (currSecond < msgSecond) {
if (currMinute - msgMinute == 1) {//当前只大一个分钟值,说明不够一分钟
return "刚刚";
} else {
return currMinute - msgMinute - 1 + "分钟前";
}
}
//如果当前秒数大,够了一个周期
return currMinute - msgMinute + "分钟前";
}
//x秒前
return "刚刚";
}
}
\ No newline at end of file
......@@ -19,6 +19,7 @@ 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.manager.LocalVedioManager
import com.mints.wisdomclean.mvp.model.IndexList
import com.mints.wisdomclean.mvp.model.VedioBean
import com.mints.wisdomclean.mvp.presenters.VideoPresenter
......@@ -28,9 +29,9 @@ 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 com.mints.wisdomclean.utils.LogUtil
import kotlinx.android.synthetic.main.drama_activity_api_detail.*
import org.json.JSONObject
import java.util.HashMap
/**
* @author Assen
......@@ -102,8 +103,7 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
mVedioBean = Gson().fromJson(json, VedioBean::class.java)
freeSet = mVedioBean!!.unlockIndex
// lockSet = mVedioBean!!.adGiveVedioNum
lockSet = 3
lockSet = mVedioBean!!.adGiveVedioNum
hideLeftTopTips = true
mode = DPDramaDetailConfig.SPECIFIC_DETAIL
enableInfiniteScroll = false
......@@ -131,7 +131,9 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
drama = outerDrama
drama?.let {
it.index = mVedioBean!!.seeIndex
LogUtil.d("BBBBB -> " + mVedioBean!!.seeIndex)
// it.index = mVedioBean!!.seeIndex
it.index = 5
mInitUnlockIndex = mVedioBean!!.unlockIndex
mUnlockIndexMap[it.id] = mInitUnlockIndex
title_tv.text = it.title
......@@ -280,6 +282,10 @@ class DramaApiDetailActivity : BaseActivity(), VideoEpisodeAdapter.OnEpisodeClic
if (mUnlockIndexMap[drama!!.id]!! > position) {
blockView?.visibility = View.GONE
}
mVedioBean!!.seeIndex = position + 1
LogUtil.d("AAAAA -> " + mVedioBean!!.seeIndex + " - " + position)
LocalVedioManager.commitVedio(mVedioBean!!)
}
override fun onDPVideoPlay(map: MutableMap<String, Any>?) {
......
......@@ -34,6 +34,16 @@ class RecommendVideoAdapter(var activity: Activity) :
Glide.with(activity).load(item.coverImage)
.into(holder.getView<JzvdStdTikTok>(R.id.jz_video).posterImageView)
if (item.collect == 0) {
// 未收藏
holder.getView<LottieAnimationView>(R.id.iv_collect)
.setImageResource(R.mipmap.home_collect_img_0)
} else {
// 已收藏
holder.getView<LottieAnimationView>(R.id.iv_collect)
.setImageResource(R.mipmap.home_collect_img_1)
}
var isPlay = false
holder.getView<View>(R.id.ll_collect).setOnClickListener {
isPlay = !isPlay
......
......@@ -28,6 +28,7 @@ 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 com.mints.wisdomclean.utils.LogUtil
import kotlinx.android.synthetic.main.activity_video.*
import java.util.HashMap
......@@ -135,8 +136,8 @@ class VideoActivity : BaseActivity(), View.OnClickListener, VideoView,
//是最底部,执行加载更多数据
// loadData()
}
autoPlayVideo()
mCurrentPosition = position
autoPlayVideo()
dialog?.setCurrentIndex(mCurrentPosition)
}
......@@ -177,7 +178,9 @@ class VideoActivity : BaseActivity(), View.OnClickListener, VideoView,
player.startVideoAfterPreloading()
// VIdeoindex -> seeIndex
mVedioBean!!.seeIndex = mCurrentPosition
mVedioBean!!.seeIndex = videos[mCurrentPosition].vedioIndex
LogUtil.d("AAAAA -> " + mVedioBean!!.seeIndex + " - " + mCurrentPosition + " " + videos[mCurrentPosition].vedioIndex)
LocalVedioManager.commitVedio(mVedioBean!!)
//播放开始,进行倒计时
}
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="还没有历史记录"
android:textSize="18sp" />
</RelativeLayout>
\ No newline at end of file
......@@ -3,8 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="15dp"
android:paddingEnd="15dp">
android:padding="10dp">
<ImageView
android:id="@+id/image_iv"
......@@ -35,6 +34,9 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:ellipsize="end"
android:maxWidth="140dp"
android:maxLines="2"
android:text="重回80年代"
android:textColor="@color/gray"
android:textSize="12sp" />
......
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