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 000000000..ca7a8a5ba Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/donation_arrow_right.webp differ diff --git a/app/src/main/res/drawable-xhdpi/ic_give_diamond_detail.webp b/app/src/main/res/drawable-xhdpi/ic_give_diamond_detail.webp new file mode 100644 index 000000000..1805a5b4d Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_give_diamond_detail.webp differ 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 53d67e83d..b09b928bd 100644 Binary files a/app/src/main/res/drawable-xhdpi/me_clean_diamond.webp and b/app/src/main/res/drawable-xhdpi/me_clean_diamond.webp differ diff --git a/app/src/main/res/drawable/bg_common_disable_select.xml b/app/src/main/res/drawable/bg_common_disable_select.xml new file mode 100644 index 000000000..31ef8ba6e --- /dev/null +++ b/app/src/main/res/drawable/bg_common_disable_select.xml @@ -0,0 +1,9 @@ + + + + + + + + \ 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