心动空间

This commit is contained in:
2025-11-22 18:38:49 +08:00
parent 5eac6d302c
commit 2a6d2e4709
45 changed files with 972 additions and 251 deletions

View File

@@ -0,0 +1,124 @@
package com.xscm.modulemain.activity.user.activity
import android.content.Intent
import android.os.Bundle
import com.alibaba.android.arouter.launcher.ARouter
import com.xscm.modulemain.BaseMvpActivity
import com.xscm.modulemain.R
import com.xscm.modulemain.activity.user.conacts.HeartCpContact
import com.xscm.modulemain.activity.user.presenter.HeartCpPresenter
import com.xscm.modulemain.adapter.ItemCpHeartAdapter
import com.xscm.modulemain.databinding.ActivityHeartCpBinding
import com.xscm.moduleutil.bean.HeartCpBean
import com.xscm.moduleutil.utils.ARouteConstants
import com.xscm.moduleutil.utils.ImageUtils
import com.xscm.moduleutil.utils.TimeUtils
class HeartCpActivity : BaseMvpActivity<HeartCpPresenter, ActivityHeartCpBinding>(),
HeartCpContact.View {
private var adapter: ItemCpHeartAdapter? = null
private var dataList: MutableList<HeartCpBean.GiftLog>? = arrayListOf()
private var mHeartData: HeartCpBean? = null
override fun getLayoutId(): Int {
return R.layout.activity_heart_cp
}
override fun bindPresenter(): HeartCpPresenter {
return HeartCpPresenter(this, this)
}
private var userId: Int = 0
private var leftUserId: Int = 0
private var rightUserId: Int = 0
override fun doDone() {
super.doDone()
userId = intent.getIntExtra("userId", 0)
}
override fun initData() {
MvpPre.getHeartCpData(userId)
mBinding.ivBack.setOnClickListener {
finish()
}
mBinding.ivHelp.setOnClickListener {
}
mBinding.ivHeadLeft.setOnClickListener {
if (mHeartData == null || leftUserId == 0)
return@setOnClickListener
ARouter.getInstance().build(ARouteConstants.USER_HOME_PAGE)
.withString("userId", leftUserId.toString()).navigation();
finish()
}
mBinding.ivHeadRight.setOnClickListener {
if (mHeartData == null || rightUserId == 0)
return@setOnClickListener
ARouter.getInstance().build(ARouteConstants.USER_HOME_PAGE)
.withString("userId", rightUserId.toString()).navigation()
finish()
}
adapter?.setOnItemClickListener { adapter, view, position ->
ARouter.getInstance().build(ARouteConstants.USER_HOME_PAGE)
.withString("userId", mHeartData?.gift_log!![position].from_user_id.toString())
.navigation();
finish()
}
}
override fun initView() {
super.initView()
adapter = ItemCpHeartAdapter(this, userId, R.layout.item_heart_cp_layout, dataList)
mBinding.recycleView.adapter = adapter
}
override fun getHeartCpData(heartCpBean: HeartCpBean?) {
if (heartCpBean == null) {
return
}
mHeartData = heartCpBean
if (userId == heartCpBean.user_id1) {
ImageUtils.loadHead(heartCpBean.user_info1.avatar, mBinding.ivHeadLeft)
ImageUtils.loadHead(heartCpBean.user_info2.avatar, mBinding.ivHeadRight)
leftUserId = heartCpBean.user_id1
rightUserId = heartCpBean.user_id2
} else {
ImageUtils.loadHead(heartCpBean.user_info2.avatar, mBinding.ivHeadLeft)
ImageUtils.loadHead(heartCpBean.user_info1.avatar, mBinding.ivHeadRight)
leftUserId = heartCpBean.user_id2
rightUserId = heartCpBean.user_id1
}
mBinding.cpAnim.setSource(heartCpBean.pendant, 1)
val xd = heartCpBean.next_level_exp
if (xd >= 10000) {
mBinding.tvExperience.text = String.format("%.0fw", xd / 10000.0f)
} else {
mBinding.tvExperience.text = xd.toString()
}
adapter?.setNewData(heartCpBean.gift_log)
val day = TimeUtils.formatDurationDaysOnly(
heartCpBean.createtime * 1000 - System.currentTimeMillis()
)
mBinding.tvHeartTime.text = "我们在一起${day}"
}
}

