From 809c923c2c1ad639aab9a7cb20f1e00969f2e130 Mon Sep 17 00:00:00 2001 From: wushaocheng <15876365887@163.com> Date: Thu, 3 Nov 2022 20:45:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E8=B5=A0=E7=A4=BC=E7=89=A9=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 + .../erban/common/CommonPagerAdapter.kt | 14 + .../yizhuan/erban/home/fragment/MeFragment.kt | 33 +- .../com/yizhuan/erban/pay/GiveGoldModel.kt | 39 +- .../erban/pay/activity/GiveGoldActivity.kt | 8 +- .../pay/activity/GiveGoldDetailActivity.kt | 115 +++++ .../pay/activity/GiveGoldToUserActivity.kt | 480 +++++++++++------- .../pay/adapter/GiveDiamondDetailAdapter.kt | 23 + .../erban/pay/adapter/GiveGiftAdapter.java | 34 ++ .../pay/adapter/GiveGiftDetailAdapter.kt | 24 + .../erban/pay/fragment/GiveDiamondFragment.kt | 75 +++ .../erban/pay/fragment/GiveGiftFragment.kt | 76 +++ .../erban/ui/user/UserInfoGiftFragment.java | 2 - .../widget/viewpager/NoScrollViewPager.java | 46 ++ app/src/main/res/color/color_donation_btn.xml | 9 + .../drawable-xhdpi/donation_arrow_right.webp | Bin 0 -> 962 bytes .../ic_give_diamond_detail.webp | Bin 0 -> 5970 bytes .../res/drawable-xhdpi/me_clean_diamond.webp | Bin 2966 -> 2984 bytes .../res/drawable/bg_common_disable_select.xml | 9 + .../main/res/drawable/bg_common_select.xml | 5 + .../res/drawable/bg_common_select_normal.xml | 13 + app/src/main/res/drawable/bg_f3f5fa_r4.xml | 6 + .../res/drawable/bg_give_gift_bg_selector.xml | 5 + .../bg_gradient_cc66ff_9cb3ff_13e2f5_r8.xml | 32 ++ .../res/layout/activity_give_gold_to_user.xml | 194 +++++-- .../main/res/layout/fragment_give_diamond.xml | 22 + .../main/res/layout/fragment_give_gift.xml | 22 + app/src/main/res/layout/fragment_me.xml | 2 +- .../res/layout/item_give_diamond_detail.xml | 57 +++ app/src/main/res/layout/item_give_gift.xml | 55 ++ .../main/res/layout/item_give_gift_detail.xml | 44 ++ app/src/main/res/layout/item_lately_give.xml | 9 + app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 12 + .../res/layout/activity_give_gold.xml | 6 +- .../res/layout/activity_give_gold_detail.xml | 32 ++ .../home/model/HomeModel.kt | 40 ++ .../gift/bean/GiftInfo.java | 2 + .../initial/bean/InitInfo.java | 7 + .../user/bean/DiamondGiveHistoryInfo.java | 12 +- nim_uikit/res/values/colors.xml | 1 + 41 files changed, 1322 insertions(+), 248 deletions(-) create mode 100644 app/src/main/java/com/yizhuan/erban/common/CommonPagerAdapter.kt create mode 100644 app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldDetailActivity.kt create mode 100644 app/src/main/java/com/yizhuan/erban/pay/adapter/GiveDiamondDetailAdapter.kt create mode 100644 app/src/main/java/com/yizhuan/erban/pay/adapter/GiveGiftAdapter.java create mode 100644 app/src/main/java/com/yizhuan/erban/pay/adapter/GiveGiftDetailAdapter.kt create mode 100644 app/src/main/java/com/yizhuan/erban/pay/fragment/GiveDiamondFragment.kt create mode 100644 app/src/main/java/com/yizhuan/erban/pay/fragment/GiveGiftFragment.kt create mode 100644 app/src/main/java/com/yizhuan/erban/ui/widget/viewpager/NoScrollViewPager.java create mode 100644 app/src/main/res/color/color_donation_btn.xml create mode 100644 app/src/main/res/drawable-xhdpi/donation_arrow_right.webp create mode 100644 app/src/main/res/drawable-xhdpi/ic_give_diamond_detail.webp create mode 100644 app/src/main/res/drawable/bg_common_disable_select.xml create mode 100644 app/src/main/res/drawable/bg_common_select.xml create mode 100644 app/src/main/res/drawable/bg_common_select_normal.xml create mode 100644 app/src/main/res/drawable/bg_f3f5fa_r4.xml create mode 100644 app/src/main/res/drawable/bg_give_gift_bg_selector.xml create mode 100644 app/src/main/res/drawable/bg_gradient_cc66ff_9cb3ff_13e2f5_r8.xml create mode 100644 app/src/main/res/layout/fragment_give_diamond.xml create mode 100644 app/src/main/res/layout/fragment_give_gift.xml create mode 100644 app/src/main/res/layout/item_give_diamond_detail.xml create mode 100644 app/src/main/res/layout/item_give_gift.xml create mode 100644 app/src/main/res/layout/item_give_gift_detail.xml create mode 100644 app/src/module_community/res/layout/activity_give_gold_detail.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a23e7b20f..99da8afaa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -857,6 +857,10 @@ android:name=".pay.activity.GiveGoldActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize" /> + ) :FragmentPagerAdapter(fm, + BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT){ + override fun getCount()=list.size + + override fun getItem(position: Int)=list[position] +} \ No newline at end of file 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 e57817fe8..c7ecca48b 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 @@ -233,22 +233,25 @@ class MeFragment : BaseFragment(), View.OnClickListener { mBinding.tvConstellation.text = star setUserLevel(it.userLevelVo) setWalletInfo() - } - val initInfo = InitialModel.get().cacheInitInfo - val list = initInfo?.giveDiamondErbanNoList - if (list?.contains(mUserInfo?.erbanNo ?: 0L) == true) { - mBinding.tvMyRoomRight.visibility = View.GONE - mBinding.tvMyRoom.visibility = View.VISIBLE - mBinding.tvEarnRight.visibility = View.GONE - mBinding.tvEarn.visibility = View.VISIBLE - mBinding.llCleanDiamonds.visibility = View.VISIBLE - } else { - mBinding.tvMyRoomRight.visibility = View.VISIBLE - mBinding.tvMyRoom.visibility = View.GONE - mBinding.tvEarnRight.visibility = View.VISIBLE - mBinding.tvEarn.visibility = View.GONE - mBinding.llCleanDiamonds.visibility = View.GONE + val initInfo = InitialModel.get().cacheInitInfo + val diamondList = initInfo?.giveDiamondErbanNoList + val giftList = initInfo?.giveGiftErbanNoList + val levelSep = it.userLevelVo.experLevelSeq + if (diamondList?.contains(it.erbanNo) == true || giftList?.contains(it.erbanNo) == true + || levelSep > (initInfo?.giveDiamondExperLevel ?: 0) || levelSep > (initInfo?.giveGiftExperLevel ?: 0)) { + mBinding.tvMyRoomRight.visibility = View.GONE + mBinding.tvMyRoom.visibility = View.VISIBLE + mBinding.tvEarnRight.visibility = View.GONE + mBinding.tvEarn.visibility = View.VISIBLE + mBinding.llCleanDiamonds.visibility = View.VISIBLE + } else { + mBinding.tvMyRoomRight.visibility = View.VISIBLE + mBinding.tvMyRoom.visibility = View.GONE + mBinding.tvEarnRight.visibility = View.VISIBLE + mBinding.tvEarn.visibility = View.GONE + mBinding.llCleanDiamonds.visibility = View.GONE + } } } diff --git a/app/src/main/java/com/yizhuan/erban/pay/GiveGoldModel.kt b/app/src/main/java/com/yizhuan/erban/pay/GiveGoldModel.kt index 9455f32d4..dc0fe10e5 100644 --- a/app/src/main/java/com/yizhuan/erban/pay/GiveGoldModel.kt +++ b/app/src/main/java/com/yizhuan/erban/pay/GiveGoldModel.kt @@ -11,12 +11,20 @@ import com.yizhuan.xchat_android_core.utils.toast class GiveGoldModel : BaseViewModel() { private val _diamondGiveHistoryLiveData = MutableLiveData?>() - val diamondGiveHistoryLiveData: MutableLiveData?> = _diamondGiveHistoryLiveData + val diamondGiveHistoryLiveData: MutableLiveData?> = + _diamondGiveHistoryLiveData private val _searchUserLiveData = MutableLiveData() val searchUserLiveData: MutableLiveData = _searchUserLiveData - fun getDiamondListInfo(pageNum:Int, pageSize: Int) { + private val _giveGiftLiveData = MutableLiveData() + val giveGiftLiveData: MutableLiveData = _giveGiftLiveData + + private val _giveDetailLiveData = MutableLiveData?>() + val giveDetailLiveData: MutableLiveData?> = + _giveDetailLiveData + + fun getDiamondListInfo(pageNum: Int, pageSize: Int) { safeLaunch( onError = { _diamondGiveHistoryLiveData.value = ListResult.failed(pageNum) @@ -28,7 +36,7 @@ class GiveGoldModel : BaseViewModel() { ) } - fun getSearchUserInfo(erbanNo:Long) { + fun getSearchUserInfo(erbanNo: Long) { safeLaunch( true, onError = { @@ -41,4 +49,29 @@ class GiveGoldModel : BaseViewModel() { ) } + fun giveGift(toUid: Long, giftId: Int, giftNum: Int) { + safeLaunch( + true, + onError = { + it.message.toast() + _giveGiftLiveData.value = null + }, + block = { + _giveGiftLiveData.value = HomeModel.giveGift(toUid, giftId, giftNum) + } + ) + } + + fun giveDetailInfo(uid: Long, type: Int, pageNum: Int, pageSize: Int) { + safeLaunch( + onError = { + _giveDetailLiveData.value = ListResult.failed(pageNum) + }, + block = { + val result = HomeModel.getGiveDetail(uid, type, pageNum, pageSize) + _giveDetailLiveData.value = ListResult.success(result, pageNum) + } + ) + } + } \ 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 a92d6c12e..82d79e6d7 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 @@ -17,6 +17,7 @@ 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.gift.GiftModel import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo import com.yizhuan.xchat_android_library.utils.ResUtil @@ -40,7 +41,7 @@ class GiveGoldActivity : BaseViewBindingActivity() { } override fun init() { - initTitleBar(ResUtil.getString(R.string.me_clean_diamond)) + initTitleBar(ResUtil.getString(R.string.me_donation)) 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) { //发送请求 @@ -80,9 +81,7 @@ class GiveGoldActivity : BaseViewBindingActivity() { .setRecyclerView(binding.recyclerView) .build() mAdapter.setOnItemClickListener { _, _, position -> - mAdapter.getItem(position)?.let { - GiveGoldToUserActivity.start(this, it) - } + mAdapter.getItem(position)?.targetUid?.let { GiveGoldDetailActivity.start(this, it) } } mAdapter.setOnLoadMoreListener({ loadData(false) @@ -102,6 +101,7 @@ class GiveGoldActivity : BaseViewBindingActivity() { if (it) dialogManager.showProgressDialog(this) else dialogManager.dismissDialog() } + GiftModel.get().knapList } override fun onResume() { diff --git a/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldDetailActivity.kt b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldDetailActivity.kt new file mode 100644 index 000000000..89c0c0bb2 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldDetailActivity.kt @@ -0,0 +1,115 @@ +package com.yizhuan.erban.pay.activity + +import android.content.Context +import android.content.Intent +import android.view.View +import android.widget.LinearLayout +import android.widget.TextView +import androidx.fragment.app.Fragment +import androidx.viewpager.widget.ViewPager +import com.netease.nim.uikit.StatusBarUtil +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingActivity +import com.yizhuan.erban.databinding.ActivityGiveGoldDetailBinding +import com.yizhuan.erban.pay.fragment.GiveDiamondFragment +import com.yizhuan.erban.pay.fragment.GiveGiftFragment +import com.yizhuan.erban.ui.user.adapter.CommonWrapIndicatorAdapter +import com.yizhuan.erban.ui.user.adapter.UserInfoPagerAdapter +import com.yizhuan.erban.ui.widget.magicindicator.MagicIndicator +import com.yizhuan.erban.ui.widget.magicindicator.ViewPagerHelper +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator +import com.yizhuan.xchat_android_core.initial.InitialModel +import com.yizhuan.xchat_android_core.user.UserModel +import com.yizhuan.xchat_android_library.utils.ResUtil + +/** + * 轉贈鉆石頁面 + */ +class GiveGoldDetailActivity : BaseViewBindingActivity() { + + companion object { + fun start(context: Context, uid: Long) { + val intent = Intent(context, GiveGoldDetailActivity::class.java) + intent.putExtra("uid", uid) + context.startActivity(intent) + } + } + + override fun init() { + initTitleBar(ResUtil.getString(R.string.me_donation_detail)) + initDetail() + } + + /** + * 轉贈詳情 + */ + private fun initDetail() { + val uid = intent.extras?.getLong("uid", 0L) ?: 0L + + val initInfo = InitialModel.get().cacheInitInfo + val userInfo = UserModel.get().cacheLoginUserInfo + val diamondList = initInfo?.giveDiamondErbanNoList + val giftList = initInfo?.giveGiftErbanNoList + val levelSep = userInfo?.userLevelVo?.experLevelSeq ?: 0 + + val viewPager: ViewPager = binding.viewPagerDetail + val magicIndicator: MagicIndicator = binding.magicIndicator + val fragmentList: MutableList = ArrayList() + val pagerAdapter = UserInfoPagerAdapter(supportFragmentManager, fragmentList) + val tagList: MutableList = ArrayList() + if (diamondList?.contains(userInfo?.erbanNo) == true || levelSep > (initInfo?.giveDiamondExperLevel + ?: 0) + ) { + tagList.add(getString(R.string.diamond)) + fragmentList.add(GiveDiamondFragment.newInstance(uid)) + } + if (giftList?.contains(userInfo?.erbanNo) == true || levelSep > (initInfo?.giveGiftExperLevel + ?: 0) + ) { + tagList.add(getString(R.string.gift_action)) + fragmentList.add(GiveGiftFragment.newInstance(uid)) + } + if (tagList.size == 0) { + return + }else if(tagList.size == 1){ + binding.magicIndicator.visibility = View.GONE + } + val commonNavigator = CommonNavigator(context) + commonNavigator.isAdjustMode = true//自我调节位置,实现自我平分 + val magicIndicatorAdapter = CommonWrapIndicatorAdapter(context, tagList) + magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? -> + viewPager.currentItem = position + } + commonNavigator.adapter = magicIndicatorAdapter + magicIndicator.navigator = commonNavigator + commonNavigator.titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE + viewPager.adapter = pagerAdapter + ViewPagerHelper.bind(magicIndicator, viewPager) + viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + viewPager.requestLayout() + } + + override fun onPageScrollStateChanged(state: Int) {} + }) + + } + + 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/GiveGoldToUserActivity.kt b/app/src/main/java/com/yizhuan/erban/pay/activity/GiveGoldToUserActivity.kt index 4d2b5011a..6e3449922 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 @@ -3,39 +3,51 @@ package com.yizhuan.erban.pay.activity import android.annotation.SuppressLint import android.content.Context import android.content.Intent -import android.os.Bundle import android.text.Editable import android.text.InputFilter import android.text.InputFilter.LengthFilter import android.text.TextWatcher +import android.util.SparseArray +import android.view.View +import android.view.ViewGroup +import androidx.activity.viewModels +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.viewpager.widget.PagerAdapter +import com.chad.library.adapter.base.BaseQuickAdapter 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.base.BaseViewBindingActivity +import com.yizhuan.erban.databinding.ActivityGiveGoldToUserBinding +import com.yizhuan.erban.miniworld.listener.DoubleClickCheckListener +import com.yizhuan.erban.pay.GiveGoldModel +import com.yizhuan.erban.pay.adapter.GiveGiftAdapter import com.yizhuan.erban.pay.password.GiveGoldPassWordFragment import com.yizhuan.erban.ui.setting.ModifyPwdActivity import com.yizhuan.erban.ui.utils.ImageLoadUtils +import com.yizhuan.erban.ui.widget.OnPageSelectedListener import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog import com.yizhuan.erban.ui.widget.dialog.GiveDiamondTipDialog +import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil +import com.yizhuan.erban.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration import com.yizhuan.xchat_android_core.DemoCache +import com.yizhuan.xchat_android_core.gift.GiftModel +import com.yizhuan.xchat_android_core.gift.bean.GiftInfo +import com.yizhuan.xchat_android_core.initial.InitialModel import com.yizhuan.xchat_android_core.pay.PayModel import com.yizhuan.xchat_android_core.user.UserModel -import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo import com.yizhuan.xchat_android_core.user.bean.SearchUserInfo import com.yizhuan.xchat_android_library.utils.ResUtil import kotlinx.android.synthetic.main.activity_give_gold_to_user.* -class GiveGoldToUserActivity : BaseActivity(), GridPasswordView.OnPasswordChangedListener, +class GiveGoldToUserActivity : BaseViewBindingActivity(), + GridPasswordView.OnPasswordChangedListener, TextWatcher { - companion object { - @JvmStatic - fun start(context: Context, user: DiamondGiveHistoryInfo) { - val intent = Intent(context, GiveGoldToUserActivity::class.java) - intent.putExtra("user", user) - context.startActivity(intent) - } + private val giveGoldModel: GiveGoldModel by viewModels() + companion object { @JvmStatic fun start(context: Context, searchUser: SearchUserInfo) { val intent = Intent(context, GiveGoldToUserActivity::class.java) @@ -44,17 +56,13 @@ class GiveGoldToUserActivity : BaseActivity(), GridPasswordView.OnPasswordChange } } - private var userInfo: DiamondGiveHistoryInfo? = null private var searchUserInfo: SearchUserInfo? = null private var passWordFragment: GiveGoldPassWordFragment? = null + private var selectGiftPos = -1 + private var giftAllCount = -1 + private var giftId = -1 - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_give_gold_to_user) - userInfo = intent.getSerializableExtra("user") as DiamondGiveHistoryInfo? - searchUserInfo = intent.getSerializableExtra("searchUser") as SearchUserInfo? - init() - } + private var centerIndex = 0 override fun setStatusBar() { super.setStatusBar() @@ -66,153 +74,278 @@ class GiveGoldToUserActivity : BaseActivity(), GridPasswordView.OnPasswordChange return true } - @SuppressLint("SetTextI18n") - private fun init() { - initTitleBar(ResUtil.getString(R.string.me_clean_diamond)) + override fun init() { + initTitleBar(ResUtil.getString(R.string.donation_to)) + searchUserInfo = intent.getSerializableExtra("searchUser") as SearchUserInfo? + searchUserInfo?.apply { + binding.tvId.text = "ID:${erbanNo}" + binding.tvNickname.text = nick + ImageLoadUtils.loadAvatar(context, avatar, binding.ivAvatar) + } + val initInfo = InitialModel.get().cacheInitInfo + val userInfo = UserModel.get().cacheLoginUserInfo + val diamondList = initInfo?.giveDiamondErbanNoList + val giftList = initInfo?.giveGiftErbanNoList + val levelSep = userInfo?.userLevelVo?.experLevelSeq ?: 0 + if (diamondList?.contains(userInfo?.erbanNo) == true || levelSep > (initInfo?.giveDiamondExperLevel + ?: 0) + ) { + binding.tvGiftTab.visibility = View.VISIBLE + } else { + binding.tvGiftTab.visibility = View.GONE + } + if (giftList?.contains(userInfo?.erbanNo) == true || levelSep > (initInfo?.giveGiftExperLevel + ?: 0) + ) { + binding.tvGiftTab.visibility = View.VISIBLE + } else { + binding.tvGiftTab.visibility = View.GONE + } + binding.viewPagerEntrance.addOnPageChangeListener(object : OnPageSelectedListener() { + override fun onPageSelected(position: Int) { + centerIndex = position + binding.magicIndicatorEntrance.setSelectedPage(position) + } + }) + initDiamond() + initGift() + initListener() + giveGoldModel.loadingLiveData.observe(this) { + if (it) dialogManager.showProgressDialog(this) + else dialogManager.dismissDialog() + } + giveGoldModel.giveGiftLiveData.observe(this) { + it?.let { + toast(getString(R.string.gift_give_success)) + finish() + } + } + } + + private fun initListener() { + binding.tvSure.setOnClickListener { + val initInfo = DemoCache.readInitInfo() + if (binding.groupDiamond.visibility == View.VISIBLE) { + searchUserInfo?.apply { + val gold = binding.mEditGold.text.toString().toInt() + if (gold <= 0) { + toast(ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_06)) + return@setOnClickListener + } + UserModel.get().cacheLoginUserInfo?.let { + if (!it.isBindPaymentPwd) { + val tipDialog = CommonTipDialog(this@GiveGoldToUserActivity) + tipDialog.setTipMsg(ResUtil.getString(R.string.setting_pay_pwd_first)) + tipDialog.setOkText(getString(R.string.to_setting)) + tipDialog.setOnActionListener( + object : CommonTipDialog.OnActionListener { + override fun onOk() { + ModifyPwdActivity.start( + this@GiveGoldToUserActivity, + ModifyPwdActivity.PAY_PWD + ) + } + } + ) + tipDialog.show() + } else { + val rateGold = initInfo.giveDiamondRate * 100 + val tipDialog = GiveDiamondTipDialog(this@GiveGoldToUserActivity) + tipDialog.setTvDiamond(gold.toString()) + tipDialog.setTipMsg(getString(R.string.give_gold_to_user, nick)) + if (rateGold == 0.0) { + tipDialog.setTipMessageGone(true) + } else { + tipDialog.setTvSeCharge("${rateGold.toInt()}%") + val goldNew = gold + (gold * initInfo.giveDiamondRate) + tipDialog.setTvConsumeDiamond( + getString( + R.string.consume_diamond_num, + goldNew.toString() + ) + ) + } + tipDialog.setOnActionListener( + object : GiveDiamondTipDialog.OnActionListener { + override fun onOk() { + GiveGoldPassWordFragment.newInstance( + supportFragmentManager, + gold.toString(), + nick, + "" + ) + .apply { + passWordFragment = this + setListener(this@GiveGoldToUserActivity) + } + } + } + ) + tipDialog.show() + } + } ?: run { + toast(ResUtil.getString(R.string.ui_setting_settingactivity_06)) + return@setOnClickListener + } + } + } else {//赠送礼物 + searchUserInfo?.apply { + val giftNum = binding.editGift.text.toString().toInt() + if (selectGiftPos < 0) { + toast(ResUtil.getString(R.string.please_select_gift)) + return@setOnClickListener + } else if (giftNum == 0) { + toast(ResUtil.getString(R.string.please_enter_gift_num)) + return@setOnClickListener + } else if (giftNum > giftAllCount) { + toast(ResUtil.getString(R.string.gift_num_fail)) + return@setOnClickListener + } + giveGoldModel.giveGift(uid, giftId, giftNum) + } + } + } + } + + private fun initDiamond() { + if (binding.tvGiftTab.visibility == View.VISIBLE) { + binding.tvGiftTab.isSelected = false + binding.groupGift.visibility = View.GONE + } val initInfo = DemoCache.readInitInfo() val length = initInfo.giveDiamondOnceLimitNum.toInt().toString().length - mEditGold.text.filters = arrayOf(LengthFilter(length)) - userInfo?.apply { - tvId.text = "ID:${targetErbanNo}" - tvNickname.text = targetNick - ImageLoadUtils.loadAvatar(context, targetAvatar, ivAvatar) - - tvSure.setOnClickListener { - val gold = mEditGold.text.toString().toInt() - if (gold <= 0) { - toast(ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_06)) - return@setOnClickListener - } - UserModel.get().cacheLoginUserInfo?.let { - if (!it.isBindPaymentPwd) { - val tipDialog = CommonTipDialog(this@GiveGoldToUserActivity) - tipDialog.setTipMsg(ResUtil.getString(R.string.setting_pay_pwd_first)) - tipDialog.setOkText(getString(R.string.to_setting)) - tipDialog.setOnActionListener( - object : CommonTipDialog.OnActionListener { - override fun onOk() { - ModifyPwdActivity.start( - this@GiveGoldToUserActivity, - ModifyPwdActivity.PAY_PWD - ) - } - } - ) - tipDialog.show() - } else { - val rateGold = initInfo.giveDiamondRate * 100 - val tipDialog = GiveDiamondTipDialog(this@GiveGoldToUserActivity) - tipDialog.setTvDiamond(gold.toString()) - tipDialog.setTipMsg(getString(R.string.give_gold_to_user, targetNick)) - if (rateGold == 0.0) { - tipDialog.setTipMessageGone(true) - } else { - tipDialog.setTvSeCharge("${rateGold.toInt()}%") - val goldNew = gold + (gold * initInfo.giveDiamondRate) - tipDialog.setTvConsumeDiamond( - getString( - R.string.consume_diamond_num, - goldNew.toString() - ) - ) - } - tipDialog.setOnActionListener( - object : GiveDiamondTipDialog.OnActionListener { - override fun onOk() { - GiveGoldPassWordFragment.newInstance( - supportFragmentManager, - gold.toString(), - targetNick, - "" - ) - .apply { - passWordFragment = this - setListener(this@GiveGoldToUserActivity) - } - } - } - ) - tipDialog.show() - } - } ?: run { - toast(ResUtil.getString(R.string.ui_setting_settingactivity_06)) - return@setOnClickListener - } - } - } - searchUserInfo?.apply { - tvId.text = "ID:${erbanNo}" - tvNickname.text = nick - ImageLoadUtils.loadAvatar(context, avatar, ivAvatar) - - tvSure.setOnClickListener { - val gold = mEditGold.text.toString().toInt() - if (gold <= 0) { - toast(ResUtil.getString(R.string.pay_activity_givegoldtouseractivity_06)) - return@setOnClickListener - } - UserModel.get().cacheLoginUserInfo?.let { - if (!it.isBindPaymentPwd) { - val tipDialog = CommonTipDialog(this@GiveGoldToUserActivity) - tipDialog.setTipMsg(ResUtil.getString(R.string.setting_pay_pwd_first)) - tipDialog.setOkText(getString(R.string.to_setting)) - tipDialog.setOnActionListener( - object : CommonTipDialog.OnActionListener { - override fun onOk() { - ModifyPwdActivity.start( - this@GiveGoldToUserActivity, - ModifyPwdActivity.PAY_PWD - ) - } - } - ) - tipDialog.show() - } else { - val rateGold = initInfo.giveDiamondRate * 100 - val tipDialog = GiveDiamondTipDialog(this@GiveGoldToUserActivity) - tipDialog.setTvDiamond(gold.toString()) - tipDialog.setTipMsg(getString(R.string.give_gold_to_user, nick)) - if (rateGold == 0.0) { - tipDialog.setTipMessageGone(true) - } else { - tipDialog.setTvSeCharge("${rateGold.toInt()}%") - val goldNew = gold + (gold * initInfo.giveDiamondRate) - tipDialog.setTvConsumeDiamond( - getString( - R.string.consume_diamond_num, - goldNew.toString() - ) - ) - } - tipDialog.setOnActionListener( - object : GiveDiamondTipDialog.OnActionListener { - override fun onOk() { - GiveGoldPassWordFragment.newInstance( - supportFragmentManager, - gold.toString(), - nick, - "" - ) - .apply { - passWordFragment = this - setListener(this@GiveGoldToUserActivity) - } - } - } - ) - tipDialog.show() - } - } ?: run { - toast(ResUtil.getString(R.string.ui_setting_settingactivity_06)) - return@setOnClickListener - } - } - } - mTvDiamond.text = getString( + binding.mEditGold.text.filters = arrayOf(LengthFilter(length)) + binding.mTvDiamond.text = getString( R.string.my_diamond, PayModel.get().currentWalletInfo?.diamondNum?.toString() ?: "0" ) - mEditGold.addTextChangedListener(this) + binding.mEditGold.addTextChangedListener(this) + binding.tvDiamondTab.isSelected = true + binding.tvDiamondTab.setOnClickListener { + if (binding.tvGiftTab.visibility == View.VISIBLE) { + binding.tvGiftTab.isSelected = false + binding.groupGift.visibility = View.GONE + binding.tvDiamondTab.isSelected = true + binding.groupDiamond.visibility = View.VISIBLE + } + } + } + + private fun initGift() { + val giftList = GiftModel.get().knapList + if (binding.tvDiamondTab.visibility == View.GONE) { + binding.tvGiftTab.isSelected = true + binding.tvSure.isEnabled = true + } +// giftList.map { it.isSelected = false } + val list = transformList(giftList, 8) + binding.magicIndicatorEntrance.initIndicator(list.size) + binding.magicIndicatorEntrance.setSelectedPage(centerIndex) + binding.magicIndicatorEntrance.visibility = + if (list.size > 1) View.VISIBLE else View.INVISIBLE + binding.viewPagerEntrance.adapter = object : PagerAdapter() { + var cacheItemView = SparseArray() + override fun getCount(): Int { + return list.size + } + + override fun isViewFromObject(view: View, `object`: Any): Boolean { + return view == `object` + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val recyclerView: RecyclerView + val giveGiftAdapter: GiveGiftAdapter + if (cacheItemView[position] == null) { + recyclerView = RecyclerView(context) + var lp = recyclerView.layoutParams + if (lp == null) { + lp = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ) + } + recyclerView.layoutParams = lp + recyclerView.layoutManager = GridLayoutManager(context, 4) + recyclerView.addItemDecoration( + GridSpacingItemNewDecoration( + UIUtil.dip2px( + context, + 18.0 + ), UIUtil.dip2px(context, 10.0), true + ) + ) + giveGiftAdapter = GiveGiftAdapter() + giveGiftAdapter.onItemClickListener = object : DoubleClickCheckListener() { + override fun onItemClickSingle( + adapter: BaseQuickAdapter<*, *>?, + view: View, + position: Int + ) { + val oldBean = giveGiftAdapter.getItem(selectGiftPos) + oldBean?.isSelected = false + giveGiftAdapter.notifyItemChanged(selectGiftPos) + val bean = giveGiftAdapter.getItem(position) + bean?.isSelected = true + giveGiftAdapter.notifyItemChanged(position) + selectGiftPos = position + giftAllCount = giveGiftAdapter.getItem(position)?.count ?: -1 + giftId = giveGiftAdapter.getItem(position)?.giftId ?: -1 + } + } + recyclerView.adapter = giveGiftAdapter + } else { + recyclerView = cacheItemView[position] + giveGiftAdapter = recyclerView.adapter as GiveGiftAdapter + } + giveGiftAdapter.setNewData(list[position]) + container.addView(recyclerView) + return recyclerView + } + + override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { + val recyclerView = cacheItemView[position] + container.removeView(recyclerView) + } + } + binding.viewPagerEntrance.setCurrentItem(centerIndex, false) + binding.editGift.addTextChangedListener(this) + binding.tvGiftTab.setOnClickListener { + if (binding.tvDiamondTab.visibility == View.VISIBLE) { + binding.tvDiamondTab.isSelected = false + binding.groupDiamond.visibility = View.GONE + binding.tvGiftTab.isSelected = true + binding.groupGift.visibility = View.VISIBLE + binding.tvSure.isEnabled = true + } + } + binding.tvAll.setOnClickListener { + if (giftAllCount != -1) + binding.editGift.setText(giftAllCount) + } + } + + private fun transformList( + data: List, + pageSize: Int + ): List> { + val result: MutableList> = ArrayList() + if (data.isEmpty()) { + return result + } + for (i in data.toTypedArray().indices) { + var page: MutableList? = null + if (i % pageSize == 0) { + page = ArrayList() + result.add(page) + } else { + if (result.size > 0) { + page = result[result.size - 1] + } + } + page?.add(data[i]) + } + return result } @SuppressLint("CheckResult") @@ -223,23 +356,6 @@ class GiveGoldToUserActivity : BaseActivity(), GridPasswordView.OnPasswordChange override fun onTextChanged(psw: String) { val password = passWordFragment?.password?.password ?: "" if (password.length == 6) { - userInfo?.apply { - dialogManager.showProgressDialog(context) - PayModel.get() - .giveGold(targetUid, mEditGold.text.toString(), DESAndBase64(password)) - .compose(bindToLifecycle()) - .doOnError { - toast(it.message) - passWordFragment?.password?.clearPassword() - dialogManager.dismissDialog() - } - .subscribe { _ -> - passWordFragment?.dismissAllowingStateLoss() - dialogManager.dismissDialog() - toast(getString(R.string.layout_activity_give_gold_success_01)) - finish() - } - } searchUserInfo?.apply { dialogManager.showProgressDialog(context) PayModel.get().giveGold(uid, mEditGold.text.toString(), DESAndBase64(password)) @@ -266,13 +382,7 @@ class GiveGoldToUserActivity : BaseActivity(), GridPasswordView.OnPasswordChange } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { - if (s.isNullOrBlank()) { - mEditGold.textSize = 15f - tvSure.isEnabled = false - } else { - mEditGold.textSize = 35f - tvSure.isEnabled = true - } + binding.tvSure.isEnabled = !s.isNullOrBlank() } } diff --git a/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveDiamondDetailAdapter.kt b/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveDiamondDetailAdapter.kt new file mode 100644 index 000000000..42b212eab --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveDiamondDetailAdapter.kt @@ -0,0 +1,23 @@ +package com.yizhuan.erban.pay.adapter + +import android.annotation.SuppressLint +import android.widget.TextView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo +import com.yizhuan.xchat_android_library.utils.TimeUtils + + +class GiveDiamondDetailAdapter : + BaseQuickAdapter(R.layout.item_give_diamond_detail) { + + @SuppressLint("SetTextI18n") + override fun convert(helper: BaseViewHolder, item: DiamondGiveHistoryInfo) { + helper.getView(R.id.tv_number).text = item.diamondNum.toString() + helper.getView(R.id.tv_pay_diamond).text = + mContext.getString(R.string.all_pay_diamond, item.realDiamondNum.toString()) + helper.setText(R.id.tv_date, TimeUtils.getDateTimeString(item.createTime,"yyyy-MM-dd HH:mm:ss")) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveGiftAdapter.java b/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveGiftAdapter.java new file mode 100644 index 000000000..e85909d6c --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveGiftAdapter.java @@ -0,0 +1,34 @@ +package com.yizhuan.erban.pay.adapter; + + +import android.widget.ImageView; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.yizhuan.erban.R; +import com.yizhuan.erban.ui.utils.ImageLoadUtils; +import com.yizhuan.xchat_android_core.gift.bean.GiftInfo; + +/** + * 赠送礼物 + */ +public class GiveGiftAdapter extends BaseQuickAdapter { + + + public GiveGiftAdapter() { + super(R.layout.item_give_gift); + } + + @Override + protected void convert(BaseViewHolder helper, GiftInfo item) { + if (item == null) { + return; + } + helper.setText(R.id.tvName, item.getGiftName()) + .setText(R.id.tvNum, "x" + item.getCount()); + ImageView giftPic = helper.itemView.findViewById(R.id.ivGift); + ImageLoadUtils.loadImage(mContext, item.getGiftUrl(), giftPic); + helper.getView(R.id.viewBg).setSelected(item.isSelected); + } + +} diff --git a/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveGiftDetailAdapter.kt b/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveGiftDetailAdapter.kt new file mode 100644 index 000000000..17d36b5c4 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/pay/adapter/GiveGiftDetailAdapter.kt @@ -0,0 +1,24 @@ +package com.yizhuan.erban.pay.adapter + +import android.annotation.SuppressLint +import android.widget.TextView +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.BaseViewHolder +import com.yizhuan.erban.R +import com.yizhuan.erban.ui.utils.ImageLoadUtils +import com.yizhuan.erban.utils.TimeUiUtils +import com.yizhuan.xchat_android_core.user.bean.DiamondGiveHistoryInfo +import com.yizhuan.xchat_android_library.utils.TimeUtils + + +class GiveGiftDetailAdapter : + BaseQuickAdapter(R.layout.item_give_gift_detail) { + + @SuppressLint("SetTextI18n") + override fun convert(helper: BaseViewHolder, item: DiamondGiveHistoryInfo) { + helper.getView(R.id.tv_gift_name).text = "${item.giftName}x${item.giftNum}" + ImageLoadUtils.loadAvatar(mContext, item.giftUrl, helper.getView(R.id.iv_avatar)) + helper.setText(R.id.tv_date, TimeUtils.getDateTimeString(item.createTime,"yyyy-MM-dd HH:mm:ss")) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveDiamondFragment.kt b/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveDiamondFragment.kt new file mode 100644 index 000000000..7834f6a66 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveDiamondFragment.kt @@ -0,0 +1,75 @@ +package com.yizhuan.erban.pay.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.FragmentGiveDiamondBinding +import com.yizhuan.erban.pay.GiveGoldModel +import com.yizhuan.erban.pay.activity.GiveGoldDetailActivity +import com.yizhuan.erban.pay.adapter.GiveDiamondDetailAdapter +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 + +class GiveDiamondFragment : BaseViewBindingFragment() { + + private var pageNum: Int = 1 + private val pageSize = 20 + private lateinit var mAdapter: GiveDiamondDetailAdapter + private lateinit var rvDelegate: RVDelegate + + private val giveGoldModel: GiveGoldModel by viewModels() + + private var uid: Long = 0L + + companion object { + fun newInstance(uid: Long): GiveDiamondFragment { + val args = Bundle() + args.putLong("uid", uid) + val fragment = GiveDiamondFragment() + fragment.arguments = args + return fragment + } + } + + override fun init() { + uid = arguments?.getLong("uid") ?: 0L + mAdapter = GiveDiamondDetailAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(mAdapter) + .setLayoutManager(LinearLayoutManager(context)) + .setPageSize(20) + .setEmptyView( + EmptyViewHelper.createEmptyView( + context, + ResUtil.getString(R.string.me_give_gold_empty) + ) + ) + .setRefreshLayout(binding.refreshLayout) + .setRecyclerView(binding.recyclerView) + .build() + mAdapter.setOnLoadMoreListener({ + loadData(false) + }, binding.recyclerView) + binding.refreshLayout.setOnRefreshListener { + loadData(true) + } + giveGoldModel.giveDetailLiveData.observe(this) { + rvDelegate.loadData(it) + } + loadData(true) + } + + @SuppressLint("CheckResult") + fun loadData(isRefresh: Boolean) { + binding.refreshLayout.isRefreshing = isRefresh + pageNum = if (isRefresh) 1 else (pageNum + 1) + giveGoldModel.giveDetailInfo(uid, 0, pageNum, pageSize) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveGiftFragment.kt b/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveGiftFragment.kt new file mode 100644 index 000000000..101df8fcf --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/pay/fragment/GiveGiftFragment.kt @@ -0,0 +1,76 @@ +package com.yizhuan.erban.pay.fragment + +import android.annotation.SuppressLint +import android.os.Bundle +import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.LinearLayoutManager +import com.yizhuan.erban.R +import com.yizhuan.erban.base.BaseViewBindingFragment +import com.yizhuan.erban.common.EmptyViewHelper +import com.yizhuan.erban.databinding.FragmentGiveDiamondBinding +import com.yizhuan.erban.databinding.FragmentGiveGiftBinding +import com.yizhuan.erban.pay.GiveGoldModel +import com.yizhuan.erban.pay.activity.GiveGoldDetailActivity +import com.yizhuan.erban.pay.adapter.GiveGiftDetailAdapter +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 + +class GiveGiftFragment : BaseViewBindingFragment() { + + private var pageNum: Int = 1 + private val pageSize = 20 + private lateinit var mAdapter: GiveGiftDetailAdapter + private lateinit var rvDelegate: RVDelegate + + private val giveGoldModel: GiveGoldModel by viewModels() + + private var uid: Long = 0L + + companion object { + fun newInstance(uid: Long): GiveGiftFragment { + val args = Bundle() + args.putLong("uid", uid) + val fragment = GiveGiftFragment() + fragment.arguments = args + return fragment + } + } + + override fun init() { + uid = arguments?.getLong("uid") ?: 0L + mAdapter = GiveGiftDetailAdapter() + rvDelegate = RVDelegate.Builder() + .setAdapter(mAdapter) + .setLayoutManager(LinearLayoutManager(context)) + .setPageSize(20) + .setEmptyView( + EmptyViewHelper.createEmptyView( + context, + ResUtil.getString(R.string.me_give_gold_empty) + ) + ) + .setRefreshLayout(binding.refreshLayout) + .setRecyclerView(binding.recyclerView) + .build() + mAdapter.setOnLoadMoreListener({ + loadData(false) + }, binding.recyclerView) + binding.refreshLayout.setOnRefreshListener { + loadData(true) + } + giveGoldModel.giveDetailLiveData.observe(this) { + rvDelegate.loadData(it) + } + loadData(true) + } + + @SuppressLint("CheckResult") + fun loadData(isRefresh: Boolean) { + binding.refreshLayout.isRefreshing = isRefresh + pageNum = if (isRefresh) 1 else (pageNum + 1) + giveGoldModel.giveDetailInfo(uid, 1, pageNum, pageSize) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoGiftFragment.java b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoGiftFragment.java index 1448b2e16..ac052fa47 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoGiftFragment.java +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoGiftFragment.java @@ -16,8 +16,6 @@ import com.yizhuan.erban.R; import com.yizhuan.erban.base.BaseBindingFragment; import com.yizhuan.erban.databinding.FragmentUserInfoGiftBinding; import com.yizhuan.erban.ui.user.adapter.UserGiftAdapter; -import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil; -import com.yizhuan.erban.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration; import com.yizhuan.xchat_android_core.bean.UserInfoItem; import com.yizhuan.xchat_android_core.user.UserInfoUiMgr; import com.yizhuan.xchat_android_core.user.UserModel; diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/viewpager/NoScrollViewPager.java b/app/src/main/java/com/yizhuan/erban/ui/widget/viewpager/NoScrollViewPager.java new file mode 100644 index 000000000..cec2f1add --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/viewpager/NoScrollViewPager.java @@ -0,0 +1,46 @@ +package com.yizhuan.erban.ui.widget.viewpager; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.viewpager.widget.ViewPager; + +public class NoScrollViewPager extends ViewPager { + // false 禁止ViewPager左右滑动。 + // true 普通ViewPager + private boolean isScroll = false; + + public NoScrollViewPager(@NonNull Context context) { + this(context, null); + } + public NoScrollViewPager(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + public void setScrollable(boolean isScroll) { + this.isScroll = isScroll; + } + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (!isScroll){ + // 不允许拦截事件就返回false + return isScroll; + }else { + // 正常ViewPager处理拦截事件就请求父类普通ViewPager中的onInterceptTouchEvent() + return super.onInterceptTouchEvent(ev); + } + } + @Override + public boolean onTouchEvent(MotionEvent ev) { + if (!isScroll){ + // 不允许消费事件就返回false. + return isScroll; + }else { + // 正常ViewPager消耗事件就请求父类普通ViewPager中的onTouchEvent. + return super.onTouchEvent(ev); + } + } +} + diff --git a/app/src/main/res/color/color_donation_btn.xml b/app/src/main/res/color/color_donation_btn.xml new file mode 100644 index 000000000..178adef94 --- /dev/null +++ b/app/src/main/res/color/color_donation_btn.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/donation_arrow_right.webp b/app/src/main/res/drawable-xhdpi/donation_arrow_right.webp new file mode 100644 index 0000000000000000000000000000000000000000..ca7a8a5bab5d6e9ae4495896cdaef0201eae26c7 GIT binary patch literal 962 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/me_clean_diamond.webp b/app/src/main/res/drawable-xhdpi/me_clean_diamond.webp index 53d67e83df8bc230203f6817b72397d19c52ad43..b09b928bd47c9080c46c693af6def400ee016856 100644 GIT binary patch delta 2391 zcmV-d38?m#7pNBnQb|Teps@u#0)Ju&001vbz!DG*bs?hv0qWYer){L?lgr#D!^}LB zCbQQb#-8y09iGB4Gea4|`mR{A8p8p|l5AUbo3*c)!5n53gg!I%3?gMcnVCh;7UMm# zt!+CV=YGFGD#o_L+O~q}97&I-`&~AZLAh-kgL-WL`M(#cEC2|aH+Prp+ChLnpiMKG zTXnbSmdNyFZ^R{cm%QY@-8qmXHEvX*qT3TJu*4I9Bme*a00000fbt{1o+@ZHUc=TA z0I3kuLLdc^fgOJckOKcIc>;Yfo_*^iF*=#q5W+8g@NDKr>IN5fM9fB1k_`X=0Dw#r zkRqlfVuVz50>t#Ao*as|V`hG8P;s>f&6gLyvr1k6l$dsbqyYc`0002UeyB>aL8F6< z{K;-=aCv3Toji8k@EPK0B!;V1b`@v>004m83Lt4>^p}4-{+&i*xO!w(d7FgTNsk1L z_qKp?0059{0ccX$?Va>UaC}^`mnb{QI|Jp$dt1GtH$!DtV<|vZ+0`#EerLG}rLKP} zF(dcRQrAD_o+_qY06;Oan09UEM(U;p6<2`4g&he$HQ(n9F6;x{+n;g#lZ+K`M_2&`it%0E~A`4(iQ3 zH89@K{i%)oZ=3l)tn+v%t@tbeK+G{QtbZ~4*d$s7WGCC1VSm@Z=tlC~N}xbs3IPP5 z6LqbX`bDdd{jG$tNh!c?YQmq54?0m7z+(XbK!5_VQTXNa%P01=qb5exvU)vh#a^qW zJ^+;f003f2CA@Yqr4sGvg6})8l)Dii{;qwa0>Ggpc{-70Kej)Z3tP;EZL)b`tAC|l zE9G8&p#0wWsvo+Qa<5XaRjC)2g=}Sq{aOD30{|gWM*>p-5D1t8fdBvn0ssKSJl;4= zAz%UlfZ@-2uOqjcO%5xim#)kEvGtzfiS?PNxp6*@N{Fe%N?yB%^JD9sGiL`y-Y<3f zyVk26Ta?|-XvdcPUF&tA9hVl&Dt~XKG{8EA0RTV%g$V=Cz5Z2Pb*gkQ#v2!p zlJ<9Fy3Y0dQ>T@3KL7~lS$`ZzwDJ>E{p8@Q8JQJYFZ>sR7@ZV4)LI7+c^@n5#it&> zHok~$)?eFr$Hk+J{oOD?3|-VpM7~H!8GS zzHfc<^h=JF$Cv|P%&@Yae(CgM^AiLBz<9^i{SF5@QBEG#E^8!b_}ks7dvaKAY+531 z62r0E^`3ry#Iw|%1%JEk@@@N*Ctq@0w(>mrlJkB0GchIRbG>PEA}fli#0`#&yd zBxeMfN@2ayW0Rh3r~bKkve*6kZO!;R01^OD82qjLb?1ZS?|)fd-pCJ{eX0Wh0JhU( z?*2Njk(d?)9G(k2d7_n1bvI>l zR4yYIHv3du3<1^8rcAILDvQX(_ zWhEIv1pKmZ#ML0_P`gd$2du-buv#PSL9LT@Dxpf}j@(L~V*(fx)gbL~D3?FK5(6lJN`Mek02Rcb5@HsJ#HR*~YLIs1AtIL}+RZwv_pRB} z{fmiOBkkB-Oit&~6Sr&C8fg!zUDT;qq5km&!K;fGwMNRxo3(N~+@8Ey>t-YAeytlQ zPouH7^1psJ8%ZZ`*2(dteCm3G8~cYXeS0KX@qgTIrFq1u>kV=}c3(W*p|W?x($|N) z!=pD%zBs0~W);o+wj; JimM{Tt^p21geL$1 delta 2370 zcmV-I3BC5H7nTw$O4gp9e)x? zfq&ph#e-P(RitXI#FjAor3;?%dZ49L*pp(SDhdGr007`sfGnU&Oc($V^U+L(67A4j znxAJ~%|fGev;lOeoOC@4gy#Iq+H=~* zvR0rrDD9o7Y4uP!>#^lPRnEH7m2WyUQ`el+BlC;R)HP>j6>C2LkPj7W|9CynGC$9{ z0+b4SGI`c)=P4ETBtU5^6%z#j@}gp*N?U0&^>=sUW!X7PGxc|ii2wlkQ5i82l?Hhd zl?Gz!@+4yFfbu*^x;W`S^ySKtfgOK&S}joB!GOr7rE(1S{#UP#P&qIV0HCly0DuC4 z6#xkU0Du8N0F(-!C8x7h+EZmR^>}$HTvjHakqzM*u*9 zu!c!kP_a_M0CXyodWXJRv$tB|DxGhes0|tFYli^<01z+`02t;z3jzSJFs6UQq~4(~ zR`0JOHu$wx9MwDYLnsFb04Nal&Cy8acMt$j(WkXM^(?G^;ExqY3wgD6Wy0UlPiDGO z#7ZT^P(iFzLaYEPAy!sHCB#Z40Ahuqfv|=Kj5fOs_jFl&Udp3|f$h)O2h))St5669 zu>(XX1qcOz;s^tP!U6yQC~AKu5Ml=iLx2<(fKUnmqQC#QwR@|~y~yTo^uHrtG}4&# zXn#gO+w^^-O2^Na^bPzn))=6ISwfY;ET;-$s9<`C9V!C=D? ztjuP@80ziP-~Zo=<2h2>Opx+<_ND1?93Yf3i)r<<0BparS&}FCJN(V&?;9=rnnqn>|7s8lk>(zDs-UStE* z{!iD6lU}T!(@dfq+yA!4{5%h!TzLE+{O-fTeY0>jlBmSbF8-6COw+Dd%t%OJW!4S= zn2M4B06?|v(~6Uxub`=J002NMNeTmn6#xVPDHE{_VBso_BV7jm z`FXCv-cE7wi2r|AJ9hNw3n<>Vtla zzZJ@1qD-_^t!M)XO2dLYPr6&Sd|%_$%6;`L%#FHcg7*t|{T}^n-QEfSK(+1HiW8n} zozh4nikF!VzpS_5Zyo>uFjgP%bn~oE#exwA%JA61S!{pW@nws0;gU{DmoEF??(uT< zuE{JS5d-1f;vK(7KUuf8lF{eu7wrD9&w@N3000o-hPBa%5@E#LNI{G*M(Rxu-uH2Xc=IjLQ- zB)eNsioNf5Sbka}iacKQ@TLU4b3wQ|Fc@%J|VS_1$WY4&@tb4)w5 zB(nsiVef}smYy^G5dPix%Uy=1H&i^z5alu6 z_0-c^_jWHBs|R(*BQ_m*b-=3Q*|NyhDjk2f(@*N%xpv-IBM2)HZuS!8Gyrwug+#1YAI;-D0#o>g0WFi(`jXRMd*wYYZs zq@nJ9PW#N08teAwiCzdY*UR^gx_alN!JahqJ?dzBP9r_0V zsC2x}KCZRqu!4tL5Rm01z+Ac8qPKs)Tkk-ZxffHd-(RR)Wb#o~0;=3*x)XNgNvVTx zxAQ^=JgImP6VB0_mWl_l?C0sNO)UE=Qh5>;sah+sCFUbP1qd-8wN_$FnEldBh7v$5 zH=-gb%zgp1LvyKAq)zfuumSyThvpIhFh9?_YNSJJVn%WzDv6s4W34qY+e%(syZI<^ z0cW+=#H{Hjlzz41kw%r1&O_l1coZ9bcB!)3&c2Oni`iQkn4NB+a?Zc3y}0I?^;NOa oXVpCIrm4kdIgv`@3AI?OgH + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_common_select.xml b/app/src/main/res/drawable/bg_common_select.xml new file mode 100644 index 000000000..1bbd455f7 --- /dev/null +++ b/app/src/main/res/drawable/bg_common_select.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_common_select_normal.xml b/app/src/main/res/drawable/bg_common_select_normal.xml new file mode 100644 index 000000000..f61e22366 --- /dev/null +++ b/app/src/main/res/drawable/bg_common_select_normal.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_f3f5fa_r4.xml b/app/src/main/res/drawable/bg_f3f5fa_r4.xml new file mode 100644 index 000000000..611da8e08 --- /dev/null +++ b/app/src/main/res/drawable/bg_f3f5fa_r4.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_give_gift_bg_selector.xml b/app/src/main/res/drawable/bg_give_gift_bg_selector.xml new file mode 100644 index 000000000..e3ad5977e --- /dev/null +++ b/app/src/main/res/drawable/bg_give_gift_bg_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_gradient_cc66ff_9cb3ff_13e2f5_r8.xml b/app/src/main/res/drawable/bg_gradient_cc66ff_9cb3ff_13e2f5_r8.xml new file mode 100644 index 000000000..92b1a4ba6 --- /dev/null +++ b/app/src/main/res/drawable/bg_gradient_cc66ff_9cb3ff_13e2f5_r8.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_give_gold_to_user.xml b/app/src/main/res/layout/activity_give_gold_to_user.xml index 8f82d422e..01d6d7d42 100644 --- a/app/src/main/res/layout/activity_give_gold_to_user.xml +++ b/app/src/main/res/layout/activity_give_gold_to_user.xml @@ -18,9 +18,9 @@ android:id="@+id/ivAvatar" android:layout_width="80dp" android:layout_height="80dp" + android:layout_marginStart="@dimen/dp_15" android:layout_marginTop="@dimen/dp_15" android:src="@drawable/default_avatar" - android:layout_marginStart="@dimen/dp_15" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/title_bar" /> @@ -28,76 +28,104 @@ android:id="@+id/tvNickname" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginStart="@dimen/dp_10" android:layout_marginTop="@dimen/dp_8" - tools:text="@string/layout_activity_give_gold_to_user_01" android:textColor="#ff333333" android:textSize="16sp" - android:layout_marginStart="@dimen/dp_10" app:layout_constraintStart_toEndOf="@+id/ivAvatar" - app:layout_constraintTop_toTopOf="@+id/ivAvatar"/> + app:layout_constraintTop_toTopOf="@+id/ivAvatar" + tools:text="@string/layout_activity_give_gold_to_user_01" /> + tools:text="ID:123456" /> - + app:layout_constraintTop_toBottomOf="@+id/ivAvatar"> + + + + + + + app:layout_constraintTop_toBottomOf="@+id/llTab" /> - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/mIvDiamond" /> + + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/mEditGold" /> @@ -119,25 +147,123 @@ android:textSize="13sp" /> + android:layout_height="wrap_content" + android:src="@drawable/icon_diamond" /> + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/tvAll" /> diff --git a/app/src/main/res/layout/fragment_give_diamond.xml b/app/src/main/res/layout/fragment_give_diamond.xml new file mode 100644 index 000000000..a3d92b162 --- /dev/null +++ b/app/src/main/res/layout/fragment_give_diamond.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_give_gift.xml b/app/src/main/res/layout/fragment_give_gift.xml new file mode 100644 index 000000000..a3d92b162 --- /dev/null +++ b/app/src/main/res/layout/fragment_give_gift.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_me.xml b/app/src/main/res/layout/fragment_me.xml index d3ea02a25..53367e288 100644 --- a/app/src/main/res/layout/fragment_me.xml +++ b/app/src/main/res/layout/fragment_me.xml @@ -651,7 +651,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/dp_10" - android:text="@string/me_clean_diamond" + android:text="@string/me_donation" android:textColor="@color/color_1F1A4E" android:textSize="@dimen/sp_14" /> diff --git a/app/src/main/res/layout/item_give_diamond_detail.xml b/app/src/main/res/layout/item_give_diamond_detail.xml new file mode 100644 index 000000000..b16e25710 --- /dev/null +++ b/app/src/main/res/layout/item_give_diamond_detail.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_give_gift.xml b/app/src/main/res/layout/item_give_gift.xml new file mode 100644 index 000000000..1196be618 --- /dev/null +++ b/app/src/main/res/layout/item_give_gift.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_give_gift_detail.xml b/app/src/main/res/layout/item_give_gift_detail.xml new file mode 100644 index 000000000..1d67326b0 --- /dev/null +++ b/app/src/main/res/layout/item_give_gift_detail.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_lately_give.xml b/app/src/main/res/layout/item_lately_give.xml index 0e2e6d9d2..fec02e9ca 100644 --- a/app/src/main/res/layout/item_lately_give.xml +++ b/app/src/main/res/layout/item_lately_give.xml @@ -42,4 +42,13 @@ app:layout_constraintTop_toBottomOf="@id/tv_nickname" tools:text="ID:123456" /> + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d925164e7..b304b3929 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -626,5 +626,6 @@ #4cFFFFFF #67D7D7 #92F9E8 + #E6E6F0 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dca802ac5..30047ddd9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -167,6 +167,7 @@ 你還沒有關註任何Peko好友哦! \n快去添加關註吧! 搜索昵稱或ID + 搜索用戶ID 在線中… 客服 @@ -967,7 +968,10 @@ 我的房間 收益記錄 轉贈鉆石 + 轉贈禮物 我的轉贈 + 轉贈至 + 轉贈明細 請聯系客服處理 @@ -4927,5 +4931,13 @@ %s鉆 向%s轉贈 已複製 + 轉贈記錄 + 數量 + 全部 + 請先選擇禮物 + 請輸入禮物數量 + 禮物數量有誤,請重新輸入 + 轉贈成功 + 總支出%s鉆 \ No newline at end of file diff --git a/app/src/module_community/res/layout/activity_give_gold.xml b/app/src/module_community/res/layout/activity_give_gold.xml index 1da847824..8e22ac916 100644 --- a/app/src/module_community/res/layout/activity_give_gold.xml +++ b/app/src/module_community/res/layout/activity_give_gold.xml @@ -36,7 +36,7 @@ android:gravity="center_vertical" android:imeOptions="actionSearch" android:singleLine="true" - android:hint="@string/search_hint" + android:hint="@string/search_user_id" android:paddingStart="@dimen/dp_15" android:paddingEnd="@dimen/dp_15" android:textColor="@color/color_1F1A4E" @@ -67,7 +67,7 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_15" android:layout_marginTop="@dimen/dp_25" - android:text="@string/layout_activity_give_gold_01" + android:text="@string/donation_record" android:textColor="@color/color_1F1A4E" android:textSize="@dimen/sp_16" android:textStyle="bold" @@ -95,6 +95,8 @@ + + + + + + + + + \ 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 ea8f67b60..6f6c9b969 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 @@ -113,6 +113,21 @@ object HomeModel : BaseModel() { api.getSearchUser(erbanNo) } + suspend fun giveGift(toUid: Long, giftId: Int, giftNum: Int): String? = + launchRequest { + api.giveGift(toUid, giftId, giftNum) + } + + suspend fun getGiveDetail( + uid: Long, + type: Int, + page: Int, + pageSize: Int + ): List? = + launchRequest { + api.getGiveDetail(uid, type, page, pageSize) + } + suspend fun getHotRoom(): List? = launchRequest { api.getHotRoom() @@ -427,6 +442,31 @@ object HomeModel : BaseModel() { @Query("erbanNo") erbanNo: Long? ): ServiceResult + /** + * 贈送禮物 + * + * @return + */ + @POST("/user/diamond/giveGift") + suspend fun giveGift( + @Query("toUid") toUid: Long?, + @Query("giftId") giftId: Int?, + @Query("giftNum") giftNum: Int? + ): ServiceResult + + /** + * 轉贈詳情 + * + * @return + */ + @GET("/user/diamond/giveRecordVoByType") + suspend fun getGiveDetail( + @Query("toUid") toUid: Long?, + @Query("type") type: Int?, + @Query("pageNum") pageNum: Int?, + @Query("pageSize") pageSize: Int? + ): ServiceResult> + } } \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftInfo.java index 9dcefe974..57002cf17 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftInfo.java @@ -46,6 +46,8 @@ public class GiftInfo implements Serializable { @SerializedName("nobleName") private String nobleName; + public boolean isSelected; + /** * 是否全服通知 */ 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 4b2e951f0..abdfcce2d 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,7 @@ public class InitInfo implements Serializable { private NobleResourceComponent nobleResource; private List monsters; + /** 转赠钻石白名单 */ private List giveDiamondErbanNoList; /** 每日转赠钻石总额限制 */ private Long giveDiamondDailyNum; @@ -34,6 +35,12 @@ public class InitInfo implements Serializable { private Long giveDiamondOnceLimitNum; /** 转赠手续费率 */ private Double giveDiamondRate; + /** 转赠钻石财富等级 */ + private Integer giveDiamondExperLevel; + /** 转赠礼物白名单 */ + private List giveGiftErbanNoList; + /** 转赠礼物财富等级 */ + private Integer giveGiftExperLevel; private double exchangeGoldRate;// 钻石兑换钻石比率 private double exchangeRate;// 钻石兑换钻石比率 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 index 89713259c..e55d3bb67 100644 --- 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 @@ -16,7 +16,15 @@ public class DiamondGiveHistoryInfo implements Serializable { private Long diamondNum;//转赠给对方的数量 private Double realDiamondNum;//转赠实际支出的数量,包含手续费 - private String createTime;//创建时间 - private String updateTime;//更新时间 + private Long createTime;//创建时间 + private Long updateTime;//更新时间 + + private int type;//转赠类型: 0转赠钻石 1转赠礼物 + private Integer giftId;//转赠礼物id + private Integer giftNum;//转赠礼物数 + private String giftUrl;//轉贈禮物url + private String giftName;//轉贈禮物名字 + private Long giftGoldNum;//转赠礼物单价 + private Long totalGiftGoldNum;//转赠礼物总价值 } diff --git a/nim_uikit/res/values/colors.xml b/nim_uikit/res/values/colors.xml index 8035150c8..92a781bcb 100644 --- a/nim_uikit/res/values/colors.xml +++ b/nim_uikit/res/values/colors.xml @@ -70,6 +70,7 @@ #248DFA #FAFAFA #B3B3B3 + #B3B3C3 #FFBC52 #BAB0FF #2A2A39