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="正在“可惜不是你…”热聊中" />