私聊改造:用户卡片UI调整
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
@@ -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(
|
||||
|
@@ -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 {
|
||||
|
BIN
app/src/main/res/drawable-xhdpi/ic_gender_female_empty_bg.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/ic_gender_female_empty_bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 499 B |
BIN
app/src/main/res/drawable-xhdpi/ic_gender_male_empty_bg.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/ic_gender_male_empty_bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 500 B |
8
app/src/main/res/drawable/shape_45bbff_to_8ad4ff.xml
Normal file
8
app/src/main/res/drawable/shape_45bbff_to_8ad4ff.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:startColor="#45BBFF"
|
||||
android:endColor="#8AD4FF" />
|
||||
<corners android:radius="30dp" />
|
||||
</shape>
|
8
app/src/main/res/drawable/shape_ff90ae_to_ff497d.xml
Normal file
8
app/src/main/res/drawable/shape_ff90ae_to_ff497d.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<gradient
|
||||
android:startColor="#FF497D"
|
||||
android:endColor="#FF90AE" />
|
||||
<corners android:radius="30dp" />
|
||||
</shape>
|
@@ -139,29 +139,48 @@
|
||||
app:layout_constraintStart_toStartOf="@id/iv_avatar"
|
||||
app:layout_constraintTop_toTopOf="@id/iv_avatar" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_vip_icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="20dp"
|
||||
android:layout_marginStart="10dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/tv_desc"
|
||||
app:layout_constraintStart_toEndOf="@id/iv_head_wear"
|
||||
app:layout_constraintTop_toTopOf="@id/iv_avatar"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
tools:src="@drawable/ic_gender_female" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_nick"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginStart="4dp"
|
||||
android:textColor="@color/color_333333"
|
||||
android:textSize="16dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/tv_desc"
|
||||
app:layout_constraintStart_toEndOf="@id/iv_head_wear"
|
||||
app:layout_constraintTop_toTopOf="@id/iv_avatar"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
app:layout_constraintBottom_toBottomOf="@id/iv_vip_icon"
|
||||
app:layout_constraintStart_toEndOf="@id/iv_vip_icon"
|
||||
app:layout_constraintTop_toTopOf="@id/iv_vip_icon"
|
||||
app:layout_goneMarginStart="10dp"
|
||||
tools:text="这就是大哥呀呀" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/iv_gender"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="4dp"
|
||||
<TextView
|
||||
android:id="@+id/tv_gender_and_age"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="14dp"
|
||||
android:layout_marginStart="5dp"
|
||||
android:background="@drawable/shape_ff90ae_to_ff497d"
|
||||
android:drawableStart="@drawable/ic_gender_female_empty_bg"
|
||||
android:gravity="center_vertical"
|
||||
android:drawablePadding="2dp"
|
||||
android:includeFontPadding="false"
|
||||
android:paddingStart="4dp"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="10sp"
|
||||
app:layout_constraintBottom_toBottomOf="@id/tv_nick"
|
||||
app:layout_constraintStart_toEndOf="@id/tv_nick"
|
||||
app:layout_constraintTop_toTopOf="@id/tv_nick"
|
||||
tools:src="@drawable/ic_gender_female" />
|
||||
tools:src="@drawable/ic_gender_female"
|
||||
tools:text="22" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_constellation"
|
||||
@@ -177,7 +196,7 @@
|
||||
android:textColor="@color/white"
|
||||
android:textSize="10sp"
|
||||
app:layout_constraintBottom_toBottomOf="@id/tv_nick"
|
||||
app:layout_constraintStart_toEndOf="@id/iv_gender"
|
||||
app:layout_constraintStart_toEndOf="@id/tv_gender_and_age"
|
||||
app:layout_constraintTop_toTopOf="@id/tv_nick"
|
||||
tools:text="处女座" />
|
||||
|
||||
@@ -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="正在“可惜不是你…”热聊中" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
|
@@ -1,5 +1,8 @@
|
||||
package com.mango.core.utils;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
public class CurrentTimeUtils {
|
||||
|
||||
private static long offsetTime;
|
||||
@@ -12,4 +15,33 @@ public class CurrentTimeUtils {
|
||||
public static long getCurrentTime() {
|
||||
return System.currentTimeMillis() - offsetTime;
|
||||
}
|
||||
|
||||
public static int getAgeFromTimestamp(long timestamp) {
|
||||
|
||||
Date birthDay = new Date(timestamp);
|
||||
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(new Date(getCurrentTime()));
|
||||
int yearNow = cal.get(Calendar.YEAR);
|
||||
int monthNow = cal.get(Calendar.MONTH);
|
||||
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
|
||||
cal.setTime(birthDay);
|
||||
|
||||
int yearBirth = cal.get(Calendar.YEAR);
|
||||
int monthBirth = cal.get(Calendar.MONTH);
|
||||
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
|
||||
|
||||
int age = yearNow - yearBirth;
|
||||
|
||||
if (monthNow <= monthBirth) {
|
||||
if (monthNow == monthBirth) {
|
||||
if (dayOfMonthNow < dayOfMonthBirth)
|
||||
age--;
|
||||
} else {
|
||||
age--;
|
||||
}
|
||||
}
|
||||
return age;
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user