View File

@@ -0,0 +1,19 @@
package com.xscm.modulemain.activity.user.conacts
import android.app.Activity
import com.xscm.moduleutil.activity.IPresenter
import com.xscm.moduleutil.activity.IView
import com.xscm.moduleutil.bean.HeartCpBean
class HeartCpContact {
interface View : IView<Activity>{
fun getHeartCpData(heartCpBean: HeartCpBean?)
}
interface IPre : IPresenter {
fun getHeartCpData(userId: Int)
}
}

View File

@@ -19,22 +19,20 @@ import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.recyclerview.widget.GridLayoutManager;
import com.alibaba.android.arouter.launcher.ARouter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.blankj.utilcode.util.ActivityUtils;
import com.google.android.flexbox.FlexboxLayout;
import com.xscm.modulemain.Application;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.user.activity.GiftWallActivity;
import com.xscm.modulemain.activity.user.activity.ui.main.BosomFriendFragment;
import com.xscm.modulemain.databinding.FragmentUserHompageBinding;
import com.tencent.imsdk.v2.V2TIMConversation;
import com.tencent.qcloud.tuicore.TUIConstants;
import com.tencent.qcloud.tuikit.tuichat.classicui.page.TUIC2CChatActivity;
import com.xscm.modulemain.Application;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.user.activity.GiftWallActivity;
import com.xscm.modulemain.activity.user.activity.HeartCpActivity;
import com.xscm.modulemain.activity.user.activity.ui.main.BosomFriendFragment;
import com.xscm.modulemain.activity.user.conacts.UserHomepageConacts;
import com.xscm.modulemain.activity.user.presenter.UserHomepagePresenter;
import com.xscm.modulemain.databinding.FragmentUserHompageBinding;
import com.xscm.modulemain.manager.RoomManager;
import com.xscm.moduleutil.base.BaseMvpFragment;
import com.xscm.moduleutil.bean.CircleListBean;
@@ -44,7 +42,6 @@ import com.xscm.moduleutil.bean.RelationshipBean;
import com.xscm.moduleutil.bean.UserInfo;
import com.xscm.moduleutil.bean.UserTagBean;
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
import com.xscm.moduleutil.utils.ARouteConstants;
import com.xscm.moduleutil.utils.ColorManager;
import com.xscm.moduleutil.utils.ImageUtils;
import com.xscm.moduleutil.utils.SpUtil;
@@ -236,6 +233,16 @@ public class UserHomepageFragment extends BaseMvpFragment<UserHomepagePresenter,
if (userInfo.getCp_info() != null) {
mBinding.headerInfo.llCp.setVisibility(VISIBLE);
mBinding.headerInfo.rlCpAnim.setVisibility(VISIBLE);
mBinding.headerInfo.llCp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ActivityUtils.getTopActivity(), HeartCpActivity.class);
intent.putExtra("userId",userInfo.getUser_id());
startActivity(intent);
}
});
ImageUtils.loadHeadCC(userInfo.getCp_info().user_info1.avatar, mBinding.headerInfo.userNav1);
ImageUtils.loadHeadCC(userInfo.getCp_info().user_info2.avatar, mBinding.headerInfo.userNav2);
mBinding.headerInfo.tvNickname1.setText(userInfo.getCp_info().user_info1.nickname);

View File

