From 7fd8892f3c0107fda7c7e5922e4149c6662b8380 Mon Sep 17 00:00:00 2001 From: wushaocheng <15876365887@163.com> Date: Fri, 21 Oct 2022 20:59:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BD=AC=E8=B5=A0=E9=92=BB?= =?UTF-8?q?=E7=9F=B3=E9=80=BB=E8=BE=91=E5=92=8Cui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 12 ++ .../erban/application/XChatApplication.java | 2 +- .../com/yizhuan/erban/home/MeViewModel.kt | 7 +- .../yizhuan/erban/home/fragment/MeFragment.kt | 4 + .../com/yizhuan/erban/pay/GiveGoldModel.kt | 41 +++++ .../erban/pay/activity/GiveGoldActivity.kt | 150 ++++++++++++------ .../pay/activity/GiveGoldSearchActivity.kt | 4 +- .../pay/activity/GiveGoldToUserActivity.kt | 75 ++++++++- .../erban/pay/adapter/GiveSearchAdapter.kt | 15 +- .../erban/pay/adapter/LatelyGiveAdapter.kt | 31 +--- .../erban/ui/webview/SimpleJSInterface.java | 2 +- .../res/drawable-xhdpi/me_clean_diamond.webp | Bin 0 -> 2966 bytes .../res/layout/activity_give_gold_to_user.xml | 1 + app/src/main/res/layout/fragment_me.xml | 90 +++++++---- app/src/main/res/layout/item_lately_give.xml | 42 ++--- app/src/main/res/values/strings.xml | 2 + .../res/drawable-xhdpi/bg_search_user.webp | Bin 0 -> 23034 bytes .../res/layout/activity_give_gold.xml | 63 +++++--- .../home/model/HomeModel.kt | 33 ++++ .../initial/bean/InitInfo.java | 7 + .../xchat_android_core/pay/PayModel.java | 6 +- .../xchat_android_core/user/IUserModel.java | 3 +- .../xchat_android_core/user/UserModel.java | 10 +- .../user/bean/DiamondGiveHistoryInfo.java | 22 +++ .../user/bean/SearchUserInfo.java | 36 +++++ .../utils/AppMetaDataUtil.java | 2 +- 26 files changed, 474 insertions(+), 186 deletions(-) create mode 100644 app/src/main/java/com/yizhuan/erban/pay/GiveGoldModel.kt create mode 100644 app/src/main/res/drawable-xhdpi/me_clean_diamond.webp create mode 100644 app/src/module_community/res/drawable-xhdpi/bg_search_user.webp create mode 100644 core/src/main/java/com/yizhuan/xchat_android_core/user/bean/DiamondGiveHistoryInfo.java create mode 100644 core/src/main/java/com/yizhuan/xchat_android_core/user/bean/SearchUserInfo.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bcc5506fc..a23e7b20f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -852,6 +852,18 @@ + + + ?>() - val bannerLiveData: MutableLiveData?> = _bannerLiveData - private val _meCenterInfoLiveData = MutableLiveData?>() val meCenterInfoLiveData: MutableLiveData?> = _meCenterInfoLiveData + private val _bannerLiveData = MutableLiveData?>() + val bannerLiveData: MutableLiveData?> = _bannerLiveData + init { refreshData() } diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.kt b/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.kt index d5f6cd897..eb59c1862 100644 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.kt @@ -25,6 +25,7 @@ import com.yizhuan.erban.home.helper.BannerHelper import com.yizhuan.erban.home.helper.OpenRoomHelper import com.yizhuan.erban.module_hall.hall.activity.ModuleClanActivity import com.yizhuan.erban.module_hall.hall.activity.ModuleHallActivity +import com.yizhuan.erban.pay.activity.GiveGoldActivity import com.yizhuan.erban.ui.pay.ChargeActivity import com.yizhuan.erban.ui.relation.AttentionListActivity import com.yizhuan.erban.ui.relation.FansListActivity @@ -383,6 +384,9 @@ class MeFragment : BaseFragment(), View.OnClickListener { Constants.WXPAY_REFERER + "peko/modules/myincome/index.html#/DiamondLog" ) } + R.id.ll_clean_diamonds -> { + GiveGoldActivity.start(mContext) + } else -> {} } } diff --git a/app/src/main/java/com/yizhuan/erban/pay/GiveGoldModel.kt b/app/src/main/java/com/yizhuan/erban/pay/GiveGoldModel.kt new file mode 100644 index 000000000..71b75896c --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/pay/GiveGoldModel.kt @@ -0,0 +1,41 @@ +package com.yizhuan.erban.pay + +import androidx.lifecycle.MutableLiveData +import com.yizhuan.erban.base.BaseViewModel +import com.yizhuan.xchat_android_core.bean.response.ListResult +import com.yizhuan.xchat_android_core.home.model.HomeModel +import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo +import com.yizhuan.xchat_android_core.user.bean.SearchUserInfo + +class GiveGoldModel : BaseViewModel() { + + private val _diamondGiveHistoryLiveData = MutableLiveData?>() + val diamondGiveHistoryLiveData: MutableLiveData?> = _diamondGiveHistoryLiveData + + private val _searchUserLiveData = MutableLiveData() + val searchUserLiveData: MutableLiveData = _searchUserLiveData + + fun getDiamondListInfo(pageNum:Int, pageSize: Int) { + safeLaunch( + onError = { + _diamondGiveHistoryLiveData.value = ListResult.failed(pageNum) + }, + block = { + val result = HomeModel.getDiamondGiveHistory(pageNum, pageSize) + _diamondGiveHistoryLiveData.value = ListResult.success(result, pageNum) + } + ) + } + + fun getSearchUserInfo(erbanNo:Long) { + safeLaunch( + onError = { + _searchUserLiveData.value = null + }, + block = { + _searchUserLiveData.value = HomeModel.getSearchUser(erbanNo) + } + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldActivity.kt b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldActivity.kt index c26615470..22efe6fa1 100644 --- a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldActivity.kt @@ -1,67 +1,121 @@ package com.yizhuan.erban.pay.activity import android.annotation.SuppressLint -import android.app.Activity +import android.content.Context import android.content.Intent -import android.os.Bundle +import android.text.TextUtils +import android.view.KeyEvent +import android.view.inputmethod.EditorInfo +import android.widget.TextView.OnEditorActionListener +import androidx.activity.viewModels import androidx.recyclerview.widget.LinearLayoutManager -import com.yinyuan.doudou.pay.activity.GiveGoldSearchActivity -import com.yinyuan.doudou.pay.adapter.LatelyGiveAdapter +import com.netease.nim.uikit.StatusBarUtil import com.yizhuan.erban.R -import com.yizhuan.erban.base.BaseActivity +import com.yizhuan.erban.base.BaseViewBindingActivity import com.yizhuan.erban.common.EmptyViewHelper -import com.yizhuan.xchat_android_core.room.bean.SearchRoomInfo -import com.yizhuan.xchat_android_core.user.UserModel -import com.yizhuan.xchat_android_core.user.bean.UserInfo +import com.yizhuan.erban.databinding.ActivityGiveGoldBinding +import com.yizhuan.erban.pay.GiveGoldModel +import com.yizhuan.erban.pay.adapter.LatelyGiveAdapter +import com.yizhuan.erban.ui.utils.RVDelegate +import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo import com.yizhuan.xchat_android_library.utils.ResUtil -import kotlinx.android.synthetic.main.activity_give_gold.* +/** + * 轉贈鉆石頁面 + */ +class GiveGoldActivity : BaseViewBindingActivity() { -class GiveGoldActivity : BaseActivity() { + private var pageNum: Int = 1 + private val pageSize = 20 + private lateinit var mAdapter: LatelyGiveAdapter + private lateinit var rvDelegate: RVDelegate - private lateinit var adapter: LatelyGiveAdapter + private val giveGoldModel: GiveGoldModel by viewModels() - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_give_gold) - initTitleBar(ResUtil.getString(R.string.pay_activity_givegoldactivity_01)) - recyclerView.layoutManager = LinearLayoutManager(this) - adapter = LatelyGiveAdapter() - adapter.bindToRecyclerView(recyclerView) - adapter.emptyView = EmptyViewHelper.createEmptyView(this, ResUtil.getString(R.string.pay_activity_givegoldactivity_02)) - adapter.setOnItemClickListener { _, _, position -> - adapter.getItem(position)?.let { + companion object { + fun start(context: Context) { + val intent = Intent(context, GiveGoldActivity::class.java) + context.startActivity(intent) + } + } + + override fun init() { + initTitleBar(ResUtil.getString(R.string.me_clean_diamond)) + binding.etSearch.setOnEditorActionListener(OnEditorActionListener { v, actionId, event -> //以下方法防止两次发送请求 + if (actionId == EditorInfo.IME_ACTION_SEARCH && event != null || event != null && event.keyCode == KeyEvent.KEYCODE_ENTER) { + if (event.action == KeyEvent.ACTION_UP) { //发送请求 + val newStr: String = binding.etSearch.text.toString().trim { it <= ' ' } + if (!TextUtils.isEmpty(newStr)) { + giveGoldModel.getSearchUserInfo(newStr.toLong()) + } + return@OnEditorActionListener true //自己消费 + } + return@OnEditorActionListener true + } + false + }) + binding.mTvSearch.setOnClickListener { + val newStr: String = binding.etSearch.text.toString().trim { it <= ' ' } + if (!TextUtils.isEmpty(newStr)) { + giveGoldModel.getSearchUserInfo(newStr.toLong()) + } + } + + mAdapter = LatelyGiveAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(mAdapter) + .setLayoutManager(LinearLayoutManager(this)) + .setPageSize(20) + .setEmptyView( + EmptyViewHelper.createEmptyView( + this, + ResUtil.getString(R.string.me_give_gold_empty) + ) + ) + .setRefreshLayout(binding.refreshLayout) + .setRecyclerView(binding.recyclerView) + .build() + mAdapter.setOnItemClickListener { _, _, position -> + mAdapter.getItem(position)?.let { GiveGoldToUserActivity.start(this, it) } } - llSearch.setOnClickListener { GiveGoldSearchActivity.start(this) } - } - - @SuppressLint("CheckResult") - override fun onResume() { - super.onResume() - UserModel.get().giveUserList - .compose(bindToLifecycle()) - .doOnError { toast(it.message) } - .subscribe { users -> - adapter.setNewData(users.filterNotNull()) - } - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == Activity.RESULT_OK && requestCode == GiveGoldSearchActivity.REQUEST_CODE) { - GiveGoldToUserActivity.start(this, UserInfo().apply { - val room = data?.getParcelableExtra("searchRoomInfo") - room?.let { - birth = it.birth - erbanNo = it.erbanNo - uid = it.uid - nick = it.nick - avatar = it.avatar - } - }) + mAdapter.setOnLoadMoreListener({ + loadData(false) + }, binding.recyclerView) + binding.refreshLayout.setOnRefreshListener { + loadData(true) + } + giveGoldModel.diamondGiveHistoryLiveData.observe(this) { + rvDelegate.loadData(it) + } + giveGoldModel.searchUserLiveData.observe(this) { + it?.let { + GiveGoldToUserActivity.start(this, it) + } } } + override fun onResume() { + super.onResume() + loadData(true) + } + + @SuppressLint("CheckResult") + fun loadData(isRefresh: Boolean) { + binding.refreshLayout.isRefreshing = isRefresh + pageNum = if (isRefresh) 1 else (pageNum + 1) + giveGoldModel.getDiamondListInfo(pageNum, pageSize) + } + + override fun setStatusBar() { + super.setStatusBar() + StatusBarUtil.transparencyBar(this) + StatusBarUtil.StatusBarLightMode(this) + } + + override fun needSteepStateBar(): Boolean { + return true + } + } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldSearchActivity.kt b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldSearchActivity.kt index 2b2b52d95..c0f460752 100644 --- a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldSearchActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldSearchActivity.kt @@ -1,4 +1,4 @@ -package com.yinyuan.doudou.pay.activity +package com.yizhuan.erban.pay.activity import android.annotation.SuppressLint @@ -9,10 +9,10 @@ import android.os.Parcelable import android.text.Editable import android.text.TextWatcher import androidx.recyclerview.widget.LinearLayoutManager -import com.yinyuan.doudou.pay.adapter.GiveSearchAdapter import com.yizhuan.erban.R import com.yizhuan.erban.base.BaseActivity import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.pay.adapter.GiveSearchAdapter import com.yizhuan.erban.ui.utils.RVDelegate import com.yizhuan.xchat_android_core.room.bean.SearchRoomInfo import com.yizhuan.xchat_android_core.room.model.AvRoomModel diff --git a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldToUserActivity.kt b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldToUserActivity.kt index 086d707f6..60b501d37 100644 --- a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldToUserActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldToUserActivity.kt @@ -7,12 +7,15 @@ import android.os.Bundle import android.text.Editable import android.text.TextWatcher import com.jungly.gridpasswordview.GridPasswordView +import com.netease.nim.uikit.StatusBarUtil import com.yizhuan.erban.R import com.yizhuan.erban.base.BaseActivity import com.yizhuan.erban.pay.password.GiveGoldPassWordFragment import com.yizhuan.erban.ui.utils.ImageLoadUtils import com.yizhuan.xchat_android_core.DemoCache import com.yizhuan.xchat_android_core.pay.PayModel +import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo +import com.yizhuan.xchat_android_core.user.bean.SearchUserInfo import com.yizhuan.xchat_android_core.user.bean.UserInfo import com.yizhuan.xchat_android_library.utils.ResUtil import kotlinx.android.synthetic.main.activity_give_gold_to_user.* @@ -21,27 +24,68 @@ class GiveGoldToUserActivity : BaseActivity(), GridPasswordView.OnPasswordChange companion object { @JvmStatic - fun start(context: Context, user: UserInfo) { + fun start(context: Context, user: DiamondGiveHistoryInfo) { val intent = Intent(context, GiveGoldToUserActivity::class.java) intent.putExtra("user", user) context.startActivity(intent) } + + @JvmStatic + fun start(context: Context, searchUser: SearchUserInfo) { + val intent = Intent(context, GiveGoldToUserActivity::class.java) + intent.putExtra("searchUser", searchUser) + context.startActivity(intent) + } } - private var userInfo: UserInfo? = null + private var userInfo: DiamondGiveHistoryInfo? = null + private var searchUserInfo: SearchUserInfo? = null private var passWordFragment: GiveGoldPassWordFragment? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_give_gold_to_user) - userInfo = intent.getSerializableExtra("user") as UserInfo? + userInfo = intent.getSerializableExtra("user") as DiamondGiveHistoryInfo? + searchUserInfo = intent.getSerializableExtra("searchUser") as SearchUserInfo? init() } + override fun setStatusBar() { + super.setStatusBar() + StatusBarUtil.transparencyBar(this) + StatusBarUtil.StatusBarLightMode(this) + } + + override fun needSteepStateBar(): Boolean { + return true + } + @SuppressLint("SetTextI18n") private fun init() { - initTitleBar(ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_01)) + initTitleBar(ResUtil.getString(R.string.me_clean_diamond)) userInfo?.apply { + tvId.text = "Id:${targetErbanNo}" + tvNickname.text = targetNick + ImageLoadUtils.loadAvatar(context, targetAvatar, ivAvatar) + val initInfo = DemoCache.readInitInfo() + editGold.hint = if (initInfo.redEnvelopeConfig.rate == 0.0) ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_02) else ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_03) + tv_desc.text = if (initInfo.redEnvelopeConfig.rate == 0.0) ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_04) else ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_05) + + tvSure.setOnClickListener { + val gold = editGold.text.toString().toInt() + if (gold <= 0) { + toast(ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_06)) + return@setOnClickListener + } + val rateGold = gold * initInfo.redEnvelopeConfig.rate / 100 + GiveGoldPassWordFragment.newInstance(supportFragmentManager, gold.toString(), targetNick, if (rateGold == 0.0) "" else "手續費:(${initInfo.redEnvelopeConfig.rate.toInt()}%): ${rateGold}鉆石") + .apply { + passWordFragment = this + setListener(this@GiveGoldToUserActivity) + } + } + } + searchUserInfo?.apply { tvId.text = "Id:${erbanNo}" tvNickname.text = nick ImageLoadUtils.loadAvatar(context, avatar, ivAvatar) @@ -50,12 +94,12 @@ class GiveGoldToUserActivity : BaseActivity(), GridPasswordView.OnPasswordChange tv_desc.text = if (initInfo.redEnvelopeConfig.rate == 0.0) ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_04) else ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_05) tvSure.setOnClickListener { - var gold = editGold.text.toString().toInt() + val gold = editGold.text.toString().toInt() if (gold <= 0) { toast(ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_06)) return@setOnClickListener } - var rateGold = gold * initInfo.redEnvelopeConfig.rate / 100 + val rateGold = gold * initInfo.redEnvelopeConfig.rate / 100 GiveGoldPassWordFragment.newInstance(supportFragmentManager, gold.toString(), nick, if (rateGold == 0.0) "" else "手續費:(${initInfo.redEnvelopeConfig.rate.toInt()}%): ${rateGold}鉆石") .apply { passWordFragment = this @@ -71,12 +115,29 @@ class GiveGoldToUserActivity : BaseActivity(), GridPasswordView.OnPasswordChange override fun onInputFinish(psw: String) { } + @SuppressLint("CheckResult") override fun onTextChanged(psw: String) { val password = passWordFragment?.password?.password ?: "" if (password.length == 6) { userInfo?.apply { dialogManager.showProgressDialog(context) - PayModel.get().giveGold(uid, editGold.text.toString(), password) + PayModel.get().giveGold(targetUid, editGold.text.toString(), DESAndBase64(password)) + .compose(bindToLifecycle()) + .doOnError { + toast(it.message) + passWordFragment?.password?.clearPassword() + dialogManager.dismissDialog() + } + .subscribe { _ -> + passWordFragment?.dismissAllowingStateLoss() + dialogManager.dismissDialog() + finish() + GiveGoldSuccessActivity.start(context, editGold.text.toString(), targetNick) + } + } + searchUserInfo?.apply { + dialogManager.showProgressDialog(context) + PayModel.get().giveGold(uid, editGold.text.toString(), DESAndBase64(password)) .compose(bindToLifecycle()) .doOnError { toast(it.message) diff --git a/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveSearchAdapter.kt b/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveSearchAdapter.kt index 112f6f4d9..d299d84a0 100644 --- a/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveSearchAdapter.kt +++ b/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveSearchAdapter.kt @@ -1,4 +1,4 @@ -package com.yinyuan.doudou.pay.adapter +package com.yizhuan.erban.pay.adapter import android.annotation.SuppressLint import android.graphics.Color @@ -18,20 +18,7 @@ class GiveSearchAdapter : BaseQuickAdapter(R.lay override fun convert(helper: BaseViewHolder, item: SearchRoomInfo) { helper.getView(R.id.tv_id).text = "Id:${item.erbanNo}" helper.getView(R.id.tv_nickname).text = item.nick - setGenderAndBirth(helper.getView(R.id.tv_gender), item.gender, item.birth) ImageLoadUtils.loadAvatar(mContext, item.avatar, helper.getView(R.id.iv_avatar)) } - private fun setGenderAndBirth(tvGender: SuperTextView, gender: Int, birth: Long) { - if (gender == 1) { - tvGender.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_man_white, 0, 0, 0) - tvGender.solid = Color.parseColor("#FF72D1E7") - } - if (gender == 2) { - tvGender.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_women_white, 0, 0, 0) - tvGender.solid = Color.parseColor("#FFEF82B6") - } - tvGender.text = ((CurrentTimeUtils.getCurrentTime() - birth) / 1000 / 60 / 60 / 24 / 365).toString() - - } } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/pay/adapter/LatelyGiveAdapter.kt b/app/src/main/java/com/yizhuan/erban/pay/adapter/LatelyGiveAdapter.kt index 3d493eef3..68982be43 100644 --- a/app/src/main/java/com/yizhuan/erban/pay/adapter/LatelyGiveAdapter.kt +++ b/app/src/main/java/com/yizhuan/erban/pay/adapter/LatelyGiveAdapter.kt @@ -1,37 +1,22 @@ -package com.yinyuan.doudou.pay.adapter +package com.yizhuan.erban.pay.adapter import android.annotation.SuppressLint -import android.graphics.Color import android.widget.TextView import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder -import com.coorchice.library.SuperTextView import com.yizhuan.erban.R import com.yizhuan.erban.ui.utils.ImageLoadUtils -import com.yizhuan.xchat_android_core.user.bean.UserInfo -import com.yizhuan.xchat_android_core.utils.CurrentTimeUtils +import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo -class LatelyGiveAdapter : BaseQuickAdapter(R.layout.item_lately_give) { +class LatelyGiveAdapter : + BaseQuickAdapter(R.layout.item_lately_give) { @SuppressLint("SetTextI18n") - override fun convert(helper: BaseViewHolder, item: UserInfo) { - helper.getView(R.id.tv_id).text = "Id:${item.erbanNo}" - helper.getView(R.id.tv_nickname).text = item.nick - setGenderAndBirth(helper.getView(R.id.tv_gender), item.gender, item.birth) - ImageLoadUtils.loadAvatar(mContext, item.avatar, helper.getView(R.id.iv_avatar)) + override fun convert(helper: BaseViewHolder, item: DiamondGiveHistoryInfo) { + helper.getView(R.id.tv_id).text = "Id:${item.targetErbanNo}" + helper.getView(R.id.tv_nickname).text = item.targetNick + ImageLoadUtils.loadAvatar(mContext, item.targetAvatar, helper.getView(R.id.iv_avatar)) } - private fun setGenderAndBirth(tvGender: SuperTextView, gender: Int, birth: Long) { - if (gender == 1) { - tvGender.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_man_white, 0, 0, 0) - tvGender.solid = Color.parseColor("#FF72D1E7") - } - if (gender == 2) { - tvGender.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.ic_women_white, 0, 0, 0) - tvGender.solid = Color.parseColor("#FFEF82B6") - } - tvGender.text = ((CurrentTimeUtils.getCurrentTime() - birth) / 1000 / 60 / 60 / 24 / 365).toString() - - } } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/webview/SimpleJSInterface.java b/app/src/main/java/com/yizhuan/erban/ui/webview/SimpleJSInterface.java index de217af16..63f9b241e 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/webview/SimpleJSInterface.java +++ b/app/src/main/java/com/yizhuan/erban/ui/webview/SimpleJSInterface.java @@ -90,7 +90,7 @@ public class SimpleJSInterface { String channel; channel = ChannelReaderUtil.getChannel(XChatApplication.instance()); if (TextUtils.isEmpty(channel)) { - channel = "official"; + channel = "google"; } return channel; } diff --git a/app/src/main/res/drawable-xhdpi/me_clean_diamond.webp b/app/src/main/res/drawable-xhdpi/me_clean_diamond.webp new file mode 100644 index 0000000000000000000000000000000000000000..53d67e83df8bc230203f6817b72397d19c52ad43 GIT binary patch literal 2966 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 - + + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="horizontal"> + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/dp_3" + android:layout_marginTop="@dimen/dp_2" + android:src="@drawable/ic_diamond_arrow" /> @@ -377,10 +377,10 @@ android:textStyle="bold" /> + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="horizontal"> + android:layout_height="wrap_content" + android:layout_marginStart="3dp" + android:layout_marginTop="2dp" + android:src="@drawable/ic_vip_arrow" /> @@ -463,16 +463,16 @@ android:layout_height="@dimen/dp_30" android:layout_marginStart="@dimen/dp_18" android:onClick="@{click}" - android:visibility="gone" - android:src="@drawable/default_avatar" /> + android:src="@drawable/default_avatar" + android:visibility="gone" /> + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/dp_18" + android:src="@drawable/icon_guild" + android:visibility="visible" /> @@ -554,11 +556,12 @@ android:id="@+id/ll_gain" android:layout_width="0dp" android:layout_height="0dp" + android:layout_marginTop="@dimen/dp_12" android:gravity="center" android:onClick="@{click}" - android:orientation="horizontal" + android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintEnd_toStartOf="@+id/ll_clean_diamonds" app:layout_constraintHorizontal_weight="1" app:layout_constraintStart_toEndOf="@+id/ll_room" app:layout_constraintTop_toBottomOf="@+id/tv_my_center"> @@ -571,13 +574,44 @@ + + + + + + + + - - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 272bb4c0b..a77e5d4c9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -965,6 +965,7 @@ 個人中心 我的房間 收益記錄 + 轉贈鉆石 請聯系客服處理 @@ -4905,5 +4906,6 @@ 複製鏈接 公會周榜 還沒有公會榜單哦 + 暫無轉贈記錄 \ No newline at end of file diff --git a/app/src/module_community/res/drawable-xhdpi/bg_search_user.webp b/app/src/module_community/res/drawable-xhdpi/bg_search_user.webp new file mode 100644 index 0000000000000000000000000000000000000000..ba80e92168a56cf205e2d082fa074a6f7f863cfc GIT binary patch literal 23034 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 - + android:textSize="@dimen/sp_12" /> + + @@ -53,13 +73,20 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/llSearch" /> - + app:layout_constraintTop_toBottomOf="@+id/tvLately" + app:layout_constraintBottom_toBottomOf="parent"> + + + \ No newline at end of file diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/HomeModel.kt b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/HomeModel.kt index 9408a5801..ea8f67b60 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/HomeModel.kt +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/home/model/HomeModel.kt @@ -12,6 +12,8 @@ import com.yizhuan.xchat_android_core.room.bean.HomeLiveTopInfo import com.yizhuan.xchat_android_core.room.bean.MeCenterInfo import com.yizhuan.xchat_android_core.room.bean.SingleRoomSortInfo import com.yizhuan.xchat_android_core.room.game.GameInfo +import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo +import com.yizhuan.xchat_android_core.user.bean.SearchUserInfo import com.yizhuan.xchat_android_core.user.bean.UserInfo import com.yizhuan.xchat_android_core.utils.net.RxHelper import com.yizhuan.xchat_android_core.utils.net.launchRequest @@ -101,6 +103,16 @@ object HomeModel : BaseModel() { ) } + suspend fun getDiamondGiveHistory(page: Int, pageSize: Int): List? = + launchRequest { + api.getRecord(page, pageSize) + } + + suspend fun getSearchUser(erbanNo: Long): SearchUserInfo? = + launchRequest { + api.getSearchUser(erbanNo) + } + suspend fun getHotRoom(): List? = launchRequest { api.getHotRoom() @@ -394,6 +406,27 @@ object HomeModel : BaseModel() { @GET("/home/playV2") suspend fun apiHomePlayV2(): ServiceResult> + /** + * 轉贈鉆石歷史記錄 + * + * @return + */ + @GET("/user/diamond/giveRecord") + suspend fun getRecord( + @Query("pageNum") pageNum: Int?, + @Query("pageSize") pageSize: Int? + ): ServiceResult> + + /** + * 精確搜索用戶 + * + * @return + */ + @POST("/user/diamond/searchUser") + suspend fun getSearchUser( + @Query("erbanNo") erbanNo: Long? + ): ServiceResult + } } \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/initial/bean/InitInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/initial/bean/InitInfo.java index 651b4a755..4b2e951f0 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/initial/bean/InitInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/initial/bean/InitInfo.java @@ -27,6 +27,13 @@ public class InitInfo implements Serializable { private NobleResourceComponent nobleResource; private List monsters; + private List giveDiamondErbanNoList; + /** 每日转赠钻石总额限制 */ + private Long giveDiamondDailyNum; + /** 转赠钻石单笔最大限额 */ + private Long giveDiamondOnceLimitNum; + /** 转赠手续费率 */ + private Double giveDiamondRate; private double exchangeGoldRate;// 钻石兑换钻石比率 private double exchangeRate;// 钻石兑换钻石比率 diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/pay/PayModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/pay/PayModel.java index 03657efcb..9d7a42f12 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/pay/PayModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/pay/PayModel.java @@ -627,10 +627,10 @@ public class PayModel extends BaseModel implements IPayModel { * @return */ @FormUrlEncoded - @POST("/user/gold/give") + @POST("/user/diamond/give") Single> giveGold(@Field("toUid") long toUid, - @Field("goldNum") String goldNum, - @Field("password") String password); + @Field("diamondNum") String diamondNum, + @Field("payPwd") String payPwd); /** * 获取首充产品列表 diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java index b269a1dd2..d868b2142 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java @@ -6,6 +6,7 @@ import com.yizhuan.xchat_android_core.base.IModel; import com.yizhuan.xchat_android_core.bean.RoomHistoryInfo; import com.yizhuan.xchat_android_core.bean.response.ServiceResult; import com.yizhuan.xchat_android_core.home.bean.VisitorInfo; +import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo; import com.yizhuan.xchat_android_core.user.bean.GiftAchievementInfo; import com.yizhuan.xchat_android_core.user.bean.GiftWallInfo; import com.yizhuan.xchat_android_core.user.bean.NewUserInfo; @@ -217,7 +218,7 @@ public interface IUserModel extends IModel { */ Single getRandomAvatar(); - Single> getGiveUserList(); + Single> getGiveUserList(int page, int pageSize); @Nullable String getPreFillInviteCode(); diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java index eaa8332cc..82ba7b616 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java @@ -21,6 +21,7 @@ import com.yizhuan.xchat_android_core.home.bean.VisitorInfo; import com.yizhuan.xchat_android_core.level.event.CharmLevelUpEvent; import com.yizhuan.xchat_android_core.level.event.LevelUpEvent; import com.yizhuan.xchat_android_core.noble.NobleUtil; +import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo; import com.yizhuan.xchat_android_core.user.bean.GiftAchievementInfo; import com.yizhuan.xchat_android_core.user.bean.GiftWallInfo; import com.yizhuan.xchat_android_core.user.bean.NewUserInfo; @@ -769,8 +770,8 @@ public final class UserModel extends BaseModel implements IUserModel { } @Override - public Single> getGiveUserList() { - return api.getGiveUserList() + public Single> getGiveUserList(int page, int pageSize) { + return api.getGiveUserList(page, pageSize) .compose(RxHelper.handleBeanData()) .compose(RxHelper.handleSchedulers()); } @@ -1014,8 +1015,9 @@ public final class UserModel extends BaseModel implements IUserModel { * * @return - */ - @GET("user/gold/give/recent") - Single>> getGiveUserList(); + @GET("/user/diamond/giveRecord") + Single>> getGiveUserList(@Query("page") int page, + @Query("pageSize") int pageSize); /** diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/DiamondGiveHistoryInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/DiamondGiveHistoryInfo.java new file mode 100644 index 000000000..89713259c --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/DiamondGiveHistoryInfo.java @@ -0,0 +1,22 @@ +package com.yizhuan.xchat_android_core.user.bean; + +import java.io.Serializable; + +import lombok.Data; + +@Data +public class DiamondGiveHistoryInfo implements Serializable { + + private Long id;//记录 id + private Long fromUid;//用户uid + private Long targetUid;//对方用户uid + private Long targetErbanNo;//对方平台id + private String targetNick;//对方用户信息 + private String targetAvatar;//對方用戶頭像 + + private Long diamondNum;//转赠给对方的数量 + private Double realDiamondNum;//转赠实际支出的数量,包含手续费 + private String createTime;//创建时间 + private String updateTime;//更新时间 + +} diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/SearchUserInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/SearchUserInfo.java new file mode 100644 index 000000000..b858eb4ba --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/SearchUserInfo.java @@ -0,0 +1,36 @@ +package com.yizhuan.xchat_android_core.user.bean; + +import java.io.Serializable; + +import lombok.Data; + +@Data +public class SearchUserInfo implements Serializable { + + /** + * 用户uid + */ + private Long uid; + /** + * 平台号 + */ + private Long erbanNo; + /** + * 头像 + */ + private String avatar; + /** + * 昵称 + */ + private String nick; + /** + * 性别 1.男 2.女 + */ + private Byte gender; + + /** + * 生日 + */ + private String birth; + +} diff --git a/library/src/main/java/com/yizhuan/xchat_android_library/utils/AppMetaDataUtil.java b/library/src/main/java/com/yizhuan/xchat_android_library/utils/AppMetaDataUtil.java index 90496f91f..d86b7cda7 100644 --- a/library/src/main/java/com/yizhuan/xchat_android_library/utils/AppMetaDataUtil.java +++ b/library/src/main/java/com/yizhuan/xchat_android_library/utils/AppMetaDataUtil.java @@ -26,7 +26,7 @@ public class AppMetaDataUtil { */ public static String getChannelID() { String channelID = BasicConfig.INSTANCE.getChannel(); - channelID = TextUtils.isEmpty(channelID) ? "official" : channelID; + channelID = TextUtils.isEmpty(channelID) ? "google" : channelID; return channelID; }