From f8face95c6e948bb2f0ef4595705c5d6fe9698e6 Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Fri, 12 Dec 2025 13:54:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E9=A2=9D=E6=8F=90=E7=8E=B0=E5=AD=90?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=20rv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../features/withdraw/WithDrawActivity.kt | 7 +- .../features/withdraw/WithDrawSubActivity.kt | 311 ++---------------- .../features/withdraw/WithdrawSubAdapter.kt | 61 ++++ .../res/drawable/bg_withdraw_sub_selected.xml | 7 + .../bg_withdraw_sub_selected_left_top.xml | 8 + .../drawable/bg_withdraw_sub_unselected.xml | 7 + .../main/res/layout/activity_withdraw_sub.xml | 3 +- .../res/layout/layout_item_withdraw_sub.xml | 49 +++ .../architecture/util/CommonItemDecoration.kt | 2 +- 9 files changed, 161 insertions(+), 294 deletions(-) create mode 100644 app/src/main/java/com/gamedog/vididin/features/withdraw/WithdrawSubAdapter.kt create mode 100644 app/src/main/res/drawable/bg_withdraw_sub_selected.xml create mode 100644 app/src/main/res/drawable/bg_withdraw_sub_selected_left_top.xml create mode 100644 app/src/main/res/drawable/bg_withdraw_sub_unselected.xml create mode 100644 app/src/main/res/layout/layout_item_withdraw_sub.xml diff --git a/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawActivity.kt b/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawActivity.kt index 5c6f923..fd0fd2a 100644 --- a/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawActivity.kt @@ -23,7 +23,6 @@ import com.gamedog.vididin.features.withdraw.dialogs.WithdrawFailDialog import com.gamedog.vididin.features.withdraw.dialogs.WithdrawInfoConfirmDialog import com.gamedog.vididin.features.withdraw.dialogs.WithdrawSuccessDialog import com.gamedog.vididin.features.withdraw.widget.WithDrawItemView -import com.gamedog.vididin.main.interfaces.OnTabStyleListener import com.gamedog.vididin.netbase.Result import com.gamedog.vididin.router.Router import dagger.hilt.android.AndroidEntryPoint @@ -34,7 +33,7 @@ import com.vididin.real.money.game.databinding.ActivityWithdrawBinding as ViewBi @AndroidEntryPoint -class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabStyleListener { +class WithDrawActivity : AppViewsEmptyViewModelActivity() { private val viewModel: WithdrawViewModel by viewModels() private val mItemViewList: MutableList = mutableListOf() @@ -159,10 +158,6 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty //TODO("Not yet implemented") } - override fun onTabIsDarkFont(isDarkFont: Boolean) { - //TODO("Not yet implemented") - } - private fun requestInit(withdrawNum: Float) { lifecycleScope.launch { diff --git a/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawSubActivity.kt b/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawSubActivity.kt index 63b6aaa..7e0be8a 100644 --- a/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawSubActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawSubActivity.kt @@ -3,40 +3,18 @@ package com.gamedog.vididin.features.withdraw import android.app.Activity import android.content.Intent import android.view.LayoutInflater -import androidx.activity.viewModels -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.repeatOnLifecycle +import androidx.recyclerview.widget.LinearLayoutManager import com.ama.core.architecture.appBase.AppViewsEmptyViewModelActivity -import com.ama.core.architecture.util.SpUtil -import com.gamedog.vididin.VidiConst -import com.vididin.real.money.game.R -import com.gamedog.vididin.VididinEvents -import com.gamedog.vididin.beans.resp.PayoutCheck -import com.gamedog.vididin.beans.resp.PayoutReply -import com.gamedog.vididin.beans.resp.WithdrawRecord -import com.gamedog.vididin.core.login.login.AccountManager -import com.gamedog.vididin.features.withdraw.dialogs.WithdrawFailDialog -import com.gamedog.vididin.features.withdraw.dialogs.WithdrawSuccessDialog -import com.gamedog.vididin.features.withdraw.widget.WithDrawItemView -import com.gamedog.vididin.main.interfaces.OnTabStyleListener -import com.gamedog.vididin.netbase.Result +import com.ama.core.architecture.util.CommonItemDecoration import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.launch -import kotlin.getValue import com.vididin.real.money.game.databinding.ActivityWithdrawSubBinding as ViewBinding @AndroidEntryPoint -class WithDrawSubActivity : AppViewsEmptyViewModelActivity(), OnTabStyleListener { - - private val viewModel: WithdrawViewModel by viewModels() - private val mItemViewList: MutableList = mutableListOf() - private var mCurSelectedIndex: Int = 0 - private val mRecordList: MutableList by lazy { - SpUtil.instance().getList(SpUtil.KEY_WITHDRAW_HISTORY_LIST).toMutableList() - } +class WithDrawSubActivity : AppViewsEmptyViewModelActivity() { + private var mType: Int = 0 + private val mAdapter: WithdrawSubAdapter by lazy { WithdrawSubAdapter() } override fun inflateViewBinding(inflater: LayoutInflater) = ViewBinding.inflate(inflater) @@ -46,277 +24,38 @@ class WithDrawSubActivity : AppViewsEmptyViewModelActivity(), OnTab } override fun ViewBinding.initViews() { - titlebar.setTitleText(R.string.title_withdraw_sub) + mType = intent.getIntExtra(EXTRA_TYPE, 0) - } - - - - private fun updateUICashTotal() { - binding.tvCashTotal.text = AccountManager.getCash().toString() + recyclerView.layoutManager = LinearLayoutManager(this@WithDrawSubActivity, LinearLayoutManager.HORIZONTAL, false) + recyclerView.adapter = mAdapter + recyclerView.addItemDecoration(CommonItemDecoration.create(18, 0, false)) } override fun ViewBinding.initListeners() { - registerEvents({ data-> - when (data?.mEventType) { - VididinEvents.Event_Account_Cash_Changed -> { - updateUICashTotal() - } - - VididinEvents.EVENT_AD_WATCHED_FOR_WITHDRAW -> { - var withdrawNum: Float = (data.mData as Double).toFloat() - requestInit(withdrawNum) - } - } - - }, VididinEvents.Event_Account_Cash_Changed, VididinEvents.EVENT_AD_WATCHED_FOR_WITHDRAW) - - - checkTransactionState() + val dataList = mutableListOf() + dataList.add(WithdrawSubItem(0, 1F, false)) + dataList.add(WithdrawSubItem(1, 1F, true)) + dataList.add(WithdrawSubItem(2, 1F, false)) + dataList.add(WithdrawSubItem(3, 1F, false)) + mAdapter.submitList(dataList) } - override fun ViewBinding.initObservers() { - //TODO("Not yet implemented") + } - override fun onTabIsDarkFont(isDarkFont: Boolean) { - //TODO("Not yet implemented") - } - - - private fun requestInit(withdrawNum: Float) { - lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.STARTED) { - viewModel.InitData.collect { result -> - when (result) { - is Result.Loading -> { - - } - is Result.Success -> { - val reqInitBean = result.data.data - - reqInitBean?.let { - var errorHintRes = 0 - - if (it.error == 0 && !it.uuid.isNullOrEmpty() && !it.items.isNullOrEmpty()) { - val itemId = if (withdrawNum <= VidiConst.WITHDRAW_SMALL_NUM) 0 else 1 - val withDrawItem = it.items?.get(itemId)!! - if (withDrawItem.status == INIT_ACTIVE) { - requestPayout(it.uuid!!, withDrawItem.id, withdrawNum) - } else { - errorHintRes = R.string.withdraw_fail_reach_day_limit - } - - } else { - // 0成功,1失败,2签名验证失败,3客户端版本过低,4 ts长度错误 - when (it.error) { - 3-> errorHintRes = R.string.withdraw_fail_version_toolow - } - } - - if (errorHintRes > 0) { - showFailDialog(errorHintRes) - } - } - - } - is Result.Error -> { - showFailDialog(R.string.withdraw_fail_unkown_error) - } - } - } - } - } - - viewModel.withdrawInit() - } - - private fun requestPayout(initUUID: String, payItemId: Int, payCashNum: Float) { - val currentTimeMs = System.currentTimeMillis() - - lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.STARTED) { - viewModel.PayoutResult.collect { result -> - when (result) { - is Result.Loading -> { - } - is Result.Success -> { - var errHintRes = 0 - - when (result.data?.data?.error) { - /* 错误码, - 0成功,1失败,2签名验证失败,3客户端版本过低,4uuid错误,5所在地国家或地区不在提现限制内,6提现金额不符对应的产品id,7提现产品id不对,8达到提现金额限制,9提现次数超过限制,10今日没有提现机会,11提现账号达到次数限制,12身份审核条件不满足,不能提现,13巴西提现参数 document_type 错误, - 14巴西提现参数 document_id 错误,15 巴西提现参数 AccountType 错误,16 巴西提现参数 Name 错误,17巴西提现参数 Account 和 DocumentId 不同,18巴西提现参数account_type为CPF时 对应的 account 错误,19巴西提现参数account_type为CNPJ时 对应的 account 错误,20巴西提现参数 account_type 错误, - 21巴西提现参数 document_type 错误,22巴西提现参数account_type为CPF时 对应的 document_id 错误,23巴西提现参数account_type为CNPJ时 对应的 document_id 错误,24 ts长度错误,25 没提0.1就提现其它的 - */ - 0 -> { - saveNewRecord(result.data.data!!, payCashNum, currentTimeMs) - } - 5-> { - errHintRes = R.string.withdraw_fail_region_restricit - } - 8-> { - errHintRes = R.string.withdraw_fail_amount_limit - } - 9-> { - errHintRes = R.string.withdraw_fail_amount_limit - } - } - - if (errHintRes > 0) { - showFailDialog(errHintRes) - } - } - is Result.Error -> { - showFailDialog(R.string.withdraw_fail_unkown_error) - } - } - } - } - } - - - viewModel.withdrawPayout(initUUID, payItemId, payCashNum) - } - - private fun requestCheck(recordNo: String, cashNum: Float) { - lifecycleScope.launch { - repeatOnLifecycle(Lifecycle.State.STARTED) { - viewModel.CheckResult.collect { result -> - when (result) { - is Result.Loading -> { - - } - is Result.Success -> { - val checkResult = result.data?.data - var errHintRes = 0 - - when (checkResult?.error) { - 0 -> { - when (checkResult.status) { - // 提现状态 1:提现中,2:提现成功,3:提现失败 - 1 -> { - - } - 2 -> { - showSuccessDialog(cashNum) - updateRecord(recordNo, checkResult) - } - 3 -> { - errHintRes = R.string.withdraw_normal_fail - updateRecord(recordNo, checkResult) - } - } - } - - 1 -> { - errHintRes = R.string.withdraw_normal_fail - } - - 2 -> { - errHintRes = R.string.withdraw_fail_version_toolow - } - } - - if (errHintRes > 0) { - showFailDialog(errHintRes) - } - } - is Result.Error -> { - showFailDialog(R.string.withdraw_fail_unkown_error) - } - } - } - } - } - - viewModel.withdrawCheck(recordNo) - } - - private fun showSuccessDialog(cashNum: Float) { - WithdrawSuccessDialog(this@WithDrawSubActivity, cashNum).show() - } - - private fun showFailDialog(errorHintRes: Int) { - WithdrawFailDialog(this@WithDrawSubActivity, errorHintRes).show() - } - - - - - // ------------------------ new added -------------------------// - // WithdrawRecord - - @Synchronized - private fun saveNewRecord(payoutReply: PayoutReply, payCashNum: Float, timeMs: Long) { - val newRecord = WithdrawRecord().apply { - id = payoutReply.id!! - recordNo = payoutReply.record_no - cashNum = payCashNum - operateMs = timeMs - state = 1 - failReason = 0 - } - mRecordList.add(newRecord) - - SpUtil.instance().putList(SpUtil.KEY_WITHDRAW_HISTORY_LIST, mRecordList) - - checkTransactionState() - } - - @Synchronized - private fun updateRecord(recordNo: String, payCheck: PayoutCheck) { - var needSaveSp = false - mRecordList.forEachIndexed { index, record -> - if (record.recordNo == recordNo) { - if (record.state != payCheck.status) { - needSaveSp =true - record.state = payCheck.status - } - return@forEachIndexed - } - } - - if (needSaveSp) { - SpUtil.instance().putList(SpUtil.KEY_WITHDRAW_HISTORY_LIST, mRecordList) - } - } - - @Synchronized - private fun checkTransactionState() { - var unCheckCount = 0 - mRecordList.forEach { record -> - if (record.state == FINAL_STATE_ONGING) { - unCheckCount++ - } - } - - if (unCheckCount > 0) { - mRecordList.forEachIndexed { index, record -> - if (record.state == FINAL_STATE_ONGING) { - requestCheck(record.recordNo, record.cashNum) - } - } - - binding.root.postDelayed(object : Runnable { - override fun run() { - checkTransactionState() - } - }, CHECK_DURATION) - } - } - - companion object { - const val INIT_ACTIVE = 1 - const val FINAL_STATE_ONGING = 1 - const val CHECK_DURATION = 10*1000L - + const val EXTRA_TYPE = "EXTRA_TYPE" internal fun startActivity(activity: Activity, withdrawType: Int) { - activity.startActivity(Intent(activity.applicationContext, WithDrawSubActivity::class.java)) + activity.startActivity(Intent(activity.applicationContext, + WithDrawSubActivity::class.java).apply { putExtra(EXTRA_TYPE, withdrawType) }) } } +} -} \ No newline at end of file +data class WithdrawSubItem( + val index: Int, + val cashNum: Float, + var isSelected: Boolean = false, +) \ No newline at end of file diff --git a/app/src/main/java/com/gamedog/vididin/features/withdraw/WithdrawSubAdapter.kt b/app/src/main/java/com/gamedog/vididin/features/withdraw/WithdrawSubAdapter.kt new file mode 100644 index 0000000..dc5bb7e --- /dev/null +++ b/app/src/main/java/com/gamedog/vididin/features/withdraw/WithdrawSubAdapter.kt @@ -0,0 +1,61 @@ +package com.gamedog.vididin.features.withdraw + + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.core.view.isVisible +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import com.ama.core.architecture.util.ResUtil +import com.vididin.real.money.game.R +import com.vididin.real.money.game.databinding.LayoutItemWithdrawSubBinding as ViewBinding + +class WithdrawSubAdapter() : ListAdapter(DiffCallback()) { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val binding = ViewBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return ViewHolder(binding) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.bind(getItem(position)) + } + + + inner class ViewHolder(private val binding: ViewBinding) : RecyclerView.ViewHolder(binding.root) { + fun bind(item: WithdrawSubItem) { + with(binding) { + tvTitle.text = buildString { + append(ResUtil.getString(R.string.cash)) + append(item.cashNum) + } + tvDay.text = buildString { + append(ResUtil.getString(R.string.day)) + append(" ") + append(item.index + 1) + } + + if (item.isSelected) { + root.setBackgroundResource(R.drawable.bg_withdraw_sub_selected) + root.alpha = 1F + ivLefttopChecked.isVisible = true + } else { + root.setBackgroundResource(R.drawable.bg_withdraw_sub_unselected) + root.alpha = 0.7F + ivLefttopChecked.isVisible = false + } + } + } + } + + class DiffCallback : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: WithdrawSubItem, newItem: WithdrawSubItem): Boolean { + return oldItem.index == newItem.index + } + + override fun areContentsTheSame(oldItem: WithdrawSubItem, newItem: WithdrawSubItem): Boolean { + return newItem == oldItem + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_withdraw_sub_selected.xml b/app/src/main/res/drawable/bg_withdraw_sub_selected.xml new file mode 100644 index 0000000..1c018a2 --- /dev/null +++ b/app/src/main/res/drawable/bg_withdraw_sub_selected.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_withdraw_sub_selected_left_top.xml b/app/src/main/res/drawable/bg_withdraw_sub_selected_left_top.xml new file mode 100644 index 0000000..04b3915 --- /dev/null +++ b/app/src/main/res/drawable/bg_withdraw_sub_selected_left_top.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bg_withdraw_sub_unselected.xml b/app/src/main/res/drawable/bg_withdraw_sub_unselected.xml new file mode 100644 index 0000000..f137a69 --- /dev/null +++ b/app/src/main/res/drawable/bg_withdraw_sub_unselected.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_withdraw_sub.xml b/app/src/main/res/layout/activity_withdraw_sub.xml index 8dc0457..6c138c3 100644 --- a/app/src/main/res/layout/activity_withdraw_sub.xml +++ b/app/src/main/res/layout/activity_withdraw_sub.xml @@ -112,11 +112,12 @@ + + + + + + + + + + + + + + + + diff --git a/core/architecture/src/main/java/com/ama/core/architecture/util/CommonItemDecoration.kt b/core/architecture/src/main/java/com/ama/core/architecture/util/CommonItemDecoration.kt index 71fbe3f..ca8138e 100644 --- a/core/architecture/src/main/java/com/ama/core/architecture/util/CommonItemDecoration.kt +++ b/core/architecture/src/main/java/com/ama/core/architecture/util/CommonItemDecoration.kt @@ -11,7 +11,7 @@ import androidx.recyclerview.widget.StaggeredGridLayoutManager class CommonItemDecoration private constructor( private val horizontalSpace: Int, private val verticalSpace: Int, - private val includeEdge: Boolean + private val includeEdge: Boolean = false ) : RecyclerView.ItemDecoration() { override fun getItemOffsets(