私聊改造:用户卡片UI调整
This commit is contained in:
@@ -92,6 +92,12 @@ public class MessageListPanelEx {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compare(IMMessage o1, IMMessage o2) {
|
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();
|
long time = o1.getTime() - o2.getTime();
|
||||||
return time == 0 ? 0 : (time < 0 ? -1 : 1);
|
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.noble.NobleUtil;
|
||||||
import com.mango.core.user.UserModel;
|
import com.mango.core.user.UserModel;
|
||||||
import com.mango.core.user.bean.UserPhoto;
|
import com.mango.core.user.bean.UserPhoto;
|
||||||
|
import com.mango.core.utils.CurrentTimeUtils;
|
||||||
import com.mango.core.utils.StarUtils;
|
import com.mango.core.utils.StarUtils;
|
||||||
import com.mango.core.utils.StringExtensionKt;
|
import com.mango.core.utils.StringExtensionKt;
|
||||||
import com.mango.core.utils.net.RxHelper;
|
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.ShowPhotoActivity;
|
||||||
import com.mango.moshen.ui.user.UserInfoActivity;
|
import com.mango.moshen.ui.user.UserInfoActivity;
|
||||||
import com.mango.moshen.ui.utils.ImageLoadUtils;
|
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.JavaUtil;
|
||||||
import com.mango.xchat_android_library.utils.ListUtils;
|
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.business.session.viewholder.MsgViewHolderBase;
|
||||||
import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter;
|
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.ScreenUtil;
|
||||||
|
import com.netease.nim.uikit.common.util.sys.TimeUtil;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -53,11 +58,12 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase {
|
|||||||
private View flSkill2;
|
private View flSkill2;
|
||||||
private CircleImageView ivAvatar;
|
private CircleImageView ivAvatar;
|
||||||
private TextView tvNick;
|
private TextView tvNick;
|
||||||
private ImageView ivGender;
|
private TextView tvGenderAndAge;
|
||||||
private TextView tvConstellation;
|
private TextView tvConstellation;
|
||||||
private TextView tvDesc;
|
private TextView tvDesc;
|
||||||
private RecyclerView rvPhotos;
|
private RecyclerView rvPhotos;
|
||||||
private ImageView ivHeadWear;
|
private ImageView ivHeadWear;
|
||||||
|
private ImageView ivVipIcon;
|
||||||
|
|
||||||
public MsgViewHolderUserCard(BaseMultiItemFetchLoadAdapter adapter) {
|
public MsgViewHolderUserCard(BaseMultiItemFetchLoadAdapter adapter) {
|
||||||
super(adapter);
|
super(adapter);
|
||||||
@@ -78,11 +84,12 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase {
|
|||||||
flSkill2 = findViewById(R.id.fl_skill_2);
|
flSkill2 = findViewById(R.id.fl_skill_2);
|
||||||
ivAvatar = findViewById(R.id.iv_avatar);
|
ivAvatar = findViewById(R.id.iv_avatar);
|
||||||
tvNick = findViewById(R.id.tv_nick);
|
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);
|
tvConstellation = findViewById(R.id.tv_constellation);
|
||||||
tvDesc = findViewById(R.id.tv_desc);
|
tvDesc = findViewById(R.id.tv_desc);
|
||||||
rvPhotos = findViewById(R.id.rv_photos);
|
rvPhotos = findViewById(R.id.rv_photos);
|
||||||
ivHeadWear = findViewById(R.id.iv_head_wear);
|
ivHeadWear = findViewById(R.id.iv_head_wear);
|
||||||
|
ivVipIcon = findViewById(R.id.iv_vip_icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -132,7 +139,9 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase {
|
|||||||
.subscribe(userInfo -> {
|
.subscribe(userInfo -> {
|
||||||
ImageLoadUtils.loadAvatar(userInfo.getAvatar(), ivAvatar);
|
ImageLoadUtils.loadAvatar(userInfo.getAvatar(), ivAvatar);
|
||||||
tvNick.setText(StringExtensionKt.subAndReplaceDot(userInfo.getNick(), 7));
|
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));
|
tvDesc.setText(userInfo.getUserDesc() != null ? userInfo.getUserDesc() : context.getResources().getString(R.string.msg_no_user_desc));
|
||||||
//设置星座
|
//设置星座
|
||||||
String star = StarUtils.getConstellation(new Date(userInfo.getBirth()));
|
String star = StarUtils.getConstellation(new Date(userInfo.getBirth()));
|
||||||
@@ -142,8 +151,8 @@ public class MsgViewHolderUserCard extends MsgViewHolderBase {
|
|||||||
tvConstellation.setText(star);
|
tvConstellation.setText(star);
|
||||||
tvConstellation.setVisibility(View.VISIBLE);
|
tvConstellation.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
VipHelper.loadVipIcon(ivVipIcon, userInfo.getUserVipInfoVO());
|
||||||
photoAdapter.setNewData(userInfo.getPrivatePhoto());
|
photoAdapter.setNewData(userInfo.getPrivatePhoto());
|
||||||
|
|
||||||
HeadWearInfo headWearInfo = userInfo.getUserHeadwear();
|
HeadWearInfo headWearInfo = userInfo.getUserHeadwear();
|
||||||
if (headWearInfo != null && !TextUtils.isEmpty(headWearInfo.getPic())) {
|
if (headWearInfo != null && !TextUtils.isEmpty(headWearInfo.getPic())) {
|
||||||
NobleUtil.loadHeadWear(
|
NobleUtil.loadHeadWear(
|
||||||
|
@@ -23,9 +23,14 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.alibaba.security.realidentity.RPEventListener;
|
import com.alibaba.security.realidentity.RPEventListener;
|
||||||
import com.alibaba.security.realidentity.RPResult;
|
import com.alibaba.security.realidentity.RPResult;
|
||||||
import com.alibaba.security.realidentity.RPVerify;
|
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.mango.xchat_android_library.utils.file.JXFileUtils;
|
||||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||||
import com.orhanobut.logger.Logger;
|
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.umeng.commonsdk.statistics.common.DeviceConfig;
|
||||||
import com.mango.moshen.UIHelper;
|
import com.mango.moshen.UIHelper;
|
||||||
import com.mango.moshen.avroom.activity.AVRoomActivity;
|
import com.mango.moshen.avroom.activity.AVRoomActivity;
|
||||||
@@ -532,6 +537,28 @@ public class JSInterface {
|
|||||||
if (mActivity instanceof TarotPayWebViewActivity) mActivity.finish();
|
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
|
* 打开弹窗式 WebViewActivity
|
||||||
*/
|
*/
|
||||||
@@ -550,9 +577,9 @@ public class JSInterface {
|
|||||||
public void saveBase64Image(String imageBase64) {
|
public void saveBase64Image(String imageBase64) {
|
||||||
mActivity.runOnUiThread(() ->
|
mActivity.runOnUiThread(() ->
|
||||||
mActivity.checkPermission(
|
mActivity.checkPermission(
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||||
Manifest.permission.READ_EXTERNAL_STORAGE
|
Manifest.permission.READ_EXTERNAL_STORAGE
|
||||||
)
|
)
|
||||||
.subscribe(aBoolean -> {
|
.subscribe(aBoolean -> {
|
||||||
if (aBoolean) {
|
if (aBoolean) {
|
||||||
try {
|
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_constraintStart_toStartOf="@id/iv_avatar"
|
||||||
app:layout_constraintTop_toTopOf="@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
|
<TextView
|
||||||
android:id="@+id/tv_nick"
|
android:id="@+id/tv_nick"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="4dp"
|
||||||
android:textColor="@color/color_333333"
|
android:textColor="@color/color_333333"
|
||||||
android:textSize="16dp"
|
android:textSize="16dp"
|
||||||
app:layout_constraintBottom_toTopOf="@id/tv_desc"
|
app:layout_constraintBottom_toBottomOf="@id/iv_vip_icon"
|
||||||
app:layout_constraintStart_toEndOf="@id/iv_head_wear"
|
app:layout_constraintStart_toEndOf="@id/iv_vip_icon"
|
||||||
app:layout_constraintTop_toTopOf="@id/iv_avatar"
|
app:layout_constraintTop_toTopOf="@id/iv_vip_icon"
|
||||||
app:layout_constraintVertical_chainStyle="packed"
|
app:layout_goneMarginStart="10dp"
|
||||||
tools:text="这就是大哥呀呀" />
|
tools:text="这就是大哥呀呀" />
|
||||||
|
|
||||||
<ImageView
|
<TextView
|
||||||
android:id="@+id/iv_gender"
|
android:id="@+id/tv_gender_and_age"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="32dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="14dp"
|
||||||
android:layout_marginStart="4dp"
|
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_constraintBottom_toBottomOf="@id/tv_nick"
|
||||||
app:layout_constraintStart_toEndOf="@id/tv_nick"
|
app:layout_constraintStart_toEndOf="@id/tv_nick"
|
||||||
app:layout_constraintTop_toTopOf="@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
|
<TextView
|
||||||
android:id="@+id/tv_constellation"
|
android:id="@+id/tv_constellation"
|
||||||
@@ -177,7 +196,7 @@
|
|||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="10sp"
|
android:textSize="10sp"
|
||||||
app:layout_constraintBottom_toBottomOf="@id/tv_nick"
|
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"
|
app:layout_constraintTop_toTopOf="@id/tv_nick"
|
||||||
tools:text="处女座" />
|
tools:text="处女座" />
|
||||||
|
|
||||||
@@ -189,8 +208,8 @@
|
|||||||
android:textColor="#BABBCD"
|
android:textColor="#BABBCD"
|
||||||
android:textSize="14dp"
|
android:textSize="14dp"
|
||||||
app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
|
app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
|
||||||
app:layout_constraintStart_toStartOf="@id/tv_nick"
|
app:layout_constraintStart_toStartOf="@id/iv_vip_icon"
|
||||||
app:layout_constraintTop_toBottomOf="@id/tv_nick"
|
app:layout_constraintTop_toBottomOf="@id/iv_vip_icon"
|
||||||
tools:text="正在“可惜不是你…”热聊中" />
|
tools:text="正在“可惜不是你…”热聊中" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
@@ -1,5 +1,8 @@
|
|||||||
package com.mango.core.utils;
|
package com.mango.core.utils;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
public class CurrentTimeUtils {
|
public class CurrentTimeUtils {
|
||||||
|
|
||||||
private static long offsetTime;
|
private static long offsetTime;
|
||||||
@@ -12,4 +15,33 @@ public class CurrentTimeUtils {
|
|||||||
public static long getCurrentTime() {
|
public static long getCurrentTime() {
|
||||||
return System.currentTimeMillis() - offsetTime;
|
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