Commit 6273740e by wukun

0327

parent aa1f19b1
......@@ -15,6 +15,7 @@ import com.dayu.common.Constants;
import com.dayu.event.CheckPayData;
import com.dayu.event.Notice;
import com.dayu.event.PayData;
import com.dayu.event.StudyCourseData;
import java.util.List;
......@@ -215,4 +216,18 @@ public interface APIService {
*/
@POST(Constants.API_7900 + "/courses/pay")
Observable<BaseResponse<Boolean>> pay(@Body PayData data);
@POST(Constants.API_7900 + "/courses/studyCourse")
Observable<BaseResponse<Boolean>> studyCourse(@Body StudyCourseData data);
/**
* 课程 点赞/取消点赞
*
* @param type 1点赞 2取消点赞
* @return
*/
@GET(Constants.API_7900 + "/courses/point/courseId/{courseId}/engineerId/{engineerId}/type/{type}")
Observable<BaseResponse<Boolean>> pointCourse(@Path("courseId") int courseId,
@Path("engineerId") int engineerId,
@Path("type") int type);
}
package com.dayu.learncenter.api.data;
package com.dayu.event;
public class StudyCourseData {
public int courseId ; // 课程ID
......
......@@ -15,7 +15,7 @@ import com.dayu.learncenter.api.bean.ShareRecordBean;
import com.dayu.learncenter.api.data.EditCourseData;
import com.dayu.learncenter.api.data.LiveData;
import com.dayu.learncenter.api.data.PubCourseData;
import com.dayu.learncenter.api.data.StudyCourseData;
import com.dayu.event.StudyCourseData;
import io.reactivex.Observable;
import retrofit2.http.Body;
......
......@@ -14,7 +14,7 @@ import com.dayu.event.UserInfo;
import com.dayu.learncenter.api.LearnService;
import com.dayu.learncenter.api.bean.CommonLearnBean;
import com.dayu.event.PayData;
import com.dayu.learncenter.api.data.StudyCourseData;
import com.dayu.event.StudyCourseData;
import com.dayu.learncenter.event.RefreshLeanTabEvent;
import com.dayu.utils.UserManager;
......
......@@ -20,7 +20,7 @@ import com.dayu.common.Constants;
import com.dayu.learncenter.R;
import com.dayu.learncenter.api.LearnService;
import com.dayu.learncenter.api.bean.CourseDeatilBean;
import com.dayu.learncenter.api.data.StudyCourseData;
import com.dayu.event.StudyCourseData;
import com.dayu.learncenter.databinding.ActivityCourseDetailBinding;
import com.dayu.utils.CommonUtils;
import com.dayu.utils.ProgressUtil;
......
package com.dayu.usercenter.adapter;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.dayu.usercenter.R;
import com.dayu.usercenter.model.CoursesVideoData;
import java.util.List;
public class CoursesVideoAdapter extends RecyclerView.Adapter<CoursesVideoAdapter.MyViewHolder> {
private Activity mActivity;
private List<CoursesVideoData> videoDataList;
private OnItemClickListener onItemClickListener;
public CoursesVideoAdapter(Activity mActivity, List<CoursesVideoData> videoDataList) {
this.mActivity = mActivity;
this.videoDataList = videoDataList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_business_video, parent, false);
return new MyViewHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
CoursesVideoData coursesVideoData1 = videoDataList.get(position);
holder.tvName.setText(coursesVideoData1.getName());
if (coursesVideoData1.getCurrent()){
holder.tvName.setTextColor(ContextCompat.getColor(mActivity,R.color.text_common_blue));
}else{
holder.tvName.setTextColor(ContextCompat.getColor(mActivity,R.color.common_text_color));
}
if (position == 0){
holder.ivVideoLock.setVisibility(View.GONE);
}else{
CoursesVideoData coursesVideoData = videoDataList.get(position - 1);
if (3 == coursesVideoData.getPlayStatus()){
holder.ivVideoLock.setVisibility(View.GONE);
}else {
holder.ivVideoLock.setVisibility(View.VISIBLE);
}
}
holder.rlItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (View.VISIBLE == holder.ivVideoLock.getVisibility()){
return;
}
if (onItemClickListener != null){
onItemClickListener.onItemClick(position);
}
}
});
}
@Override
public int getItemCount() {
return videoDataList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
private final TextView tvName;
private final ImageView ivVideoLock;
private final RelativeLayout rlItem;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
tvName = itemView.findViewById(R.id.tv_name);
ivVideoLock = itemView.findViewById(R.id.iv_video_lock);
rlItem = itemView.findViewById(R.id.rl_item);
}
}
public interface OnItemClickListener{
void onItemClick(int position);
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
}
......@@ -6,8 +6,27 @@ public class CoursesVideoData {
private String url;
private int learners;
private int playStatus;
private Object points;
private String points;
private String price;
private int pointStatus;
private Boolean isCurrent = false;
public Boolean getCurrent() {
return isCurrent;
}
public int getPointStatus() {
return pointStatus;
}
public void setPointStatus(int pointStatus) {
this.pointStatus = pointStatus;
}
public void setCurrent(Boolean current) {
isCurrent = current;
}
public String getPrice() {
return price;
......@@ -57,11 +76,11 @@ public class CoursesVideoData {
this.playStatus = playStatus;
}
public Object getPoints() {
public String getPoints() {
return points;
}
public void setPoints(Object points) {
public void setPoints(String points) {
this.points = points;
}
}
......@@ -12,8 +12,10 @@ import com.dayu.base.api.Api;
import com.dayu.base.ui.activity.BaseActivity;
import com.dayu.event.CheckPayData;
import com.dayu.event.PayData;
import com.dayu.event.StudyCourseData;
import com.dayu.event.UserInfo;
import com.dayu.usercenter.R;
import com.dayu.usercenter.adapter.CoursesVideoAdapter;
import com.dayu.usercenter.api.UserService2;
import com.dayu.usercenter.databinding.ActivityBusinessDetailBinding;
import com.dayu.usercenter.model.BusinessDetailData;
......@@ -25,18 +27,23 @@ import com.dayu.utils.CommonUtils;
import com.dayu.utils.GlideImageLoader;
import com.dayu.utils.UserManager;
import com.dayu.widgets.CustomDialog;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.dayu.widgets.MyJzvdStd;
import java.util.List;
import cn.jzvd.Jzvd;
/**
* 商家详情
*/
public class BusinessDetailActivity extends BaseActivity<BusinessDetailPresenter, ActivityBusinessDetailBinding> implements BusinessDetailContract.View {
private int currentId;
private CoursesVideoData currendVideoData;
private int currentId = 0;
private String currentPrice;
private List<CoursesVideoData> videoDataList;
private CoursesVideoAdapter coursesVideoAdapter;
private int licenceAuthorityId;
private int mUserId;
@Override
public void setPresenter() {
......@@ -51,8 +58,9 @@ public class BusinessDetailActivity extends BaseActivity<BusinessDetailPresenter
@Override
public void initView() {
int licenceAuthorityId = getBundle().getInt("licenceAuthorityId");
int mUserId = getBundle().getInt("mUserId");
showDialog();
licenceAuthorityId = getBundle().getInt("licenceAuthorityId");
mUserId = getBundle().getInt("mUserId");
mBind.titleBack.setOnClickListener(view -> finish());
......@@ -65,7 +73,7 @@ public class BusinessDetailActivity extends BaseActivity<BusinessDetailPresenter
@Override
public void onClick(View view) {
CheckPayData checkPayData = new CheckPayData(currentId,mUserId);
CheckPayData checkPayData = new CheckPayData(currentId, mUserId);
Api.getService(APIService.class).checkPay(checkPayData).compose(Api.applySchedulers())
.subscribe(mPresenter.baseObserver(success -> {
if (success){
......@@ -73,6 +81,9 @@ public class BusinessDetailActivity extends BaseActivity<BusinessDetailPresenter
mBind.jzVideo.startVideoAfterPreloading(); //如果预加载完会开始播放,如果未加载则开始加载
mBind.rlClick.setVisibility(View.GONE);
}else{
if (currentPrice == null){
currentPrice = "";
}
CustomDialog dialog = new CustomDialog(mActivity, R.style.CustomDialog, "付费"+ currentPrice + "元后观看",
(dialog1, confirm) -> {
if (confirm) {
......@@ -89,6 +100,48 @@ public class BusinessDetailActivity extends BaseActivity<BusinessDetailPresenter
}
});
mBind.jzVideo.setPlayCallBack(new MyJzvdStd.PlayCallBack(){
@Override
public void onstart() {
if (currendVideoData.getPlayStatus() != 2 && currendVideoData.getPlayStatus() != 3)
studyCourse(currendVideoData.getId(), 0, 0, 1);
}
@Override
public void onPrepare() {
}
@Override
public void onPause() {
if (currendVideoData.getPlayStatus() != 3)
studyCourse(currendVideoData.getId(), mBind.jzVideo.curProgress, mBind.jzVideo.curPosition, 2);
}
@Override
public void onComplete() {
if (currendVideoData.getPlayStatus() != 3)
studyCourse(currendVideoData.getId(), 100, mBind.jzVideo.getDuration(), 3);
}
});
}
public void studyCourse(int courseId, int progress, long progressTime, int status) {
mUserInfo = UserManager.getInstance().getUser();
StudyCourseData studyData = new StudyCourseData(courseId, mUserId, mUserInfo.getMobile(),
mUserInfo.getAccountName(), progress, progressTime, status);
Api.getService(APIService.class).studyCourse(studyData).compose(Api.applySchedulers())
.subscribe(mPresenter.baseObserver(success -> {
// ToastUtils.showShortToast("result "+success);
if (3 == status){
getVideo(licenceAuthorityId, mUserId);
}
}));
}
private void pay() {
......@@ -118,39 +171,90 @@ public class BusinessDetailActivity extends BaseActivity<BusinessDetailPresenter
private void getVideo(int licenceAuthorityId, int mUserId) {
Api.getService(UserService2.class).getVideo(licenceAuthorityId,mUserId,1,500).compose(Api.applySchedulers())
.subscribe(mPresenter.baseObserver(data -> {
List<CoursesVideoData> videoDataList = data.getData();
videoDataList = data.getData();
if (videoDataList == null || videoDataList.size() == 0){
mBind.llVideo.setVisibility(View.GONE);
}else{
mBind.llVideo.setVisibility(View.VISIBLE);
mBind.tvTips.setText("共计"+videoDataList.size()+"个,上下滑动观看更多视频");
mBind.tvTips.setText("共计"+ videoDataList.size()+"个,上下滑动观看更多视频");
setCurrentData(currentId);
CoursesVideoData coursesVideoData = videoDataList.get(0);
coursesVideoAdapter = new CoursesVideoAdapter(mActivity,videoDataList);
mBind.rlVideo.setLayoutManager(new LinearLayoutManager(mActivity));
mBind.rlVideo.setAdapter(coursesVideoAdapter);
coursesVideoAdapter.setOnItemClickListener(new CoursesVideoAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
setCurrentData(position);
}
});
}
}));
}
/**
* 设置页面数据
* @param position
*/
private void setCurrentData(int position) {
try {
CoursesVideoData coursesVideoData = videoDataList.get(position);
currendVideoData = coursesVideoData;
currentId = coursesVideoData.getId();
currentPrice = coursesVideoData.getPrice();
String name = coursesVideoData.getName();
String url = coursesVideoData.getUrl();
Object points = coursesVideoData.getPoints();
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
String jsonString = gson.toJson(points);
String jsonString = coursesVideoData.getPoints();
// Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
// String jsonString = gson.toJson(points);
if (jsonString == null){
jsonString = "0";
}
if (jsonString.contains(".")){
jsonString = jsonString.substring(0,jsonString.indexOf("."));
}
mBind.tvLooks.setText(coursesVideoData.getLearners()+"");
mBind.tvLike.setText(jsonString);
mBind.ivLike.setImageResource(coursesVideoData.getPointStatus() == 1 ? R.drawable.icon_like_red : R.drawable.icon_like_gray);
mBind.ivLike.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int type = coursesVideoData.getPointStatus() == 1 ? 2 : 1;
Api.getService(APIService.class).pointCourse(coursesVideoData.getId(), mUserId, type).compose(Api.applySchedulers())
.subscribe(mPresenter.baseObserver(success -> {
if (success) {
coursesVideoData.setPoints(type == 1 ? (Integer.parseInt(currendVideoData.getPoints()) + 1)+"" : (Integer.parseInt(currendVideoData.getPoints()) - 1)+"");
coursesVideoData.setPointStatus(type);
mBind.tvLike.setText(coursesVideoData.getPoints());
mBind.ivLike.setImageResource(coursesVideoData.getPointStatus() == 1 ? R.drawable.icon_like_red : R.drawable.icon_like_gray);
}
}));
}
});
mBind.jzVideo.setUp(url, name);
CommonUtils.setVideoThumb(mActivity, mBind.jzVideo, url);
BaseQuickAdapter<CoursesVideoData, BaseViewHolder> mAdapter =
new BaseQuickAdapter<CoursesVideoData, BaseViewHolder>(R.layout.item_business_video, videoDataList) {
@Override
protected void convert(BaseViewHolder helper, CoursesVideoData item) {
helper.setText(R.id.tv_name,item.getName());
for (int i = 0; i < videoDataList.size(); i++) {
CoursesVideoData coursesVideoData1 = videoDataList.get(i);
if (i == position){
coursesVideoData1.setCurrent(true);
}else{
coursesVideoData1.setCurrent(false);
}
}
};
mBind.rlVideo.setLayoutManager(new LinearLayoutManager(mActivity));
mBind.rlVideo.setAdapter(mAdapter);
coursesVideoAdapter.notifyDataSetChanged();
} catch (Exception e) {
e.printStackTrace();
}
}));
}
......@@ -210,7 +314,13 @@ public class BusinessDetailActivity extends BaseActivity<BusinessDetailPresenter
mBind.btnCommit.setBackgroundColor(ContextCompat.getColor(mActivity,R.color.text_common_green));
}
hideDialog();
}));
}
@Override
public void onPause() {
super.onPause();
Jzvd.releaseAllVideos();
}
}
\ No newline at end of file
......@@ -118,10 +118,51 @@ Y
<RelativeLayout
android:id="@+id/rl_click"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
android:layout_height="match_parent" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:src="@drawable/icon_looks" />
<TextView
android:id="@+id/tv_looks"
style="@style/common_text_style"
android:layout_marginLeft="5dp"
android:text="0" />
<ImageView
android:id="@+id/iv_like"
android:layout_width="18dp"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:src="@drawable/icon_like_gray" />
<TextView
android:id="@+id/tv_like"
style="@style/common_text_style"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:paddingLeft="5dp"
android:paddingRight="10dp"
android:text="0"
android:layout_marginRight="20dp"/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rl_video"
android:layout_width="match_parent"
......
......@@ -8,12 +8,34 @@
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/light_grey"/>
<RelativeLayout
android:id="@+id/rl_item"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:src="@drawable/ic_business_video"/>
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:paddingLeft="20dp"
android:textSize="18dp"
android:gravity="center_vertical"/>
android:gravity="center_vertical"
android:layout_toRightOf="@id/iv_icon"
android:text="aaaaaaaaaaaaaaaaaaa"/>
<ImageView
android:id="@+id/iv_video_lock"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginRight="20dp"
android:layout_alignParentRight="true"
android:src="@drawable/ic_business_lock"/>
</RelativeLayout>
</LinearLayout>
\ 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 sign in to comment