From 66e47c432859cb43ff2c9ea0c2551c2f15fc0cc7 Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Tue, 9 Dec 2025 11:53:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=82=E5=8A=A00=E5=85=83=E8=B4=AD=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gamedog/vididin/beans/ZeroBuyResp.kt | 1 + .../vididin/features/zero/ZeroBuyActivity.kt | 30 +++++++++++- .../vididin/features/zero/ZeroBuyViewModel.kt | 47 +++++++++++++++---- .../vididin/features/zero/ZeroItemAdapter.kt | 29 +++++++++++- .../gamedog/vididin/login/AccountManager.kt | 1 + .../main/res/layout/layout_item_zerobuy.xml | 22 ++++++++- app/src/main/res/values/strings.xml | 2 + 7 files changed, 120 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/gamedog/vididin/beans/ZeroBuyResp.kt b/app/src/main/java/com/gamedog/vididin/beans/ZeroBuyResp.kt index 553dcd0..6df0581 100644 --- a/app/src/main/java/com/gamedog/vididin/beans/ZeroBuyResp.kt +++ b/app/src/main/java/com/gamedog/vididin/beans/ZeroBuyResp.kt @@ -11,6 +11,7 @@ data class ZeroBuyResp ( var mCurrentList: List?, var mFinishedList: List?, val Content: String, + var contentObj: ZeroBuyItem? ) diff --git a/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyActivity.kt b/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyActivity.kt index 6b7de25..9d9a28b 100644 --- a/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyActivity.kt @@ -12,6 +12,7 @@ import com.ama.core.architecture.appBase.AppViewsEmptyViewModelActivity import com.ama.core.architecture.util.CommonItemDecoration import com.ama.core.architecture.util.setOnClickBatch import com.gamedog.vididin.R +import com.gamedog.vididin.beans.ZeroBuyItem import com.gamedog.vididin.beans.ZeroBuyResp import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.features.zero.dialogs.ZeroBuyRulesDialog @@ -54,7 +55,9 @@ class ZeroBuyActivity : AppViewsEmptyViewModelActivity() { with(recyclerView) { - mAdapter = ZeroItemAdapter() + mAdapter = ZeroItemAdapter({ itemId-> + requestParticipateActivity(itemId) + }) adapter = mAdapter layoutManager = GridLayoutManager(this@ZeroBuyActivity, 2) addItemDecoration( @@ -108,11 +111,36 @@ class ZeroBuyActivity : AppViewsEmptyViewModelActivity() { } + private fun requestParticipateActivity(itemId: Int) { + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.ZeroBuyJoinResult.collect { result -> + when (result) { + is Result.Loading -> { } + is Result.Success -> updateItemUI(result.data) + is Result.Error -> { } + } + } + } + } + + viewModel.requestJoinZeroBuy(itemId) + } + private fun updateUIs(data: ZeroBuyResp) { mAdapter.submitList(data.mCurrentList) } + private fun updateItemUI(joinedItem: ZeroBuyItem?) { + val currentList = mAdapter.currentList.toMutableList() + val indexToUpdate = currentList.indexOfFirst { it.id == joinedItem?.id } + if (indexToUpdate != -1) { + currentList.removeAt(indexToUpdate) + currentList.add(indexToUpdate, joinedItem) + mAdapter.submitList(currentList) + } + } diff --git a/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyViewModel.kt b/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyViewModel.kt index 982fcc3..8191945 100644 --- a/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyViewModel.kt +++ b/app/src/main/java/com/gamedog/vididin/features/zero/ZeroBuyViewModel.kt @@ -21,27 +21,56 @@ class ZeroBuyViewModel : ViewModel() { private val _ZeroBuyListData = MutableStateFlow>(Result.Loading) val ZeroBuyListData: StateFlow> = _ZeroBuyListData.asStateFlow() - private val _ZeroBuySecretData = MutableStateFlow>(Result.Loading) - val ZeroBuySecretData: StateFlow> = _ZeroBuySecretData.asStateFlow() + private val _ZeroBuyJoinResult = MutableStateFlow>(Result.Loading) + val ZeroBuyJoinResult: StateFlow> = _ZeroBuyJoinResult.asStateFlow() - fun requestZeroBuySecret() { + fun requestJoinZeroBuy(itemId: Int) { viewModelScope.launch { - _ZeroBuySecretData.value = Result.Loading - val operationVal = 1 + _ZeroBuyJoinResult.value = Result.Loading + + val operationVal = 10 val curTimeSec = System.currentTimeMillis()/1000 val signStr = RequestUtil.getZeroBuyRequestSign(curTimeSec, operationVal) val requestHeaders = mapOf("Operation" to operationVal.toString(), "Timestamp" to curTimeSec.toString(), "Sign" to signStr) + val requestParams = mutableMapOf("AppId" to VidiConst.ZEROBUY_APPID, "DeviceId" to DeviceUtil.generateDeviceId()) + val userId = AccountManager.getAccount()?.userId?: 0 + if (userId > 0) { + requestParams.put("UserId", userId.toString()) + } + val joinZeroBuyItemIds = SpUtil.instance().getList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS) + if (joinZeroBuyItemIds.isNotEmpty()) { + requestParams.put("JoinedPurchaseIds", AndroidUtil.object2Json(joinZeroBuyItemIds)) + } + requestParams.put("ActivityId", itemId.toString()) - val result = NetworkUtil.get("${VidiConst.URL_ZERO_BUY}/anynameisok", requestHeaders) + val result = NetworkUtil.get("${VidiConst.URL_ZERO_BUY}/anynameisok", requestHeaders, requestParams) when (result) { is Result.Success -> { - val respObj = AndroidUtil.json2Object(result.data.string()) - _ZeroBuySecretData.value = Result.Success(respObj!!) + val respObj = AndroidUtil.json2Object(result.data.string())?.apply { + mCurrentList = AndroidUtil.json2Object>(CurrentPurchases) + mFinishedList = AndroidUtil.json2Object>(FinishedPurchases) + contentObj = AndroidUtil.json2Object(Content) + } + + + respObj?.contentObj?.let { + val itemId = respObj?.contentObj?.id + if (respObj.Code == 0 && itemId != null && itemId > 0 && !joinZeroBuyItemIds.contains(itemId)) { + val mutableJoinedIdList = if(joinZeroBuyItemIds == null) mutableListOf() else joinZeroBuyItemIds.toMutableList() + mutableJoinedIdList.add(itemId) + SpUtil.instance().putList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS, mutableJoinedIdList) + + _ZeroBuyJoinResult.value = Result.Success(respObj?.contentObj) + return@launch + } + } + + _ZeroBuyJoinResult.value = Result.Error(Throwable("empty response")) } is Result.Error -> { - _ZeroBuySecretData.value = Result.Error(result.exception, result.message) + _ZeroBuyJoinResult.value = Result.Error(result.exception, result.message) } else -> { } } diff --git a/app/src/main/java/com/gamedog/vididin/features/zero/ZeroItemAdapter.kt b/app/src/main/java/com/gamedog/vididin/features/zero/ZeroItemAdapter.kt index 5e1a05a..c3b100d 100644 --- a/app/src/main/java/com/gamedog/vididin/features/zero/ZeroItemAdapter.kt +++ b/app/src/main/java/com/gamedog/vididin/features/zero/ZeroItemAdapter.kt @@ -1,15 +1,20 @@ package com.gamedog.vididin.features.zero + 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.SpUtil +import com.ama.core.architecture.util.setOnClickBatch import com.gamedog.vididin.R import com.gamedog.vididin.beans.ZeroBuyItem +import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.databinding.LayoutItemZerobuyBinding as ViewBinding -class ZeroItemAdapter : ListAdapter(DiffCallback()) { +class ZeroItemAdapter(private val joinCallback: (itemId: Int)->Unit) : ListAdapter(DiffCallback()) { private val mBgResList = listOf(R.mipmap.zero_bg_item_sub1, R.mipmap.zero_bg_item_sub2, R.mipmap.zero_bg_item_sub3, R.mipmap.zero_bg_item_sub4) @@ -30,6 +35,28 @@ class ZeroItemAdapter : ListAdapter(Dif binding.tvJoinGoldNum.text = item.cost.toString() binding.ivBgType.setImageResource(mBgResList[item.image]) binding.tvRewardCashNum.text = item.price + + with(binding) { + setOnClickBatch(flBottomBut) { + when (this) { + flBottomBut-> { + if (!item.completed && (item.current_users == null || !item.current_users!!.contains(AccountManager.getAccount()?.userId))) { + joinCallback(item.id) + } + } + } + } + + + + // judge state + val joinedIds = SpUtil.instance().getList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS) + val hasJoined = joinedIds.contains(item.id) + val hasCompleted = item.completed + flBottomBut.isVisible = !hasJoined + tvParticipateAlready.isVisible = hasJoined + tvRemainTime.isVisible = hasJoined && !hasCompleted + } } } diff --git a/app/src/main/java/com/gamedog/vididin/login/AccountManager.kt b/app/src/main/java/com/gamedog/vididin/login/AccountManager.kt index cb89365..5aecc64 100644 --- a/app/src/main/java/com/gamedog/vididin/login/AccountManager.kt +++ b/app/src/main/java/com/gamedog/vididin/login/AccountManager.kt @@ -110,5 +110,6 @@ object AccountManager { } } + } diff --git a/app/src/main/res/layout/layout_item_zerobuy.xml b/app/src/main/res/layout/layout_item_zerobuy.xml index f1c83bc..d4b7a1d 100644 --- a/app/src/main/res/layout/layout_item_zerobuy.xml +++ b/app/src/main/res/layout/layout_item_zerobuy.xml @@ -91,7 +91,28 @@ /> + + + + @@ -112,7 +133,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/white" - android:layout_marginStart="5dp" android:textSize="14sp" android:text="@string/participar" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e8c4c73..cc06a31 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -117,5 +117,7 @@ Dinheiro Moedas Total sacado até o momento: + Já participou + Reembolso em \ No newline at end of file