[Modify]夺宝精灵逻辑修改

This commit is contained in:
wushaocheng
2023-09-13 15:22:10 +08:00
parent a7f17276c5
commit 77dcc9d117
23 changed files with 413 additions and 15 deletions

View File

@@ -76,6 +76,10 @@ class FairyViewModel : BaseViewModel() {
private val _exchangeGiftLiveData = MutableLiveData<Event<ExchangeGiftInfo>>()
val exchangeGiftLiveData: LiveData<Event<ExchangeGiftInfo>> = _exchangeGiftLiveData
//精灵召唤列表
private val _fairyCallInfoLiveData = MutableLiveData<List<ExchangeGiftInfo>?>()
val fairyCallInfoLiveData: MutableLiveData<List<ExchangeGiftInfo>?> = _fairyCallInfoLiveData
private val _debrisExchangeListLiveData = MutableLiveData<List<ExchangeGiftInfo>?>()
val debrisExchangeListLiveData: MutableLiveData<List<ExchangeGiftInfo>?> =
_debrisExchangeListLiveData
@@ -206,6 +210,21 @@ class FairyViewModel : BaseViewModel() {
)
}
/**
* 精灵召唤列表
*/
fun getFairyCallInfo() {
safeLaunch(
onError = {
_myFairyInfoLiveData.value = null
it.message.toast()
},
block = {
_myFairyInfoLiveData.value = TreasureFairyModel.getMyFairyInfo()
}
)
}
fun getFriendsList(nick: String? = null) {
safeLaunch(
onError = {
@@ -449,6 +468,18 @@ class FairyViewModel : BaseViewModel() {
)
}
//精灵召唤列表
fun getFairyCallList() {
safeLaunch(
onError = {
_fairyCallInfoLiveData.value = null
},
block = {
val result = TreasureFairyModel.getFairyCallList()
_fairyCallInfoLiveData.value = result
}
)
}
fun getDebrisExchangeList() {
safeLaunch(

View File

@@ -37,7 +37,10 @@ import com.yizhuan.xchat_android_core.manager.RoomEvent
import com.yizhuan.xchat_android_core.treasurefairy.DrawInfo
import com.yizhuan.xchat_android_core.treasurefairy.FairyMsgInfoBean
import com.yizhuan.xchat_android_core.treasurefairy.PrizeInfo
import com.yizhuan.xchat_android_library.common.SpConstants
import com.yizhuan.xchat_android_library.common.util.SPUtils
import com.yizhuan.xchat_android_library.utils.FormatUtils
import com.yizhuan.xchat_android_library.utils.TimeUtils
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
@@ -114,13 +117,22 @@ class HomeFairyActivity : BaseViewBindingActivity<TreasureFairyDialogHomeBinding
if (!isSelect) {
toast("請選擇購買的碎片數量")
} else {
viewModel.buyDebris(mPrice.toString(), AuthModel.get().currentUid.toString())
val date = SPUtils.getLong(SpConstants.DATE, 0L)
if (date != 0L) {
if (TimeUtils.isToday(date)) {
viewModel.buyDebris(
mPrice.toString(),
AuthModel.get().currentUid.toString()
)
} else {
FairyBuyDebrisDialog.newInstance(mPrice).show(context)
}
} else {
FairyBuyDebrisDialog.newInstance(mPrice).show(context)
}
}
}
// binding.tvKeyNum.setOnClickListener {
// FairyDialogWebViewActivity.start(this, UriProvider.getFairyKey())
// }
binding.ivMyFairy.setOnClickListener {
MyFairyDialog.newInstance().show(this)
}
@@ -172,8 +184,12 @@ class HomeFairyActivity : BaseViewBindingActivity<TreasureFairyDialogHomeBinding
isCheck = isChecked
}
binding.ivRefresh.setOnClickListener {
viewModel.initDrawInfo()
}
viewModel.buyDebrisLiveData.observe(this) {
toast("碎片購買成功")
toast("購買碎片成功")
}
viewModel.prizeInfoListLiveData.observe(this) {
@@ -208,9 +224,9 @@ class HomeFairyActivity : BaseViewBindingActivity<TreasureFairyDialogHomeBinding
binding.tvShortLuckyValue.text =
SpannableBuilder()
.append("幸運值達到", ForegroundColorSpan("#59FDFF".toColorInt()))
.append("達到", ForegroundColorSpan("#59FDFF".toColorInt()))
.append("${it.needLuckyNum}", ForegroundColorSpan("#FFE8AA".toColorInt()))
.append("下次奪寶獲贈精靈", ForegroundColorSpan("#59FDFF".toColorInt()))
.append("后下次奪寶,額外獲贈傳説精靈", ForegroundColorSpan("#59FDFF".toColorInt()))
.build()
binding.ivLuckyStone.post {
val drawable =

View File

@@ -56,8 +56,8 @@ class ExchangeFairyDialog : BaseDialog<TreasureFairyDialogExchangeBinding>() {
binding?.viewPager?.adapter = RoomVPAdapter(
childFragmentManager,
listOf(
ExchangeFairyFragment.newInstance(),
ExchangeDebrisFragment.newInstance()
ExchangeDebrisFragment.newInstance(1),
ExchangeDebrisFragment.newInstance(2)
)
)
viewModel.getMyFairyInfo()

View File

@@ -0,0 +1,73 @@
package com.yizhuan.erban.treasurefairy.dialog
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import androidx.fragment.app.viewModels
import com.hjq.toast.ToastUtils
import com.yizhuan.erban.R
import com.yizhuan.erban.base.BaseDialog
import com.yizhuan.erban.databinding.TreasureFairyDialogBuyDebrisBinding
import com.yizhuan.erban.treasurefairy.FairyViewModel
import com.yizhuan.xchat_android_core.auth.AuthModel
import com.yizhuan.xchat_android_library.common.SpConstants
import com.yizhuan.xchat_android_library.common.util.SPUtils
import com.yizhuan.xchat_android_library.utils.TimeUtils
/**
* 购买碎片
*/
class FairyBuyDebrisDialog : BaseDialog<TreasureFairyDialogBuyDebrisBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var height = WindowManager.LayoutParams.WRAP_CONTENT
override var gravity = Gravity.CENTER
private val viewModel: FairyViewModel by viewModels()
companion object {
fun newInstance(num: Int): FairyBuyDebrisDialog {
val args = Bundle()
args.putInt("num", num)
val fragment = FairyBuyDebrisDialog()
fragment.arguments = args
return fragment
}
}
private val num by lazy { requireArguments().getInt("num") }
@SuppressLint("CheckResult")
override fun init() {
binding?.tvDebrisNum?.text = getString(R.string.buy_debris, num)
binding?.tvPrizeName?.text = (num * 100).toString()
binding?.cbPay?.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
SPUtils.putLong(SpConstants.DATE, System.currentTimeMillis())
} else {
SPUtils.putLong(SpConstants.DATE, 0L)
}
}
binding?.tvBuy?.setOnClickListener {
viewModel.buyDebris(num.toString(), AuthModel.get().currentUid.toString())
}
viewModel.buyDebrisLiveData.observe(this) {
val date = SPUtils.getLong(SpConstants.DATE, 0L)
if (date != 0L) {
if (TimeUtils.isToday(date)) {
ToastUtils.show("購買碎片成功")
} else {
FairyBuySuccessDialog.newInstance(num).show(context)
}
} else {
FairyBuySuccessDialog.newInstance(num).show(context)
}
dismissAllowingStateLoss()
}
}
}

View File

@@ -0,0 +1,48 @@
package com.yizhuan.erban.treasurefairy.dialog
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import androidx.fragment.app.activityViewModels
import com.yizhuan.erban.base.BaseDialog
import com.yizhuan.erban.databinding.TreasureFairyDialogBuySuccessBinding
import com.yizhuan.erban.treasurefairy.FairyViewModel
import com.yizhuan.xchat_android_library.common.SpConstants
import com.yizhuan.xchat_android_library.common.util.SPUtils
/**
* 购买碎片成功
*/
class FairyBuySuccessDialog : BaseDialog<TreasureFairyDialogBuySuccessBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var height = WindowManager.LayoutParams.WRAP_CONTENT
override var gravity = Gravity.CENTER
companion object {
fun newInstance(num: Int): FairyBuySuccessDialog {
val args = Bundle()
args.putSerializable("num", num)
val fragment = FairyBuySuccessDialog()
fragment.arguments = args
return fragment
}
}
private val num by lazy { requireArguments().getInt("num") }
@SuppressLint("CheckResult", "SetTextI18n")
override fun init() {
binding?.tvDebrisNum?.text = "x${num}"
binding?.cbPay?.setOnCheckedChangeListener { buttonView, isChecked ->
if (isChecked) {
SPUtils.putLong(SpConstants.DATE, System.currentTimeMillis())
} else {
SPUtils.putLong(SpConstants.DATE, 0L)
}
}
}
}

View File

@@ -8,12 +8,9 @@ import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.yizhuan.erban.base.BaseDialog
import com.yizhuan.erban.databinding.TreasureFairyDialogResolveFairyResultBinding
import com.yizhuan.erban.databinding.TreasureFairyDialogTestFairyResultBinding
import com.yizhuan.erban.treasurefairy.FairyViewModel
import com.yizhuan.erban.treasurefairy.adapter.ResolveFairyResultAdapter
import com.yizhuan.erban.treasurefairy.adapter.TestFairyResultAdapter
import com.yizhuan.erban.ui.utils.RVDelegate
import com.yizhuan.xchat_android_core.treasurefairy.FairyInfo
import com.yizhuan.xchat_android_core.treasurefairy.ResolveInfo
class ResolveFairyResultDialog : BaseDialog<TreasureFairyDialogResolveFairyResultBinding>() {

View File

@@ -23,8 +23,9 @@ class ExchangeDebrisFragment :
companion object {
fun newInstance(): ExchangeDebrisFragment {
fun newInstance(fairyType: Int): ExchangeDebrisFragment {
val args = Bundle()
args.putInt("fairyType", fairyType)
val fragment = ExchangeDebrisFragment()
fragment.arguments = args
return fragment
@@ -35,6 +36,8 @@ class ExchangeDebrisFragment :
private lateinit var rvDelegate: RVDelegate<ExchangeGiftInfo>
private lateinit var debrisAdapter: ExchangeDebrisAdapter
private val fairyType by lazy { requireArguments().getInt("fairyType", 1) }
@SuppressLint("CheckResult")
override fun init() {
debrisAdapter = ExchangeDebrisAdapter()
@@ -49,7 +52,14 @@ class ExchangeDebrisFragment :
)
.setLayoutManager(GridLayoutManager(context, 2, LinearLayoutManager.VERTICAL, false))
.build()
if(fairyType == 1){
viewModel.getFairyCallList()
} else {
viewModel.getDebrisExchangeList()
}
viewModel.fairyCallInfoLiveData.observe(viewLifecycleOwner) {
rvDelegate.setNewData(it)
}
viewModel.debrisExchangeListLiveData.observe(viewLifecycleOwner) {
rvDelegate.setNewData(it)
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_fairy_selected" android:state_checked="true" />
<item android:drawable="@drawable/ic_fairy_unselected" android:state_checked="false" />
<item android:drawable="@drawable/ic_fairy_unselected" />
</selector>

View File

@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/view_bg"
android:layout_width="262dp"
android:layout_height="316dp"
android:background="@drawable/treasure_fairy_bg_forest_prize_new"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.6" />
<View
android:layout_width="136dp"
android:layout_height="44dp"
android:layout_marginBottom="@dimen/dp_30"
android:background="@drawable/treasure_fairy_buy_debris"
app:layout_constraintEnd_toEndOf="@+id/view_bg"
app:layout_constraintStart_toStartOf="@+id/view_bg"
app:layout_constraintBottom_toTopOf="@+id/iv_prize_icon"/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_prize_icon"
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_gravity="center"
android:layout_marginTop="60dp"
android:scaleType="centerCrop"
android:src="@drawable/ic_debris_default"
app:layout_constraintEnd_toEndOf="@+id/view_bg"
app:layout_constraintStart_toStartOf="@+id/view_bg"
app:layout_constraintTop_toTopOf="@+id/view_bg" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_prize_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="12dp"
android:drawableStart="@drawable/treasure_fairy_ic_diamond"
android:ellipsize="end"
android:gravity="center"
android:includeFontPadding="false"
android:maxLines="1"
android:textColor="@color/color_white"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="@+id/view_bg"
app:layout_constraintStart_toStartOf="@+id/view_bg"
app:layout_constraintTop_toBottomOf="@+id/iv_prize_icon"
tools:text="10000" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_debris_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_12"
android:text="@string/buy_debris"
android:textColor="@color/color_ffe8aa"
android:textSize="@dimen/sp_12"
app:layout_constraintEnd_toEndOf="@+id/view_bg"
app:layout_constraintStart_toStartOf="@+id/view_bg"
app:layout_constraintTop_toBottomOf="@+id/tv_prize_name" />
<com.coorchice.library.SuperTextView
android:id="@+id/tv_buy"
android:text="購買"
android:textSize="@dimen/sp_16"
android:textColor="@color/color_1f5764"
android:layout_width="140dp"
android:layout_height="34dp"
android:gravity="center"
android:layout_marginTop="@dimen/dp_18"
app:corner="@dimen/dp_18"
app:shaderEnable="true"
app:shaderMode="topToBottom"
app:shaderStartColor="@color/color_FFFEBB"
app:shaderEndColor="@color/color_3AEAC7"
app:layout_constraintEnd_toEndOf="@+id/view_bg"
app:layout_constraintStart_toStartOf="@+id/view_bg"
app:layout_constraintTop_toBottomOf="@+id/tv_debris_num" />
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/cbPay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_16"
android:button="@drawable/selector_select_fairy"
android:paddingStart="@dimen/dp_6"
android:paddingEnd="0dp"
android:text="今日不再提示"
android:textColor="@color/color_white"
android:textSize="@dimen/sp_10"
app:layout_constraintEnd_toEndOf="@+id/view_bg"
app:layout_constraintStart_toStartOf="@+id/view_bg"
app:layout_constraintTop_toBottomOf="@+id/tv_buy" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/view_bg"
android:layout_width="281dp"
android:layout_height="285dp"
android:background="@drawable/treasure_fairy_bg_forest_prize_new"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.6" />
<View
android:layout_width="136dp"
android:layout_height="44dp"
android:layout_marginBottom="@dimen/dp_16"
android:background="@drawable/treasure_fairy_buy_success"
app:layout_constraintStart_toStartOf="@+id/view_bg"
app:layout_constraintEnd_toEndOf="@+id/view_bg"
app:layout_constraintBottom_toTopOf="@+id/tv_title"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="獲得"
android:textColor="@color/color_ffe8aa"
android:textSize="14sp"
android:textStyle="bold"
android:includeFontPadding="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/view_bg" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_prize_icon"
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_marginTop="@dimen/dp_8"
android:layout_gravity="center"
android:scaleType="centerCrop"
android:src="@drawable/ic_debris_default"
app:layout_constraintTop_toBottomOf="@+id/tv_title"
app:layout_constraintStart_toStartOf="@+id/view_bg"
app:layout_constraintEnd_toEndOf="@+id/view_bg"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_debris_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="14dp"
android:ellipsize="end"
android:gravity="center"
android:includeFontPadding="false"
android:maxLines="1"
tools:text="x1000"
android:textColor="@color/color_ffe8aa"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="@+id/view_bg"
app:layout_constraintEnd_toEndOf="@+id/view_bg"
app:layout_constraintTop_toBottomOf="@+id/iv_prize_icon"/>
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/cbPay"
android:text="今日不再提示"
android:textSize="@dimen/sp_10"
android:textColor="@color/color_white"
android:layout_marginTop="@dimen/dp_20"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/selector_select_fairy"
android:paddingStart="@dimen/dp_6"
android:paddingEnd="0dp"
app:layout_constraintTop_toBottomOf="@+id/tv_debris_num"
app:layout_constraintStart_toStartOf="@+id/view_bg"
app:layout_constraintEnd_toEndOf="@+id/view_bg"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -229,6 +229,16 @@
app:layout_constraintStart_toEndOf="@id/tv_current_lucky_value_text"
tools:text="2365" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_refresh"
android:layout_width="10dp"
android:layout_height="10dp"
android:src="@drawable/ic_fairy_refresh"
android:layout_marginStart="@dimen/dp_4"
app:layout_constraintTop_toTopOf="@+id/tv_current_lucky_value"
app:layout_constraintBottom_toBottomOf="@+id/tv_current_lucky_value"
app:layout_constraintStart_toEndOf="@+id/tv_current_lucky_value"/>
<View
android:id="@+id/view_lucky_stone_default"
android:layout_width="120dp"

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@@ -684,5 +684,7 @@
<color name="color_365A65">#365A65</color>
<color name="color_F6F6F6">#F6F6F6</color>
<color name="color_66F6F6F6">#66F6F6F6</color>
<color name="color_3AEAC7">#3AEAC7</color>
<color name="color_FFFEBB">#FFFEBB</color>
</resources>

View File

@@ -5122,5 +5122,6 @@
<string name="level_goddess_gathering_place">顏值女神聚集地</string>
<string name="accompany_and_make_friends">陪伴交友</string>
<string name="interesting_people_are_here">有趣的人都在這</string>
<string name="buy_debris">購買%d個碎片</string>
</resources>

View File

@@ -92,6 +92,10 @@ object TreasureFairyModel {
api.getDebrisExchangeList()
}
suspend fun getFairyCallList(): List<ExchangeGiftInfo>? = launchRequest {
api.getFairyCallList()
}
suspend fun getExchangeRecord(
convertType: Int,
page: Int,
@@ -262,6 +266,13 @@ object TreasureFairyModel {
@GET("act/seize-treasure/convert/chip/list")
suspend fun getDebrisExchangeList(): ServiceResult<List<ExchangeGiftInfo>>
/**
* 兑换-精灵召唤列表
*
*/
@GET("/act/seize-treasure/convert/elf/list")
suspend fun getFairyCallList(): ServiceResult<List<ExchangeGiftInfo>>
/**
* 猛犸森林抽奖记录
*

View File

@@ -7,4 +7,5 @@ object SpConstants {
const val GOOGLE = "google"
const val FACEBOOK = "facebook"
const val LINE = "line"
const val DATE = "date"
}