@@ -0,0 +1,30 @@
package com.xscm.modulemain.activity.user.presenter
import android.content.Context
import com.xscm.modulemain.activity.user.conacts.HeartCpContact
import com.xscm.moduleutil.bean.HeartCpBean
import com.xscm.moduleutil.http.BaseObserver
import com.xscm.moduleutil.presenter.BasePresenter
import io.reactivex.disposables.Disposable
import java.lang.ref.WeakReference
class HeartCpPresenter(view: HeartCpContact.View, context: Context) :
BasePresenter<HeartCpContact.View>(view, context), HeartCpContact.IPre {
override fun getHeartCpData(userId: Int) {
api.getCpRoom(userId.toString(), object : BaseObserver<HeartCpBean>() {
override fun onSubscribe(d: Disposable) {
addDisposable(d)
}
override fun onNext(t: HeartCpBean) {
if (MvpRef == null) {
MvpRef = WeakReference(view);
}
MvpRef.get()?.getHeartCpData(t)
}
})
}
}

View File

@@ -0,0 +1,61 @@
package com.xscm.modulemain.adapter
import android.content.Context
import android.text.SpannableStringBuilder
import android.text.SpannedString
import android.text.style.ForegroundColorSpan
import android.widget.TextView
import androidx.compose.ui.graphics.Color
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.xscm.modulemain.R
import com.xscm.moduleutil.bean.HeartCpBean
import com.xscm.moduleutil.utils.ImageUtils
import com.xscm.moduleutil.utils.TimeUtils
class ItemCpHeartAdapter(
val context: Context,
val userId: Int,
layoutId: Int,
data: MutableList<HeartCpBean.GiftLog>?
) :
BaseQuickAdapter<HeartCpBean.GiftLog, BaseViewHolder>(layoutId, data) {
override fun convert(helper: BaseViewHolder, item: HeartCpBean.GiftLog) {
ImageUtils.loadHead(item.from_user_info.avatar, helper.getView(R.id.iv_head))
helper.setText(R.id.tv_name, item.from_user_info.nickname)
helper.setText(R.id.tv_time, TimeUtils.getDateToStringNoZ(item.createtime))
val tv = helper.getView(R.id.tv_name) as TextView
val cid = if (userId == item.from_user_id) {
tv.setTextColor(context.getColor(R.color.ffff53cc))
R.color.ffff53cc
} else {
tv.setTextColor(context.getColor(R.color.ff4a89ff))
R.color.ff4a89ff
}
if (item.remark.contains(userId.toString())) {
val builder = getContentColor(item.from_user_info.nickname, item.remark, cid)
helper.setText(R.id.tv_content, builder)
} else {
helper.setText(R.id.tv_content, item.remark)
}
}
private fun getContentColor(
userName: String,
content: String,
cid: Int
): SpannableStringBuilder {
val builder = SpannableStringBuilder()
val start = content.indexOf(userName)
val end = start + userName.length
builder.append(content)
val colorSpan = ForegroundColorSpan(context.getColor(cid))
builder.setSpan(colorSpan, start, end, SpannedString.SPAN_EXCLUSIVE_EXCLUSIVE)
return builder
}
}

View File

