Pārlūkot izejas kodu

feat: Google正式包

DoggyZhang 2 mēneši atpakaļ
vecāks
revīzija
78f4852cfe

+ 7 - 3
app/build.gradle

@@ -148,8 +148,7 @@ android {
         debug {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
-            //todo zhangfei 临时设置
-            signingConfig signingConfigs.release
+            signingConfig signingConfigs.debug
             firebaseCrashlytics {
                 mappingFileUploadEnabled false
             }
@@ -157,7 +156,7 @@ android {
         }
         release {
             debuggable false
-            minifyEnabled true
+            minifyEnabled false
             signingConfig signingConfigs.release
             firebaseCrashlytics {
 
@@ -230,6 +229,11 @@ android {
         exclude group: 'com.facebook.fresco', module: 'drawee'
         exclude group: 'com.facebook.fresco', module: 'ui-core'
     }
+    lintOptions {
+        checkReleaseBuilds false
+        abortOnError false
+        disable 'Instantiatable'
+    }
 
 
     android.applicationVariants.all { variant ->

+ 1 - 1
app/src/main/java/com/adealink/weparty/debug/DebugActivity.kt

@@ -93,7 +93,7 @@ class DebugActivity : BaseActivity(), OnReturnValue {
             reportLog()
         }
 
-        if (isTestEnv()) {
+        if (!AppBase.isRelease) {
             binding.switchSvgaChecker.show()
             binding.tvSvgaChecker.text = getSvgaCheckerText()
             binding.clSvgaChecker.setOnClickListener {

+ 4 - 6
module/account/src/main/java/com/adealink/weparty/account/login/LoginDialog.kt

@@ -18,6 +18,7 @@ import com.adealink.frame.base.AppBase
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.coroutine.dispatcher.Dispatcher
 import com.adealink.frame.ext.safeSetSpan
+import com.adealink.frame.log.Log
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.frame.router.Router
 import com.adealink.frame.router.annotation.RouterUri
@@ -41,7 +42,6 @@ import com.adealink.weparty.commonui.ext.setContinueClicksListener
 import com.adealink.weparty.commonui.toast.util.showToast
 import com.adealink.weparty.commonui.widget.ColorClickSpan
 import com.adealink.weparty.debug.Debug
-import com.adealink.weparty.debug.isTestEnv
 import com.adealink.weparty.module.account.Account
 import com.adealink.weparty.module.webview.Web
 import com.adealink.weparty.url.UrlConfig
@@ -121,16 +121,14 @@ class LoginDialog : BaseDialogFragment(R.layout.dialog_login) {
             .cornerRadius(DisplayUtil.dp2px(27f))
             .build()
         binding.testLoginBtn.background = googleBtnBg
-        binding.testLoginBtn.visibility = when (isTestEnv()) {
-            true -> View.VISIBLE
-            else -> View.GONE
+        binding.testLoginBtn.visibility = when (AppBase.isRelease) {
+            true -> View.GONE
+            else -> View.VISIBLE
         }
         binding.testLoginBtn.onClick {
             showLoading()
             loginViewModel.testAuthLogin()
         }
-
-
         if (AppBase.isRelease) {
             binding.tvDebug.visibility = View.GONE
         } else {

+ 14 - 1
module/playmate/src/main/java/com/adealink/weparty/playmate/list/GuestPlaymateListFragment.kt

@@ -15,6 +15,8 @@ import com.adealink.frame.router.annotation.RouterUri
 import com.adealink.frame.util.onClick
 import com.adealink.weparty.commonui.BaseFragment
 import com.adealink.weparty.commonui.ext.dp
+import com.adealink.weparty.commonui.ext.gone
+import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
 import com.adealink.weparty.commonui.recycleview.diffutil.BaseListDiffUtil
 import com.adealink.weparty.commonui.recycleview.itemdecoration.VerticalSpaceItemDecoration
@@ -36,6 +38,7 @@ import com.adealink.weparty.playmate.list.viewmodel.GuestPlaymateListViewModel
 import com.adealink.weparty.playmate.viewmodel.PlaymateViewModelFactory
 import com.scwang.smart.refresh.layout.api.RefreshLayout
 import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
+import com.adealink.weparty.R as APP_R
 
 @RouterUri(path = [Playmate.List.GUEST_PATH], desc = "(游客)陪玩列表")
 class GuestPlaymateListFragment : BaseFragment(R.layout.fragment_playmate_list),
@@ -105,7 +108,7 @@ class GuestPlaymateListFragment : BaseFragment(R.layout.fragment_playmate_list),
     }
 
 
-    fun updateCategory(firstCategoryCode:String?, category: PlaymateCategoryData?) {
+    fun updateCategory(firstCategoryCode: String?, category: PlaymateCategoryData?) {
         if (!isViewBindingValid()) {
             return
         }
@@ -148,6 +151,16 @@ class GuestPlaymateListFragment : BaseFragment(R.layout.fragment_playmate_list),
             }
         }
         playmateListViewModel.listLD.observe(viewLifecycleOwner) { list ->
+            if (list.isNullOrEmpty()) {
+                binding.vList.gone()
+                binding.vErrorView.show(
+                    errorEmptyResId = APP_R.drawable.common_list_empty_ic,
+                    title = APP_R.string.commonui_list_empty
+                )
+            } else {
+                binding.vList.show()
+                binding.vErrorView.gone()
+            }
             listAdapter.submitList(list.map { data ->
                 PlaymateListItemData(data)
             })

+ 4 - 0
module/profile/src/main/java/com/adealink/weparty/profile/relation/RelationShipActivity.kt

@@ -12,6 +12,7 @@ import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.frame.router.Router
 import com.adealink.frame.router.annotation.BindExtra
 import com.adealink.frame.router.annotation.RouterUri
+import com.adealink.frame.util.onClick
 import com.adealink.frame.util.statusBarHeight
 import com.adealink.weparty.commonui.BaseActivity
 import com.adealink.weparty.commonui.ext.gone
@@ -57,6 +58,9 @@ class RelationShipActivity : BaseActivity() {
         binding.topBar.updateLayoutParams<ConstraintLayout.LayoutParams> {
             topMargin = this@RelationShipActivity.statusBarHeight()
         }
+        binding.ivBack.onClick {
+            finish()
+        }
 
         pageAdapter = PageAdapter()
         binding.vpContent.offscreenPageLimit = 1

+ 1 - 1
module/profile/src/main/res/layout/item_edit_profile_avatar.xml

@@ -50,6 +50,6 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:visibility="visible"
-        app:constraint_referenced_ids="iv_avatar,iv_delete" />
+        app:constraint_referenced_ids="iv_avatar" />
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 6 - 0
module/wallet/src/main/java/com/adealink/weparty/wallet/datasource/remote/WalletHttpService.kt

@@ -9,6 +9,8 @@ import com.adealink.weparty.wallet.recharge.data.ConvertCurrencyReq
 import com.adealink.weparty.wallet.recharge.data.CurrencyExchangedConfigRes
 import com.adealink.weparty.wallet.recharge.data.PayFailReq
 import com.adealink.weparty.wallet.recharge.data.PaySuccessReq
+import com.adealink.weparty.wallet.recharge.data.PreConvertReq
+import com.adealink.weparty.wallet.recharge.data.PreConvertRes
 import com.adealink.weparty.wallet.recharge.data.PrePurchaseReq
 import com.adealink.weparty.wallet.recharge.data.PrePurchaseRes
 import com.adealink.weparty.wallet.recharge.data.RechargeConfigReq
@@ -46,4 +48,8 @@ interface WalletHttpService {
     @Core
     @POST("base/consts/config")
     suspend fun getCurrencyExchangeConfig(): Rlt<Res<CurrencyExchangedConfigRes>>
+
+
+    @POST("wallet/exchange/pre")
+    suspend fun preConvert(@Body req: PreConvertReq): Rlt<Res<PreConvertRes>>
 }

+ 14 - 0
module/wallet/src/main/java/com/adealink/weparty/wallet/recharge/data/WalletData.kt

@@ -89,4 +89,18 @@ data class CurrencyExchangeConfig(
     @SerializedName("diamond") val diamond: Double?,
     @GsonNullable
     @SerializedName("bean") val bean: Double?
+)
+
+
+/**
+ * 充值失败取消回调
+ */
+data class PreConvertReq(
+    @SerializedName("fromWalletType") val fromCurrency: Int,
+    @SerializedName("toWalletType") val toCurrency: Int,
+    @SerializedName("amount") val amount: Double,
+)
+
+data class PreConvertRes(
+    @SerializedName("amount") val amount: Double,
 )

+ 52 - 22
module/wallet/src/main/java/com/adealink/weparty/wallet/recharge/dialog/ConvertCurrencyDialog.kt

@@ -3,6 +3,7 @@ package com.adealink.weparty.wallet.recharge.dialog
 import androidx.fragment.app.activityViewModels
 import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.base.Rlt
+import com.adealink.frame.log.Log
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.frame.util.onClick
 import com.adealink.weparty.commonui.text.filter.SimplePositiveDecimalFilter
@@ -23,7 +24,7 @@ class ConvertCurrencyDialog : BottomDialogFragment(R.layout.dialog_convert_curre
     var fromCurrency: Currency = Currency.COIN
     var toCurrency: Currency = Currency.DIAMOND
 
-    private var exchangeRatio: Double? = null
+    //    private var exchangeRatio: Double? = null
     private var maxExchangeInput: Double? = null
 
     private var inputExchange: Double? = null
@@ -140,6 +141,12 @@ class ConvertCurrencyDialog : BottomDialogFragment(R.layout.dialog_convert_curre
                 binding.etFromCurrencyAmount.setSelection(it)
             },
             afterTextChanged = {
+                if (it.isEmpty()) {
+                    binding.etFromCurrencyAmount.hint =
+                        getCompatString(R.string.wallet_convert_please_fill)
+                } else {
+                    binding.etFromCurrencyAmount.hint = null
+                }
                 notifyInputChanged(it.toDoubleOrNull() ?: 0.0)
             }
         ).also {
@@ -151,25 +158,30 @@ class ConvertCurrencyDialog : BottomDialogFragment(R.layout.dialog_convert_curre
     override fun loadData() {
         super.loadData()
         walletViewModel.refreshWalletData()
-        walletViewModel.loadConvertConfig(fromCurrency, toCurrency)
-            .observe(viewLifecycleOwner) { rlt ->
-                when (rlt) {
-                    is Rlt.Failed -> {
-                        showFailedToast(rlt)
-                        exchangeRatio = null
-                        notifyExchangeStateChanged()
-                    }
-
-                    is Rlt.Success -> {
-                        exchangeRatio = rlt.data
-                        notifyExchangeStateChanged()
-                    }
-                }
-            }
+//        walletViewModel.loadConvertConfig(fromCurrency, toCurrency)
+//            .observe(viewLifecycleOwner) { rlt ->
+//                when (rlt) {
+//                    is Rlt.Failed -> {
+//                        showFailedToast(rlt)
+//                        exchangeRatio = null
+//                        notifyExchangeStateChanged()
+//                    }
+//
+//                    is Rlt.Success -> {
+//                        exchangeRatio = rlt.data
+//                        notifyExchangeStateChanged()
+//                    }
+//                }
+//            }
     }
 
     private fun notifyExchangeStateChanged() {
-        if (exchangeRatio == null || maxExchangeInput == null) {
+//        if (exchangeRatio == null || maxExchangeInput == null) {
+//            binding.etFromCurrencyAmount.isEnabled = false
+//        } else {
+//            binding.etFromCurrencyAmount.isEnabled = true
+//        }
+        if (maxExchangeInput == null) {
             binding.etFromCurrencyAmount.isEnabled = false
         } else {
             binding.etFromCurrencyAmount.isEnabled = true
@@ -177,13 +189,31 @@ class ConvertCurrencyDialog : BottomDialogFragment(R.layout.dialog_convert_curre
     }
 
     private fun notifyInputChanged(inputNumber: Double) {
-        inputExchange = inputNumber
-        val ratio = exchangeRatio
-        if (ratio == null || ratio == 0.0) {
-            binding.tvToCurrencyAmount.text = formatNumberStr(0.0, false)
+        if (inputExchange == inputNumber) {
             return
         }
-        binding.tvToCurrencyAmount.text = formatNumberStr(inputNumber / ratio, false)
+        inputExchange = inputNumber
+        walletViewModel.preConvert(fromCurrency, toCurrency, inputNumber)
+            .observe(viewLifecycleOwner) { rlt ->
+                when (rlt) {
+                    is Rlt.Failed -> {
+                        showFailedToast(rlt)
+                    }
+
+                    is Rlt.Success -> {
+                        if (rlt.data.first != inputExchange) {
+                            return@observe
+                        }
+                        binding.tvToCurrencyAmount.text = formatNumberStr(rlt.data.second, false)
+                    }
+                }
+            }
+//        val ratio = exchangeRatio
+//        if (ratio == null || ratio == 0.0) {
+//            binding.tvToCurrencyAmount.text = formatNumberStr(0.0, false)
+//            return
+//        }
+//        binding.tvToCurrencyAmount.text = formatNumberStr(inputNumber / ratio, false)
     }
 
     private fun allExchanged() {

+ 34 - 0
module/wallet/src/main/java/com/adealink/weparty/wallet/viewmodel/WalletViewModel.kt

@@ -2,6 +2,7 @@ package com.adealink.weparty.wallet.viewmodel
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
+import com.adealink.frame.base.CommonDataNullError
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.mvvm.livedata.OnceMutableLiveData
 import com.adealink.frame.mvvm.viewmodel.BaseViewModel
@@ -11,6 +12,7 @@ import com.adealink.weparty.module.wallet.viewmodel.IWalletViewModel
 import com.adealink.weparty.wallet.datasource.remote.WalletHttpService
 import com.adealink.weparty.wallet.manager.IWalletListener
 import com.adealink.weparty.wallet.manager.walletManager
+import com.adealink.weparty.wallet.recharge.data.PreConvertReq
 import kotlinx.coroutines.launch
 
 class WalletViewModel : BaseViewModel(), IWalletViewModel, IWalletListener {
@@ -69,6 +71,38 @@ class WalletViewModel : BaseViewModel(), IWalletViewModel, IWalletListener {
         return liveData
     }
 
+    fun preConvert(
+        fromCurrency: Currency,
+        toCurrency: Currency,
+        amount: Double
+    ): LiveData<Rlt<Pair<Double, Double>>> {
+        val liveData = OnceMutableLiveData<Rlt<Pair<Double, Double>>>()
+        viewModelScope.launch {
+            val rlt = walletHttpService.preConvert(
+                PreConvertReq(
+                    fromCurrency.type,
+                    toCurrency.type,
+                    amount
+                )
+            )
+            when (rlt) {
+                is Rlt.Failed -> {
+                    liveData.send(rlt)
+                }
+
+                is Rlt.Success -> {
+                    val toAmount = rlt.data.data?.amount
+                    if (toAmount == null) {
+                        liveData.send(Rlt.Failed(CommonDataNullError()))
+                        return@launch
+                    }
+                    liveData.send(Rlt.Success(Pair(amount, toAmount)))
+                }
+            }
+        }
+        return liveData
+    }
+
     fun convertTo(
         fromCurrency: Currency,
         toCurrency: Currency,