diff --git a/app/src/main/java/com/mango/moshen/ui/im/MessageListPanelEx.java b/app/src/main/java/com/mango/moshen/ui/im/MessageListPanelEx.java index e170b2413..6c891a003 100644 --- a/app/src/main/java/com/mango/moshen/ui/im/MessageListPanelEx.java +++ b/app/src/main/java/com/mango/moshen/ui/im/MessageListPanelEx.java @@ -92,6 +92,12 @@ public class MessageListPanelEx { @Override public int compare(IMMessage o1, IMMessage o2) { + if (o1.getAttachment() instanceof UserCardAttachment) { + return -1; + } + if (o2.getAttachment() instanceof UserCardAttachment) { + return 1; + } long time = o1.getTime() - o2.getTime(); return time == 0 ? 0 : (time < 0 ? -1 : 1); } diff --git a/app/src/main/java/com/mango/moshen/ui/im/chat/MsgViewHolderUserCard.java b/app/src/main/java/com/mango/moshen/ui/im/chat/MsgViewHolderUserCard.java index 7aa5dc38c..aeb6ef12a 100644 --- a/app/src/main/java/com/mango/moshen/ui/im/chat/MsgViewHolderUserCard.java +++ b/app/src/main/java/com/mango/moshen/ui/im/chat/MsgViewHolderUserCard.java @@ -18,6 +18,7 @@ import com.mango.core.decoration.headwear.bean.HeadWearInfo; import com.mango.core.noble.NobleUtil; import com.mango.core.user.UserModel; import com.mango.core.user.bean.UserPhoto; +import com.mango.core.utils.CurrentTimeUtils; import com.mango.core.utils.StarUtils; import com.mango.core.utils.StringExtensionKt; import com.mango.core.utils.net.RxHelper; @@ -28,11 +29,15 @@ import com.mango.moshen.skill.repository.SkillModel; import com.mango.moshen.ui.user.ShowPhotoActivity; import com.mango.moshen.ui.user.UserInfoActivity; import com.mango.moshen.ui.utils.ImageLoadUtils; +import com.mango.moshen.utils.TimeUiUtils; +import com.mango.moshen.vip.VipHelper; import com.mango.xchat_android_library.utils.JavaUtil; import com.mango.xchat_android_library.utils.ListUtils; +import com.mango.xchat_android_library.utils.TimeUtils; import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase; import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter; import com.netease.nim.uikit.common.util.sys.ScreenUtil; +import com.netease.nim.uikit.common.util.sys.TimeUtil; import java.util.ArrayList; import java.util.Date; @@ -53,11 +58,12 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase { private View flSkill2; private CircleImageView ivAvatar; private TextView tvNick; - private ImageView ivGender; + private TextView tvGenderAndAge; private TextView tvConstellation; private TextView tvDesc; private RecyclerView rvPhotos; private ImageView ivHeadWear; + private ImageView ivVipIcon; public MsgViewHolderUserCard(BaseMultiItemFetchLoadAdapter adapter) { super(adapter); @@ -78,11 +84,12 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase { flSkill2 = findViewById(R.id.fl_skill_2); ivAvatar = findViewById(R.id.iv_avatar); tvNick = findViewById(R.id.tv_nick); - ivGender = findViewById(R.id.iv_gender); + tvGenderAndAge = findViewById(R.id.tv_gender_and_age); tvConstellation = findViewById(R.id.tv_constellation); tvDesc = findViewById(R.id.tv_desc); rvPhotos = findViewById(R.id.rv_photos); ivHeadWear = findViewById(R.id.iv_head_wear); + ivVipIcon = findViewById(R.id.iv_vip_icon); } @Override @@ -132,7 +139,9 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase { .subscribe(userInfo -> { ImageLoadUtils.loadAvatar(userInfo.getAvatar(), ivAvatar); tvNick.setText(StringExtensionKt.subAndReplaceDot(userInfo.getNick(), 7)); - ivGender.setImageResource(userInfo.getGender() == 1 ? R.drawable.ic_gender_male : R.drawable.ic_gender_female); + tvGenderAndAge.setCompoundDrawablesRelativeWithIntrinsicBounds(userInfo.getGender() == 1 ? R.drawable.ic_gender_male_empty_bg : R.drawable.ic_gender_female_empty_bg, 0, 0, 0); + tvGenderAndAge.setBackgroundResource(userInfo.getGender() == 1 ? R.drawable.shape_45bbff_to_8ad4ff : R.drawable.shape_ff90ae_to_ff497d); + tvGenderAndAge.setText(String.valueOf(CurrentTimeUtils.getAgeFromTimestamp(userInfo.getBirth()))); tvDesc.setText(userInfo.getUserDesc() != null ? userInfo.getUserDesc() : context.getResources().getString(R.string.msg_no_user_desc)); //设置星座 String star = StarUtils.getConstellation(new Date(userInfo.getBirth())); @@ -142,8 +151,8 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase { tvConstellation.setText(star); tvConstellation.setVisibility(View.VISIBLE); } + VipHelper.loadVipIcon(ivVipIcon, userInfo.getUserVipInfoVO()); photoAdapter.setNewData(userInfo.getPrivatePhoto()); - HeadWearInfo headWearInfo = userInfo.getUserHeadwear(); if (headWearInfo != null && !TextUtils.isEmpty(headWearInfo.getPic())) { NobleUtil.loadHeadWear( diff --git a/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java b/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java index cdb4f3f07..f5c3b43a1 100644 --- a/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java +++ b/app/src/main/java/com/mango/moshen/ui/webview/JSInterface.java @@ -23,9 +23,14 @@ import com.alibaba.fastjson.JSONObject; import com.alibaba.security.realidentity.RPEventListener; import com.alibaba.security.realidentity.RPResult; import com.alibaba.security.realidentity.RPVerify; +import com.mango.core.utils.LogUtils; +import com.mango.moshen.BuildConfig; import com.mango.xchat_android_library.utils.file.JXFileUtils; import com.netease.nim.uikit.common.util.log.LogUtil; import com.orhanobut.logger.Logger; +import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; import com.umeng.commonsdk.statistics.common.DeviceConfig; import com.mango.moshen.UIHelper; import com.mango.moshen.avroom.activity.AVRoomActivity; @@ -532,6 +537,28 @@ public class JSInterface { if (mActivity instanceof TarotPayWebViewActivity) mActivity.finish(); } + @JavascriptInterface + public void openTarotPay(String json) { + JSONObject jsonObject = JSONObject.parseObject(json); + //微信小程序支付的微信appid和微信登录&支付的appid是不同的... + IWXAPI api = WXAPIFactory.createWXAPI(mActivity, jsonObject.getString("wxminiAppid")); + WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req(); + req.userName = jsonObject.getString("wxminiId"); // 填小程序原始id + //拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 + req.path = "pages/index/index?pub_ticket=" + AuthModel.get().getTicket() + + "&tarotChargeProdId=" + jsonObject.getString("tarotChargeProdId") + + "&cardList=" + jsonObject.getString("cardList") + + "&payType=" + jsonObject.getString("payType") + + "&pub_uid=" + AuthModel.get().getCurrentUid() + + "&uid=" + AuthModel.get().getCurrentUid() + + "&ticket=" + AuthModel.get().getTicket() + + "&roomUid=" + AvRoomDataManager.get().getRoomUid() + + "&appVersion=" + BuildConfig.VERSION_NAME + + "&app=" + XChatConstants.APP_MARK; + req.miniprogramType = BuildConfig.DEBUG ? WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_TEST : WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 可选打开 开发版,体验版和正式版 + api.sendReq(req); + } + /** * 打开弹窗式 WebViewActivity */ @@ -550,9 +577,9 @@ public class JSInterface { public void saveBase64Image(String imageBase64) { mActivity.runOnUiThread(() -> mActivity.checkPermission( - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE - ) + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE + ) .subscribe(aBoolean -> { if (aBoolean) { try { diff --git a/app/src/main/res/drawable-xhdpi/ic_gender_female_empty_bg.png b/app/src/main/res/drawable-xhdpi/ic_gender_female_empty_bg.png new file mode 100644 index 000000000..f90ef1f36 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_gender_female_empty_bg.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_gender_male_empty_bg.png b/app/src/main/res/drawable-xhdpi/ic_gender_male_empty_bg.png new file mode 100644 index 000000000..0a2434b11 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_gender_male_empty_bg.png differ diff --git a/app/src/main/res/drawable/shape_45bbff_to_8ad4ff.xml b/app/src/main/res/drawable/shape_45bbff_to_8ad4ff.xml new file mode 100644 index 000000000..7430e8c5c --- /dev/null +++ b/app/src/main/res/drawable/shape_45bbff_to_8ad4ff.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_ff90ae_to_ff497d.xml b/app/src/main/res/drawable/shape_ff90ae_to_ff497d.xml new file mode 100644 index 000000000..b307efa04 --- /dev/null +++ b/app/src/main/res/drawable/shape_ff90ae_to_ff497d.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_p2p_user_card.xml b/app/src/main/res/layout/layout_p2p_user_card.xml index af0b98534..4aab2aa33 100644 --- a/app/src/main/res/layout/layout_p2p_user_card.xml +++ b/app/src/main/res/layout/layout_p2p_user_card.xml @@ -139,29 +139,48 @@ app:layout_constraintStart_toStartOf="@id/iv_avatar" app:layout_constraintTop_toTopOf="@id/iv_avatar" /> + - + tools:src="@drawable/ic_gender_female" + tools:text="22" /> @@ -189,8 +208,8 @@ android:textColor="#BABBCD" android:textSize="14dp" app:layout_constraintBottom_toBottomOf="@id/iv_avatar" - app:layout_constraintStart_toStartOf="@id/tv_nick" - app:layout_constraintTop_toBottomOf="@id/tv_nick" + app:layout_constraintStart_toStartOf="@id/iv_vip_icon" + app:layout_constraintTop_toBottomOf="@id/iv_vip_icon" tools:text="正在“可惜不是你…”热聊中" />