diff --git a/common/build.gradle b/common/build.gradle index 1d294d7ef..dda122cc5 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -15,6 +15,12 @@ android { ndk { abiFilters "armeabi-v7a", "arm64-v8a" } + + javaCompileOptions { + annotationProcessorOptions { + arguments = [AROUTER_MODULE_NAME: project.getName()] + } + } } packagingOptions { @@ -65,6 +71,7 @@ repositories { dependencies { + annotationProcessor rootProject.ext.dependencies["arouter-compiler"] implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) api files('libs/jcc-bate-0.7.3.jar') compileOnly fileTree(dir: '../libs', include: ['*.aar']) diff --git a/common/src/main/java/com/yunbao/common/Constants.java b/common/src/main/java/com/yunbao/common/Constants.java index a0ea5df91..9152dba72 100644 --- a/common/src/main/java/com/yunbao/common/Constants.java +++ b/common/src/main/java/com/yunbao/common/Constants.java @@ -240,6 +240,8 @@ public class Constants { public static final String VIDEO_ID = "videoId"; public static final String VIDEO_COMMENT_BEAN = "videoCommnetBean"; public static final String VIDEO_FACE_OPEN = "videoOpenFace"; + public static final String VIDEO_IS_COMMENT = "videoIsComment"; + public static final String VIDEO_REPLY_ID = "VIDEO_REPLY_ID"; public static final String VIDEO_FACE_HEIGHT = "videoFaceHeight"; public static final String VIDEO_DURATION = "videoDuration"; public static final String VIDEO_PATH = "videoPath"; @@ -306,5 +308,6 @@ public class Constants { public static String isSetRemarkText = "";//修改的备注信息 public static boolean isShowLiveDialog = false;//是否在直播间打开单聊 public static int firstInto = 0;// + public static final String TO_COMMUNITY_ID = "to_id"; } diff --git a/common/src/main/java/com/yunbao/common/activity/CommunityDetailsActivity.java b/common/src/main/java/com/yunbao/common/activity/CommunityDetailsActivity.java index 07e7e8877..5dc5a4aef 100644 --- a/common/src/main/java/com/yunbao/common/activity/CommunityDetailsActivity.java +++ b/common/src/main/java/com/yunbao/common/activity/CommunityDetailsActivity.java @@ -11,15 +11,18 @@ import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.RelativeLayout; import android.widget.TextView; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.Constants; import com.yunbao.common.R; import com.yunbao.common.adapter.CommentAdapter; import com.yunbao.common.bean.ActiveBean; @@ -28,6 +31,7 @@ import com.yunbao.common.dialog.ImagePreviewDialog; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.manager.OpenAdManager; import com.yunbao.common.utils.DialogUitl; @@ -41,8 +45,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +@Route(path = RouteUtil.PATH_COMMUNITY) public class CommunityDetailsActivity extends AbsActivity { - ActiveBean activeBean; + private ActiveBean activeBean; + private String activeId; private ImageView avatar; private TextView name; private TextView time; @@ -61,6 +67,7 @@ public class CommunityDetailsActivity extends AbsActivity { private EditText comment; private ImageView send; private boolean isComment = false; + private RelativeLayout videoLayout; @Override protected int getLayoutId() { @@ -81,13 +88,13 @@ public class CommunityDetailsActivity extends AbsActivity { @Override protected void main() { - activeBean = getIntent().getParcelableExtra("active"); + activeId = getIntent().getStringExtra(Constants.TO_COMMUNITY_ID); initView(); initData(); - getReply(); } private void initView() { + videoLayout = findViewById(R.id.videoLayout); send = findViewById(R.id.send); comment = findViewById(R.id.comment); replyCount = findViewById(R.id.replyCount); @@ -222,7 +229,13 @@ public class CommunityDetailsActivity extends AbsActivity { findViewById(R.id.userLayout).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - UserHomeActivity.forwardUserHomeActivity(CommunityDetailsActivity.this, activeBean.getUser_id()); + RouteUtil.forwardUserHome(activeBean.getUser_id()); + } + }); + videoLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + } }); } @@ -231,7 +244,7 @@ public class CommunityDetailsActivity extends AbsActivity { CommentBean replyComment; private void getReply() { - CommonHttpUtil.getCommunityComment(activeBean.getId(), activeBean.getUser_id(), new HttpCallback() { + CommonHttpUtil.getCommunityComment(activeBean.getId(), activeBean.getUser_id(), 1, new HttpCallback() { @SuppressLint("SetTextI18n") @Override public void onSuccess(int code, String msg, String[] info) { @@ -256,7 +269,7 @@ public class CommunityDetailsActivity extends AbsActivity { } @Override - public void onDel(CommentBean activeBean, int position) { + public void onDel(CommentBean activeBean) { //一级回复 删除 CommonHttpUtil.delCom(activeBean.getId(), new HttpCallback() { @Override @@ -298,6 +311,22 @@ public class CommunityDetailsActivity extends AbsActivity { @SuppressLint("UseCompatLoadingForDrawables") private void initData() { + LiveNetManager.get(mContext).getDynamicInfo(activeId, new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(ActiveBean data) { + activeBean = data; + initInfo(); + getReply(); + } + + @Override + public void onError(String error) { + + } + }); + } + + private void initInfo() { ImgLoader.display(CommunityDetailsActivity.this, CommonAppConfig.getInstance().getUserBean().getAvatarThumb(), userAvatar); ImgLoader.display(CommunityDetailsActivity.this, activeBean.getUser_avatar(), avatar); name.setText(activeBean.getUser_name()); @@ -325,7 +354,8 @@ public class CommunityDetailsActivity extends AbsActivity { } mNineGridLayout.setData(tempList); } else { - ImgLoader.display(CommunityDetailsActivity.this, activeBean.getUser_avatar(), videoImage); + ImgLoader.display(CommunityDetailsActivity.this, activeBean.getVideo() + "?vframe/jpg/offset/0", videoImage); + videoLayout.setVisibility(View.VISIBLE); } if (activeBean.getIs_love().equals("1")) { ImgLoader.display(CommunityDetailsActivity.this, R.mipmap.icon_like, like); diff --git a/common/src/main/java/com/yunbao/common/activity/CommunitySendActivity.java b/common/src/main/java/com/yunbao/common/activity/CommunitySendActivity.java index a61f18b09..a0f0449b8 100644 --- a/common/src/main/java/com/yunbao/common/activity/CommunitySendActivity.java +++ b/common/src/main/java/com/yunbao/common/activity/CommunitySendActivity.java @@ -27,6 +27,7 @@ import androidx.fragment.app.FragmentActivity; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.alibaba.fastjson.JSONObject; import com.bigkoo.pickerview.builder.OptionsPickerBuilder; import com.bigkoo.pickerview.builder.TimePickerBuilder; import com.bigkoo.pickerview.listener.OnDismissListener; @@ -34,23 +35,33 @@ import com.bigkoo.pickerview.listener.OnOptionsSelectListener; import com.bigkoo.pickerview.listener.OnTimeSelectListener; import com.bigkoo.pickerview.view.OptionsPickerView; import com.bigkoo.pickerview.view.TimePickerView; +import com.google.gson.Gson; import com.lzy.okgo.utils.HttpUtils; import com.yunbao.common.R; +import com.yunbao.common.bean.NewCommunityType; import com.yunbao.common.custom.ItemDecoration; import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.manager.CommunityTypeManager; import com.yunbao.common.manager.OpenAdManager; +import com.yunbao.common.upload.UploadBean; +import com.yunbao.common.upload.UploadCallback; +import com.yunbao.common.upload.UploadQnImpl; import com.yunbao.common.utils.ActiveImageAdapter; import com.yunbao.common.utils.DateFormatUtil; +import com.yunbao.common.utils.FilesUtils; import com.yunbao.common.utils.L; import com.yunbao.common.utils.ProcessImageUtil; import com.yunbao.common.utils.ProcessResultUtil; +import com.yunbao.common.utils.StringUtil; +import com.yunbao.common.utils.ToastUtil; import java.io.File; import java.net.URI; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Objects; public class CommunitySendActivity extends AbsActivity { public static final int PERMISSION_REQUEST_CODE_IMG = 0; @@ -65,7 +76,7 @@ public class CommunitySendActivity extends AbsActivity { private final int CHOOSE_IMG = 100;//Android 5.0以下的 private final int CHOOSE_VIDEO = 200;//Android 5.0以上的 private List uriList = new ArrayList<>(); - private Uri videoUri; + private File videoFile; private ActiveImageAdapter activeImageAdapter; private VideoView videoView; private RelativeLayout videoViewLayout; @@ -74,6 +85,12 @@ public class CommunitySendActivity extends AbsActivity { private List talkList = new ArrayList<>(); private TextView submit; private boolean isImage; + UploadQnImpl mUploadStrategy; + + private List imgUrlList = new ArrayList<>(); + private String videoUrl; + List newCommunityTypeList = new ArrayList<>(); + int talkId; @Override protected int getLayoutId() { @@ -82,14 +99,7 @@ public class CommunitySendActivity extends AbsActivity { @Override protected void main() { - talkList.add("热门"); - talkList.add("新秀"); - talkList.add("颜值"); - talkList.add("舞蹈"); - talkList.add("男神"); - talkList.add("音乐"); - talkList.add("英语"); - + newCommunityTypeList = new CommunityTypeManager(mContext).getCommunityTypeList(); content = findViewById(R.id.content); submit = findViewById(R.id.submit); submit.setVisibility(View.VISIBLE); @@ -106,13 +116,23 @@ public class CommunitySendActivity extends AbsActivity { submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - submit(); + List uploadBeanList = new ArrayList<>(); + if (isImage) { + for (int i = 0; i < activeImageAdapter.getImageFileList().size(); i++) { + UploadBean uploadBean = new UploadBean(activeImageAdapter.getImageFileList().get(i), UploadBean.IMG); + uploadBeanList.add(uploadBean); + } + uploadFile(uploadBeanList, true); + } else { + uploadBeanList.add(new UploadBean(videoFile, UploadBean.VIDEO)); + uploadFile(uploadBeanList, false); + } } }); delVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - videoUri = null; + videoFile = null; videoView.stopPlayback(); videoViewLayout.setVisibility(View.GONE); } @@ -201,31 +221,49 @@ public class CommunitySendActivity extends AbsActivity { } private void submit() { - StringBuffer files = new StringBuffer(); if (isImage) { - for (int i = 0; i < uriList.size(); i++) { - if (i == 0) { - files.append(uri2File(uriList.get(i)).getPath()); - } else { - files.append("," + uri2File(uriList.get(i)).getPath()); - } + if (imgUrlList.size() == 0) { + ToastUtil.show("请选择图片或者视频"); + return; } } else { - files.append(uri2File(videoUri).getPath()); + if (StringUtil.isEmpty(videoUrl)) { + ToastUtil.show("请选择图片或者视频"); + return; + } } - CommonHttpUtil.pushCommunity(isImage, content.getText().toString(), "1", files.toString(), chooseTime.getText().toString(), new HttpCallback() { + String imgUrl = ""; + if (isImage) { + imgUrl = new Gson().toJson(imgUrlList); + } + String tempTime = ""; + if (!chooseTime.getText().toString().equals("立即发表")) { + tempTime = chooseTime.getText().toString(); + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("msg", content.getText().toString()); + CommonHttpUtil.pushCommunity(isImage, jsonObject.toString(), String.valueOf(talkId), imgUrl, videoUrl, tempTime, new HttpCallback() { @Override public void onSuccess(int code, String msg, String[] info) { - + if (code == 0) { + ToastUtil.show("发布成功"); + finish(); + } } }); } private void showTalkChooseDialog() { + talkList = new ArrayList<>(); + for (int i = 0; i < newCommunityTypeList.size(); i++) { + talkList.add(newCommunityTypeList.get(i).getTalk_name()); + } OptionsPickerView pickerView = new OptionsPickerBuilder(CommunitySendActivity.this, new OnOptionsSelectListener() { @Override public void onOptionsSelect(int options1, int options2, int options3, View v) { + talkId = newCommunityTypeList.get(options1).getId(); talkContent.setText(talkList.get(options1)); + talkContent.setVisibility(View.VISIBLE); } }).setTitleText("选择话题").setContentTextSize(16).build(); pickerView.setPicker(talkList, null, null); @@ -304,7 +342,7 @@ public class CommunitySendActivity extends AbsActivity { List tempList = new ArrayList<>(); for (int i = 0; i < clipData.getItemCount(); i++) { imageUris[i] = clipData.getItemAt(i).getUri(); - File file = new File(uri2File(imageUris[i]).getPath()); + File file = new File(Objects.requireNonNull(FilesUtils.getPath(mContext, imageUris[i]))); tempList.add(file.getPath()); L.e("imageUris:" + imageUris[i].getPath() + "_" + imageUris[i].getEncodedPath()); } @@ -314,7 +352,7 @@ public class CommunitySendActivity extends AbsActivity { imageUris = new Uri[]{data.getData()}; uriList.add(imageUris[0]); List tempList = new ArrayList<>(); - File file = new File(uri2File(imageUris[0]).getPath()); + File file = new File(Objects.requireNonNull(FilesUtils.getPath(mContext, imageUris[0]))); tempList.add(file.getPath()); activeImageAdapter.insertList(tempList); } @@ -322,26 +360,34 @@ public class CommunitySendActivity extends AbsActivity { isImage = true; } else if (requestCode == CHOOSE_VIDEO && resultCode == RESULT_OK && data != null) { Uri uri = data.getData(); - videoUri = uri; - videoView.setVideoURI(videoUri); + videoFile = new File(Objects.requireNonNull(FilesUtils.getPath(mContext, uri))); + videoView.setVideoURI(uri); videoView.start(); videoViewLayout.setVisibility(View.VISIBLE); isImage = false; } } - private File uri2File(Uri uri) { - String img_path; - String[] proj = {MediaStore.Images.Media.DATA}; - Cursor actualimagecursor = this.managedQuery(uri, proj, null, null, null); - if (actualimagecursor == null) { - img_path = uri.getPath(); - } else { - int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); - actualimagecursor.moveToFirst(); - img_path = actualimagecursor.getString(actual_image_column_index); + private void uploadFile(List uploadBeans, boolean isImg) { + if (mUploadStrategy == null) { + mUploadStrategy = new UploadQnImpl(mContext); } - File file = new File(img_path); - return file; + mUploadStrategy.upload(uploadBeans, true, new UploadCallback() { + @Override + public void onFinish(List list, boolean success) { + if (!success) { + return; + } + if (isImage) { + for (int i = 0; i < list.size(); i++) { + imgUrlList.add(list.get(i).getRemoteAccessUrl()); + } + } else { + videoUrl = list.get(0).getRemoteAccessUrl(); + } + submit(); + L.e(new Gson().toJson(list)); + } + }, isImg); } } diff --git a/common/src/main/java/com/yunbao/common/activity/UserHomeActivity.java b/common/src/main/java/com/yunbao/common/activity/UserHomeActivity.java index f0d0bf3ad..1aa3dfa5e 100644 --- a/common/src/main/java/com/yunbao/common/activity/UserHomeActivity.java +++ b/common/src/main/java/com/yunbao/common/activity/UserHomeActivity.java @@ -1,24 +1,36 @@ package com.yunbao.common.activity; -import android.content.Context; +import android.Manifest; +import android.annotation.SuppressLint; import android.content.Intent; +import android.content.pm.PackageManager; +import android.database.Cursor; import android.graphics.Color; import android.graphics.Outline; +import android.net.Uri; +import android.os.Build; +import android.provider.MediaStore; +import android.util.SparseArray; import android.view.View; import android.view.ViewOutlineProvider; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; +import android.widget.ScrollView; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager.widget.ViewPager; +import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.fastjson.JSONArray; +import com.google.gson.Gson; import com.makeramen.roundedimageview.RoundedImageView; import com.ms.banner.Banner; -import com.ms.banner.listener.OnBannerClickListener; import com.xuexiang.xui.widget.flowlayout.FlowTagLayout; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; @@ -26,27 +38,40 @@ import com.yunbao.common.R; import com.yunbao.common.adapter.LabelTagAdapter; import com.yunbao.common.adapter.UserCommunityAdapter; import com.yunbao.common.adapter.UserHomeImgAdapter; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.bean.ActiveOtherBean; import com.yunbao.common.bean.HomeUserExhibitInfoBean; import com.yunbao.common.bean.HomeUserInfoBean; -import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.bean.LabelBean; -import com.yunbao.common.bean.MessageUserInfoBean; import com.yunbao.common.bean.UserHomeImgBean; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.base.HttpCallback; import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.interfaces.CommonCallback; +import com.yunbao.common.upload.UploadBean; +import com.yunbao.common.upload.UploadCallback; +import com.yunbao.common.upload.UploadQnImpl; +import com.yunbao.common.utils.DialogUitl; +import com.yunbao.common.utils.FilesUtils; +import com.yunbao.common.utils.L; +import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.views.UserHomeImgsViewHolder; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; +import pl.droidsonroids.gif.GifImageView; + +@Route(path = RouteUtil.PATH_USER_HOME) public class UserHomeActivity extends AbsActivity { + private final int CHOOSE_IMG = 100;//Android 5.0以下的 + public static final int PERMISSION_REQUEST_CODE_IMG = 0; private String uid; private Banner mBanner; private RecyclerView imgsRecyclerView; @@ -65,39 +90,53 @@ public class UserHomeActivity extends AbsActivity { private ImageView userStatusIcon; private ImageView user_sex; private ImageView authorIcon; - private TextView level; private ImageView levelIcon; - private TextView vipLevel; private LinearLayout authenticationLayout; private TextView signature; private LinearLayout moreLayout; private TextView moreText; private ImageView moreIcon; private HomeUserInfoBean userInfo; - RecyclerView communityRecyclerView; + private RecyclerView communityRecyclerView; private LinearLayout itemLayout01; private LinearLayout itemLayout02; private LinearLayout itemLayout03; private LinearLayout itemLayout04; - FlowTagLayout myFlowTag; //我的标签 - LabelTagAdapter myAdapter; + private FlowTagLayout myFlowTag; //我的标签 + private LabelTagAdapter myAdapter; private boolean isShowcase; private boolean isAnchor; + private boolean isMe; private RelativeLayout userPresidentLayout; private TextView userPresidentName; - private RelativeLayout authorLayout; - private RelativeLayout levelLayout; private RoundedImageView fansImg1; private RoundedImageView fansImg2; private RoundedImageView fansImg3; - private List fansImgViewList = new ArrayList<>(); - - public static void forwardUserHomeActivity(Context content, String uid) { - Intent intent = new Intent(content, UserHomeActivity.class); - intent.putExtra(Constants.TO_UID, uid); - content.startActivity(intent); - } + private RoundedImageView guardImg1; + private RoundedImageView guardImg2; + private RoundedImageView guardImg3; + private List guardImgViewList = new ArrayList<>(); + private RoundedImageView giftImg1; + private RoundedImageView giftImg2; + private RoundedImageView giftImg3; + private List giftImgViewList = new ArrayList<>(); + private RoundedImageView honorImg1; + private RoundedImageView honorImg2; + private RoundedImageView honorImg3; + private List honorImgViewList = new ArrayList<>(); + private TextView giftCount; + private List tagList; + private GifImageView liveStatus; + private TextView topName; + private LinearLayout topLayout; + private ScrollView scrollView; + private RelativeLayout topImgLayout; + private ImageView imgUp; + private ImageView imgLabel; + private LinearLayout bottomEditLayout; + private UploadQnImpl mUploadStrategy; + private List videoList = new ArrayList<>(); @Override protected int getLayoutId() { @@ -128,11 +167,33 @@ public class UserHomeActivity extends AbsActivity { public void onSuccess(int code, String msg, String[] info) { List beanList = JSONArray.parseArray(Arrays.toString(info), ActiveOtherBean.class); UserCommunityAdapter userCommunityAdapter = new UserCommunityAdapter(mContext, beanList); + userCommunityAdapter.setOnItemClickListener(new UserCommunityAdapter.onItemClickListener() { + @Override + public void onImgItem(ActiveOtherBean bean, int position) { + if (bean.getImg_or_video().equals("1")) { + RouteUtil.forwardCommunity(bean.getId()); + } else { + int playPosition = 0; + for (int i = 0; i < videoList.size(); i++) { + if (videoList.get(i).getId().equals(bean.getId())) { + playPosition = i; + } + } + RouteUtil.forwardVideoActivity(); + } + } + + @Override + public void onVideoItem(String activeBean, int position) { + + } + }); communityRecyclerView.setAdapter(userCommunityAdapter); } }); } + @SuppressLint({"SetTextI18n", "UseCompatLoadingForDrawables"}) private void initData(HomeUserInfoBean userInfoBean) { userInfo = userInfoBean; if (!userInfo.getCheckBlack().get(0).getU2t().equals("0")) { @@ -145,30 +206,46 @@ public class UserHomeActivity extends AbsActivity { userPresidentName.setText(userInfo.getUserHomeTopInfo().getUser_president_name()); } isAnchor = userInfo.getUserHomeTopInfo().getIs_anchor() == 1; + isMe = CommonAppConfig.getInstance().getUserBean().getId().equals(String.valueOf(userInfo.getUserHomeTopInfo().getUser_id())); ImgLoader.display(UserHomeActivity.this, userInfo.getUserHomeTopInfo().getUser_avatar(), avatar); + topName.setText(userInfo.getUserHomeTopInfo().getUser_name()); //用户名称-顶部 userName.setText(userInfo.getUserHomeTopInfo().getUser_name());//用户名称 fansCount.setText(String.valueOf(userInfo.getUserHomeTopInfo().getUser_fans_num()));//粉丝数量 likeCount.setText(String.valueOf(userInfo.getUserHomeTopInfo().getUser_love_num()));//关注数量 - userId.setText("ID:" + userInfo.getUserHomeTopInfo().getUser_id());//用户ID - userStatus.setText("");//认证状态 + if (isMe) { + bottomEditLayout.setVisibility(View.VISIBLE); + imgUp.setVisibility(View.VISIBLE); + imgLabel.setVisibility(View.VISIBLE); + followLayout.setVisibility(View.GONE); + } + if (!StringUtil.isEmpty(userInfo.getUserHomeTopInfo().getUser_goodnum())) { + userId.setText("靓号:" + userInfo.getUserHomeTopInfo().getUser_goodnum());//用户靓号 + } else { + userId.setText("ID:" + userInfo.getUserHomeTopInfo().getUser_id());//用户ID + } + + if (userInfo.getUserHomeTopInfo().getRong_online().equals("0")) { + userStatus.setText("在线"); + userStatusIcon.setImageDrawable(getResources().getDrawable(R.mipmap.icon_green)); + } else { + userStatus.setText("离线"); + userStatusIcon.setImageDrawable(getResources().getDrawable(R.mipmap.icon_gray)); + } + if (userInfo.getUserHomeTopInfo().getIs_live() == 1) { + liveStatus.setVisibility(View.VISIBLE); + avatar.setBackground(getResources().getDrawable(R.drawable.bg_live_1)); + } ImgLoader.display(UserHomeActivity.this, Integer.parseInt(String.valueOf(userInfo.getUserHomeTopInfo().getUser_sex())) == 0 ? R.mipmap.icon_man_new : R.mipmap.icon_wumen, user_sex); - ImgLoader.display(UserHomeActivity.this, CommonAppConfig.HOST + userInfo.getUserHomeTopInfo().getUser_level_anchor_img(), authorIcon); + ImgLoader.display(UserHomeActivity.this, userInfo.getUserHomeTopInfo().getUser_level_anchor_img(), authorIcon); ImgLoader.display(UserHomeActivity.this, userInfo.getUserHomeTopInfo().getUser_level_img(), levelIcon); if (isAnchor) {//是否是主播 - authorLayout.setVisibility(View.VISIBLE); - levelLayout.setVisibility(View.VISIBLE); + authorIcon.setVisibility(View.VISIBLE); authenticationLayout.setVisibility(View.VISIBLE); - itemLayout01.setVisibility(View.VISIBLE); - itemLayout02.setVisibility(View.VISIBLE); - itemLayout03.setVisibility(View.VISIBLE); - itemLayout04.setVisibility(View.VISIBLE); } else { - authorLayout.setVisibility(View.GONE); + authorIcon.setVisibility(View.GONE); authenticationLayout.setVisibility(View.GONE); - itemLayout03.setVisibility(View.VISIBLE); - itemLayout04.setVisibility(View.VISIBLE); } signature.setText(userInfo.getUserHomeTopInfo().getUser_signature());//个性签名 //标签 @@ -178,11 +255,26 @@ public class UserHomeActivity extends AbsActivity { } }); + tagList = new ArrayList<>(); + if (!StringUtil.isEmpty(userInfo.getUserHomeTopInfo().getAge())) { + tagList.add(userInfo.getUserHomeTopInfo().getAge() + "岁"); + } + if (!StringUtil.isEmpty(userInfo.getUserHomeTopInfo().getHeight())) { + tagList.add(userInfo.getUserHomeTopInfo().getHeight()); + } + if (!StringUtil.isEmpty(userInfo.getUserHomeTopInfo().getCareer())) { + tagList.add(userInfo.getUserHomeTopInfo().getCareer()); + } if (userInfo.getUserHomeTopInfo().getCn_label() != null) { if (userInfo.getUserHomeTopInfo().getCn_label().size() > 0) { + for (int i = 0; i < userInfo.getUserHomeTopInfo().getCn_label().size(); i++) { + if (!StringUtil.isEmpty(userInfo.getUserHomeTopInfo().getCn_label().get(i))) { + tagList.add(userInfo.getUserHomeTopInfo().getCn_label().get(i)); + } + } myFlowTag.setAdapter(myAdapter); myFlowTag.setTagCheckedMode(FlowTagLayout.FLOW_TAG_CHECKED_NONE); - myAdapter.setData(userInfo.getUserHomeTopInfo().getCn_label()); + myAdapter.setData(tagList); } } mBanner.setOutlineProvider(new ViewOutlineProvider() { @@ -212,16 +304,18 @@ public class UserHomeActivity extends AbsActivity { for (int i = 0; i < bannerImgList.size(); i++) { tempList.add(new UserHomeImgBean(bannerImgList.get(i))); } - tempList.get(0).setShow(true); - userHomeImgAdapter = new UserHomeImgAdapter(UserHomeActivity.this, tempList); + if (tempList.size() > 0) { + tempList.get(0).setShow(true); + } + userHomeImgAdapter = new UserHomeImgAdapter(UserHomeActivity.this, tempList, isMe); imgsRecyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); imgsRecyclerView.setAdapter(userHomeImgAdapter); userHomeImgAdapter.setOnItemClickListener(new UserHomeImgAdapter.onItemClickListener() { @Override public void onImgItem(UserHomeImgBean activeBean, int position) { - mBanner.onPageSelected(position); - mBanner.setCurrentPage(position); + L.e("onImgItem:" + position); + mBanner.setCurrentPage(position).start(); for (int i = 0; i < tempList.size(); i++) { if (i == position) { tempList.get(i).setShow(true); @@ -231,16 +325,53 @@ public class UserHomeActivity extends AbsActivity { } userHomeImgAdapter.setCommentBeanList(tempList); } - }); - mBanner.setAutoPlay(false).setPages(bannerImgList, new UserHomeImgsViewHolder()).setOnBannerClickListener(new OnBannerClickListener() { + @Override - public void onBannerClick(List datas, int position) { + public void onImgDel(UserHomeImgBean activeBean, int position) { + bannerImgList.remove(position); + uploadImg(false); + } + }); + mBanner.setAutoPlay(false).setPages(bannerImgList, new UserHomeImgsViewHolder()).setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } - }).start(); + + @Override + public void onPageSelected(int position) { + L.e("onPageSelected:" + position); + for (int i = 0; i < tempList.size(); i++) { + if (i == position) { + tempList.get(i).setShow(true); + } else { + tempList.get(i).setShow(false); + } + } + userHomeImgAdapter.setCommentBeanList(tempList); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + mBanner.start(); } private void initView() { + bottomEditLayout = findViewById(R.id.bottomEditLayout); + imgUp = findViewById(R.id.imgUp); + imgLabel = findViewById(R.id.imgLabel); + topImgLayout = findViewById(R.id.topImgLayout); + + topLayout = findViewById(R.id.topLayout); + scrollView = findViewById(R.id.scrollView); + + topName = findViewById(R.id.topName); + liveStatus = findViewById(R.id.liveStatus); + giftCount = findViewById(R.id.giftCount); + fansImg1 = findViewById(R.id.fansImg1); fansImg2 = findViewById(R.id.fansImg2); fansImg3 = findViewById(R.id.fansImg3); @@ -248,8 +379,31 @@ public class UserHomeActivity extends AbsActivity { fansImgViewList.add(fansImg1); fansImgViewList.add(fansImg2); fansImgViewList.add(fansImg3); - authorLayout = findViewById(R.id.authorLayout); - levelLayout = findViewById(R.id.levelLayout); + + guardImg1 = findViewById(R.id.guardImg1); + guardImg2 = findViewById(R.id.guardImg2); + guardImg3 = findViewById(R.id.guardImg3); + guardImgViewList = new ArrayList<>(); + guardImgViewList.add(guardImg1); + guardImgViewList.add(guardImg2); + guardImgViewList.add(guardImg3); + + giftImg1 = findViewById(R.id.giftImg1); + giftImg2 = findViewById(R.id.giftImg2); + giftImg3 = findViewById(R.id.giftImg3); + giftImgViewList = new ArrayList<>(); + giftImgViewList.add(giftImg1); + giftImgViewList.add(giftImg2); + giftImgViewList.add(giftImg3); + + honorImg1 = findViewById(R.id.honorImg1); + honorImg2 = findViewById(R.id.honorImg2); + honorImg3 = findViewById(R.id.honorImg3); + honorImgViewList = new ArrayList<>(); + honorImgViewList.add(honorImg1); + honorImgViewList.add(honorImg2); + honorImgViewList.add(honorImg3); + userPresidentLayout = findViewById(R.id.userPresidentLayout); userPresidentName = findViewById(R.id.userPresidentName); itemLayout01 = findViewById(R.id.itemLayout01); @@ -269,9 +423,10 @@ public class UserHomeActivity extends AbsActivity { userStatus = findViewById(R.id.userStatus); userStatusIcon = findViewById(R.id.userStatusIcon); user_sex = findViewById(R.id.user_sex); + levelIcon = findViewById(R.id.levelIcon); - level = findViewById(R.id.level); authorIcon = findViewById(R.id.authorlIcon); + authenticationLayout = findViewById(R.id.authenticationLayout); signature = findViewById(R.id.signature); moreLayout = findViewById(R.id.moreLayout); @@ -349,6 +504,110 @@ public class UserHomeActivity extends AbsActivity { finish(); } }); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() { + @Override + public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { + int height = (int) (topImgLayout.getMeasuredHeight() * 1.2); + if (scrollY <= 0) { + //滑动之前,标题栏布局背景颜色为完全透明,标题文字完全透明 + topLayout.setBackgroundColor(Color.argb(0, 0, 0, 0)); + topName.setTextColor(Color.argb(0, 255, 255, 255)); + //让mScrollView滑动的距离在0~height之间时颜色发生渐变 + } else if (scrollY > 0 && scrollY <= height) { + //获取渐变率 + float scale = (float) scrollY / height; + //获取渐变数值 + float alpha = (255 * scale); + //布局文本颜色逐渐发生变化 + topLayout.setBackgroundColor(Color.argb((int) alpha, 0, 0, 0)); + topName.setTextColor(Color.argb((int) alpha, 255, 255, 255)); + } else { + //当滑动距离超过height,布局文本颜色完全不透明 + topLayout.setBackgroundColor(Color.argb(255, 0, 0, 0)); + topName.setTextColor(Color.argb(255, 255, 255, 255)); + } + } + }); + topLayout.setBackgroundColor(Color.argb(0, 0, 0, 0)); + topName.setTextColor(Color.argb(0, 255, 255, 255)); + } + imgUp.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (bannerImgList.size() < 9) { + selectImg(); + } + } + }); + bottomEditLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + RouteUtil.forwardEditProfileActivity(); + } + }); + findViewById(R.id.setting).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + SparseArray array = new SparseArray<>(); + array.append(1, "不感兴趣"); + array.append(0, "举报"); + array.append(2, "加入黑名单"); + DialogUitl.showStringArrayDialog(UserHomeActivity.this, array, new DialogUitl.StringArrayDialogCallback() { + @Override + public void onItemClick(String text, int tag) { + if (tag == 0) { + CommonHttpUtil.noInterest(String.valueOf(userInfo.getUserHomeTopInfo().getUser_id()), new com.yunbao.common.http.HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + ToastUtil.show(msg); + } + }); + } else if (tag == 1) { + RouteUtil.forwardLiveReportActivity(String.valueOf(userInfo.getUserHomeTopInfo().getUser_id())); + } else { + RouteUtil.forwardLiveReportActivity(String.valueOf(userInfo.getUserHomeTopInfo().getUser_id())); + } + } + }); + } + }); + } + + private void selectImg() { + String permission1 = Manifest.permission.READ_EXTERNAL_STORAGE; + String permission2 = Manifest.permission.WRITE_EXTERNAL_STORAGE; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + permission1 = Manifest.permission.READ_MEDIA_IMAGES; + permission2 = Manifest.permission.READ_MEDIA_VIDEO; + } + int isPermission1 = ContextCompat.checkSelfPermission(mContext, permission1); + int isPermission2 = ContextCompat.checkSelfPermission(mContext, permission2); + if (isPermission1 == PackageManager.PERMISSION_GRANTED && isPermission2 == PackageManager.PERMISSION_GRANTED) { + openImageChooserActivity(); + } else { + //申请权限 + ActivityCompat.requestPermissions(UserHomeActivity.this, new String[]{permission1, permission2}, PERMISSION_REQUEST_CODE_IMG); + } + } + + private void openImageChooserActivity() { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("image/*"); + intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false); + startActivityForResult(intent, CHOOSE_IMG); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == PERMISSION_REQUEST_CODE_IMG) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + openImageChooserActivity(); + } else { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE_IMG); + } + } } private void getUseData() { @@ -364,11 +623,56 @@ public class UserHomeActivity extends AbsActivity { } }); LiveNetManager.get(mContext).getUserExhibitInfoInfo(uid, new HttpCallback() { + @SuppressLint("SetTextI18n") @Override public void onSuccess(HomeUserExhibitInfoBean data) { + //主播粉丝团 if (data.getUserHomeTopInfo().getFans().getList() != null) { - for (int i = 0; i < data.getUserHomeTopInfo().getFans().getList().size(); i++) { - ImgLoader.display(mContext, data.getUserHomeTopInfo().getFans().getList().get(i).getAvatar(), fansImgViewList.get(i)); + if (data.getUserHomeTopInfo().getFans().getList().size() >= 3) { + for (int i = 0; i < 3; i++) { + ImgLoader.display(mContext, data.getUserHomeTopInfo().getFans().getList().get(i).getAvatar(), fansImgViewList.get(i)); + } + } else { + for (int i = 0; i < data.getUserHomeTopInfo().getFans().getList().size(); i++) { + ImgLoader.display(mContext, data.getUserHomeTopInfo().getFans().getList().get(i).getAvatar(), fansImgViewList.get(i)); + } + } + } + //主播守护团 + if (data.getUserHomeTopInfo().getGuard() != null) { + if (data.getUserHomeTopInfo().getGuard().size() >= 3) { + for (int i = 0; i < 3; i++) { + ImgLoader.display(mContext, data.getUserHomeTopInfo().getGuard().get(i).getAvatar(), guardImgViewList.get(i)); + } + } else { + for (int i = 0; i < data.getUserHomeTopInfo().getGuard().size(); i++) { + ImgLoader.display(mContext, data.getUserHomeTopInfo().getGuard().get(i).getAvatar(), guardImgViewList.get(i)); + } + } + } + //礼物墙 + if (data.getGiftAlreadyWall().getGift_wall() != null) { + if (data.getGiftAlreadyWall().getGift_wall().size() >= 3) { + for (int i = 0; i < 3; i++) { + ImgLoader.display(mContext, data.getGiftAlreadyWall().getGift_wall().get(i).getGifticon(), giftImgViewList.get(i)); + } + } else { + for (int i = 0; i < data.getGiftAlreadyWall().getGift_wall().size(); i++) { + ImgLoader.display(mContext, data.getGiftAlreadyWall().getGift_wall().get(i).getGifticon(), giftImgViewList.get(i)); + } + } + giftCount.setText(data.getGiftAlreadyWall().getGift_wall().size() + "/36"); + } + //荣誉墙 + if (data.getUserHomeTopInfo().getDress() != null) { + if (data.getUserHomeTopInfo().getDress().size() >= 3) { + for (int i = 0; i < 3; i++) { + ImgLoader.display(mContext, data.getUserHomeTopInfo().getDress().get(i).getDisplay_src(), honorImgViewList.get(i)); + } + } else { + for (int i = 0; i < data.getUserHomeTopInfo().getDress().size(); i++) { + ImgLoader.display(mContext, data.getUserHomeTopInfo().getDress().get(i).getDisplay_src(), honorImgViewList.get(i)); + } } } } @@ -381,7 +685,75 @@ public class UserHomeActivity extends AbsActivity { } @Override - protected void onActivityResult(int requestCode, int resultCode, Intent intent) { - super.onActivityResult(requestCode, resultCode, intent); + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == RESULT_OK && requestCode == CHOOSE_IMG) { + // 获取用户选择的图片 URI + Uri[] imageUris = null; + if (data != null) { + imageUris = new Uri[]{data.getData()}; + File file = new File(Objects.requireNonNull(FilesUtils.getPath(mContext, imageUris[0]))); + uploadFile(file); + } + } + } + + private void uploadFile(File file) { + if (mUploadStrategy == null) { + mUploadStrategy = new UploadQnImpl(mContext); + } + List uploadBeans = new ArrayList<>(); + UploadBean upVideoBean = new UploadBean(file, UploadBean.IMG); + uploadBeans.add(upVideoBean); + mUploadStrategy.upload(uploadBeans, true, new UploadCallback() { + @Override + public void onFinish(List list, boolean success) { + if (!success) { + return; + } + bannerImgList.add("https://downs.yaoulive.com/" + list.get(0).getRemoteAccessUrl()); + uploadImg(true); + L.e(new Gson().toJson(list)); + } + }, true); + } + + private void uploadImg(boolean isUp) { + CommonHttpUtil.uploadUserInfoImg(new Gson().toJson(bannerImgList), new com.yunbao.common.http.HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info != null) { + if (isUp) { + ToastUtil.show("上传成功"); + } else { + ToastUtil.show("删除成功"); + } + mBanner.setPages(bannerImgList, new UserHomeImgsViewHolder()).start(); + tempList = new ArrayList<>(); + for (int i = 0; i < bannerImgList.size(); i++) { + tempList.add(new UserHomeImgBean(bannerImgList.get(i))); + } + if (tempList.size() > 0) { + tempList.get(0).setShow(true); + } + userHomeImgAdapter.setCommentBeanList(tempList); + } + } + }); + } + + private File uri2File(Uri uri) { + String img_path; + String[] proj = {MediaStore.Images.Media.DATA}; + Cursor actualimagecursor = this.managedQuery(uri, proj, null, null, null); + if (actualimagecursor == null) { + img_path = uri.getPath(); + } else { + int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + actualimagecursor.moveToFirst(); + img_path = actualimagecursor.getString(actual_image_column_index); + } + File file = new File(img_path); + return file; } } diff --git a/common/src/main/java/com/yunbao/common/adapter/CommentAdapter.java b/common/src/main/java/com/yunbao/common/adapter/CommentAdapter.java index e811a04de..14f5e44ec 100644 --- a/common/src/main/java/com/yunbao/common/adapter/CommentAdapter.java +++ b/common/src/main/java/com/yunbao/common/adapter/CommentAdapter.java @@ -117,7 +117,16 @@ public class CommentAdapter extends RecyclerView.Adapter { public void onClick(View v) { if (onItemClickListener != null) { CommentBean bean = (CommentBean) v.getTag(); - onItemClickListener.onDel(bean, 0); + onItemClickListener.onDel(bean); + } + } + }); + del1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onItemClickListener != null) { + CommentBean.ReplyComment bean = (CommentBean.ReplyComment) v.getTag(); + onItemClickListener.onDel(bean); } } }); @@ -125,6 +134,7 @@ public class CommentAdapter extends RecyclerView.Adapter { @SuppressLint("SetTextI18n") public void setData(CommentBean bean) { + del.setTag(bean); report.setTag(bean); replyTextView.setTag(bean); ImgLoader.display(itemView.getContext(), bean.getUser_avatar(), mAvatar); @@ -143,6 +153,7 @@ public class CommentAdapter extends RecyclerView.Adapter { if (bean.getReplyCommentList() != null) { replyCount.setText("共" + bean.getReplyCommentList().size() + "条回复>"); if (bean.getReplyCommentList().size() > 0) { + del1.setTag(bean.getReplyCommentList().get(0)); replyContent.setText(bean.getReplyCommentList().get(0).getContent()); ImgLoader.display(itemView.getContext(), bean.getReplyCommentList().get(0).getUser_avatar(), mAvatar01); firstName.setText(bean.getReplyCommentList().get(0).getUser_name()); @@ -152,10 +163,10 @@ public class CommentAdapter extends RecyclerView.Adapter { } else { isAuth.setVisibility(View.GONE); } - if (bean.getUser_id().equals(myUid)) { - del.setVisibility(View.VISIBLE); + if (bean.getReplyCommentList().get(0).getUser_id().equals(myUid)) { + del1.setVisibility(View.VISIBLE); } else { - del.setVisibility(View.GONE); + del1.setVisibility(View.GONE); } } else { replyLayout.setVisibility(View.GONE); @@ -210,10 +221,10 @@ public class CommentAdapter extends RecyclerView.Adapter { void onReport(CommentBean activeBean); - void onDel(CommentBean activeBean, int position); - void onReport(CommentBean.ReplyComment activeBean); + void onDel(CommentBean activeBean); + void onDel(CommentBean.ReplyComment activeBean); } diff --git a/common/src/main/java/com/yunbao/common/adapter/CommentVideoAdapter.java b/common/src/main/java/com/yunbao/common/adapter/CommentVideoAdapter.java new file mode 100644 index 000000000..ab388c7bf --- /dev/null +++ b/common/src/main/java/com/yunbao/common/adapter/CommentVideoAdapter.java @@ -0,0 +1,231 @@ +package com.yunbao.common.adapter; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.makeramen.roundedimageview.RoundedImageView; +import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.R; +import com.yunbao.common.bean.CommentBean; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.views.TopGradual; + +import java.util.ArrayList; +import java.util.List; + +public class CommentVideoAdapter extends RefreshAdapter { + private Context mContext; + private String authorId; + private String myUid; + private onItemClickListener onItemClickListener; + + public void setOnItemClickListener(CommentVideoAdapter.onItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + } + + public CommentVideoAdapter(Context content, String authorId,CommentVideoAdapter.onItemClickListener onItemClickListener ) { + super(content); + this.onItemClickListener = onItemClickListener; + this.mContext = content; + this.authorId = authorId; + myUid = CommonAppConfig.getInstance().getUid(); + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_comment_video_view, parent, false); + return new CommentViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + CommentViewHolder commentViewHolder = (CommentViewHolder) holder; + commentViewHolder.setData(mList.get(position)); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + class CommentViewHolder extends RecyclerView.ViewHolder { + private RoundedImageView mAvatar; + private TextView name; + private TextView content; + private TextView report; + private TextView replyTextView; + private RoundedImageView mAvatar01; + private TextView replyContent; + private TextView replyCount; + private RecyclerView recyclerView; + private LinearLayout replyLayout; + private TextView firstName; + private TextView isAuth; + private TextView del; + private TextView author; + private TextView del1; + private TextView report1; + + public CommentViewHolder(@NonNull View itemView) { + super(itemView); + firstName = itemView.findViewById(R.id.firstName); + mAvatar = itemView.findViewById(R.id.avatar); + name = itemView.findViewById(R.id.name); + content = itemView.findViewById(R.id.content); + replyTextView = itemView.findViewById(R.id.replyTextView); + report = itemView.findViewById(R.id.report); + mAvatar01 = itemView.findViewById(R.id.avatar01); + isAuth = itemView.findViewById(R.id.isAuth); + replyContent = itemView.findViewById(R.id.replyContent); + replyCount = itemView.findViewById(R.id.expand); + replyLayout = itemView.findViewById(R.id.replyLayout); + recyclerView = itemView.findViewById(R.id.recyclerView); + del = itemView.findViewById(R.id.del); + author = itemView.findViewById(R.id.author); + del1 = itemView.findViewById(R.id.del1); + report1 = itemView.findViewById(R.id.report1); + report.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onItemClickListener != null) { + CommentBean bean = (CommentBean) v.getTag(); + onItemClickListener.onReport(bean); + } + } + }); + replyTextView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onItemClickListener != null) { + CommentBean bean = (CommentBean) v.getTag(); + onItemClickListener.onReply(bean); + } + } + }); + del.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onItemClickListener != null) { + CommentBean bean = (CommentBean) v.getTag(); + onItemClickListener.onDel(bean); + } + } + }); + del1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onItemClickListener != null) { + CommentBean.ReplyComment bean = (CommentBean.ReplyComment) v.getTag(); + onItemClickListener.onDel(bean); + } + } + }); + } + + @SuppressLint("SetTextI18n") + public void setData(CommentBean bean) { + del.setTag(bean); + report.setTag(bean); + replyTextView.setTag(bean); + ImgLoader.display(itemView.getContext(), bean.getUser_avatar(), mAvatar); + name.setText(bean.getUser_name()); + content.setText(bean.getContent()); + if (bean.getUser_id().equals(authorId)) { + author.setVisibility(View.VISIBLE); + } else { + author.setVisibility(View.GONE); + } + if (bean.getUser_id().equals(myUid)) { + del.setVisibility(View.VISIBLE); + } else { + del.setVisibility(View.GONE); + } + if (bean.getReplyCommentList() != null) { + replyCount.setText("共" + bean.getReplyCommentList().size() + "条回复>"); + if (bean.getReplyCommentList().size() > 0) { + del1.setTag(bean.getReplyCommentList().get(0)); + replyContent.setText(bean.getReplyCommentList().get(0).getContent()); + ImgLoader.display(itemView.getContext(), bean.getReplyCommentList().get(0).getUser_avatar(), mAvatar01); + firstName.setText(bean.getReplyCommentList().get(0).getUser_name()); + replyLayout.setVisibility(View.VISIBLE); + if (bean.getReplyCommentList().get(0).getUser_id().equals(authorId)) { + isAuth.setVisibility(View.VISIBLE); + } else { + isAuth.setVisibility(View.GONE); + } + if (bean.getReplyCommentList().get(0).getUser_id().equals(myUid)) { + del1.setVisibility(View.VISIBLE); + } else { + del1.setVisibility(View.GONE); + } + } else { + replyLayout.setVisibility(View.GONE); + replyCount.setVisibility(View.GONE); + } + if (bean.getReplyCommentList().size() > 1) { + replyCount.setVisibility(View.VISIBLE); + replyLayout.setVisibility(View.VISIBLE); + recyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false)); + recyclerView.addItemDecoration(new TopGradual()); + List tempList = new ArrayList<>(); + tempList.addAll(bean.getReplyCommentList()); + tempList.remove(0); + CommentReplyAdapter commentReplyAdapter = new CommentReplyAdapter(mContext, tempList, authorId); + commentReplyAdapter.setOnItemClickListener(new CommentReplyAdapter.onItemClickListener() { + @Override + public void onReport(CommentBean.ReplyComment activeBean) { + if (onItemClickListener != null) { + onItemClickListener.onReport(activeBean); + } + } + + @Override + public void onDel(CommentBean.ReplyComment activeBean) { + if (onItemClickListener != null) { + onItemClickListener.onDel(activeBean); + } + } + }); + recyclerView.setAdapter(commentReplyAdapter); + recyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER); + replyCount.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!bean.isShow()) { + recyclerView.setVisibility(View.VISIBLE); + replyCount.setText("收起"); + } else { + recyclerView.setVisibility(View.GONE); + replyCount.setText("共" + bean.getReplyCommentList().size() + "条回复>"); + } + bean.setShow(!bean.isShow()); + } + }); + } + } + } + } + + public interface onItemClickListener { + void onReply(CommentBean activeBean); + + void onReport(CommentBean activeBean); + + void onReport(CommentBean.ReplyComment activeBean); + + void onDel(CommentBean activeBean); + + void onDel(CommentBean.ReplyComment activeBean); + } + +} diff --git a/common/src/main/java/com/yunbao/common/adapter/LabelTagAdapter.java b/common/src/main/java/com/yunbao/common/adapter/LabelTagAdapter.java index f1737b634..63af4d3df 100644 --- a/common/src/main/java/com/yunbao/common/adapter/LabelTagAdapter.java +++ b/common/src/main/java/com/yunbao/common/adapter/LabelTagAdapter.java @@ -37,7 +37,6 @@ public class LabelTagAdapter extends BaseTagAdapter { @Override protected void convert(TextView textView, String item, int position) { textView.setText(item); - textView.setTextColor(mContext.getResources().getColor(R.color.black2)); } public interface OnSureOnClickListener { diff --git a/common/src/main/java/com/yunbao/common/adapter/LabelVideoTagAdapter.java b/common/src/main/java/com/yunbao/common/adapter/LabelVideoTagAdapter.java new file mode 100644 index 000000000..79cad563f --- /dev/null +++ b/common/src/main/java/com/yunbao/common/adapter/LabelVideoTagAdapter.java @@ -0,0 +1,46 @@ +package com.yunbao.common.adapter; + +import android.content.Context; +import android.view.View; +import android.widget.TextView; + +import com.xuexiang.xui.widget.flowlayout.BaseTagAdapter; +import com.yunbao.common.R; +import com.yunbao.common.bean.LabelBean; + +public class LabelVideoTagAdapter extends BaseTagAdapter { + + OnSureOnClickListener onSureOnClickListener; + + Context mContext; + + public LabelVideoTagAdapter(Context context, OnSureOnClickListener onSureOnClickListener) { + super(context); + this.onSureOnClickListener = onSureOnClickListener; + this.mContext = context; + } + + public LabelVideoTagAdapter(Context context) { + super(context); + } + + @Override + protected TextView newViewHolder(View convertView) { + return (TextView) convertView.findViewById(R.id.tv_tag); + } + + @Override + protected int getLayoutId() { + return R.layout.adapter_video_tag; + } + + @Override + protected void convert(TextView textView, String item, int position) { + textView.setText(item); + } + + public interface OnSureOnClickListener { + void sure(LabelBean.Children labelBean); + } + +} diff --git a/common/src/main/java/com/yunbao/common/adapter/UserCommunityAdapter.java b/common/src/main/java/com/yunbao/common/adapter/UserCommunityAdapter.java index 0fb6bb278..3ca722c6f 100644 --- a/common/src/main/java/com/yunbao/common/adapter/UserCommunityAdapter.java +++ b/common/src/main/java/com/yunbao/common/adapter/UserCommunityAdapter.java @@ -16,7 +16,9 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.makeramen.roundedimageview.RoundedImageView; import com.yunbao.common.R; +import com.yunbao.common.activity.AbsActivity; import com.yunbao.common.bean.ActiveOtherBean; +import com.yunbao.common.dialog.ImagePreviewDialog; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.utils.StringUtil; import com.yunbao.common.views.NineGridLayout; @@ -81,16 +83,17 @@ public class UserCommunityAdapter extends RecyclerView.Adapter { comCount = itemView.findViewById(R.id.comCount); shareCount = itemView.findViewById(R.id.shareCount); - mAvatar.setOnClickListener(new View.OnClickListener() { + itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - onItemClickListener.onImgItem((String) v.getTag(), getPosition()); + onItemClickListener.onImgItem((ActiveOtherBean) v.getTag(), getPosition()); } }); } @SuppressLint("SetTextI18n") public void setData(ActiveOtherBean bean) { + itemView.setTag(bean); mAvatar.setTag(bean); ImgLoader.display(mContext, bean.getUser_avatar(), mAvatar); userName.setText(bean.getUser_name()); @@ -104,7 +107,19 @@ public class UserCommunityAdapter extends RecyclerView.Adapter { nineGridLayout.setActionListener(new NineGridLayout.ActionListener() { @Override public void onItemClick(List dataList, int position) { + ImagePreviewDialog dialog = new ImagePreviewDialog(); + dialog.setImageInfo(dataList.size(), position, false, new ImagePreviewDialog.ActionListener() { + @Override + public void loadImage(ImageView imageView, int position) { + ImgLoader.display(mContext, (String) (dataList.get(position)), imageView); + } + @Override + public void onDeleteClick(int position) { + + } + }); + dialog.show(((AbsActivity) mContext).getSupportFragmentManager(), "ImagePreviewDialog"); } @Override @@ -119,14 +134,18 @@ public class UserCommunityAdapter extends RecyclerView.Adapter { tempList.add(String.valueOf(jsonArray.get(i))); } nineGridLayout.setData(tempList); + videoLayout.setVisibility(View.GONE); } else { - ImgLoader.display(mContext, bean.getUser_avatar(), videoImage); + videoLayout.setVisibility(View.VISIBLE); + ImgLoader.display(mContext, bean.getVideo() + "?vframe/jpg/offset/0", videoImage); } } } public interface onItemClickListener { - void onImgItem(String activeBean, int position); + void onImgItem(ActiveOtherBean activeBean, int position); + + void onVideoItem(String activeBean, int position); } } diff --git a/common/src/main/java/com/yunbao/common/adapter/UserHomeImgAdapter.java b/common/src/main/java/com/yunbao/common/adapter/UserHomeImgAdapter.java index 543fa3d23..cff7907f6 100644 --- a/common/src/main/java/com/yunbao/common/adapter/UserHomeImgAdapter.java +++ b/common/src/main/java/com/yunbao/common/adapter/UserHomeImgAdapter.java @@ -6,7 +6,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; @@ -22,17 +21,15 @@ public class UserHomeImgAdapter extends RecyclerView.Adapter { private List commentBeanList; private Context mContext; private onItemClickListener onItemClickListener; + private boolean isMe; public void setOnItemClickListener(UserHomeImgAdapter.onItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } - public List getCommentBeanList() { - return commentBeanList; - } - - public UserHomeImgAdapter(Context content, List commentBeanList) { + public UserHomeImgAdapter(Context content, List commentBeanList, boolean isMe) { this.mContext = content; + this.isMe = isMe; this.commentBeanList = commentBeanList; } @@ -61,11 +58,13 @@ public class UserHomeImgAdapter extends RecyclerView.Adapter { class CommentViewHolder extends RecyclerView.ViewHolder { RoundedImageView mAvatar01; RoundedImageView mAvatar02; + ImageView del; public CommentViewHolder(@NonNull View itemView) { super(itemView); mAvatar01 = itemView.findViewById(R.id.avatar01); mAvatar02 = itemView.findViewById(R.id.avatar02); + del = itemView.findViewById(R.id.del); } @SuppressLint("SetTextI18n") @@ -74,15 +73,29 @@ public class UserHomeImgAdapter extends RecyclerView.Adapter { mAvatar01.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - onItemClickListener.onImgItem((UserHomeImgBean) v.getTag(), position); + if (onItemClickListener != null) { + onItemClickListener.onImgItem((UserHomeImgBean) v.getTag(), position); + } + } + }); + del.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (onItemClickListener != null) { + onItemClickListener.onImgDel((UserHomeImgBean) v.getTag(), position); + } } }); ImgLoader.display(mContext, bean.getImgurl(), mAvatar01); ImgLoader.display(mContext, bean.getImgurl(), mAvatar02); if (bean.isShow()) { + if (isMe) { + del.setVisibility(View.VISIBLE); + } mAvatar01.setVisibility(View.GONE); mAvatar02.setVisibility(View.VISIBLE); } else { + del.setVisibility(View.GONE); mAvatar01.setVisibility(View.VISIBLE); mAvatar02.setVisibility(View.GONE); } @@ -91,5 +104,7 @@ public class UserHomeImgAdapter extends RecyclerView.Adapter { public interface onItemClickListener { void onImgItem(UserHomeImgBean activeBean, int position); + + void onImgDel(UserHomeImgBean activeBean, int position); } } diff --git a/common/src/main/java/com/yunbao/common/bean/CommentBean.java b/common/src/main/java/com/yunbao/common/bean/CommentBean.java index 47d2842fc..2c5387cf9 100644 --- a/common/src/main/java/com/yunbao/common/bean/CommentBean.java +++ b/common/src/main/java/com/yunbao/common/bean/CommentBean.java @@ -1,11 +1,16 @@ package com.yunbao.common.bean; +import android.os.Parcel; +import android.os.Parcelable; + +import androidx.annotation.NonNull; + import java.util.List; /** * 社區动态 */ -public class CommentBean extends BaseModel { +public class CommentBean extends BaseModel implements Parcelable { private String id; private String dynamic_id; private String uid; @@ -17,8 +22,40 @@ public class CommentBean extends BaseModel { private String user_name; private String user_id; private String user_avatar; + private boolean mParentNode;//是否是父元素 private List child; + public CommentBean() { + } + + public CommentBean(Parcel in) { + id = in.readString(); + dynamic_id = in.readString(); + uid = in.readString(); + to_comment_id = in.readString(); + content = in.readString(); + create_time = in.readString(); + status = in.readString(); + is_dynamic_user = in.readString(); + user_name = in.readString(); + user_id = in.readString(); + user_avatar = in.readString(); + mParentNode = in.readByte() != 0; + isShow = in.readByte() != 0; + } + + public static final Creator CREATOR = new Creator() { + @Override + public CommentBean createFromParcel(Parcel in) { + return new CommentBean(in); + } + + @Override + public CommentBean[] newArray(int size) { + return new CommentBean[size]; + } + }; + public List getChild() { return child; } @@ -27,6 +64,14 @@ public class CommentBean extends BaseModel { this.child = child; } + public boolean ismParentNode() { + return mParentNode; + } + + public void setParentNode(boolean mParentNode) { + this.mParentNode = mParentNode; + } + private boolean isShow; public String getId() { @@ -133,6 +178,28 @@ public class CommentBean extends BaseModel { isShow = show; } + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + dest.writeString(id); + dest.writeString(dynamic_id); + dest.writeString(uid); + dest.writeString(to_comment_id); + dest.writeString(content); + dest.writeString(create_time); + dest.writeString(status); + dest.writeString(is_dynamic_user); + dest.writeString(user_name); + dest.writeString(user_id); + dest.writeString(user_avatar); + dest.writeByte((byte) (mParentNode ? 1 : 0)); + dest.writeByte((byte) (isShow ? 1 : 0)); + } + public static class ReplyComment { private String id; private String dynamic_id; diff --git a/common/src/main/java/com/yunbao/common/bean/HomeUserExhibitInfoBean.java b/common/src/main/java/com/yunbao/common/bean/HomeUserExhibitInfoBean.java index 7e526c754..453d29ba8 100644 --- a/common/src/main/java/com/yunbao/common/bean/HomeUserExhibitInfoBean.java +++ b/common/src/main/java/com/yunbao/common/bean/HomeUserExhibitInfoBean.java @@ -4,13 +4,13 @@ import java.util.List; public class HomeUserExhibitInfoBean extends BaseModel { public UserHomeTopInfo userHomeTopInfo; - public List giftAlreadyWall; + public GiftAlreadyWall giftAlreadyWall; - public List getGiftAlreadyWall() { + public GiftAlreadyWall getGiftAlreadyWall() { return giftAlreadyWall; } - public void setGiftAlreadyWall(List giftAlreadyWall) { + public void setGiftAlreadyWall(GiftAlreadyWall giftAlreadyWall) { this.giftAlreadyWall = giftAlreadyWall; } @@ -22,9 +22,26 @@ public class HomeUserExhibitInfoBean extends BaseModel { this.userHomeTopInfo = userHomeTopInfo; } - public class UserHomeTopInfo { - Fans fans; + public Fans fans; + public List guard; + public List dress; + + public List getGuard() { + return guard; + } + + public void setGuard(List guard) { + this.guard = guard; + } + + public List getDress() { + return dress; + } + + public void setDress(List dress) { + this.dress = dress; + } public Fans getFans() { return fans; @@ -92,7 +109,6 @@ public class HomeUserExhibitInfoBean extends BaseModel { } } - public class GiftAlreadyWall { private String gift_wall_lighten_number; private String gift_wall_lighten_total; diff --git a/common/src/main/java/com/yunbao/common/bean/HomeUserInfoBean.java b/common/src/main/java/com/yunbao/common/bean/HomeUserInfoBean.java index c302f926e..e27e9b7da 100644 --- a/common/src/main/java/com/yunbao/common/bean/HomeUserInfoBean.java +++ b/common/src/main/java/com/yunbao/common/bean/HomeUserInfoBean.java @@ -1,5 +1,7 @@ package com.yunbao.common.bean; +import android.widget.TextView; + import java.util.List; public class HomeUserInfoBean extends BaseModel { @@ -45,6 +47,53 @@ public class HomeUserInfoBean extends BaseModel { private List cn_label; private List en_label; + private String age; + private String height; + private String career; + private String en_career; + + private String rong_online; + + public String getRong_online() { + return rong_online; + } + + public void setRong_online(String rong_online) { + this.rong_online = rong_online; + } + + public String getAge() { + return age; + } + + public void setAge(String age) { + this.age = age; + } + + public String getHeight() { + return height; + } + + public void setHeight(String height) { + this.height = height; + } + + public String getCareer() { + return career; + } + + public void setCareer(String career) { + this.career = career; + } + + public String getEn_career() { + return en_career; + } + + public void setEn_career(String en_career) { + this.en_career = en_career; + } + public List getCn_label() { return cn_label; } diff --git a/common/src/main/java/com/yunbao/common/http/CommonHttpUtil.java b/common/src/main/java/com/yunbao/common/http/CommonHttpUtil.java index a14a2fe33..ee0c866c9 100644 --- a/common/src/main/java/com/yunbao/common/http/CommonHttpUtil.java +++ b/common/src/main/java/com/yunbao/common/http/CommonHttpUtil.java @@ -44,6 +44,7 @@ import java.util.Locale; public class CommonHttpUtil { + public static final String GET_UPLOAD_QI_NIU_TOKEN = "getUploadQiNiuToken"; /** * 初始化 @@ -506,12 +507,13 @@ public class CommonHttpUtil { * @param createAt * @param callback */ - public static void pushCommunity(boolean isImgOrVideo, String content, String talkId, String fileAry, String createAt, HttpCallback callback) { - HttpClient.getInstance().get("Pdlcommunity.sendDynamic", CommonHttpConsts.GET_USER_BASEINFO) + public static void pushCommunity(boolean isImgOrVideo, String content, String talkId, String fileAry, String videoUrl, String createAt, HttpCallback callback) { + HttpClient.getInstance().post("Pdlcommunity.sendDynamic", CommonHttpConsts.GET_USER_BASEINFO) .params("img_or_video", isImgOrVideo ? 1 : 2) .params("content", content) .params("talk_id", talkId) .params("file_name_ary", fileAry) + .params("video", videoUrl) .params("created_at", createAt) .execute(callback); } @@ -522,31 +524,21 @@ public class CommonHttpUtil { * @param callback */ public static void getCommunityHotList(int p, HttpCallback callback) { - HttpClient.getInstance().get("Pdlcommunity.getFindDynamicList", "Pdlcommunity.getFindDynamicList") + HttpClient.getInstance().get("Pdlcommunity.getHotDynamicList", "Pdlcommunity.getHotDynamicList") .params("p", p) .execute(callback); } - /** - * 获取动态列表-热门 - * - * @param callback - */ - public static void getCommunityDetails(String dynamic_id, HttpCallback callback) { - HttpClient.getInstance().get("Pdlcommunity.getDynamicInfo", "Pdlcommunity.getDynamicInfo") - .params("dynamic_id", dynamic_id) - .execute(callback); - } - /** * 获取动态列表-评论 * * @param callback */ - public static void getCommunityComment(String dynamic_id, String dynamic_uid, HttpCallback callback) { + public static void getCommunityComment(String dynamic_id, String dynamic_uid, int p, HttpCallback callback) { HttpClient.getInstance().get("Pdlcommunity.getDynamicCommentList", "Pdlcommunity.getDynamicCommentList") .params("dynamic_id", dynamic_id) .params("dynamic_uid", dynamic_uid) + .params("p", p) .execute(callback); } @@ -587,7 +579,7 @@ public class CommonHttpUtil { * 获取动态-关注 */ public static void getCommunityFollow(int p, HttpCallback callback) { - HttpClient.getInstance().get("Pdlcommunity.getFindDynamicList", "Pdlcommunity.getFindDynamicList") + HttpClient.getInstance().get("Pdlcommunity.getAttentionDynamicList", "Pdlcommunity.getAttentionDynamicList") .params("p", p) .execute(callback); } @@ -596,7 +588,7 @@ public class CommonHttpUtil { * 获取动态-分类 */ public static void getTag(HttpCallback callback) { - HttpClient.getInstance().get("Pdlcommunity.getTalkBanner", "Pdlcommunity.getTalkBanner") + HttpClient.getInstance().get("Pdlcommunity.getHotTalk", "Pdlcommunity.getHotTalk") .execute(callback); } @@ -640,7 +632,25 @@ public class CommonHttpUtil { .execute(callback); } + /** + * 上传文件 获取七牛云token的接口 + */ + public static void getUploadQiNiuToken(HttpCallback callback, boolean isImg) { + HttpClient.getInstance().get("Pdluserhome.getQiNiuToken", "Pdluserhome.getQiNiuToken") + .params("uid", CommonAppConfig.getInstance().getUid()) + .params("token", CommonAppConfig.getInstance().getToken()) + .params("ext", isImg ? ".jpeg" : ".mp4") + .execute(callback); + } + /** + * 修改用户背景墙 + */ + public static void uploadUserInfoImg(String imgs, HttpCallback callback) { + HttpClient.getInstance().post("Pdluserhome.saveUserHomeBanner", "Userhome.saveUserHomeBanner") + .params("home_banner_url_ary", imgs) + .execute(callback); + } } diff --git a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java index 39a114f28..b9e53bc9c 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -1,6 +1,7 @@ package com.yunbao.common.http; import com.alibaba.fastjson.JSONObject; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.bean.ActiveModel; import com.yunbao.common.bean.AnchorRecommendItemModel; import com.yunbao.common.bean.AnchorRecommendModel; @@ -210,6 +211,7 @@ public interface PDLiveApi { /** * 获取直播间信息 * + * @param liveui 主播id * @return */ @GET("/api/public/?service=Live.getLiveInfo") @@ -1194,6 +1196,7 @@ public interface PDLiveApi { @GET("/api/public/?service=Userhome.getUserHomeBanner") Observable>> getUserHomeBanner(@Query("select_uid") String tuid); + @GET("/api/public/?service=Pdlinfos.getIsAnchor") Observable> getIsAnchor(); @@ -1267,4 +1270,7 @@ public interface PDLiveApi { @GET("/api/public/?service=Pdluserhome.getUserHomeInfo") Observable> getUserHomeExhibitInfo(@Query("select_uid") String tuid); + @GET("/api/public/?service=Pdlcommunity.getDynamicInfo") + Observable> getDynamicInfo(@Query("dynamic_id") String dynamic_id); + } diff --git a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java index 512cf203b..183fb71f8 100644 --- a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java +++ b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java @@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; import com.yunbao.common.R; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.bean.ActiveModel; import com.yunbao.common.bean.AvatarBean; import com.yunbao.common.bean.BaseModel; @@ -3382,6 +3383,29 @@ public class LiveNetManager { }).isDisposed(); } + public void getDynamicInfo(String dynamic_id, HttpCallback callback) { + API.get().pdLiveApi(mContext) + .getDynamicInfo(dynamic_id) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Consumer>() { + @Override + public void accept(ResponseModel messageUserInfoBeanResponseModel) throws Exception { + if (callback != null) { + callback.onSuccess(messageUserInfoBeanResponseModel.getData().getInfo()); + } + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + throwable.printStackTrace(); + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + } + }).isDisposed(); + } + private MultipartBody.Part createUploadFile(File file) { RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); return MultipartBody.Part.createFormData("file", file.getName(), requestBody); diff --git a/common/src/main/java/com/yunbao/common/manager/CommunityTypeManager.java b/common/src/main/java/com/yunbao/common/manager/CommunityTypeManager.java index e31018e0f..391d57301 100644 --- a/common/src/main/java/com/yunbao/common/manager/CommunityTypeManager.java +++ b/common/src/main/java/com/yunbao/common/manager/CommunityTypeManager.java @@ -4,9 +4,7 @@ import android.content.Context; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import com.yunbao.common.bean.FansModel; import com.yunbao.common.bean.NewCommunityType; -import com.yunbao.common.bean.NewLevelModel; import com.yunbao.common.manager.base.BaseCacheManager; import java.util.ArrayList; @@ -30,7 +28,7 @@ public class CommunityTypeManager extends BaseCacheManager { } public void UpCommunityType(String json) { - newCommunityTypeList = new Gson().fromJson(json, new TypeToken>() { + newCommunityTypeList = new Gson().fromJson(json, new TypeToken>() { }.getType()); put(KEY_COMMUNITY_TYPE, newCommunityTypeList); } diff --git a/common/src/main/java/com/yunbao/common/upload/UploadBean.java b/common/src/main/java/com/yunbao/common/upload/UploadBean.java new file mode 100644 index 000000000..df599dc7b --- /dev/null +++ b/common/src/main/java/com/yunbao/common/upload/UploadBean.java @@ -0,0 +1,92 @@ +package com.yunbao.common.upload; + +import java.io.File; + +/** + * Created by cxf on 2019/4/16. + */ + +public class UploadBean { + + public static final int IMG = 0; + public static final int VIDEO = 1; + public static final int VOICE = 2; + private File mOriginFile;//要被上传的源文件 + private File mCompressFile;//压缩后的图片文件 + private String mRemoteFileName;//上传成功后在云存储上的文件名字 + private String mRemoteAccessUrl;//上传成功后在云存储上的访问地址 + private boolean mSuccess;//是否上传成功了 + private int mType; + private Object mTag; + + public UploadBean() { + } + + public UploadBean(File originFile, int type) { + mOriginFile = originFile; + mType = type; + } + + public File getOriginFile() { + return mOriginFile; + } + + public void setOriginFile(File originFile) { + mOriginFile = originFile; + } + + public String getRemoteFileName() { + return mRemoteFileName; + } + + public void setRemoteFileName(String remoteFileName) { + mRemoteFileName = remoteFileName; + } + + public String getRemoteAccessUrl() { + return mRemoteAccessUrl; + } + + public void setRemoteAccessUrl(String remoteAccessUrl) { + mRemoteAccessUrl = remoteAccessUrl; + } + + public File getCompressFile() { + return mCompressFile; + } + + public void setCompressFile(File compressFile) { + mCompressFile = compressFile; + } + + public boolean isSuccess() { + return mSuccess; + } + + public void setSuccess(boolean success) { + mSuccess = success; + } + + + public void setEmpty() { + mOriginFile = null; + mRemoteFileName = null; + mRemoteAccessUrl = null; + } + + public boolean isEmpty() { + return mOriginFile == null && mRemoteFileName == null && mRemoteAccessUrl == null; + } + + public int getType() { + return mType; + } + + public Object getTag() { + return mTag; + } + + public void setTag(Object tag) { + mTag = tag; + } +} diff --git a/common/src/main/java/com/yunbao/common/upload/UploadCallback.java b/common/src/main/java/com/yunbao/common/upload/UploadCallback.java new file mode 100644 index 000000000..8676964fa --- /dev/null +++ b/common/src/main/java/com/yunbao/common/upload/UploadCallback.java @@ -0,0 +1,11 @@ +package com.yunbao.common.upload; + +import java.util.List; + +/** + * Created by cxf on 2019/4/16. + */ + +public interface UploadCallback { + void onFinish(List list, boolean success); +} diff --git a/common/src/main/java/com/yunbao/common/upload/UploadQnImpl.java b/common/src/main/java/com/yunbao/common/upload/UploadQnImpl.java new file mode 100644 index 000000000..dd97616fa --- /dev/null +++ b/common/src/main/java/com/yunbao/common/upload/UploadQnImpl.java @@ -0,0 +1,215 @@ +package com.yunbao.common.upload; + +import android.content.Context; +import android.text.TextUtils; + +import com.alibaba.fastjson.JSON; +import com.qiniu.android.common.ServiceAddress; +import com.qiniu.android.common.Zone; +import com.qiniu.android.http.ResponseInfo; +import com.qiniu.android.storage.Configuration; +import com.qiniu.android.storage.UpCompletionHandler; +import com.qiniu.android.storage.UploadManager; +import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.http.CommonHttpUtil; +import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.utils.L; +import com.yunbao.common.utils.StringUtil; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.util.List; + +import top.zibin.luban.Luban; +import top.zibin.luban.OnCompressListener; +import top.zibin.luban.OnRenameListener; + +/** + * Created by cxf on 2019/4/16. + * 七牛上传文件 + */ + +public class UploadQnImpl implements UploadStrategy { + + private static final String TAG = "UploadQnImpl"; + private Context mContext; + private List mList; + private int mIndex; + private boolean mNeedCompress; + private UploadCallback mUploadCallback; + private HttpCallback mGetUploadTokenCallback; + private String mToken; + private UploadManager mUploadManager; + private UpCompletionHandler mCompletionHandler;//上传回调 + private Luban.Builder mLubanBuilder; + + public UploadQnImpl(Context context) { + mContext = context; + mCompletionHandler = new UpCompletionHandler() { + @Override + public void complete(String key, ResponseInfo info, JSONObject response) { + L.e("UploadQnImpl 上传-----ok----> " + info.isOK() + "--key---> " + "---response---> " + (response != null ? response.toString() : null)); + try { + assert response != null; + mList.get(mIndex).setRemoteAccessUrl(response.getString("key")); + } catch (JSONException e) { + throw new RuntimeException(e); + } + if (mList == null || mList.size() == 0) { + if (mUploadCallback != null) { + mUploadCallback.onFinish(mList, false); + } + return; + } + UploadBean uploadBean = mList.get(mIndex); + if (info.isOK()) { + uploadBean.setSuccess(true); + if (uploadBean.getType() == UploadBean.IMG && mNeedCompress) { + //上传完成后把 压缩后的图片 删掉 + File compressedFile = uploadBean.getCompressFile(); + if (compressedFile != null && compressedFile.exists()) { + File originFile = uploadBean.getOriginFile(); + if (originFile != null && !compressedFile.getAbsolutePath().equals(originFile.getAbsolutePath())) { + compressedFile.delete(); + } + } + } + mIndex++; + if (mIndex < mList.size()) { + uploadNext(); + } else { + if (mUploadCallback != null) { + mUploadCallback.onFinish(mList, true); + } + } + } else { + upload(mList.get(mIndex));//上传失败后 重新上传 + } + } + }; + } + + @Override + public void upload(List list, boolean needCompress, UploadCallback callback, boolean isImg) { + if (callback == null) { + return; + } + if (list == null || list.size() == 0) { + callback.onFinish(list, false); + return; + } + boolean hasFile = false; + for (UploadBean bean : list) { + if (bean.getOriginFile() != null) { + hasFile = true; + break; + } + } + if (!hasFile) { + callback.onFinish(list, true); + return; + } + mList = list; + mNeedCompress = needCompress; + mUploadCallback = callback; + mIndex = 0; + + if (mGetUploadTokenCallback == null) { + mGetUploadTokenCallback = new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + mToken = info[0]; + L.e(TAG, "-------上传的token------>" + mToken); + uploadNext(); + } + } + }; + } + CommonHttpUtil.getUploadQiNiuToken(mGetUploadTokenCallback, isImg); + } + + @Override + public void cancelUpload() { + CommonHttpUtil.cancel(CommonHttpUtil.GET_UPLOAD_QI_NIU_TOKEN); + if (mList != null) { + mList.clear(); + } + mUploadCallback = null; + } + + private void uploadNext() { + UploadBean bean = null; + while (mIndex < mList.size() && (bean = mList.get(mIndex)).getOriginFile() == null) { + mIndex++; + } + if (mIndex >= mList.size()) { + if (mUploadCallback != null) { + mUploadCallback.onFinish(mList, true); + } + return; + } + if (bean.getType() == UploadBean.IMG) { + bean.setRemoteFileName(StringUtil.contact(StringUtil.generateFileName(), ".jpg")); + } else if (bean.getType() == UploadBean.VIDEO) { + bean.setRemoteFileName(StringUtil.contact(StringUtil.generateFileName(), ".mp4")); + } else if (bean.getType() == UploadBean.VOICE) { + bean.setRemoteFileName(StringUtil.contact(StringUtil.generateFileName(), ".m4a")); + } + if (bean.getType() == UploadBean.IMG && mNeedCompress) { + if (mLubanBuilder == null) { + mLubanBuilder = Luban.with(mContext).ignoreBy(8)//8k以下不压缩 + .setTargetDir(CommonAppConfig.INNER_PATH).setRenameListener(new OnRenameListener() { + @Override + public String rename(String filePath) { + return mList.get(mIndex).getRemoteFileName(); + } + }).setCompressListener(new OnCompressListener() { + @Override + public void onStart() { + } + + @Override + public void onSuccess(File file) { + UploadBean uploadBean = mList.get(mIndex); + uploadBean.setCompressFile(file); + upload(uploadBean); + } + + @Override + public void onError(Throwable e) { + upload(mList.get(mIndex)); + } + }); + } + mLubanBuilder.load(bean.getOriginFile()).launch(); + } else { + upload(bean); + } + } + + private void upload(UploadBean bean) { + if (bean != null && !TextUtils.isEmpty(mToken) && mCompletionHandler != null) { + if (mUploadManager == null) { + Zone zone = new Zone(new ServiceAddress("http://upload-z0.qiniup.com"), new ServiceAddress("http://up-z0.qiniup.com")); + Configuration configuration = new Configuration.Builder().zone(zone).build(); + mUploadManager = new UploadManager(configuration); + } + File uploadFile = bean.getOriginFile(); + if (bean.getType() == UploadBean.IMG && mNeedCompress) { + File compressedFile = bean.getCompressFile(); + if (compressedFile != null && compressedFile.exists()) { + uploadFile = compressedFile; + } + } + mUploadManager.put(uploadFile, bean.getRemoteFileName(), mToken, mCompletionHandler, null); + } else { + if (mUploadCallback != null) { + mUploadCallback.onFinish(mList, false); + } + } + } + +} diff --git a/common/src/main/java/com/yunbao/common/upload/UploadStrategy.java b/common/src/main/java/com/yunbao/common/upload/UploadStrategy.java new file mode 100644 index 000000000..e61427909 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/upload/UploadStrategy.java @@ -0,0 +1,24 @@ +package com.yunbao.common.upload; + +import java.util.List; + +/** + * Created by cxf on 2019/4/16. + */ + +public interface UploadStrategy { + + /** + * 执行上传 + * + * @param list 被上传的文件列表 + * @param needCompress 是否需要压缩 + * @param callback 上传回调 + */ + void upload(List list, boolean needCompress, UploadCallback callback,boolean isImg); + + /** + * 取消上传 + */ + void cancelUpload(); +} diff --git a/common/src/main/java/com/yunbao/common/utils/ActiveImageAdapter.java b/common/src/main/java/com/yunbao/common/utils/ActiveImageAdapter.java index a802b8994..88735928f 100644 --- a/common/src/main/java/com/yunbao/common/utils/ActiveImageAdapter.java +++ b/common/src/main/java/com/yunbao/common/utils/ActiveImageAdapter.java @@ -24,6 +24,7 @@ public class ActiveImageAdapter extends RecyclerView.Adapter { private LayoutInflater mInflater; private View.OnClickListener mOnClickListener; private View.OnClickListener mODelListener; + private View.OnClickListener onAddClick; private ActionListener mActionListener; public ActiveImageAdapter(Context context) { @@ -70,6 +71,14 @@ public class ActiveImageAdapter extends RecyclerView.Adapter { } } }; + onAddClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mActionListener != null) { + mActionListener.onAddClick(); + } + } + }; } public void setActionListener(ActionListener actionListener) { @@ -174,6 +183,7 @@ public class ActiveImageAdapter extends RecyclerView.Adapter { del = itemView.findViewById(R.id.del); itemView.setOnClickListener(mOnClickListener); del.setOnClickListener(mODelListener); + mIconAdd.setOnClickListener(onAddClick); } void setData(ActiveImageBean bean, int position) { @@ -183,15 +193,15 @@ public class ActiveImageAdapter extends RecyclerView.Adapter { if (mIconAdd.getVisibility() != View.VISIBLE) { mIconAdd.setVisibility(View.VISIBLE); } - if (del.getVisibility() != View.VISIBLE) { - del.setVisibility(View.VISIBLE); + if (del.getVisibility() != View.GONE) { + del.setVisibility(View.GONE); } } else { if (mIconAdd.getVisibility() == View.VISIBLE) { mIconAdd.setVisibility(View.INVISIBLE); } - if (del.getVisibility() == View.VISIBLE) { - del.setVisibility(View.GONE); + if (del.getVisibility() == View.GONE) { + del.setVisibility(View.VISIBLE); } ImgLoader.display(mContext, bean.getImageFile(), mImg); } @@ -201,8 +211,11 @@ public class ActiveImageAdapter extends RecyclerView.Adapter { public interface ActionListener { void onAddClick(); + void onItemClick(int position); + void onDeleteAll(); + void onDel(int position); } } diff --git a/common/src/main/java/com/yunbao/common/utils/DateFormatUtil.java b/common/src/main/java/com/yunbao/common/utils/DateFormatUtil.java index 8b5bb110c..3a1d460ed 100644 --- a/common/src/main/java/com/yunbao/common/utils/DateFormatUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/DateFormatUtil.java @@ -36,12 +36,11 @@ public class DateFormatUtil { public static String getTimeStrings(long time) { Date date = new Date(time); // 创建Date对象并传入时间戳参数 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // 设置日期格式 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 设置日期格式 String formattedDate = sdf.format(date); // 格式化日期字符串 return formattedDate; } - public static String getVideoCurTimeString() { return sFormat2.format(new Date()); } diff --git a/common/src/main/java/com/yunbao/common/utils/FilesUtils.java b/common/src/main/java/com/yunbao/common/utils/FilesUtils.java new file mode 100644 index 000000000..315e05111 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/utils/FilesUtils.java @@ -0,0 +1,368 @@ +package com.yunbao.common.utils; + +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.media.MediaMetadataRetriever; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.DocumentsContract; +import android.provider.MediaStore; +import android.provider.OpenableColumns; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +public class FilesUtils { + + public final static String FILE_TAG = "/rich_editor"; + public static final String DOCUMENTS_DIR = "documents"; + + public static String getPath(final Context context, final Uri uri) { + // DocumentProvider + if (hasKitKat() && DocumentsContract.isDocumentUri(context, uri)) { + // ExternalStorageProvider + if (isExternalStorageDocument(uri)) { + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + if ("primary".equalsIgnoreCase(type)) { + return Environment.getExternalStorageDirectory() + "/" + split[1]; + } + + // TODO handle non-primary volumes + } else if (isDownloadsDocument(uri)) { // DownloadsProvider + final String id = DocumentsContract.getDocumentId(uri); + if (id != null && id.startsWith("raw:")) { + return id.substring(4); + } + String[] contentUriPrefixesToTry = new String[]{ + "content://downloads/public_downloads", + "content://downloads/my_downloads" + }; + for (String contentUriPrefix : contentUriPrefixesToTry) { + Uri contentUri = ContentUris.withAppendedId(Uri.parse(contentUriPrefix), Long.valueOf(id)); + try { + String path = getDataColumn(context, contentUri, null, null); + if (path != null && !path.equals("")) { + return path; + } + } catch (Exception e) { + } + } + // path could not be retrieved using ContentResolver, therefore copy file to accessible cache using streams + String fileName = getFileName(context, uri); + File cacheDir = getDocumentCacheDir(context); + File file = generateFileNamePlus(fileName, cacheDir); + String destinationPath = null; + if (file != null) { + destinationPath = file.getAbsolutePath(); + saveFileFromUri(context, uri, destinationPath); + } + return destinationPath; + } else if (isMediaDocument(uri)) { // MediaProvider + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + + Uri contentUri = null; + if ("image".equals(type)) { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + } else if ("video".equals(type)) { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + } else if ("audio".equals(type)) { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } else { + //其它类型 + contentUri = MediaStore.Files.getContentUri("external"); + } + + final String selection = "_id=?"; + final String[] selectionArgs = new String[]{ + split[1] + }; + + return getDataColumn(context, contentUri, selection, selectionArgs); + } + } else if ("content".equalsIgnoreCase(uri.getScheme())) { // MediaStore (and general) + return getDataColumn(context, uri, null, null); + } else if ("file".equalsIgnoreCase(uri.getScheme())) { // File + return uri.getPath(); + } + + return null; + } + + @Nullable + public static File generateFileNamePlus(@Nullable String name, File directory) { + if (name == null) { + return null; + } + + File file = new File(directory, name); + + if (file.exists()) { + String fileName = name; + String extension = ""; + int dotIndex = name.lastIndexOf('.'); + if (dotIndex > 0) { + fileName = name.substring(0, dotIndex); + extension = name.substring(dotIndex); + } + + int index = 0; + + while (file.exists()) { + index++; + name = fileName + '(' + index + ')' + extension; + file = new File(directory, name); + } + } + + try { + if (!file.createNewFile()) { + return null; + } + } catch (IOException e) { + return null; + } + + return file; + } + + + public static String getFileName(@NonNull Context context, Uri uri) { + String mimeType = context.getContentResolver().getType(uri); + String filename = null; + + if (mimeType == null && context != null) { + String path = getPath(context, uri); + if (path == null) { + filename = getName(uri.toString()); + } else { + File file = new File(path); + filename = file.getName(); + } + } else { + Cursor returnCursor = context.getContentResolver().query(uri, null, + null, null, null); + if (returnCursor != null) { + int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); + returnCursor.moveToFirst(); + filename = returnCursor.getString(nameIndex); + returnCursor.close(); + } + } + + return filename; + } + + public static String getName(String filename) { + if (filename == null) { + return null; + } + int index = filename.lastIndexOf('/'); + return filename.substring(index + 1); + } + + + public static File getDocumentCacheDir(@NonNull Context context) { + File dir = new File(context.getCacheDir(), DOCUMENTS_DIR); + if (!dir.exists()) { + dir.mkdirs(); + } + + return dir; + } + + + private static void saveFileFromUri(Context context, Uri uri, String destinationPath) { + InputStream is = null; + BufferedOutputStream bos = null; + try { + is = context.getContentResolver().openInputStream(uri); + bos = new BufferedOutputStream(new FileOutputStream(destinationPath, false)); + byte[] buf = new byte[1024]; + is.read(buf); + do { + bos.write(buf); + } while (is.read(buf) != -1); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (is != null) is.close(); + if (bos != null) bos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + + /** + * Get the value of the data column for this Uri. This is useful for + * MediaStore Uris, and other file-based ContentProviders. + * + * @param context The context. + * @param uri The Uri to query. + * @param selection (Optional) Filter used in the query. + * @param selectionArgs (Optional) Selection arguments used in the query. + * @return The value of the _data column, which is typically a file path. + */ + public static String getDataColumn(Context context, Uri uri, String selection, + String[] selectionArgs) { + + Cursor cursor = null; + final String column = "_data"; + final String[] projection = { + column + }; + + try { + cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); + if (cursor != null && cursor.moveToFirst()) { + final int columnIndex = cursor.getColumnIndexOrThrow(column); + return cursor.getString(columnIndex); + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + return null; + } + + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is ExternalStorageProvider. + */ + public static boolean isExternalStorageDocument(Uri uri) { + return "com.android.externalstorage.documents".equals(uri.getAuthority()); + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is DownloadsProvider. + */ + public static boolean isDownloadsDocument(Uri uri) { + return "com.android.providers.downloads.documents".equals(uri.getAuthority()); + } + + /** + * @param uri The Uri to check. + * @return Whether the Uri authority is MediaProvider. + */ + public static boolean isMediaDocument(Uri uri) { + return "com.android.providers.media.documents".equals(uri.getAuthority()); + } + + public static boolean hasICS() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH; + } + + public static boolean hasKitKat() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; + } + + private static final String IN_PATH = "/rich_editor/pic/"; + + /** + * 随机生产文件名 + * + * @return + */ + private static String generateFileName() { + return "poster" + System.currentTimeMillis(); + } + + public static void clearLocalRichEditorCache() { + File file = new File(Environment.getExternalStorageDirectory().getPath() + FILE_TAG); + deleteDirectory(file); + } + + public static String saveBitmap(Bitmap bmp) { + String parent = Environment.getExternalStorageDirectory().getPath() + FILE_TAG; + File parentF = new File(parent); + File f = new File(parent, generateFileName() + ".png"); + if (!parentF.exists()) { + parentF.mkdirs(); + } + if (f.exists()) { + f.delete(); + } + try { + FileOutputStream out = new FileOutputStream(f); + bmp.compress(Bitmap.CompressFormat.PNG, 90, out); + out.flush(); + out.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return f.getAbsolutePath(); + } + + /** + * 获取视频缩略图 + * + * @param filePath + * @return + */ + public static Bitmap getVideoThumbnail(String filePath) { + Bitmap frameAtTime = null; + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + try { + retriever.setDataSource(filePath); + frameAtTime = retriever.getFrameAtTime(); + return frameAtTime; + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (RuntimeException e) { + e.printStackTrace(); + + } finally { + try { + retriever.release(); + } catch (RuntimeException e) { + e.printStackTrace(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return frameAtTime; + } + + + private static void deleteDirectory(File file) { + if (file == null) { + return; + } + if (file.isFile()) { + file.delete(); + } else { + String[] childFilePaths = file.list(); + if (childFilePaths == null || childFilePaths.length == 0) { + return; + } + for (String childFilePath : childFilePaths) { + File childFile = new File(file.getAbsolutePath() + "/" + childFilePath); + deleteDirectory(childFile); + } + file.delete(); + } + } +} + diff --git a/common/src/main/java/com/yunbao/common/utils/RouteUtil.java b/common/src/main/java/com/yunbao/common/utils/RouteUtil.java index 169e475a0..776d1eee9 100644 --- a/common/src/main/java/com/yunbao/common/utils/RouteUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/RouteUtil.java @@ -50,6 +50,24 @@ public class RouteUtil { public static final String PATH_BattlePassActivity = "/main/BattlePassActivity"; public static final String PATH_SudGameActivity = "/live/SudGameActivity"; public static final String PATH_COMMUNITY_Activity = "/main/MainHomeCommunityActivity"; + public static final String PATH_VIDEO_ACTIVITY = "/activity/VideoPlayActivity"; + public static final String PATH_COMMUNITY = "/common/CommunityDetailsActivity"; + public static final String PATH_USER_HOME = "/common/UserHomeActivity"; + + public static void forwardUserHome(String uid) { + ARouter.getInstance().build(PATH_USER_HOME) + .withString(Constants.TO_UID, uid) + .navigation(); + } + public static void forwardCommunity(String id) { + ARouter.getInstance().build(PATH_COMMUNITY) + .withString(Constants.TO_COMMUNITY_ID, id) + .navigation(); + } + + public static void forwardVideoActivity() { + + } public static final String PATH_ADDRESSBOOK = "/main/MsgAddressBookActivity"; diff --git a/common/src/main/java/com/yunbao/common/utils/StringUtil.java b/common/src/main/java/com/yunbao/common/utils/StringUtil.java index b6bbc577a..c6da9ecb5 100644 --- a/common/src/main/java/com/yunbao/common/utils/StringUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/StringUtil.java @@ -160,4 +160,16 @@ public class StringUtil { } return false; } + + + /** + * 获取随机文件名 + */ + public static String generateFileName() { + return contact("android_", + CommonAppConfig.getInstance().getUid(), + "_", + DateFormatUtil.getVideoCurTimeString(), + String.valueOf(sRandom.nextInt(9999))); + } } diff --git a/common/src/main/res/drawable/bg_live_1.xml b/common/src/main/res/drawable/bg_live_1.xml new file mode 100644 index 000000000..0390654c9 --- /dev/null +++ b/common/src/main/res/drawable/bg_live_1.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/bg_user_home_gift.xml b/common/src/main/res/drawable/bg_user_home_gift.xml new file mode 100644 index 000000000..b679c62c3 --- /dev/null +++ b/common/src/main/res/drawable/bg_user_home_gift.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/bg_user_home_img.xml b/common/src/main/res/drawable/bg_user_home_img.xml new file mode 100644 index 000000000..0d0570172 --- /dev/null +++ b/common/src/main/res/drawable/bg_user_home_img.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/bg_user_stauts.xml b/common/src/main/res/drawable/bg_user_stauts.xml new file mode 100644 index 000000000..3cb749450 --- /dev/null +++ b/common/src/main/res/drawable/bg_user_stauts.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/bg_video_flow_tag.xml b/common/src/main/res/drawable/bg_video_flow_tag.xml new file mode 100644 index 000000000..06bef054a --- /dev/null +++ b/common/src/main/res/drawable/bg_video_flow_tag.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/activity_community_details.xml b/common/src/main/res/layout/activity_community_details.xml index f50601e9b..d8e610de5 100644 --- a/common/src/main/res/layout/activity_community_details.xml +++ b/common/src/main/res/layout/activity_community_details.xml @@ -105,18 +105,19 @@ android:layout_marginTop="15dp" app:ngl_corner_radius="5dp" app:ngl_divider_width="6dp" - app:ngl_space="30dp" /> + app:ngl_space="50dp" /> + android:layout_height="200dp" + android:scaleType="centerCrop" /> + android:visibility="gone"> + app:ngl_space="90dp" /> + android:layout_height="200dp" + android:scaleType="centerCrop" /> - - + android:layout_height="wrap_content"> - + android:layout_height="match_parent"> - - - - - - - - - + android:background="@color/transparent" + android:fadingEdge="none" + app:elevation="0dp" + app:layout_behavior="com.yunbao.common.custom.FixAppBarLayoutBehavior"> + app:layout_scrollFlags="scroll|exitUntilCollapsed"> + + + + + + + + + + + + + + + - - + android:layout_height="match_parent" + android:layout_marginTop="-20dp" + android:background="@drawable/bg_user_home_bottom" + android:orientation="vertical" + android:padding="20dp"> + android:gravity="center_vertical" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -97,654 +495,343 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:text="礼物墙" + android:textColor="#333333" + android:textSize="12dp" + android:textStyle="bold" /> - - - - - - - - - - - - - - - + android:layout_marginTop="5dp" + android:text="0/36" + android:textColor="#777777" + android:textSize="14dp" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + android:layout_height="45dp" /> - - - - - - + android:layout_marginLeft="5dp" /> + android:layout_marginLeft="5dp" /> - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:background="@mipmap/bg_user_home_03" + android:orientation="horizontal" + android:visibility="gone"> - + + + + + + + + + + + + + + + + + + + + android:layout_marginTop="15dp" + android:gravity="center"> - + - + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - - \ No newline at end of file + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/adapter_item_tag.xml b/common/src/main/res/layout/adapter_item_tag.xml index a961ad3e9..716856e6f 100644 --- a/common/src/main/res/layout/adapter_item_tag.xml +++ b/common/src/main/res/layout/adapter_item_tag.xml @@ -6,9 +6,8 @@ + android:textColor="@color/black2" + android:textSize="11dp" /> diff --git a/common/src/main/res/layout/adapter_video_tag.xml b/common/src/main/res/layout/adapter_video_tag.xml new file mode 100644 index 000000000..4824366a6 --- /dev/null +++ b/common/src/main/res/layout/adapter_video_tag.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/common/src/main/res/layout/item_comment_video_view.xml b/common/src/main/res/layout/item_comment_video_view.xml new file mode 100644 index 000000000..7f67d9af7 --- /dev/null +++ b/common/src/main/res/layout/item_comment_video_view.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/item_comment_view.xml b/common/src/main/res/layout/item_comment_view.xml index 4af43e1f3..11e92d34b 100644 --- a/common/src/main/res/layout/item_comment_view.xml +++ b/common/src/main/res/layout/item_comment_view.xml @@ -163,7 +163,7 @@ android:text="删除" android:textColor="#777777" android:textSize="11dp" - android:visibility="visible" /> + android:visibility="gone" /> - @@ -13,6 +12,8 @@ android:id="@+id/avatar01" android:layout_width="42dp" android:layout_height="42dp" + android:layout_centerHorizontal="true" + android:layout_centerVertical="true" android:scaleType="centerCrop" android:src="@mipmap/icon_data_empty" app:riv_corner_radius="15dp" /> @@ -21,8 +22,21 @@ android:id="@+id/avatar02" android:layout_width="60dp" android:layout_height="60dp" + android:layout_centerHorizontal="true" + android:padding="1dp" + android:layout_centerVertical="true" android:scaleType="centerCrop" android:src="@mipmap/icon_data_empty" + android:background="@drawable/bg_user_home_img" android:visibility="gone" app:riv_corner_radius="15dp" /> - \ No newline at end of file + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/view_title2.xml b/common/src/main/res/layout/view_title2.xml index ab973547d..adaaa534f 100644 --- a/common/src/main/res/layout/view_title2.xml +++ b/common/src/main/res/layout/view_title2.xml @@ -57,15 +57,14 @@ { context = ctx; } - public void setSelectedCountries(ArrayList selectedCountries) { this.selectedCountries = selectedCountries; notifyDataSetChanged(); diff --git a/main/src/main/java/com/yunbao/main/activity/MainActivity.java b/main/src/main/java/com/yunbao/main/activity/MainActivity.java index 421f70aba..157553067 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -197,8 +197,6 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene private View floatWarOrder;//战令浮窗 private List startListNotifyList = new ArrayList<>(); - - @Override protected int getLayoutId() { return R.layout.activity_main; @@ -211,13 +209,11 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene getWindow().setSharedElementEnterTransition(new FullAdToBannerTransition(1, 0.4f, new DecelerateInterpolator())); } - @Override protected void onPause() { super.onPause(); OpenAdManager.getInstance().dismiss(); } - @Override protected void main() { ActivityCompat.postponeEnterTransition(this); @@ -936,10 +932,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene for (int j = 0; j < list.size(); j++) { Log.e("--->", list.get(j).getGiftname() + list.get(j).getSwf()); - - Log.e("--->", list.get(j).getGiftname() + list.get(j).getSwf()); - GiftCacheUtil.getFile(MainActivity.this, Constants.GIF_GIFT_PREFIX + list.get(j).getId(), list.get(j).getSwf(), "0", new CommonCallback() { @Override public void callback(File bean) { diff --git a/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java b/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java index 751ae514d..f659dd3f2 100644 --- a/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity.java @@ -569,8 +569,8 @@ public class MyWebViewActivity extends AbsActivity { Constants.firstInto = 0; EventBus.getDefault().post(new MainHomeCommunityToChatEvent().setTargetId(event.getUserId())); } else if (TextUtils.equals(event.getMethod(), "androidPlayVideo")) { - VideoStorge.getInstance().put(Constants.VIDEO_COMMUNITY, event.getVideoBeanList()); - VideoPlayActivity.forward(mContext, event.getPosition(), Constants.VIDEO_COMMUNITY, 1); + /*VideoStorge.getInstance().put(Constants.VIDEO_COMMUNITY, event.getVideoBeanList()); + VideoPlayActivity.forward(mContext, event.getPosition(), Constants.VIDEO_COMMUNITY, 1);*/ } else if (TextUtils.equals(event.getMethod(), "openUpdataName")) { isUpdataUser = event.isUpdataUser(); } else if (TextUtils.equals(event.getMethod(), "openUpdataAutograph")) { diff --git a/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity2.java b/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity2.java index 07b6ddd1c..04dc87b49 100644 --- a/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity2.java +++ b/main/src/main/java/com/yunbao/main/activity/MyWebViewActivity2.java @@ -416,8 +416,8 @@ public class MyWebViewActivity2 extends AbsActivity { Constants.firstInto = 0; SystemMessageActivity.forward(mContext, "-2", event.getUserId(), event.getName(), event.getImage()); } else if (TextUtils.equals(event.getMethod(), "androidPlayVideo")) { - VideoStorge.getInstance().put(Constants.VIDEO_COMMUNITY, event.getVideoBeanList()); - VideoPlayActivity.forward(mContext, event.getPosition(), Constants.VIDEO_COMMUNITY, 1); + /*VideoStorge.getInstance().put(Constants.VIDEO_COMMUNITY, event.getVideoBeanList()); + VideoPlayActivity.forward(mContext, event.getPosition(), Constants.VIDEO_COMMUNITY, 1);*/ } else if (TextUtils.equals(event.getMethod(), "openWebView")) { ZhuangBanActivity.forward(mContext, event.getData(), false); } diff --git a/main/src/main/java/com/yunbao/main/adapter/MainHomeComAdapter.java b/main/src/main/java/com/yunbao/main/adapter/MainHomeComAdapter.java index 31834cdc6..8af71c6fb 100644 --- a/main/src/main/java/com/yunbao/main/adapter/MainHomeComAdapter.java +++ b/main/src/main/java/com/yunbao/main/adapter/MainHomeComAdapter.java @@ -92,7 +92,7 @@ public class MainHomeComAdapter extends RefreshAdapter { } isVideo.setVisibility(View.GONE); } else { - ImgLoader.display(mContext, bean.getUser_avatar(), img); + ImgLoader.display(mContext, bean.getVideo() + "?vframe/jpg/offset/0", img); isVideo.setVisibility(View.VISIBLE); } name.setText(bean.getUser_name()); diff --git a/main/src/main/java/com/yunbao/main/adapter/VideoHomeAdapter.java b/main/src/main/java/com/yunbao/main/adapter/VideoHomeAdapter.java index 89a1f6b09..6c30b041d 100644 --- a/main/src/main/java/com/yunbao/main/adapter/VideoHomeAdapter.java +++ b/main/src/main/java/com/yunbao/main/adapter/VideoHomeAdapter.java @@ -1,8 +1,10 @@ package com.yunbao.main.adapter; import android.content.Context; + import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; + import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; @@ -10,15 +12,15 @@ import android.widget.ImageView; import android.widget.TextView; import com.yunbao.common.adapter.RefreshAdapter; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.glide.ImgLoader; import com.yunbao.main.R; -import com.yunbao.common.bean.VideoBean; /** * Created by cxf on 2018/12/14. */ -public class VideoHomeAdapter extends RefreshAdapter { +public class VideoHomeAdapter extends RefreshAdapter { private View.OnClickListener mOnClickListener; @@ -32,7 +34,7 @@ public class VideoHomeAdapter extends RefreshAdapter { return; } int position = (int) tag; - VideoBean bean = mList.get(position); + ActiveBean bean = mList.get(position); if (bean != null && mOnItemClickListener != null) { mOnItemClickListener.onItemClick(bean, position); } @@ -77,11 +79,10 @@ public class VideoHomeAdapter extends RefreshAdapter { itemView.setOnClickListener(mOnClickListener); } - void setData(VideoBean bean, int position) { + void setData(ActiveBean bean, int position) { itemView.setTag(position); - ImgLoader.display(mContext,bean.getThumb(), mImg); - mNum.setText(bean.getViewNum()); + ImgLoader.display(mContext, bean.getVideo() + "?vframe/jpg/offset/0", mImg); + mNum.setText(bean.getLove_num()); } - } } diff --git a/main/src/main/java/com/yunbao/main/fragment/MainHomeCommunityFragment.java b/main/src/main/java/com/yunbao/main/fragment/MainHomeCommunityFragment.java index 567b843be..55b0b9621 100644 --- a/main/src/main/java/com/yunbao/main/fragment/MainHomeCommunityFragment.java +++ b/main/src/main/java/com/yunbao/main/fragment/MainHomeCommunityFragment.java @@ -364,8 +364,8 @@ public class MainHomeCommunityFragment extends BaseFragment { } }); } else if (TextUtils.equals(event.getMethod(), "androidPlayVideo")) { - VideoStorge.getInstance().put(Constants.VIDEO_COMMUNITY, event.getVideoBeanList()); - VideoPlayActivity.forward(mContext, event.getPosition(), Constants.VIDEO_COMMUNITY, 1); + /*VideoStorge.getInstance().put(Constants.VIDEO_COMMUNITY, event.getVideoBeanList()); + VideoPlayActivity.forward(mContext, event.getPosition(), Constants.VIDEO_COMMUNITY, 1);*/ } else if (TextUtils.equals(event.getMethod(), "androidMethodLookToLive")) { //看直播 gotoLive(event.getLiveId()); diff --git a/main/src/main/java/com/yunbao/main/views/MainHomeComViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainHomeComViewHolder.java index cfe963061..88904235d 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeComViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeComViewHolder.java @@ -6,6 +6,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; +import android.widget.TextView; import com.umeng.analytics.MobclickAgent; import com.yunbao.common.activity.CommunitySendActivity; @@ -26,6 +27,7 @@ public class MainHomeComViewHolder extends AbsMainHomeParentComViewHolder { private MainHomeRecomComViewHolder mainHomeRecomComViewHolder; private MainHomeGameViewHolder mainHomeGameLiveViewHolder; private final String mPageName = "home_page"; + private TextView tvPlay; private ImageView btnSend; private boolean floatWarOrder; @@ -53,6 +55,13 @@ public class MainHomeComViewHolder extends AbsMainHomeParentComViewHolder { mContext.startActivity(intent); } }); + tvPlay = (TextView) findViewById(R.id.tvPlay); + tvPlay.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + RouteUtil.forwardCommunityActivity(); + } + }); } public void setCurPosition(int position) { @@ -138,12 +147,12 @@ public class MainHomeComViewHolder extends AbsMainHomeParentComViewHolder { @Override protected int getPageCount() { - return 4; + return 3; } @Override protected String[] getTitles() { - return new String[]{mContext.getString(R.string.follow), mContext.getString(R.string.hot), mContext.getString(R.string.main_type_find), mContext.getString(R.string.main_type_theater),}; + return new String[]{mContext.getString(R.string.follow), mContext.getString(R.string.hot), mContext.getString(R.string.main_type_find)}; } diff --git a/main/src/main/java/com/yunbao/main/views/MainHomeFollComViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainHomeFollComViewHolder.java index 304a92ba8..1b300ba12 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeFollComViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeFollComViewHolder.java @@ -1,31 +1,25 @@ package com.yunbao.main.views; import android.content.Context; -import android.content.Intent; -import android.os.Parcelable; import android.util.Log; import android.view.ViewGroup; import com.alibaba.fastjson.JSON; -import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; -import com.yunbao.common.activity.CommunityDetailsActivity; import com.yunbao.common.adapter.RefreshAdapter; import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.bean.AnchorRecommendModel; -import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.custom.CommonRefreshWaterfallView; import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.utils.RouteUtil; import com.yunbao.main.R; -import com.yunbao.main.activity.MainActivity; -import com.yunbao.main.activity.WeekWebViewActivity; import com.yunbao.main.adapter.MainHomeComAdapter; -import com.yunbao.main.adapter.MainHomeRemFollComAdapter; import com.yunbao.main.http.MainHttpConsts; import com.yunbao.main.http.MainHttpUtil; +import com.yunbao.video.activity.VideoPlayActivity; +import com.yunbao.video.utils.VideoStorge; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -38,6 +32,8 @@ import java.util.List; public class MainHomeFollComViewHolder extends AbsMainHomeChildViewHolder implements OnItemClickListener { private CommonRefreshWaterfallView mRefreshView; private MainHomeComAdapter mAdapter; + private List videoList = new ArrayList<>(); + private List new_data; public MainHomeFollComViewHolder(Context context, ViewGroup parentView) { super(context, parentView); @@ -96,7 +92,15 @@ public class MainHomeFollComViewHolder extends AbsMainHomeChildViewHolder implem @Override public List processData(String[] info) { - return JSON.parseArray(Arrays.toString(info), ActiveBean.class); + new_data = new ArrayList<>(); + new_data = JSON.parseArray(Arrays.toString(info), ActiveBean.class); + videoList = new ArrayList<>(); + for (int i = 0; i < new_data.size(); i++) { + if (new_data.get(i).getImg_or_video().equals("2")) { + videoList.add(new_data.get(i)); + } + } + return new_data; } @Override @@ -111,7 +115,16 @@ public class MainHomeFollComViewHolder extends AbsMainHomeChildViewHolder implem @Override public void onLoadMoreSuccess(List loadItemList, int loadItemCount) { - mAdapter.insertList(loadItemList); + new_data = new ArrayList<>(); + for (int j = 0; j < loadItemList.size(); j++) { + new_data.add(loadItemList.get(j)); + if (loadItemList.get(j).getImg_or_video().equals("2")) { + videoList.add(loadItemList.get(j)); + } + } + if (loadItemList.size() > 0) { + mAdapter.insertList(new_data); + } } @Override @@ -124,9 +137,18 @@ public class MainHomeFollComViewHolder extends AbsMainHomeChildViewHolder implem @Override public void onItemClick(ActiveBean bean, int position) { - Intent intent = new Intent(mContext, CommunityDetailsActivity.class); - intent.putExtra("active", (Parcelable) bean); - mContext.startActivity(intent); + if (bean.getImg_or_video().equals("1")) { + RouteUtil.forwardCommunity(bean.getId()); + } else { + int playPosition = 0; + for (int i = 0; i < videoList.size(); i++) { + if (videoList.get(i).getId().equals(bean.getId())) { + playPosition = i; + } + } + VideoStorge.getInstance().put(Constants.VIDEO_HOME, videoList); + VideoPlayActivity.forward(mContext, playPosition, Constants.VIDEO_HOME, 1); + } } @Override diff --git a/main/src/main/java/com/yunbao/main/views/MainHomeNewViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainHomeNewViewHolder.java index b8a9bb34b..a5de8c7fe 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeNewViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeNewViewHolder.java @@ -3,9 +3,6 @@ package com.yunbao.main.views; import android.animation.ObjectAnimator; import android.app.Dialog; import android.content.Context; -import android.content.Intent; -import android.os.Parcelable; -import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.ViewGroup; @@ -16,7 +13,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.alibaba.fastjson.JSON; import com.google.gson.Gson; -import com.yunbao.common.activity.CommunityDetailsActivity; +import com.yunbao.common.Constants; import com.yunbao.common.adapter.RefreshAdapter; import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.bean.NewCommunityType; @@ -27,13 +24,14 @@ import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.manager.CommunityTypeManager; import com.yunbao.common.manager.OpenAdManager; import com.yunbao.common.utils.DialogUitl; -import com.yunbao.live.bean.RedPackBean; +import com.yunbao.common.utils.RouteUtil; import com.yunbao.main.R; import com.yunbao.main.adapter.MainHomeComAdapter; import com.yunbao.main.adapter.MainHomeComClassAdapter; import com.yunbao.main.http.MainHttpConsts; import com.yunbao.main.http.MainHttpUtil; -import com.yunbao.video.interfaces.VideoScrollDataHelper; +import com.yunbao.video.activity.VideoPlayActivity; +import com.yunbao.video.utils.VideoStorge; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -65,6 +63,7 @@ public class MainHomeNewViewHolder extends AbsMainHomeChildViewHolder implements private Map gotoRoomKey = new HashMap<>(); private Dialog mShowLoadingDialog; private String typeHot; + private List videoList = new ArrayList<>(); public MainHomeNewViewHolder(Context context, ViewGroup parentView) { super(context, parentView); @@ -92,16 +91,6 @@ public class MainHomeNewViewHolder extends AbsMainHomeChildViewHolder implements @Override public void init() { - CommonHttpUtil.getTag(new HttpCallback() { - @Override - public void onSuccess(int code, String msg, String[] info) { - List list = JSON.parseArray(Arrays.toString(info), NewCommunityType.class); - CommunityTypeManager communityTypeManager = new CommunityTypeManager(mContext); - communityTypeManager.UpCommunityType(Arrays.toString(info)); - initCommunityTypeList(list); - } - }); - List list = new CommunityTypeManager(mContext).getCommunityTypeList(); if (list != null && !list.isEmpty()) { typeHot = list.get(0).getTalk_name(); @@ -111,8 +100,14 @@ public class MainHomeNewViewHolder extends AbsMainHomeChildViewHolder implements @Override public void onSuccess(int code, String msg, String[] info) { List list = JSON.parseArray(Arrays.toString(info), NewCommunityType.class); + NewCommunityType newCommunityType = new NewCommunityType(); + newCommunityType.setId(0); + newCommunityType.setTalk_name(mContext.getString(R.string.recomment)); + list.add(0, newCommunityType); CommunityTypeManager communityTypeManager = new CommunityTypeManager(mContext); - communityTypeManager.UpCommunityType(Arrays.toString(info)); + communityTypeManager.UpCommunityType(new Gson().toJson(list)); + typeHot = list.get(0).getTalk_name(); + select = list.get(0).getId(); initCommunityTypeList(list); } }); @@ -151,8 +146,7 @@ public class MainHomeNewViewHolder extends AbsMainHomeChildViewHolder implements @Override public void loadData(int p, HttpCallback callback) { Log.i("t2", "aaa" + p); - CommonHttpUtil.getCommunityHotList(p, callback); - if (TextUtils.equals(typeHot, "Hot") || TextUtils.equals(typeHot, "hot") || TextUtils.equals(typeHot, "熱門")) { + if (select == 0) { CommonHttpUtil.getCommunityHotList(p, callback); } else { CommonHttpUtil.getTalkHotDynamicList(select, p, callback); @@ -163,6 +157,12 @@ public class MainHomeNewViewHolder extends AbsMainHomeChildViewHolder implements public List processData(String[] info) { new_data = new ArrayList<>(); new_data = JSON.parseArray(Arrays.toString(info), ActiveBean.class); + videoList = new ArrayList<>(); + for (int i = 0; i < new_data.size(); i++) { + if (new_data.get(i).getImg_or_video().equals("2")) { + videoList.add(new_data.get(i)); + } + } return new_data; } @@ -181,6 +181,9 @@ public class MainHomeNewViewHolder extends AbsMainHomeChildViewHolder implements new_data = new ArrayList<>(); for (int j = 0; j < loadItemList.size(); j++) { new_data.add(loadItemList.get(j)); + if (loadItemList.get(j).getImg_or_video().equals("2")) { + videoList.add(loadItemList.get(j)); + } } if (loadItemList.size() > 0) { mAdapter.insertList(new_data); @@ -251,40 +254,20 @@ public class MainHomeNewViewHolder extends AbsMainHomeChildViewHolder implements } } - private VideoScrollDataHelper mVideoScrollDataHelper; - @Override public void onItemClick(ActiveBean bean, int position) { - Intent intent = new Intent(mContext, CommunityDetailsActivity.class); - intent.putExtra("active", (Parcelable) bean); - mContext.startActivity(intent); - - /*if (bean.getImg_or_video().equals("2")) { - if (mVideoScrollDataHelper == null) { - mVideoScrollDataHelper = new VideoScrollDataHelper() { - @Override - public void loadData(int p, HttpCallback callback) { - VideoHttpUtil.getHomeVideoList(p, callback); - } - }; - } - VideoStorge.getInstance().putDataHelper(Constants.VIDEO_HOME, mVideoScrollDataHelper); - VideoPlayActivity.forward(mContext, position, Constants.VIDEO_HOME, 1); - }*/ - /*VideoHttpUtil.getHomeVideoList(1, new HttpCallback() { - @Override - public void onSuccess(int code, String msg, String[] info) { - if (code == 0) { - List tempList = new ArrayList<>(); - for (String s : info) { - VideoBean videoBean = JSONObject.parseObject(s, VideoBean.class); - tempList.add(videoBean); - } - VideoStorge.getInstance().put(Constants.VIDEO_HOME, tempList); - VideoPlayActivity.forward(mContext, position, Constants.VIDEO_HOME, 1); + if (bean.getImg_or_video().equals("1")) { + RouteUtil.forwardCommunity(bean.getId()); + } else { + int playPosition = 0; + for (int i = 0; i < videoList.size(); i++) { + if (videoList.get(i).getId().equals(bean.getId())) { + playPosition = i; } } - });*/ + VideoStorge.getInstance().put(Constants.VIDEO_HOME, videoList); + VideoPlayActivity.forward(mContext, playPosition, Constants.VIDEO_HOME, 1); + } } /** diff --git a/main/src/main/java/com/yunbao/main/views/MainHomeRecomComViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainHomeRecomComViewHolder.java index 47a6d47eb..719af74ee 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeRecomComViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeRecomComViewHolder.java @@ -1,40 +1,31 @@ package com.yunbao.main.views; import android.content.Context; -import android.content.Intent; -import android.os.Parcelable; import android.view.ViewGroup; -import androidx.recyclerview.widget.GridLayoutManager; import com.alibaba.fastjson.JSON; -import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; -import com.yunbao.common.activity.CommunityDetailsActivity; import com.yunbao.common.adapter.RefreshAdapter; import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.bean.AnchorRecommendModel; -import com.yunbao.common.bean.LiveBean; -import com.yunbao.common.custom.CommonRefreshView; import com.yunbao.common.custom.CommonRefreshWaterfallView; -import com.yunbao.common.custom.ItemDecoration; import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.utils.RouteUtil; import com.yunbao.main.R; -import com.yunbao.main.activity.MainActivity; -import com.yunbao.main.activity.WeekWebViewActivity; import com.yunbao.main.adapter.MainHomeComAdapter; -import com.yunbao.main.adapter.MainHomeRemFindComAdapter; -import com.yunbao.main.adapter.MainHomeRemFollLiveAdapter; import com.yunbao.main.http.MainHttpConsts; import com.yunbao.main.http.MainHttpUtil; +import com.yunbao.video.activity.VideoPlayActivity; +import com.yunbao.video.utils.VideoStorge; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -44,6 +35,8 @@ import java.util.List; public class MainHomeRecomComViewHolder extends AbsMainHomeChildViewHolder implements OnItemClickListener { private CommonRefreshWaterfallView mRefreshView; private MainHomeComAdapter mAdapter; + private List videoList = new ArrayList<>(); + private List new_data = new ArrayList<>(); public MainHomeRecomComViewHolder(Context context, ViewGroup parentView) { super(context, parentView); @@ -97,7 +90,15 @@ public class MainHomeRecomComViewHolder extends AbsMainHomeChildViewHolder imple @Override public List processData(String[] info) { if (pp == 1) { - return JSON.parseArray(Arrays.toString(info), ActiveBean.class); + new_data = new ArrayList<>(); + new_data = JSON.parseArray(Arrays.toString(info), ActiveBean.class); + videoList = new ArrayList<>(); + for (int i = 0; i < new_data.size(); i++) { + if (new_data.get(i).getImg_or_video().equals("2")) { + videoList.add(new_data.get(i)); + } + } + return new_data; } else { return null; } @@ -131,9 +132,18 @@ public class MainHomeRecomComViewHolder extends AbsMainHomeChildViewHolder imple @Override public void onItemClick(ActiveBean bean, int position) { - Intent intent = new Intent(mContext, CommunityDetailsActivity.class); - intent.putExtra("active", (Parcelable) bean); - mContext.startActivity(intent); + if (bean.getImg_or_video().equals("1")) { + RouteUtil.forwardCommunity(bean.getId()); + } else { + int playPosition = 0; + for (int i = 0; i < videoList.size(); i++) { + if (videoList.get(i).getId().equals(bean.getId())) { + playPosition = i; + } + } + VideoStorge.getInstance().put(Constants.VIDEO_HOME, videoList); + VideoPlayActivity.forward(mContext, playPosition, Constants.VIDEO_HOME, 1); + } } @Override diff --git a/main/src/main/java/com/yunbao/main/views/MainHomeVideoViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainHomeVideoViewHolder.java index 1da3860f0..1190005a3 100644 --- a/main/src/main/java/com/yunbao/main/views/MainHomeVideoViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainHomeVideoViewHolder.java @@ -83,7 +83,7 @@ public class MainHomeVideoViewHolder extends AbsMainHomeChildViewHolder implemen @Override public void onRefreshSuccess(List list, int listCount) { - VideoStorge.getInstance().put(Constants.VIDEO_HOME, list); + //VideoStorge.getInstance().put(Constants.VIDEO_HOME, list); } @Override diff --git a/main/src/main/java/com/yunbao/main/views/MainMeViewHolder.java b/main/src/main/java/com/yunbao/main/views/MainMeViewHolder.java index d6f6dd28f..eed7c513f 100644 --- a/main/src/main/java/com/yunbao/main/views/MainMeViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/MainMeViewHolder.java @@ -33,6 +33,7 @@ import com.yunbao.common.CommonAppConfig; import com.yunbao.common.CommonAppContext; import com.yunbao.common.Constants; import com.yunbao.common.HtmlConfig; +import com.yunbao.common.activity.UserHomeActivity; import com.yunbao.common.activity.WebViewActivity; import com.yunbao.common.bean.GoogleBean; import com.yunbao.common.bean.UserBean; @@ -134,7 +135,8 @@ public class MainMeViewHolder extends AbsMainViewHolder implements OnItemClickLi @Override public void onViewClicks() { MobclickAgent.onEvent(mContext, "my_avatar", "个人头像按钮"); - RouteUtil.forwardUserHome(mContext, CommonAppConfig.getInstance().getUid(), 2); + RouteUtil.forwardUserHome(CommonAppConfig.getInstance().getUid()); + //RouteUtil.forwardUserHome(mContext, CommonAppConfig.getInstance().getUid(), 2); } }); @@ -145,7 +147,8 @@ public class MainMeViewHolder extends AbsMainViewHolder implements OnItemClickLi @Override public void onViewClicks() { MobclickAgent.onEvent(mContext, "my_avatar", "个人头像按钮"); - RouteUtil.forwardUserHome(mContext, CommonAppConfig.getInstance().getUid(), 2); + RouteUtil.forwardUserHome(CommonAppConfig.getInstance().getUid()); + //RouteUtil.forwardUserHome(mContext, CommonAppConfig.getInstance().getUid(), 2); } }); user_noble_ico = (ImageView) findViewById(R.id.user_noble_ico); diff --git a/main/src/main/java/com/yunbao/main/views/VideoHomeViewHolder.java b/main/src/main/java/com/yunbao/main/views/VideoHomeViewHolder.java index 758cc94ba..e306e0304 100644 --- a/main/src/main/java/com/yunbao/main/views/VideoHomeViewHolder.java +++ b/main/src/main/java/com/yunbao/main/views/VideoHomeViewHolder.java @@ -1,7 +1,9 @@ package com.yunbao.main.views; import android.content.Context; + import androidx.recyclerview.widget.GridLayoutManager; + import android.text.TextUtils; import android.view.ViewGroup; @@ -9,6 +11,7 @@ import com.alibaba.fastjson.JSON; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; import com.yunbao.common.adapter.RefreshAdapter; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.custom.CommonRefreshView; import com.yunbao.common.custom.ItemDecoration; import com.yunbao.common.http.HttpCallback; @@ -37,7 +40,7 @@ import java.util.List; * 用户个人中心发布的视频列表 */ -public class VideoHomeViewHolder extends AbsUserHomeViewHolder implements OnItemClickListener { +public class VideoHomeViewHolder extends AbsUserHomeViewHolder implements OnItemClickListener { private CommonRefreshView mRefreshView; private VideoHomeAdapter mAdapter; @@ -76,9 +79,9 @@ public class VideoHomeViewHolder extends AbsUserHomeViewHolder implements OnItem ItemDecoration decoration = new ItemDecoration(mContext, 0x00000000, 2, 0); decoration.setOnlySetItemOffsetsButNoDraw(true); mRefreshView.setItemDecoration(decoration); - mRefreshView.setDataHelper(new CommonRefreshView.DataHelper() { + mRefreshView.setDataHelper(new CommonRefreshView.DataHelper() { @Override - public RefreshAdapter getAdapter() { + public RefreshAdapter getAdapter() { if (mAdapter == null) { mAdapter = new VideoHomeAdapter(mContext); mAdapter.setOnItemClickListener(VideoHomeViewHolder.this); @@ -92,12 +95,12 @@ public class VideoHomeViewHolder extends AbsUserHomeViewHolder implements OnItem } @Override - public List processData(String[] info) { - return JSON.parseArray(Arrays.toString(info), VideoBean.class); + public List processData(String[] info) { + return JSON.parseArray(Arrays.toString(info), ActiveBean.class); } @Override - public void onRefreshSuccess(List list, int listCount) { + public void onRefreshSuccess(List list, int listCount) { VideoStorge.getInstance().put(mKey, list); } @@ -107,7 +110,7 @@ public class VideoHomeViewHolder extends AbsUserHomeViewHolder implements OnItem } @Override - public void onLoadMoreSuccess(List loadItemList, int loadItemCount) { + public void onLoadMoreSuccess(List loadItemList, int loadItemCount) { } @@ -127,10 +130,9 @@ public class VideoHomeViewHolder extends AbsUserHomeViewHolder implements OnItem EventBus.getDefault().register(VideoHomeViewHolder.this); } - @Override public void loadData() { - if(isFirstLoadData()){ + if (isFirstLoadData()) { mRefreshView.initData(); } } @@ -142,7 +144,6 @@ public class VideoHomeViewHolder extends AbsUserHomeViewHolder implements OnItem EventBus.getDefault().unregister(this); } - @Subscribe(threadMode = ThreadMode.MAIN) public void onVideoScrollPageEvent(VideoScrollPageEvent e) { if (!TextUtils.isEmpty(mKey) && mKey.equals(e.getKey()) && mRefreshView != null) { @@ -164,7 +165,7 @@ public class VideoHomeViewHolder extends AbsUserHomeViewHolder implements OnItem } @Override - public void onItemClick(VideoBean bean, int position) { + public void onItemClick(ActiveBean bean, int position) { int page = 1; if (mRefreshView != null) { page = mRefreshView.getPageCount(); diff --git a/main/src/main/res/layout/item_main_home_com_class.xml b/main/src/main/res/layout/item_main_home_com_class.xml index ba4eef0db..c4f677c53 100644 --- a/main/src/main/res/layout/item_main_home_com_class.xml +++ b/main/src/main/res/layout/item_main_home_com_class.xml @@ -2,21 +2,20 @@ + android:textSize="13sp" /> \ No newline at end of file diff --git a/main/src/main/res/layout/view_homemain.xml b/main/src/main/res/layout/view_homemain.xml index 5e938fc64..89fbd4e24 100644 --- a/main/src/main/res/layout/view_homemain.xml +++ b/main/src/main/res/layout/view_homemain.xml @@ -15,8 +15,10 @@ + android:layout_height="55dp" + android:layout_alignParentBottom="true" + android:background="@color/white" + android:paddingTop="5dp"> + android:layout_height="55dp" + android:layout_centerHorizontal="true" + android:layout_centerVertical="true"> + app:tbn_text_size="11sp" + app:tbn_tip="@string/main_home" /> + app:tbn_text_size="11sp" + app:tbn_tip="@string/live" /> + app:tbn_text_size="11sp" + app:tbn_tip="@string/chat" /> + app:tbn_text_size="11sp" + app:tbn_tip="@string/main_me" /> @@ -139,14 +146,13 @@ - + android:layout_marginBottom="10dp" + android:visibility="gone" /> + android:layout_marginRight="25dp" /> - - + + + @mipmap/icon_dynamic_selected + + @mipmap/icon_live_uncheck + @mipmap/icon_live_selected + + + @mipmap/icon_me_uncheck + @mipmap/icon_me_selected + @@ -22,12 +30,4 @@ - - @mipmap/icon_live_uncheck - @mipmap/icon_live_selected - - - @mipmap/icon_me_uncheck - @mipmap/icon_me_selected - \ No newline at end of file diff --git a/video/src/main/java/com/yunbao/video/activity/AbsVideoCommentActivity.java b/video/src/main/java/com/yunbao/video/activity/AbsVideoCommentActivity.java index 113ec90c1..17eb20f63 100644 --- a/video/src/main/java/com/yunbao/video/activity/AbsVideoCommentActivity.java +++ b/video/src/main/java/com/yunbao/video/activity/AbsVideoCommentActivity.java @@ -1,7 +1,9 @@ package com.yunbao.video.activity; import android.os.Bundle; + import androidx.viewpager.widget.ViewPager; + import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -13,6 +15,7 @@ import com.umeng.analytics.MobclickAgent; import com.yunbao.common.Constants; import com.yunbao.common.activity.AbsActivity; import com.yunbao.common.adapter.ImChatFacePagerAdapter; +import com.yunbao.common.bean.CommentBean; import com.yunbao.common.interfaces.OnFaceClickListener; import com.yunbao.common.utils.ProcessResultUtil; import com.yunbao.video.R; @@ -67,6 +70,44 @@ public abstract class AbsVideoCommentActivity extends AbsActivity implements Vie } + /** + * 打开评论输入框 + */ + public void openCommentInputWindow(boolean openFace, String videoId, String videoUid, CommentBean bean) { + if (mFaceView == null) { + mFaceView = initFaceView(); + } + VideoInputDialogFragment fragment = new VideoInputDialogFragment(); + fragment.setVideoInfo(videoId, videoUid); + Bundle bundle = new Bundle(); + bundle.putBoolean(Constants.VIDEO_FACE_OPEN, openFace); + bundle.putInt(Constants.VIDEO_FACE_HEIGHT, mFaceHeight); + bundle.putParcelable(Constants.VIDEO_COMMENT_BEAN, bean); + fragment.setArguments(bundle); + mVideoInputDialogFragment = fragment; + fragment.show(getSupportFragmentManager(), "VideoInputDialogFragment"); + } + + /** + * 打开评论输入框 + */ + public void openCommentInputWindowNew(boolean openFace, String videoId, String videoUid, boolean isComment,String relpId,int commentCount) { + if (mFaceView == null) { + mFaceView = initFaceView(); + } + VideoInputDialogFragment fragment = new VideoInputDialogFragment(); + fragment.setVideoInfo(videoId, videoUid); + Bundle bundle = new Bundle(); + bundle.putBoolean(Constants.VIDEO_FACE_OPEN, openFace); + bundle.putBoolean(Constants.VIDEO_IS_COMMENT, isComment); + bundle.putString(Constants.VIDEO_REPLY_ID, relpId); + bundle.putInt(Constants.VIDEO_FACE_HEIGHT, mFaceHeight); + fragment.setArguments(bundle); + mVideoInputDialogFragment = fragment; + fragment.show(getSupportFragmentManager(), "VideoInputDialogFragment"); + } + + public View getFaceView() { if (mFaceView == null) { mFaceView = initFaceView(); diff --git a/video/src/main/java/com/yunbao/video/activity/VideoPlayActivity.java b/video/src/main/java/com/yunbao/video/activity/VideoPlayActivity.java index 817990d5f..1601f9cfc 100644 --- a/video/src/main/java/com/yunbao/video/activity/VideoPlayActivity.java +++ b/video/src/main/java/com/yunbao/video/activity/VideoPlayActivity.java @@ -11,6 +11,7 @@ import android.widget.ImageView; import com.binioter.guideview.Guide; import com.binioter.guideview.GuideBuilder; import com.yunbao.common.Constants; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.utils.L; import com.yunbao.common.utils.SpUtil; import com.yunbao.video.R; @@ -39,12 +40,11 @@ public class VideoPlayActivity extends AbsVideoPlayActivity { context.startActivity(intent); } - - public static void forwardSingle(Context context, VideoBean videoBean) { + public static void forwardSingle(Context context, ActiveBean videoBean) { if (videoBean == null) { return; } - List list = new ArrayList<>(); + List list = new ArrayList<>(); list.add(videoBean); VideoStorge.getInstance().put(Constants.VIDEO_SINGLE, list); Intent intent = new Intent(context, VideoPlayActivity.class); diff --git a/video/src/main/java/com/yunbao/video/adapter/VideoScrollAdapter.java b/video/src/main/java/com/yunbao/video/adapter/VideoScrollAdapter.java index 949832707..8740a7917 100644 --- a/video/src/main/java/com/yunbao/video/adapter/VideoScrollAdapter.java +++ b/video/src/main/java/com/yunbao/video/adapter/VideoScrollAdapter.java @@ -13,6 +13,7 @@ import android.util.SparseArray; import android.view.View; import android.view.ViewGroup; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.custom.ItemSlideHelper; import com.yunbao.common.utils.ClickUtil; import com.yunbao.common.utils.ToastUtil; @@ -33,7 +34,7 @@ public class VideoScrollAdapter extends RecyclerView.Adapter mList; + private List mList; private SparseArray mMap; private int mCurPosition; private ActionListener mActionListener; @@ -43,7 +44,7 @@ public class VideoScrollAdapter extends RecyclerView.Adapter list, int curPosition) { + public VideoScrollAdapter(Context context, List list, int curPosition) { mContext = context; mList = list; mCurPosition = curPosition; @@ -213,7 +214,7 @@ public class VideoScrollAdapter extends RecyclerView.Adapter list) { + public void insertList(List list) { // if (list != null && list.size() > 0 && mList != null && mRecyclerView != null) { // int position = mList.size(); // mList.addAll(list); diff --git a/video/src/main/java/com/yunbao/video/dialog/VideoInputDialogFragment.java b/video/src/main/java/com/yunbao/video/dialog/VideoInputDialogFragment.java index 9d62a5786..ce0120558 100644 --- a/video/src/main/java/com/yunbao/video/dialog/VideoInputDialogFragment.java +++ b/video/src/main/java/com/yunbao/video/dialog/VideoInputDialogFragment.java @@ -20,16 +20,16 @@ import android.widget.TextView; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.yunbao.common.Constants; +import com.yunbao.common.bean.CommentBean; import com.yunbao.common.bean.UserBean; import com.yunbao.common.dialog.AbsDialogFragment; import com.yunbao.common.dialog.ChatFaceDialog; +import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.ToastUtil; -import com.yunbao.common.utils.WordUtil; import com.yunbao.video.R; import com.yunbao.video.activity.AbsVideoPlayActivity; -import com.yunbao.video.bean.VideoCommentBean; import com.yunbao.video.event.VideoCommentEvent; import com.yunbao.video.http.VideoHttpConsts; import com.yunbao.video.http.VideoHttpUtil; @@ -47,6 +47,8 @@ public class VideoInputDialogFragment extends AbsDialogFragment implements View. private InputMethodManager imm; private EditText mInput; private boolean mOpenFace; + private boolean isComment; + private String replyCommentId; private int mOriginHeight; private int mFaceHeight; private CheckBox mCheckBox; @@ -54,7 +56,6 @@ public class VideoInputDialogFragment extends AbsDialogFragment implements View. private Handler mHandler; private String mVideoId; private String mVideoUid; - private VideoCommentBean mVideoCommentBean; @Override protected int getLayoutId() { @@ -105,13 +106,8 @@ public class VideoInputDialogFragment extends AbsDialogFragment implements View. if (bundle != null) { mOpenFace = bundle.getBoolean(Constants.VIDEO_FACE_OPEN, false); mFaceHeight = bundle.getInt(Constants.VIDEO_FACE_HEIGHT, 0); - mVideoCommentBean = bundle.getParcelable(Constants.VIDEO_COMMENT_BEAN); - if (mVideoCommentBean != null) { - UserBean replyUserBean = mVideoCommentBean.getUserBean();//要回复的人 - if (replyUserBean != null) { - mInput.setHint(mContext.getString(R.string.video_comment_reply) + replyUserBean.getUserNiceName()); - } - } + isComment = bundle.getBoolean(Constants.VIDEO_IS_COMMENT,false); + replyCommentId = bundle.getString(Constants.VIDEO_REPLY_ID); } if (mOpenFace) { if (mCheckBox != null) { @@ -268,30 +264,15 @@ public class VideoInputDialogFragment extends AbsDialogFragment implements View. ToastUtil.show(mContext.getString(R.string.content_empty)); return; } - String toUid = mVideoUid; - String commentId = "0"; - String parentId = "0"; - if (mVideoCommentBean != null) { - toUid = mVideoCommentBean.getUid(); - commentId = mVideoCommentBean.getCommentId(); - parentId = mVideoCommentBean.getId(); - } - VideoHttpUtil.setComment(toUid, mVideoId, content, commentId, parentId, new HttpCallback() { + CommonHttpUtil.dynamicReply(mVideoId, isComment ? replyCommentId : "0", content, new HttpCallback() { @Override public void onSuccess(int code, String msg, String[] info) { - if (code == 0 && info.length > 0) { - if (mInput != null) { - mInput.setText(""); - } - JSONObject obj = JSON.parseObject(info[0]); - String commentNum = obj.getString("comments"); - EventBus.getDefault().post(new VideoCommentEvent(mVideoId, commentNum)); - ToastUtil.show(msg); - dismiss(); - ((AbsVideoPlayActivity) mContext).hideCommentWindow(true); - } else if (code == 500) { - ToastUtil.show(msg); + if (mInput != null) { + mInput.setText(""); } + ToastUtil.show(msg); + dismiss(); + ((AbsVideoPlayActivity) mContext).hideCommentWindow(true); } }); } diff --git a/video/src/main/java/com/yunbao/video/dialog/VideoShareDialogFragment.java b/video/src/main/java/com/yunbao/video/dialog/VideoShareDialogFragment.java index 2ef5ea9d8..d2f5c875c 100644 --- a/video/src/main/java/com/yunbao/video/dialog/VideoShareDialogFragment.java +++ b/video/src/main/java/com/yunbao/video/dialog/VideoShareDialogFragment.java @@ -9,6 +9,7 @@ import android.view.WindowManager; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.bean.ConfigBean; import com.yunbao.common.dialog.AbsDialogFragment; import com.yunbao.video.R; @@ -23,7 +24,7 @@ public class VideoShareDialogFragment extends AbsDialogFragment { private RecyclerView mRecyclerView; private RecyclerView mRecyclerView2; - private VideoBean mVideoBean; + private ActiveBean mVideoBean; @Override diff --git a/video/src/main/java/com/yunbao/video/utils/VideoStorge.java b/video/src/main/java/com/yunbao/video/utils/VideoStorge.java index 473f45356..48868a19f 100644 --- a/video/src/main/java/com/yunbao/video/utils/VideoStorge.java +++ b/video/src/main/java/com/yunbao/video/utils/VideoStorge.java @@ -1,5 +1,6 @@ package com.yunbao.video.utils; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.bean.VideoBean; import com.yunbao.video.interfaces.VideoScrollDataHelper; @@ -14,7 +15,7 @@ import java.util.Map; public class VideoStorge { private static VideoStorge sInstance; - private Map> mMap; + private Map> mMap; private Map mHelperMap; private VideoStorge() { @@ -33,14 +34,14 @@ public class VideoStorge { return sInstance; } - public void put(String key, List list) { + public void put(String key, List list) { if (mMap != null) { mMap.put(key, list); } } - public List get(String key) { + public List get(String key) { if (mMap != null) { return mMap.get(key); } diff --git a/video/src/main/java/com/yunbao/video/views/VideoCommentViewHolder.java b/video/src/main/java/com/yunbao/video/views/VideoCommentViewHolder.java index d085f55e7..2e6002cba 100644 --- a/video/src/main/java/com/yunbao/video/views/VideoCommentViewHolder.java +++ b/video/src/main/java/com/yunbao/video/views/VideoCommentViewHolder.java @@ -4,29 +4,41 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; +import android.annotation.SuppressLint; import android.content.Context; import android.graphics.drawable.BitmapDrawable; + import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; + import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.inputmethod.InputMethodManager; import android.widget.PopupWindow; import android.widget.TextView; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; +import com.makeramen.roundedimageview.RoundedImageView; +import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; +import com.yunbao.common.adapter.CommentAdapter; +import com.yunbao.common.adapter.CommentVideoAdapter; import com.yunbao.common.adapter.RefreshAdapter; +import com.yunbao.common.bean.CommentBean; import com.yunbao.common.custom.CommonRefreshView; import com.yunbao.common.custom.MyLinearLayout3; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.interfaces.OnItemLongClickListener; import com.yunbao.common.utils.L; -import com.yunbao.common.utils.WordUtil; +import com.yunbao.common.utils.RouteUtil; +import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.views.AbsViewHolder; import com.yunbao.live.activity.LiveReportActivity; import com.yunbao.video.R; @@ -47,13 +59,13 @@ import java.util.List; * 视频评论相关 */ -public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClickListener, OnItemClickListener, OnItemLongClickListener, VideoCommentAdapter.ActionListener { +public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClickListener { private View mRoot; private MyLinearLayout3 mBottom; private CommonRefreshView mRefreshView; private TextView mCommentNum; - private VideoCommentAdapter mVideoCommentAdapter; + private CommentVideoAdapter commentAdapter; private String mVideoId; private String mVideoUid; private String mCommentString; @@ -61,6 +73,8 @@ public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClic private ObjectAnimator mHideAnimator; private boolean mAnimating; private boolean mNeedRefresh;//是否需要刷新 + private boolean isComment = false; + private RoundedImageView avatar; public VideoCommentViewHolder(Context context, ViewGroup parentView) { super(context, parentView); @@ -74,6 +88,8 @@ public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClic @Override public void init() { mRoot = findViewById(R.id.root); + avatar = (RoundedImageView) findViewById(R.id.avatar); + ImgLoader.display(mContext, CommonAppConfig.getInstance().getUserBean().getAvatar(), avatar); mBottom = (MyLinearLayout3) findViewById(R.id.bottom); int height = mBottom.getHeight2(); mBottom.setTranslationY(height); @@ -114,10 +130,11 @@ public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClic findViewById(R.id.btn_close).setOnClickListener(this); findViewById(R.id.input).setOnClickListener(this); findViewById(R.id.btn_face).setOnClickListener(this); - mCommentString =mContext.getString(R.string.video_comment); + mCommentString = mContext.getString(R.string.video_comment); mCommentNum = (TextView) findViewById(R.id.comment_num); mRefreshView = (CommonRefreshView) findViewById(R.id.refreshView); mRefreshView.setEmptyLayoutId(R.layout.view_no_data_comment); + mRefreshView.setLoadMoreEnable(false); mRefreshView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false) { @Override public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { @@ -129,35 +146,80 @@ public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClic } }); - mRefreshView.setDataHelper(new CommonRefreshView.DataHelper() { + mRefreshView.setDataHelper(new CommonRefreshView.DataHelper() { @Override - public RefreshAdapter getAdapter() { - if (mVideoCommentAdapter == null) { - mVideoCommentAdapter = new VideoCommentAdapter(mContext); - mVideoCommentAdapter.setOnItemClickListener(VideoCommentViewHolder.this); - mVideoCommentAdapter.setOnItemLongClickListener(VideoCommentViewHolder.this); - mVideoCommentAdapter.setActionListener(VideoCommentViewHolder.this); + public RefreshAdapter getAdapter() { + if (commentAdapter == null) { + commentAdapter = new CommentVideoAdapter(mContext, mVideoUid, new CommentVideoAdapter.onItemClickListener() { + @Override + public void onReply(CommentBean activeBean) { + isComment = true; + if (!TextUtils.isEmpty(mVideoId) && !TextUtils.isEmpty(mVideoUid)) { + ((AbsVideoCommentActivity) mContext).openCommentInputWindowNew(false, mVideoId, mVideoUid, isComment, activeBean.getId(), commentAdapter.getItemCount()); + } + } + + @Override + public void onReport(CommentBean activeBean) { + //一级回复 举报 + RouteUtil.forwardCommentReportActivity(activeBean.getId(), activeBean.getId()); + } + + @Override + public void onReport(CommentBean.ReplyComment activeBean) { + //二级回复 举报 + RouteUtil.forwardCommentReportActivity(activeBean.getId(), activeBean.getId()); + } + + @Override + public void onDel(CommentBean activeBean) { + //一级回复 删除 + CommonHttpUtil.delCom(activeBean.getId(), new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0) { + ToastUtil.show(msg); + mRefreshView.initData(); + } + } + }); + } + + @Override + public void onDel(CommentBean.ReplyComment activeBean) { + //二级回复 删除 + CommonHttpUtil.delCom(activeBean.getId(), new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0) { + ToastUtil.show(msg); + mRefreshView.initData(); + } + } + }); + } + }); } - return mVideoCommentAdapter; + return commentAdapter; } @Override public void loadData(int p, HttpCallback callback) { if (!TextUtils.isEmpty(mVideoId)) { - VideoHttpUtil.getVideoCommentList(mVideoId, p, callback); + CommonHttpUtil.getCommunityComment(mVideoId, mVideoUid, p, callback); } } + @SuppressLint("SetTextI18n") @Override - public List processData(String[] info) { - JSONObject obj = JSON.parseObject(info[0]); - String commentNum = obj.getString("comments"); + public List processData(String[] info) { + List list = JSON.parseArray(Arrays.toString(info), CommentBean.class); + String commentNum = String.valueOf(list.size()); EventBus.getDefault().post(new VideoCommentEvent(mVideoId, commentNum)); if (mCommentNum != null) { mCommentNum.setText(mCommentString + " " + commentNum); } - List list = JSON.parseArray(obj.getString("commentlist"), VideoCommentBean.class); - for (VideoCommentBean bean : list) { + for (CommentBean bean : list) { if (bean != null) { bean.setParentNode(true); } @@ -166,7 +228,7 @@ public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClic } @Override - public void onRefreshSuccess(List list, int listCount) { + public void onRefreshSuccess(List list, int listCount) { } @@ -176,7 +238,7 @@ public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClic } @Override - public void onLoadMoreSuccess(List loadItemList, int loadItemCount) { + public void onLoadMoreSuccess(List loadItemList, int loadItemCount) { } @@ -190,8 +252,8 @@ public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClic public void setVideoInfo(String videoId, String videoUid) { if (!TextUtils.isEmpty(videoId) && !TextUtils.isEmpty(videoUid)) { if (!TextUtils.isEmpty(mVideoId) && !mVideoId.equals(videoId)) { - if (mVideoCommentAdapter != null) { - mVideoCommentAdapter.clearData(); + if (commentAdapter != null) { + commentAdapter.clearData(); } } if (!videoId.equals(mVideoId)) { @@ -235,11 +297,11 @@ public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClic hideBottom(); } else if (i == R.id.input) { if (!TextUtils.isEmpty(mVideoId) && !TextUtils.isEmpty(mVideoUid)) { - ((AbsVideoCommentActivity) mContext).openCommentInputWindow(false, mVideoId, mVideoUid, null); + ((AbsVideoCommentActivity) mContext).openCommentInputWindowNew(false, mVideoId, mVideoUid, false, "", commentAdapter.getItemCount()); } } else if (i == R.id.btn_face) { if (!TextUtils.isEmpty(mVideoId) && !TextUtils.isEmpty(mVideoUid)) { - ((AbsVideoCommentActivity) mContext).openCommentInputWindow(true, mVideoId, mVideoUid, null); + ((AbsVideoCommentActivity) mContext).openCommentInputWindowNew(true, mVideoId, mVideoUid, false, "", commentAdapter.getItemCount()); } } } @@ -259,77 +321,8 @@ public class VideoCommentViewHolder extends AbsViewHolder implements View.OnClic VideoHttpUtil.cancel(VideoHttpConsts.GET_COMMENT_REPLY); } - @Override - public void onItemClick(VideoCommentBean bean, int position) { - if (position != -1) { - if (!TextUtils.isEmpty(mVideoId) && !TextUtils.isEmpty(mVideoUid)) { - ((AbsVideoCommentActivity) mContext).openCommentInputWindow(false, mVideoId, mVideoUid, bean); - } - } - } - - @Override - public void onItemLongClick(VideoCommentBean bean, int position, View view) { - if (position == -1) { - showMoreDialog(bean, view); - } - } - - @Override - public void onExpandClicked(final VideoCommentBean commentBean) { - final VideoCommentBean parentNodeBean = commentBean.getParentNodeBean(); - if (parentNodeBean == null) { - return; - } - VideoHttpUtil.getCommentReply(parentNodeBean.getId(), parentNodeBean.getChildPage(), new HttpCallback() { - @Override - public void onSuccess(int code, String msg, String[] info) { - if (code == 0) { - List list = JSON.parseArray(Arrays.toString(info), VideoCommentBean.class); - if (list == null || list.size() == 0) { - return; - } - if (parentNodeBean.getChildPage() == 1) { - if (list.size() > 1) { - list = list.subList(1, list.size()); - } - } - for (VideoCommentBean bean : list) { - bean.setParentNodeBean(parentNodeBean); - } - List childList = parentNodeBean.getChildList(); - if (childList != null) { - childList.addAll(list); - if (childList.size() < parentNodeBean.getReplyNum()) { - parentNodeBean.setChildPage(parentNodeBean.getChildPage() + 1); - } - if (mVideoCommentAdapter != null) { - mVideoCommentAdapter.insertReplyList(commentBean, list.size()); - } - } - } - } - }); - } - - @Override - public void onCollapsedClicked(VideoCommentBean commentBean) { - VideoCommentBean parentNodeBean = commentBean.getParentNodeBean(); - if (parentNodeBean == null) { - return; - } - List childList = parentNodeBean.getChildList(); - VideoCommentBean node0 = childList.get(0); - int orignSize = childList.size(); - parentNodeBean.removeChild(); - parentNodeBean.setChildPage(1); - if (mVideoCommentAdapter != null) { - mVideoCommentAdapter.removeReplyList(node0, orignSize - childList.size()); - } - } - //view当前点击的控件,手指长按任意位置弹窗 - private void showMoreDialog(final VideoCommentBean bean, View view) { + private void showMoreDialog(final CommentBean bean, View view) { View pop_layout = LayoutInflater.from(mContext).inflate(R.layout.popwindow_video_report, null); final PopupWindow mPopupWindow = new PopupWindow(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); mPopupWindow.setContentView(pop_layout); diff --git a/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java b/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java index d25d51daf..a7b207c0b 100644 --- a/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java +++ b/video/src/main/java/com/yunbao/video/views/VideoPlayViewHolder.java @@ -15,6 +15,7 @@ import com.tencent.rtmp.TXLiveConstants; import com.tencent.rtmp.TXVodPlayConfig; import com.tencent.rtmp.TXVodPlayer; import com.tencent.rtmp.ui.TXCloudVideoView; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.utils.L; import com.yunbao.common.views.AbsViewHolder; import com.yunbao.video.R; @@ -39,7 +40,7 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList private ObjectAnimator mPlayBtnAnimator;//暂停按钮的动画 private boolean mStartPlay; private boolean mEndPlay; - private VideoBean mVideoBean; + private ActiveBean mVideoBean; private String mCachePath; private TXVodPlayConfig mTXVodPlayConfig; @@ -97,7 +98,7 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList if (!mEndPlay) { mEndPlay = true; if (mVideoBean != null) { - VideoHttpUtil.videoWatchEnd(mVideoBean.getUid(), mVideoBean.getId()); + VideoHttpUtil.videoWatchEnd(mVideoBean.getUser_id(), mVideoBean.getId()); } } break; @@ -152,7 +153,7 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList /** * 开始播放 */ - public void startPlay(VideoBean videoBean) { + public void startPlay(ActiveBean videoBean) { mStartPlay = false; mClickPaused = false; mEndPlay = false; @@ -165,7 +166,7 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList if (videoBean == null) { return; } - String url = videoBean.getHref(); + String url = videoBean.getVideo(); if (TextUtils.isEmpty(url)) { return; } @@ -183,7 +184,7 @@ public class VideoPlayViewHolder extends AbsViewHolder implements ITXVodPlayList if (mPlayer != null) { mPlayer.startPlay(url); } - VideoHttpUtil.videoWatchStart(videoBean.getUid(), videoBean.getId()); + VideoHttpUtil.videoWatchStart(videoBean.getUser_id(), videoBean.getId()); } /** diff --git a/video/src/main/java/com/yunbao/video/views/VideoPlayWrapViewHolder.java b/video/src/main/java/com/yunbao/video/views/VideoPlayWrapViewHolder.java index fbc8a5b43..55454d23d 100644 --- a/video/src/main/java/com/yunbao/video/views/VideoPlayWrapViewHolder.java +++ b/video/src/main/java/com/yunbao/video/views/VideoPlayWrapViewHolder.java @@ -19,28 +19,31 @@ import android.widget.SeekBar; import android.widget.TextView; import com.alibaba.android.arouter.utils.TextUtils; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.xuexiang.xui.widget.flowlayout.FlowTagLayout; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; -import com.yunbao.common.bean.UserBean; +import com.yunbao.common.adapter.LabelVideoTagAdapter; +import com.yunbao.common.bean.ActiveBean; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.utils.RouteUtil; +import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.views.AbsViewHolder; -import com.yunbao.live.activity.LiveReportActivity; import com.yunbao.video.R; import com.yunbao.video.activity.AbsVideoPlayActivity; -import com.yunbao.common.bean.VideoBean; import com.yunbao.video.dialog.VideoShareDialogFragment; import com.yunbao.video.event.VideoLikeEvent; import com.yunbao.video.http.VideoHttpUtil; import org.greenrobot.eventbus.EventBus; +import java.util.ArrayList; +import java.util.List; + /** * Created by cxf on 2018/11/26. * 视频播放外框 @@ -58,7 +61,7 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli private TextView mCommentNum;//评论数 private TextView mShareNum;//分享数 private ImageView mBtnFollow;//关注按钮 - private VideoBean mVideoBean; + private ActiveBean mVideoBean; private Drawable mFollowDrawable = null;//已关注 private Drawable mUnFollowDrawable;//未关注 private Animation mFollowAnimation; @@ -71,6 +74,8 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli private LinearLayout progressTextLayout; private TextView progressTextView; private TextView progressCount; + private FlowTagLayout myFlowTag; //我的标签 + private LabelVideoTagAdapter myAdapter; public VideoPlayWrapViewHolder(Context context, ViewGroup parentView) { super(context, parentView); @@ -84,7 +89,7 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli @Override public void init() { mTag = this.toString(); - + myFlowTag = (FlowTagLayout) findViewById(R.id.myFlowTag); seekbar = (SeekBar) findViewById(R.id.seekbar); progressTextLayout = (LinearLayout) findViewById(R.id.progressTextLayout); progressTextView = (TextView) findViewById(R.id.progress); @@ -176,7 +181,7 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli @Override public void onAnimationRepeat(Animation animation) { if (mBtnFollow != null && mVideoBean != null) { - if (mVideoBean.getAttent() == 1) { + if (mVideoBean.getIs_attention().equals("1")) { mBtnFollow.setImageDrawable(mFollowDrawable); } else { mBtnFollow.setImageDrawable(mUnFollowDrawable); @@ -190,51 +195,50 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli mLikeAnimDrawables = drawables; } - public void setData(VideoBean bean, Object payload) { + public void setData(ActiveBean bean, Object payload) { if (bean == null) { return; } mVideoBean = bean; - UserBean u = mVideoBean.getUserBean(); if (payload == null) { if (mCover != null) { setCoverImage(); } if (mTitle != null) { - mTitle.setText(bean.getTitle()); + mTitle.setText(String.valueOf(JSONObject.parseObject(bean.getContent()).get("msg"))); } - if (u != null) { + if (mVideoBean != null) { if (mAvatar != null) { - ImgLoader.displayAvatar(mContext, u.getAvatar(), mAvatar); + ImgLoader.displayAvatar(mContext, mVideoBean.getUser_avatar(), mAvatar); } if (mName != null) { - mName.setText("@" + u.getUserNiceName()); + mName.setText("@" + mVideoBean.getUser_name()); } } } if (mBtnLike != null) { - if (bean.getLike() == 1) { + if (bean.getIs_love().equals("1")) { mBtnLike.setImageResource(R.mipmap.icon_video_zan_new02); } else { mBtnLike.setImageResource(R.mipmap.icon_video_zan_new01); } } if (mLikeNum != null) { - mLikeNum.setText(bean.getLikeNum()); + mLikeNum.setText(String.valueOf(bean.getLove_num())); } if (mCommentNum != null) { - mCommentNum.setText(bean.getCommentNum()); + mCommentNum.setText(String.valueOf(bean.getComment_num())); } if (mShareNum != null) { - mShareNum.setText(bean.getShareNum()); + mShareNum.setText(String.valueOf(bean.getShare_num())); } - if (u != null && mBtnFollow != null) { - String toUid = u.getId(); + if (mVideoBean != null && mBtnFollow != null) { + String toUid = mVideoBean.getUser_id(); if (!TextUtils.isEmpty(toUid) && !toUid.equals(CommonAppConfig.getInstance().getUid())) { if (mBtnFollow.getVisibility() != View.VISIBLE) { mBtnFollow.setVisibility(View.VISIBLE); } - if (bean.getAttent() == 1) { + if (bean.getIs_attention().equals("1")) { mBtnFollow.setImageDrawable(mFollowDrawable); } else { mBtnFollow.setImageDrawable(mUnFollowDrawable); @@ -245,10 +249,10 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli } } } - if (!Constants.myUid.endsWith(bean.getUid())) { - if (bean.getAttent() == 2) { + if (!Constants.myUid.endsWith(bean.getUser_id())) { + if (bean.getIs_attention().equals("2")) { mBtnFollow.setVisibility(View.VISIBLE); - if (bean.getAttent() == 1) { + if (bean.getIs_attention().equals("1")) { mBtnFollow.setImageDrawable(mFollowDrawable); } else { mBtnFollow.setImageDrawable(mUnFollowDrawable); @@ -259,10 +263,18 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli } else { mBtnFollow.setVisibility(View.GONE); } + if (!StringUtil.isEmpty(bean.getTalk_name())) { + List tagList = new ArrayList<>(); + tagList.add("#" + bean.getTalk_name()); + myAdapter = new LabelVideoTagAdapter(mContext); + myFlowTag.setAdapter(myAdapter); + myFlowTag.setTagCheckedMode(FlowTagLayout.FLOW_TAG_CHECKED_NONE); + myAdapter.setData(tagList); + } } private void setCoverImage() { - ImgLoader.displayDrawable(mContext, mVideoBean.getThumb(), new ImgLoader.DrawableCallback() { + ImgLoader.displayDrawable(mContext, mVideoBean.getVideo() + "?vframe/jpg/offset/0", new ImgLoader.DrawableCallback() { @Override public void onLoadSuccess(Drawable drawable) { if (mCover != null && drawable != null) { @@ -305,7 +317,7 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli } } - public VideoBean getVideoBean() { + public ActiveBean getVideoBean() { return mVideoBean; } @@ -376,7 +388,10 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli clickLike(); } else if (i == R.id.avatar2) { clickAvatar(); - } /*else if (i == R.id.tv_video_report) { + } else if (i == R.id.avatar) { + + } + /*else if (i == R.id.tv_video_report) { if (mVideoBean == null) { return; } @@ -390,7 +405,7 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli */ public void clickAvatar() { if (mVideoBean != null) { - RouteUtil.forwardUserHome(mContext, mVideoBean.getUid(), 2); + RouteUtil.forwardUserHome(mVideoBean.getUser_id()); } } @@ -401,27 +416,25 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli if (mVideoBean == null) { return; } - VideoHttpUtil.setVideoLike(mTag, mVideoBean.getId(), new HttpCallback() { + CommonHttpUtil.dynamicLove(mVideoBean.getId(), new HttpCallback() { @Override public void onSuccess(int code, String msg, String[] info) { - if (code == 0 && info.length > 0) { - JSONObject obj = JSON.parseObject(info[0]); - String likeNum = obj.getString("likes"); - int like = obj.getIntValue("islike"); - if (mVideoBean != null) { - mVideoBean.setLikeNum(likeNum); - mVideoBean.setLike(like); - EventBus.getDefault().post(new VideoLikeEvent(mVideoBean.getId(), like, likeNum)); + if (code == 0) { + ToastUtil.show(msg); + if (mVideoBean.getIs_love().equals("1")) { + int loveNum = Integer.parseInt(mVideoBean.getLove_num()); + mVideoBean.setIs_love(String.valueOf(loveNum - 1)); + } else { + int loveNum = Integer.parseInt(mVideoBean.getLove_num()); + mVideoBean.setIs_love(String.valueOf(loveNum + 1)); } - if (mLikeNum != null) { - mLikeNum.setText(likeNum); - } - if (mBtnLike != null) { - if (like == 1) { - mBtnLike.setImageResource(R.mipmap.icon_video_zan_new02); - } else { - mBtnLike.setImageResource(R.mipmap.icon_video_zan_new01); - } + String isLike = mVideoBean.getIs_love().equals("1") ? "0" : "1"; + mVideoBean.setIs_love(isLike); + EventBus.getDefault().post(new VideoLikeEvent(mVideoBean.getId(), Integer.parseInt(mVideoBean.getLove_num()), mVideoBean.getLove_num())); + if (mVideoBean.getIs_love().equals("1")) { + mBtnLike.setImageResource(R.mipmap.icon_video_zan_new02); + } else { + mBtnLike.setImageResource(R.mipmap.icon_video_zan_new01); } } else { ToastUtil.show(msg); @@ -437,14 +450,10 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli if (mVideoBean == null) { return; } - final UserBean u = mVideoBean.getUserBean(); - if (u == null) { - return; - } - CommonHttpUtil.setAttention(mTag, u.getId(), new CommonCallback() { + CommonHttpUtil.setAttention(mTag, mVideoBean.getUser_id(), new CommonCallback() { @Override public void callback(Integer attent) { - mVideoBean.setAttent(attent); + mVideoBean.setIs_attention(String.valueOf(attent)); if (attent == 1) { mBtnFollow.setImageDrawable(mFollowDrawable); } else { @@ -470,7 +479,7 @@ public class VideoPlayWrapViewHolder extends AbsViewHolder implements View.OnCli * 点击评论按钮 */ private void clickComment() { - ((AbsVideoPlayActivity) mContext).openCommentWindow(mVideoBean.getId(), mVideoBean.getUid()); + ((AbsVideoPlayActivity) mContext).openCommentWindow(mVideoBean.getId(), mVideoBean.getUser_id()); } /** diff --git a/video/src/main/java/com/yunbao/video/views/VideoScrollViewHolder.java b/video/src/main/java/com/yunbao/video/views/VideoScrollViewHolder.java index 6025aed8f..b697cf3ff 100644 --- a/video/src/main/java/com/yunbao/video/views/VideoScrollViewHolder.java +++ b/video/src/main/java/com/yunbao/video/views/VideoScrollViewHolder.java @@ -10,12 +10,15 @@ import android.view.View; import android.view.ViewGroup; import com.umeng.analytics.MobclickAgent; +import com.yunbao.common.bean.ActiveBean; +import com.yunbao.common.bean.CommentBean; import com.yunbao.common.event.FollowEvent; import com.yunbao.common.views.AbsViewHolder; import com.yunbao.video.R; import com.yunbao.video.activity.AbsVideoPlayActivity; import com.yunbao.video.adapter.VideoScrollAdapter; import com.yunbao.common.bean.VideoBean; +import com.yunbao.video.bean.VideoCommentBean; import com.yunbao.video.custom.VideoLoadingBar; import com.yunbao.video.event.VideoCommentEvent; import com.yunbao.video.event.VideoLikeEvent; @@ -51,7 +54,7 @@ public class VideoScrollViewHolder extends AbsViewHolder implements VideoScrollA // private HttpCallback mRefreshCallback;//下拉刷新回调 // private HttpCallback mLoadMoreCallback;//上拉加载更多回调 private VideoScrollDataHelper mVideoDataHelper; - private VideoBean mVideoBean; + private ActiveBean mVideoBean; private boolean mPaused;//生命周期暂停 public VideoScrollViewHolder(Context context, ViewGroup parentView, int position, String videoKey, int page) { @@ -72,7 +75,7 @@ public class VideoScrollViewHolder extends AbsViewHolder implements VideoScrollA @Override public void init() { - List list = VideoStorge.getInstance().get(mVideoKey); + List list = VideoStorge.getInstance().get(mVideoKey); if (list == null || list.size() == 0) { return; } @@ -143,7 +146,7 @@ public class VideoScrollViewHolder extends AbsViewHolder implements VideoScrollA public void onPageSelected(VideoPlayWrapViewHolder videoPlayWrapViewHolder, boolean needLoadMore) { if (videoPlayWrapViewHolder != null) { MobclickAgent.onEvent(mContext, "community_video_slide", "社区视频上下滑动"); - VideoBean videoBean = videoPlayWrapViewHolder.getVideoBean(); + ActiveBean videoBean = videoPlayWrapViewHolder.getVideoBean(); if (videoBean != null) { mVideoBean = videoBean; mVideoPlayWrapViewHolder = videoPlayWrapViewHolder; @@ -252,7 +255,7 @@ public class VideoScrollViewHolder extends AbsViewHolder implements VideoScrollA @Subscribe(threadMode = ThreadMode.MAIN) public void onFollowEvent(FollowEvent e) { if (mVideoScrollAdapter != null && mVideoPlayWrapViewHolder != null) { - VideoBean videoBean = mVideoPlayWrapViewHolder.getVideoBean(); + ActiveBean videoBean = mVideoPlayWrapViewHolder.getVideoBean(); if (videoBean != null) { mVideoScrollAdapter.onFollowChanged(!mPaused, videoBean.getId(), e.getToUid(), e.getIsAttention()); } @@ -315,7 +318,7 @@ public class VideoScrollViewHolder extends AbsViewHolder implements VideoScrollA */ private void openCommentInputWindow(boolean openFace) { if (mVideoBean != null) { - ((AbsVideoPlayActivity) mContext).openCommentInputWindow(openFace, mVideoBean.getId(), mVideoBean.getUid(), null); + ((AbsVideoPlayActivity) mContext).openCommentInputWindowNew(openFace, mVideoBean.getId(), mVideoBean.getUser_id(), false,"",Integer.parseInt(mVideoBean.getComment_num())); } } diff --git a/video/src/main/res/layout/view_video_comment.xml b/video/src/main/res/layout/view_video_comment.xml index 6a3e38977..c9576d952 100644 --- a/video/src/main/res/layout/view_video_comment.xml +++ b/video/src/main/res/layout/view_video_comment.xml @@ -19,7 +19,8 @@ android:layout_height="36dp" android:gravity="center_vertical" android:paddingLeft="15dp" - android:paddingRight="5dp"> + android:paddingRight="5dp" + android:visibility="gone"> + app:tint="@color/gray1" /> @@ -54,6 +55,13 @@ android:gravity="center_vertical" android:orientation="horizontal"> + + + app:tint="@color/gray1" /> \ No newline at end of file diff --git a/video/src/main/res/layout/view_video_play_wrap.xml b/video/src/main/res/layout/view_video_play_wrap.xml index fc485b867..81b567a0b 100644 --- a/video/src/main/res/layout/view_video_play_wrap.xml +++ b/video/src/main/res/layout/view_video_play_wrap.xml @@ -17,27 +17,13 @@ android:layout_centerInParent="true" android:scaleType="centerCrop" /> - - - - - @@ -164,6 +150,12 @@ android:textSize="16sp" android:visibility="visible" /> + + @@ -203,7 +195,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" - android:min="0" /> + android:min="0" + android:visibility="gone" />