@@ -24,11 +24,13 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.ActivityUtils;
import com.blankj.utilcode.util.LogUtils;
import com.xscm.modulemain.Application;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.room.contacts.RoomUserContacts;
import com.xscm.modulemain.activity.user.activity.GiftWallActivity;
import com.xscm.modulemain.activity.user.activity.HeartCpActivity;
import com.xscm.modulemain.databinding.FragmentRoomUserInfoBinding;
import com.xscm.modulemain.activity.room.fragment.RelationshipFragment;
import com.xscm.modulemain.activity.room.presenter.RoomUserPresenter;
@@ -233,8 +235,8 @@ public class RoomUserInfoFragment extends BaseMvpDialogFragment<RoomUserPresente
MvpPre.addBlackList(user_id);
} else if (id == R.id.room_rl_gift) {
// ARouter.getInstance().build(ARouteConstants.USER_HOME_PAGE).withString("userId", userInfo.getUser_id() + "").withInt("type", 1).navigation();
Intent intent=new Intent(getContext(), GiftWallActivity.class);
intent.putExtra("userId",userInfo.getUser_id());
Intent intent = new Intent(getContext(), GiftWallActivity.class);
intent.putExtra("userId", userInfo.getUser_id());
startActivity(intent);
} else if (id == R.id.room_jb) {
Intent intent = new Intent(getActivity(), WebViewActivity.class);
@@ -477,7 +479,7 @@ public class RoomUserInfoFragment extends BaseMvpDialogFragment<RoomUserPresente
if (userInfo.getGuild().isEmpty()) {
mBinding.tvGh.setText("所属公会:无");
} else {
if (userInfo.getUser_id() != SpUtil.getUserId() && !userInfo.getGuild().equals(SpUtil.getUserInfo().getGuild())){
if (userInfo.getUser_id() != SpUtil.getUserId() && !userInfo.getGuild().equals(SpUtil.getUserInfo().getGuild())) {
mBinding.tvJoinGuild.setVisibility(VISIBLE);
}
@@ -505,6 +507,16 @@ public class RoomUserInfoFragment extends BaseMvpDialogFragment<RoomUserPresente
private void showCp() {
if (userInfo.getCp_info() != null) {
mBinding.ll.setVisibility(VISIBLE);
mBinding.ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ActivityUtils.getTopActivity(), HeartCpActivity.class);
intent.putExtra("userId",userInfo.getUser_id());
startActivity(intent);
}
});
ImageUtils.loadHeadCC(userInfo.getCp_info().user_info1.avatar, mBinding.userNav1);
ImageUtils.loadHeadCC(userInfo.getCp_info().user_info2.avatar, mBinding.userNav2);
mBinding.tvNickname1.setText(userInfo.getCp_info().user_info1.nickname);
@@ -514,22 +526,22 @@ public class RoomUserInfoFragment extends BaseMvpDialogFragment<RoomUserPresente
long xd = Long.parseLong(userInfo.getCp_info().exp);
if (xd >= 10000) {
mBinding.tvCpNum.setText(String.format("%.2fw", xd / 10000.0f));
mBinding.tvCpNum.setText(String.format("%.1fw", xd / 10000.0f));
} else {
mBinding.tvCpNum.setText(String.valueOf(xd));
}
mBinding.cpAnim.setSource(userInfo.getCp_info().pendant, 1);
if (userInfo.getProfile().isEmpty()){
if (userInfo.getProfile().isEmpty()) {
mBinding.jianj.setText("");
mBinding.jianj.setVisibility(GONE);
}else {
} else {
mBinding.jianj.setText(userInfo.getProfile());
mBinding.jianj.setVisibility(VISIBLE);
}
if (!userInfo.getIcon().isEmpty()){
if (!userInfo.getIcon().isEmpty()) {
mBinding.flexEntry.setVisibility(VISIBLE);
for (String url : userInfo.getIcon()) {
if (url.contains("http")) {
@@ -538,21 +550,20 @@ public class RoomUserInfoFragment extends BaseMvpDialogFragment<RoomUserPresente
LinearLayout.LayoutParams.WRAP_CONTENT,
Application.getInstance().getResources().getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_20)
);
params.setMargins(0, 0,Application.getInstance().getResources().getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_5), 0); // 右边距
params.setMargins(0, 0, Application.getInstance().getResources().getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_5), 0); // 右边距
imageView1.setLayoutParams(params);
imageView1.setScaleType(ImageView.ScaleType.FIT_START);
// 使用 Glide 加载图片
ImageUtils.loadHeadCC(url, imageView1,params);
ImageUtils.loadHeadCC(url, imageView1, params);
mBinding.flexEntry.addView(imageView1);
}
}
}else {
} else {
mBinding.flexEntry.setVisibility(GONE);
}
ImageUtils.loadHeadCC(userInfo.getCp_info().user_info1.avatar, mBinding.ivCp1);
ImageUtils.loadHeadCC(userInfo.getCp_info().user_info2.avatar, mBinding.ivCp2);
ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT,