From dcf3f5c308be09e73f80a812728195fb596453fa Mon Sep 17 00:00:00 2001 From: hch <16607480311@163.com> Date: Wed, 3 Jan 2024 18:28:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E9=80=81=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/build.gradle | 2 + .../com/yunbao/common/utils/DialogUitl.java | 80 +++++---- .../com/yunbao/common/utils/RouteUtil.java | 12 ++ .../main/res/layout/dialog_del_sys_msg.xml | 55 ++++++ .../res/mipmap-mdpi/icon_del_sys_cancel.png | Bin 0 -> 31900 bytes .../res/mipmap-mdpi/icon_del_sys_confirm.png | Bin 0 -> 19818 bytes common/src/main/res/values-en-rUS/string.xml | 3 + common/src/main/res/values-zh-rHK/strings.xml | 4 + common/src/main/res/values-zh-rTW/strings.xml | 4 + common/src/main/res/values-zh/strings.xml | 3 + common/src/main/res/values/strings.xml | 4 + config.gradle | 2 +- live/src/main/AndroidManifest.xml | 4 + .../live/activity/CompensateActivity.java | 120 +++++++++++++ .../live/adapter/MsgSysGiftAdapter.java | 101 +++++++++++ .../live/adapter/SystemMessageNewAdapter.java | 50 ++++-- .../yunbao/live/bean/MsgSysGiftInfoBean.java | 40 +++++ .../yunbao/live/bean/SystemMessageBean.java | 21 +++ .../com/yunbao/live/http/ImHttpConsts.java | 2 + .../java/com/yunbao/live/http/ImHttpUtil.java | 10 ++ .../yunbao/live/views/CustomMyViewHolder.java | 1 - .../live/views/SystemMessageViewHolder.java | 168 +++++++++--------- .../main/res/layout/activity_compensate.xml | 111 ++++++++++++ .../src/main/res/layout/item_msg_sys_gift.xml | 37 ++++ live/src/main/res/layout/item_sys_msg_new.xml | 1 + .../main/res/mipmap-mdpi/icon_sys_receive.png | Bin 0 -> 20054 bytes .../res/mipmap-mdpi/icon_sys_received.png | Bin 0 -> 15584 bytes 27 files changed, 693 insertions(+), 142 deletions(-) create mode 100644 common/src/main/res/layout/dialog_del_sys_msg.xml create mode 100644 common/src/main/res/mipmap-mdpi/icon_del_sys_cancel.png create mode 100644 common/src/main/res/mipmap-mdpi/icon_del_sys_confirm.png create mode 100644 live/src/main/java/com/yunbao/live/activity/CompensateActivity.java create mode 100644 live/src/main/java/com/yunbao/live/adapter/MsgSysGiftAdapter.java create mode 100644 live/src/main/java/com/yunbao/live/bean/MsgSysGiftInfoBean.java create mode 100644 live/src/main/res/layout/activity_compensate.xml create mode 100644 live/src/main/res/layout/item_msg_sys_gift.xml create mode 100644 live/src/main/res/mipmap-mdpi/icon_sys_receive.png create mode 100644 live/src/main/res/mipmap-mdpi/icon_sys_received.png diff --git a/common/build.gradle b/common/build.gradle index d436ac07d..73f54e530 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -209,6 +209,8 @@ dependencies { // 多语言语音识别扩展库(可选) api 'tech.sud.mgp:SudASR:1.3.3.1158' + //侧滑删除 + api 'com.yanzhenjie.recyclerview:x:1.3.2' //华为支付插件包 //api project(':lib_huawei') diff --git a/common/src/main/java/com/yunbao/common/utils/DialogUitl.java b/common/src/main/java/com/yunbao/common/utils/DialogUitl.java index 347023335..a297704d7 100644 --- a/common/src/main/java/com/yunbao/common/utils/DialogUitl.java +++ b/common/src/main/java/com/yunbao/common/utils/DialogUitl.java @@ -69,7 +69,8 @@ public class DialogUitl { } return dialog; } - public static void showToast(Context context,String content,long delayMillis){ + + public static void showToast(Context context, String content, long delayMillis) { Dialog dialog = new Dialog(context, R.style.dialog); dialog.setContentView(R.layout.dialog_toast); dialog.setCancelable(false); @@ -82,7 +83,7 @@ public class DialogUitl { } } dialog.show(); - new Handler(Looper.getMainLooper()).postDelayed(dialog::dismiss,delayMillis); + new Handler(Looper.getMainLooper()).postDelayed(dialog::dismiss, delayMillis); } @@ -121,6 +122,38 @@ public class DialogUitl { dialog.show(); } + + public static void showDelSysMsg(Context context, String content, SimpleCallback simpleCallback) { + if (context instanceof Activity) { + if (((Activity) context).isDestroyed() || ((Activity) context).isFinishing()) { + return; + } + } + final Dialog dialog = new Dialog(context, R.style.dialog2); + dialog.setContentView(R.layout.dialog_del_sys_msg); + dialog.setCancelable(true); + dialog.setCanceledOnTouchOutside(true); + if (!TextUtils.isEmpty(content)) { + TextView contentTextView = (TextView) dialog.findViewById(R.id.content); + contentTextView.setText(content); + } + dialog.findViewById(R.id.btn_cancel).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + dialog.findViewById(R.id.btn_confirm).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + simpleCallback.onConfirmClick(dialog, ""); + dialog.dismiss(); + } + }); + dialog.show(); + } + + public static void showSimpleDialog(Context context, String content, SimpleCallback callback) { showSimpleDialog(context, content, false, callback); } @@ -135,13 +168,7 @@ public class DialogUitl { return; } } - new Builder(context) - .setTitle(title) - .setContent(content) - .setCancelable(cancelable) - .setClickCallback(callback) - .build() - .show(); + new Builder(context).setTitle(title).setContent(content).setCancelable(cancelable).setClickCallback(callback).build().show(); } public static void showSimpleDialog(Context context, String title, String content, boolean cancelable, SimpleCallback3 callback) { @@ -150,13 +177,7 @@ public class DialogUitl { return; } } - new Builder(context) - .setTitle(title) - .setContent(content) - .setCancelable(cancelable) - .setClickCallback3(callback) - .build() - .show(); + new Builder(context).setTitle(title).setContent(content).setCancelable(cancelable).setClickCallback3(callback).build().show(); } public static void showSimpleInputDialog(Context context, String title, String hint, int inputType, int length, SimpleCallback callback) { @@ -165,15 +186,7 @@ public class DialogUitl { return; } } - new Builder(context).setTitle(title) - .setCancelable(true) - .setInput(true) - .setHint(hint) - .setInputType(inputType) - .setLength(length) - .setClickCallback(callback) - .build() - .show(); + new Builder(context).setTitle(title).setCancelable(true).setInput(true).setHint(hint).setInputType(inputType).setLength(length).setClickCallback(callback).build().show(); } @@ -483,8 +496,8 @@ public class DialogUitl { mClickCallback3.onConfirmClick(dialog); } if (mSimpleCallbackView != null) { - mSimpleCallbackView.onConfirmClick(dialog,titleView, content, btnConfirm, btnCancel); - }else{ + mSimpleCallbackView.onConfirmClick(dialog, titleView, content, btnConfirm, btnCancel); + } else { dialog.dismiss(); } @@ -501,8 +514,8 @@ public class DialogUitl { ((SimpleCallback2) mClickCallback).onCancelClick(); } if (mSimpleCallbackView != null) { - mSimpleCallbackView.onCancel(dialog,titleView, content, btnConfirm, btnCancel); - }else{ + mSimpleCallbackView.onCancel(dialog, titleView, content, btnConfirm, btnCancel); + } else { dialog.dismiss(); } } @@ -510,17 +523,17 @@ public class DialogUitl { } } }; - if(btnConfirm!=null) { + if (btnConfirm != null) { btnConfirm.setOnClickListener(listener); } - if(btnCancel!=null) { + if (btnCancel != null) { btnCancel.setOnClickListener(listener); } dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialogInterface) { if (mSimpleCallbackView != null) { - mSimpleCallbackView.onShow(dialog,titleView, content, btnConfirm, btnCancel); + mSimpleCallbackView.onShow(dialog, titleView, content, btnConfirm, btnCancel); } } }); @@ -563,8 +576,7 @@ public class DialogUitl { /** * 城市选择 */ - public static void showCityChooseDialog(Activity activity, ArrayList list, - String province, String city, String district, AddressPicker.OnAddressPickListener listener) { + public static void showCityChooseDialog(Activity activity, ArrayList list, String province, String city, String district, AddressPicker.OnAddressPickListener listener) { AddressPicker picker = new AddressPicker(activity, list); picker.setTextColor(0xff323232); picker.setDividerColor(0xffdcdcdc); 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 203f2448a..127c31122 100644 --- a/common/src/main/java/com/yunbao/common/utils/RouteUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/RouteUtil.java @@ -31,6 +31,8 @@ public class RouteUtil { public static final String PATH_MYWEBVIEWACTIVTITY = "/main/MyWebViewActivity"; public static final String PATH_ZHUANGBANACTIVITY = "/main/ZhuangBanActivity"; public static final String PATH_LiveZHUANGBANACTIVITY = "/live/ZhuangBanActivity"; + + public static final String PATH_COMPENSATE_ACTIVITY = "/live/CompensateActivity"; public static final String PATH_FACEBOOKACTIVITY = "/baidu/FacebookLoginActivity"; public static final String PATH_MAIN = "/main/MainActivity"; public static final String PATH_ENTRY = "/main/EntryActivity"; @@ -147,6 +149,16 @@ public class RouteUtil { .navigation(); } + /** + * 跳转到 + */ + public static void forwardLiveCompensateActivity(String url, boolean isFull) { + ARouter.getInstance().build(PATH_COMPENSATE_ACTIVITY) + .withString("url", url) + .withBoolean("isFull", isFull) + .navigation(); + } + /** * 跳转到装扮 */ diff --git a/common/src/main/res/layout/dialog_del_sys_msg.xml b/common/src/main/res/layout/dialog_del_sys_msg.xml new file mode 100644 index 000000000..3ef23ead4 --- /dev/null +++ b/common/src/main/res/layout/dialog_del_sys_msg.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/mipmap-mdpi/icon_del_sys_cancel.png b/common/src/main/res/mipmap-mdpi/icon_del_sys_cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..ff6f5715d90a59ef94c9f6b2df3592afca03b7bb GIT binary patch literal 31900 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 P(-3GQ3&X0*ZZZD{$?DYV literal 0 HcmV?d00001 diff --git a/common/src/main/res/values-en-rUS/string.xml b/common/src/main/res/values-en-rUS/string.xml index 025d7262b..dc02898f8 100644 --- a/common/src/main/res/values-en-rUS/string.xml +++ b/common/src/main/res/values-en-rUS/string.xml @@ -1397,4 +1397,7 @@ Limited ride And limited avatar frame Payment cancellation Payment successful Payment failed + + The items inside have not been claimed yet.Are you sure to delete the message? + Are you sure to delete the message? diff --git a/common/src/main/res/values-zh-rHK/strings.xml b/common/src/main/res/values-zh-rHK/strings.xml index 0fb1f8c32..81b093cf6 100644 --- a/common/src/main/res/values-zh-rHK/strings.xml +++ b/common/src/main/res/values-zh-rHK/strings.xml @@ -1391,6 +1391,10 @@ 二、1張觀影券可觀看一集短劇,兌換成功後即可返回觀影頁面,使用觀影券繼續觀看影片; 三、觀影券禁止線下交易、收購等不正當行為,PDLIVE將對各類以盈利為目的的交易行為進行嚴厲打擊。 + + 內含物品還未領取,是否確定刪除消息? + 是否確定刪除消息? + 支付取消 支付成功 支付失敗 diff --git a/common/src/main/res/values-zh-rTW/strings.xml b/common/src/main/res/values-zh-rTW/strings.xml index c4bc7008b..7519e5317 100644 --- a/common/src/main/res/values-zh-rTW/strings.xml +++ b/common/src/main/res/values-zh-rTW/strings.xml @@ -1390,6 +1390,10 @@ 二、1張觀影券可觀看一集短劇,兌換成功後即可返回觀影頁面,使用觀影券繼續觀看影片; 三、觀影券禁止線下交易、收購等不正當行為,PDLIVE將對各類以盈利為目的的交易行為進行嚴厲打擊。 + + 內含物品還未領取,是否確定刪除消息? + 是否確定刪除消息? + 支付取消 支付成功 支付失敗 diff --git a/common/src/main/res/values-zh/strings.xml b/common/src/main/res/values-zh/strings.xml index 315c9f783..946f0142c 100644 --- a/common/src/main/res/values-zh/strings.xml +++ b/common/src/main/res/values-zh/strings.xml @@ -1393,4 +1393,7 @@ 支付成功 支付失敗 + 內含物品還未領取,是否確定刪除消息? + 是否確定刪除消息? + diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 99586f337..b90049f19 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -1397,6 +1397,10 @@ Limited ride And limited avatar frame 2.One ticket can be used to watch one episode of a short drama. After successful redemption, you can return to the viewing page and use the ticket to continue watching the movie; 3.Ticket prohibit illegal activities such as offline trading and acquisitions, and PDLIVE will crack down severely on various profit-making trading activities. + The items inside have not been claimed yet.Are you sure to delete the message? + Are you sure to delete the message? + + Payment cancellation Payment successful Payment failed diff --git a/config.gradle b/config.gradle index f7586a40c..0e6eac220 100644 --- a/config.gradle +++ b/config.gradle @@ -20,7 +20,7 @@ ext { baiduAppSecretKey: "nEVSgmuGpU0pjPr6VleEGGAl0hzGW52S", -// true表示谷歌支付 false 0 链接包 1 谷歌包 2华为包 3 samsung包 +// true表示谷歌支付 false 0 链接包 1 谷歌包 2华为包 3 samsung包 isGooglePlay : 3, //是否上报异常日志 isUploadLog : true, diff --git a/live/src/main/AndroidManifest.xml b/live/src/main/AndroidManifest.xml index dd65fbe2a..696d132c1 100644 --- a/live/src/main/AndroidManifest.xml +++ b/live/src/main/AndroidManifest.xml @@ -117,6 +117,10 @@ + + \ No newline at end of file diff --git a/live/src/main/java/com/yunbao/live/activity/CompensateActivity.java b/live/src/main/java/com/yunbao/live/activity/CompensateActivity.java new file mode 100644 index 000000000..ea6078fc2 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/activity/CompensateActivity.java @@ -0,0 +1,120 @@ +package com.yunbao.live.activity; + +import android.graphics.Outline; +import android.view.View; +import android.view.ViewOutlineProvider; +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.google.gson.Gson; +import com.ms.banner.Banner; +import com.ms.banner.BannerConfig; +import com.ms.banner.listener.OnBannerClickListener; +import com.umeng.analytics.MobclickAgent; +import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.Constants; +import com.yunbao.common.activity.AbsActivity; +import com.yunbao.common.bean.LiveBean; +import com.yunbao.common.bean.LiveGiftBean; +import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.http.LiveHttpUtil; +import com.yunbao.common.utils.RouteUtil; +import com.yunbao.common.utils.WordUtil; +import com.yunbao.live.R; +import com.yunbao.live.adapter.MsgSysGiftAdapter; +import com.yunbao.live.bean.MsgSysGiftInfoBean; +import com.yunbao.live.bean.SlideBean; +import com.yunbao.live.custom.TopGradual; +import com.yunbao.live.http.ImHttpUtil; +import com.yunbao.live.views.CustomMyViewHolder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Route(path = RouteUtil.PATH_COMPENSATE_ACTIVITY) +public class CompensateActivity extends AbsActivity { + + Banner banner_me; + TextView content; + RecyclerView recyclerView; + + MsgSysGiftAdapter msgSysGiftAdapter; + + int msgId; + + @Override + protected int getLayoutId() { + return R.layout.activity_compensate; + } + + @Override + protected void main() { + + recyclerView = findViewById(R.id.hor_recycler); + recyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); + recyclerView.addItemDecoration(new TopGradual()); + + msgSysGiftAdapter = new MsgSysGiftAdapter(mContext); + + recyclerView.setAdapter(msgSysGiftAdapter); + + msgId = getIntent().getIntExtra("msgid", -1); + + banner_me = (Banner) findViewById(R.id.banner_me); + banner_me.setOutlineProvider(new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 10); + } + }); + getMessageGiftInfo(); + } + + private void getMessageGiftInfo() { + ImHttpUtil.getMessageGiftInfo(msgId, new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + List list = new ArrayList<>(); + if (info != null) { + list = JSON.parseArray(info[0], MsgSysGiftInfoBean.class); + } + msgSysGiftAdapter.setList(list); + + List mBannerList = new ArrayList<>(); + SlideBean slideBean = new SlideBean(); + slideBean.setSlide_pic("https://downs.yaoulive.com/20231111/55ddbc06ffdd02e480f3513fdb31caf6.png"); + mBannerList.add(slideBean); + mBannerList.add(slideBean); + showBanner(mBannerList); + } + }); + } + + private void showBanner(List mBannerList) { + banner_me.setAutoPlay(true).setPages(mBannerList, new CustomMyViewHolder()).setDelayTime(3000).setBannerStyle(BannerConfig.NOT_INDICATOR).setOnBannerClickListener(new OnBannerClickListener() { + @Override + public void onBannerClick(List datas, int p) { + if (mBannerList != null) { + if (p >= 0 && p < mBannerList.size()) { + SlideBean bean = mBannerList.get(p); + if (!bean.getSlide_url().equals("")) { + Constants.isTitle = true; + String url = bean.getSlide_url() + "?uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken() + "&isZh=" + (WordUtil.isNewZh() ? "1" : "0"); + RouteUtil.forwardCustomerService(url); + + Map map_ekv = new HashMap(); + map_ekv.put("link", url); + MobclickAgent.onEvent(mContext, "my_banner", map_ekv); + } + } + } + } + }).start(); + } +} diff --git a/live/src/main/java/com/yunbao/live/adapter/MsgSysGiftAdapter.java b/live/src/main/java/com/yunbao/live/adapter/MsgSysGiftAdapter.java new file mode 100644 index 000000000..474e36881 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/MsgSysGiftAdapter.java @@ -0,0 +1,101 @@ +package com.yunbao.live.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.live.R; +import com.yunbao.live.bean.MsgSysGiftInfoBean; + +import java.util.ArrayList; +import java.util.List; + +public class MsgSysGiftAdapter extends RecyclerView.Adapter { + private Context mContext; + private RecyclerView mRecyclerView; + private List mList; + private LayoutInflater mInflater; + + public MsgSysGiftAdapter(Context context) { + mContext = context; + mList = new ArrayList<>(); + mList.add(new MsgSysGiftInfoBean()); + mInflater = LayoutInflater.from(context); + + } + + public void setList(List list) { + if (list != null && list.size() > 0) { + mList.clear(); + mList.addAll(list); + notifyDataSetChanged(); + } + } + + @Override + public int getItemViewType(int position) { + return position; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new Vh(mInflater.inflate(R.layout.item_msg_sys_gift, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder vh, int position, @NonNull List payloads) { + Object payload = payloads.size() > 0 ? payloads.get(0) : null; + ((Vh) vh).setData(mList.get(position), position, payload); + } + + + @Override + public int getItemCount() { + return mList.size(); + } + + + class Vh extends RecyclerView.ViewHolder { + + ImageView mAvatar; + TextView mName, name_remarks; + + public Vh(View itemView) { + super(itemView); + mAvatar = (ImageView) itemView.findViewById(R.id.avatar); + mName = (TextView) itemView.findViewById(R.id.name); + name_remarks = (TextView) itemView.findViewById(R.id.name_remarks); + } + + void setData(MsgSysGiftInfoBean bean, int position, Object payload) { + itemView.setTag(position); + ImgLoader.display(mContext, bean.getItem_image(), mAvatar); + mName.setText(bean.getItem_name()); + name_remarks.setText(bean.getRestrict_time()); + } + } + + @Override + public void onAttachedToRecyclerView(RecyclerView recyclerView) { + super.onAttachedToRecyclerView(recyclerView); + mRecyclerView = recyclerView; + } + + public interface ActionListener { + void onItemClick(MsgSysGiftInfoBean bean); + } + +} diff --git a/live/src/main/java/com/yunbao/live/adapter/SystemMessageNewAdapter.java b/live/src/main/java/com/yunbao/live/adapter/SystemMessageNewAdapter.java index 915daf395..a7015f824 100644 --- a/live/src/main/java/com/yunbao/live/adapter/SystemMessageNewAdapter.java +++ b/live/src/main/java/com/yunbao/live/adapter/SystemMessageNewAdapter.java @@ -14,6 +14,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.yunbao.common.adapter.RefreshAdapter; import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.WordUtil; import com.yunbao.live.R; import com.yunbao.live.activity.ZhuangBanActivity; @@ -28,12 +29,13 @@ import java.util.Date; public class SystemMessageNewAdapter extends RefreshAdapter { - public SystemMessageNewAdapter(Context context) { + ItemLongListener itemLongListener; + + public SystemMessageNewAdapter(Context context, ItemLongListener itemLongListener) { super(context); - + this.itemLongListener = itemLongListener; } - @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { @@ -47,12 +49,13 @@ public class SystemMessageNewAdapter extends RefreshAdapter { class Vh extends RecyclerView.ViewHolder { TextView messageContext, messageTime; - LinearLayout layoutMore; + LinearLayout layoutMore, itemLayout; public Vh(View itemView) { super(itemView); messageContext = itemView.findViewById(R.id.message_context); layoutMore = itemView.findViewById(R.id.layout_more); + itemLayout = itemView.findViewById(R.id.itemLayout); messageTime = itemView.findViewById(R.id.message_time); } @@ -61,27 +64,38 @@ public class SystemMessageNewAdapter extends RefreshAdapter { Date currenTimeZone = new Date(Long.parseLong(bean.getAddtime() + "000")); messageTime.setText(sdf.format(currenTimeZone)); messageContext.setText(bean.getContent()); - layoutMore.setVisibility(TextUtils.isEmpty(bean.getLink()) ? View.GONE : View.VISIBLE); + if (bean.getSystem_message_type() == 1) { + layoutMore.setVisibility(View.VISIBLE); + } else { + layoutMore.setVisibility(TextUtils.isEmpty(bean.getLink()) ? View.GONE : View.VISIBLE); + } + itemLayout.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + itemLongListener.onItemLong(bean); + return false; + } + }); layoutMore.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (bean.getLink() != null && !bean.getLink().equals("")) { - IMLoginModel userInfo = IMLoginManager.get(mContext).getUserInfo(); - StringBuffer urlBuffer = new StringBuffer(); - urlBuffer.append(bean.getLink()) - .append("&uid=") - .append(userInfo.getId()) - .append("&token=") - .append(userInfo.getToken()) .append("&isZh=") - .append(WordUtil.isNewZh() ? "1" : 0); - mContext.startActivity( - new Intent(mContext, ZhuangBanActivity.class) - .putExtra("url", urlBuffer.toString())); - + if (bean.getSystem_message_type() == 2) {//普通消息 + if (bean.getLink() != null && !bean.getLink().equals("")) { + IMLoginModel userInfo = IMLoginManager.get(mContext).getUserInfo(); + StringBuffer urlBuffer = new StringBuffer(); + urlBuffer.append(bean.getLink()).append("&uid=").append(userInfo.getId()).append("&token=").append(userInfo.getToken()).append("&isZh=").append(WordUtil.isNewZh() ? "1" : 0); + mContext.startActivity(new Intent(mContext, ZhuangBanActivity.class).putExtra("url", urlBuffer.toString())); + } + } else if (bean.getSystem_message_type() == 1) {//礼包消息 + RouteUtil.forwardLiveCompensateActivity("", false); } } }); } } + public interface ItemLongListener { + void onItemLong(SystemMessageBean bean); + } + } diff --git a/live/src/main/java/com/yunbao/live/bean/MsgSysGiftInfoBean.java b/live/src/main/java/com/yunbao/live/bean/MsgSysGiftInfoBean.java new file mode 100644 index 000000000..72a74f1db --- /dev/null +++ b/live/src/main/java/com/yunbao/live/bean/MsgSysGiftInfoBean.java @@ -0,0 +1,40 @@ +package com.yunbao.live.bean; + +public class MsgSysGiftInfoBean { + int id; + String item_name; + String restrict_time; + String item_image; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getItem_name() { + return item_name; + } + + public void setItem_name(String item_name) { + this.item_name = item_name; + } + + public String getRestrict_time() { + return restrict_time; + } + + public void setRestrict_time(String restrict_time) { + this.restrict_time = restrict_time; + } + + public String getItem_image() { + return item_image; + } + + public void setItem_image(String item_image) { + this.item_image = item_image; + } +} diff --git a/live/src/main/java/com/yunbao/live/bean/SystemMessageBean.java b/live/src/main/java/com/yunbao/live/bean/SystemMessageBean.java index aa416c733..ee113ea60 100644 --- a/live/src/main/java/com/yunbao/live/bean/SystemMessageBean.java +++ b/live/src/main/java/com/yunbao/live/bean/SystemMessageBean.java @@ -19,6 +19,27 @@ public class SystemMessageBean { private String showImg; private String imgBanner; + private int system_message_type; //1 普通消息 2 礼包消息 + + private int get_status; // 1 已领取 2 未领取 + + + public int getSystem_message_type() { + return system_message_type; + } + + public void setSystem_message_type(int system_message_type) { + this.system_message_type = system_message_type; + } + + public int getGet_status() { + return get_status; + } + + public void setGet_status(int get_status) { + this.get_status = get_status; + } + @JSONField(name = "banner") public String getImgBanner() { return imgBanner; diff --git a/live/src/main/java/com/yunbao/live/http/ImHttpConsts.java b/live/src/main/java/com/yunbao/live/http/ImHttpConsts.java index 5f3812fed..ff0669945 100644 --- a/live/src/main/java/com/yunbao/live/http/ImHttpConsts.java +++ b/live/src/main/java/com/yunbao/live/http/ImHttpConsts.java @@ -11,4 +11,6 @@ public class ImHttpConsts { public static final String CHECK_BLACK = "checkBlack"; public static final String SEND_DYNAMICCOMMENT = "sendDynamicComment"; public static final String SET_BLACK = "setBlack"; + + public static final String GET_MESSAGEGIFTINFO = "getMessageGiftInfo"; } diff --git a/live/src/main/java/com/yunbao/live/http/ImHttpUtil.java b/live/src/main/java/com/yunbao/live/http/ImHttpUtil.java index 6fc4e6746..5a8403ad7 100644 --- a/live/src/main/java/com/yunbao/live/http/ImHttpUtil.java +++ b/live/src/main/java/com/yunbao/live/http/ImHttpUtil.java @@ -73,4 +73,14 @@ public class ImHttpUtil { .params("touid", touid) .execute(callback); } + + + /** + * 获取补偿消息详情 + */ + public static void getMessageGiftInfo(int msgid, HttpCallback callback) { + HttpClient.getInstance().get("Message.getMessageGiftInfo", ImHttpConsts.GET_MESSAGEGIFTINFO) + .params("message_id", msgid) + .execute(callback); + } } diff --git a/live/src/main/java/com/yunbao/live/views/CustomMyViewHolder.java b/live/src/main/java/com/yunbao/live/views/CustomMyViewHolder.java index a6aef2bd2..9cf67db55 100644 --- a/live/src/main/java/com/yunbao/live/views/CustomMyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/CustomMyViewHolder.java @@ -7,7 +7,6 @@ import android.widget.ImageView; import com.bumptech.glide.Glide; import com.ms.banner.holder.BannerViewHolder; -import com.yunbao.common.bean.BannerBean; import com.yunbao.live.bean.SlideBean; public class CustomMyViewHolder implements BannerViewHolder { diff --git a/live/src/main/java/com/yunbao/live/views/SystemMessageViewHolder.java b/live/src/main/java/com/yunbao/live/views/SystemMessageViewHolder.java index 4a0f83171..84317cf4d 100644 --- a/live/src/main/java/com/yunbao/live/views/SystemMessageViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/SystemMessageViewHolder.java @@ -5,6 +5,7 @@ import static io.rong.imlib.RongIMClient.BlacklistStatus.NOT_IN_BLACK_LIST; import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; +import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -54,6 +55,8 @@ import com.yunbao.common.bean.ImageEntity; import com.yunbao.common.custom.CommonRefreshView; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.interfaces.OnItemLongClickListener; +import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.views.AbsViewHolder; @@ -190,8 +193,7 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli } InputMethodManager methodManager = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); if (methodManager != null) { - methodManager.hideSoftInputFromWindow(feedback_edittext.getWindowToken(), - InputMethodManager.HIDE_NOT_ALWAYS); + methodManager.hideSoftInputFromWindow(feedback_edittext.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } feedback_edittext.clearFocus(); } @@ -259,8 +261,7 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli if (lt_controls.getVisibility() == View.GONE) { InputMethodManager methodManager = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); if (methodManager != null) { - methodManager.hideSoftInputFromWindow(feedback_edittext.getWindowToken(), - InputMethodManager.HIDE_NOT_ALWAYS); + methodManager.hideSoftInputFromWindow(feedback_edittext.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } Thread thread = new Thread(new Runnable() { @@ -285,61 +286,60 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli oldestMessageId = -1; } Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE; - RongIMClient.getInstance().getHistoryMessages(conversationType, SystemMessageActivity.nowUid, oldestMessageId, 20, - new RongIMClient.ResultCallback>() { - /** - * 成功时回调 - * @param messages 获取的消息列表 - */ - @Override - public void onSuccess(List messages) { - Collections.reverse(messages); - EventBus.getDefault().post(messages); - if (messages.size() > 0) { - if (messages.size() < 20) { - moretext = false; - } else { - moretext = true; - } - oldestMessageId = messages.get(0).getMessageId(); - Log.i("chatlist", "oldestMessageId = " + oldestMessageId); - if (messagesList.size() == 0) { - Message messageNo = new Message(); - messageNo.setSenderUserId("-1"); - messagesList.add(messageNo); + RongIMClient.getInstance().getHistoryMessages(conversationType, SystemMessageActivity.nowUid, oldestMessageId, 20, new RongIMClient.ResultCallback>() { + /** + * 成功时回调 + * @param messages 获取的消息列表 + */ + @Override + public void onSuccess(List messages) { + Collections.reverse(messages); + EventBus.getDefault().post(messages); + if (messages.size() > 0) { + if (messages.size() < 20) { + moretext = false; + } else { + moretext = true; + } + oldestMessageId = messages.get(0).getMessageId(); + Log.i("chatlist", "oldestMessageId = " + oldestMessageId); + if (messagesList.size() == 0) { + Message messageNo = new Message(); + messageNo.setSenderUserId("-1"); + messagesList.add(messageNo); - messagesList.addAll(messages); - } else { - if (moretext) { - messagesList.get(0).setSenderUserId("-1"); - } else { - messagesList.get(0).setSenderUserId("-2"); - } - messagesList.addAll(1, messages); - } - mHandler.sendEmptyMessageAtTime(1, 0); + messagesList.addAll(messages); + } else { + if (moretext) { + messagesList.get(0).setSenderUserId("-1"); } else { - moretext = false; - if (messagesList.size() == 0) { - Message messageNo = new Message(); - messageNo.setSenderUserId("-1"); - messagesList.add(messageNo); - messagesList.addAll(messages); - } messagesList.get(0).setSenderUserId("-2"); - mHandler.sendEmptyMessageAtTime(1, 0); } + messagesList.addAll(1, messages); } + mHandler.sendEmptyMessageAtTime(1, 0); + } else { + moretext = false; + if (messagesList.size() == 0) { + Message messageNo = new Message(); + messageNo.setSenderUserId("-1"); + messagesList.add(messageNo); + messagesList.addAll(messages); + } + messagesList.get(0).setSenderUserId("-2"); + mHandler.sendEmptyMessageAtTime(1, 0); + } + } - /** - * 错误时回调。 - * @param e 错误码 - */ - @Override - public void onError(RongIMClient.ErrorCode e) { - ToastUtil.show("消息获取失败"); - } - }); + /** + * 错误时回调。 + * @param e 错误码 + */ + @Override + public void onError(RongIMClient.ErrorCode e) { + ToastUtil.show("消息获取失败"); + } + }); } @@ -357,12 +357,22 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli mRefreshView.setDataHelper(new CommonRefreshView.DataHelper() { @Override public RefreshAdapter getAdapter() { - if (mAdapter == null && (SystemMessageActivity.type.equals("1"))) { + if (mAdapter == null && (SystemMessageActivity.type.equals("1"))) {//官方通知 mAdapter = new SystemMessageAdapter(mContext); } else if (mAdapter == null && SystemMessageActivity.type.equals("2")) { mAdapter = new InteractionMessageAdapter(mContext, SystemMessageViewHolder.this); - } else if (mAdapter == null && SystemMessageActivity.type.equals("4")) { - mAdapter = new SystemMessageNewAdapter(mContext); + } else if (mAdapter == null && SystemMessageActivity.type.equals("4")) {//系统消息 + mAdapter = new SystemMessageNewAdapter(mContext, new SystemMessageNewAdapter.ItemLongListener() { + @Override + public void onItemLong(SystemMessageBean bean) { + DialogUitl.showDelSysMsg(mContext, mContext.getString(com.yunbao.common.R.string.msg_del_sys01), new DialogUitl.SimpleCallback() { + @Override + public void onConfirmClick(Dialog dialog, String content) { + + } + }); + } + }); } return mAdapter; } @@ -582,8 +592,7 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli try { MediaMetadataRetriever mmr = new MediaMetadataRetriever(); mmr.setDataSource(url); - duration = Integer.parseInt(mmr.extractMetadata - (MediaMetadataRetriever.METADATA_KEY_DURATION)) / 1000;//除以 1000 返回是秒 + duration = Integer.parseInt(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)) / 1000;//除以 1000 返回是秒 //时长(毫秒) // String duration = mmr.extractMetadata(android.media.MediaMetadataRetriever.METADATA_KEY_DURATION); // //宽 @@ -683,11 +692,11 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli //intoIndex 1=调用相机,2=照片选取,3=视频选取 public void choosePic(int intoIndex) { //选择图片 - String permission1=Manifest.permission.READ_EXTERNAL_STORAGE; - String permission2= Manifest.permission.WRITE_EXTERNAL_STORAGE; + 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; + permission1 = Manifest.permission.READ_MEDIA_IMAGES; + permission2 = Manifest.permission.READ_MEDIA_VIDEO; } int isPermission1 = ContextCompat.checkSelfPermission(mContext, permission1); int isPermission2 = ContextCompat.checkSelfPermission(mContext, permission2); @@ -695,8 +704,7 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli startActivity(intoIndex); } else { //申请权限 - ActivityCompat.requestPermissions(nowActivity, new String[]{permission1, - permission2}, PERMISSION_REQUEST_CODE); + ActivityCompat.requestPermissions(nowActivity, new String[]{permission1, permission2}, PERMISSION_REQUEST_CODE); } } @@ -1050,8 +1058,7 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli */ @Override public ImMessageAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { - View view = mInflater.inflate(R.layout.item_chat_one, - viewGroup, false); + View view = mInflater.inflate(R.layout.item_chat_one, viewGroup, false); ImMessageAdapter.ViewHolder viewHolder = new ImMessageAdapter.ViewHolder(view); return viewHolder; @@ -1207,9 +1214,7 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli viewHolder.cv_chatcontent_img1.setVisibility(View.VISIBLE); viewHolder.rt_video_left.setVisibility(View.GONE); - Glide.with(mContext) - .load(imageMessage.getThumUri()) - .into(viewHolder.chatcontent_img1); + Glide.with(mContext).load(imageMessage.getThumUri()).into(viewHolder.chatcontent_img1); viewHolder.chatcontent_img1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -1225,9 +1230,7 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli viewHolder.cv_chatcontent_img.setVisibility(View.VISIBLE); viewHolder.rt_video_right.setVisibility(View.GONE); if (mDatas.get(position).getReceivedTime() == 0) { - Glide.with(mContext) - .load(imageMessage.getThumUri()) - .into(viewHolder.chatcontent_img); + Glide.with(mContext).load(imageMessage.getThumUri()).into(viewHolder.chatcontent_img); viewHolder.view_feed_suc.setVisibility(View.VISIBLE); viewHolder.view_feed_suc.setOnClickListener(new View.OnClickListener() { @Override @@ -1238,14 +1241,10 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli }); } else if (mDatas.get(position).getReceivedTime() < 100) { viewHolder.view_feed_suc.setVisibility(View.GONE); - Glide.with(mContext) - .load(imageMessage.getThumUri()) - .into(viewHolder.chatcontent_img); + Glide.with(mContext).load(imageMessage.getThumUri()).into(viewHolder.chatcontent_img); } else { viewHolder.view_feed_suc.setVisibility(View.GONE); - Glide.with(mContext) - .load(imageMessage.getThumUri()) - .into(viewHolder.chatcontent_img); + Glide.with(mContext).load(imageMessage.getThumUri()).into(viewHolder.chatcontent_img); viewHolder.chatcontent_img.setOnClickListener(new View.OnClickListener() { @Override @@ -1412,16 +1411,9 @@ public class SystemMessageViewHolder extends AbsViewHolder implements View.OnCli */ public static void loadCover(ImageView imageView, Uri uri, Context context) { imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); - Glide.with(context) - .setDefaultRequestOptions( - new RequestOptions() - .frame(1000000) - .centerCrop() - .error(R.drawable.anim_loading)//可以忽略 - .placeholder(R.drawable.anim_loading)//可以忽略 - ) - .load(uri) - .into(imageView); + Glide.with(context).setDefaultRequestOptions(new RequestOptions().frame(1000000).centerCrop().error(R.drawable.anim_loading)//可以忽略 + .placeholder(R.drawable.anim_loading)//可以忽略 + ).load(uri).into(imageView); } //互动消息回复 diff --git a/live/src/main/res/layout/activity_compensate.xml b/live/src/main/res/layout/activity_compensate.xml new file mode 100644 index 000000000..be2769dfa --- /dev/null +++ b/live/src/main/res/layout/activity_compensate.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +