Browse Source

金币兑换

honghengqiang 3 years ago
parent
commit
3d5bb81ab4
27 changed files with 799 additions and 20 deletions
  1. 6 9
      .idea/misc.xml
  2. 2 2
      app/build.gradle
  3. BIN
      app/debug/com.swago.app-debug-1.0.8.6.apk
  4. 1 0
      baseswago/src/main/java/com/swago/baseswago/constant/ARouteConstant.kt
  5. 13 4
      baseswago/src/main/java/com/swago/baseswago/inter/UserApi.kt
  6. 12 0
      baseswago/src/main/java/com/swago/baseswago/model/mine/ExchangeModel.kt
  7. 10 0
      baseswago/src/main/java/com/swago/baseswago/model/mine/ExchangeResult.kt
  8. 7 0
      baseswago/src/main/res/drawable/shape_3d8aff_3d7fff_all_15.xml
  9. BIN
      baseswago/src/main/res/mipmap-xxhdpi/icon_arrow_exchange.png
  10. BIN
      baseswago/src/main/res/mipmap-xxhdpi/icon_close_black.png
  11. BIN
      baseswago/src/main/res/mipmap-xxhdpi/icon_diamond.png
  12. 9 4
      baseswago/src/main/res/values/strings.xml
  13. 7 0
      home/src/main/java/com/swago/home/MineFragment.kt
  14. BIN
      room/src/main/res/mipmap-xxhdpi/icon_diamond.png
  15. 2 0
      user/src/main/AndroidManifest.xml
  16. 159 0
      user/src/main/java/com/swago/user/exchange/DiamondCoinExchangeActivity.kt
  17. 26 0
      user/src/main/java/com/swago/user/exchange/ExchangeAdapter.kt
  18. 59 0
      user/src/main/java/com/swago/user/exchange/ExchangeDialog.kt
  19. 56 0
      user/src/main/java/com/swago/user/vm/ExchangeVm.kt
  20. 15 0
      user/src/main/res/drawable/shape_exchange_selected.xml
  21. 228 0
      user/src/main/res/layout/activity_diamond_coin.xml
  22. 1 1
      user/src/main/res/layout/activity_recharge.xml
  23. 133 0
      user/src/main/res/layout/dialog_exchange.xml
  24. 53 0
      user/src/main/res/layout/item_exchange.xml
  25. BIN
      user/src/main/res/mipmap-xxhdpi/icon_coin.png
  26. BIN
      user/src/main/res/mipmap-xxhdpi/icon_coin_48.png
  27. BIN
      user/src/main/res/mipmap-xxhdpi/icon_coin_90.png

+ 6 - 9
.idea/misc.xml

@@ -27,6 +27,7 @@
         <entry key="baseswago/src/main/res/drawable/shape_20000000_41.xml" value="0.2745" />
         <entry key="baseswago/src/main/res/drawable/shape_2f3043_37.xml" value="0.283" />
         <entry key="baseswago/src/main/res/drawable/shape_3d7fff_36.xml" value="0.2375" />
+        <entry key="baseswago/src/main/res/drawable/shape_3d8aff_3d7fff_all_15.xml" value="0.2375" />
         <entry key="baseswago/src/main/res/drawable/shape_80000000_20.xml" value="0.13229166666666667" />
         <entry key="baseswago/src/main/res/drawable/shape_9ffd88_5_stroke.xml" value="0.3145833333333333" />
         <entry key="baseswago/src/main/res/drawable/shape_9ffd88_63f2df.xml" value="0.39375" />
@@ -102,15 +103,6 @@
         <entry key="home/src/main/res/layout/item_search.xml" value="0.33" />
         <entry key="home/src/main/res/layout/layout_message.xml" value="0.24324324324324326" />
         <entry key="home/src/main/res/layout/layout_view_header.xml" value="0.2203125" />
-        <entry key="lib_beautyui/src/main/res/drawable/bg_seekbar_progressbar.xml" value="0.251" />
-        <entry key="lib_beautyui/src/main/res/drawable/bottom_radio_color.xml" value="0.251" />
-        <entry key="lib_beautyui/src/main/res/drawable/icon_beauty_shape_angle_close_selector.xml" value="0.251" />
-        <entry key="lib_beautyui/src/main/res/drawable/icon_beauty_shape_angle_open_selector.xml" value="0.251" />
-        <entry key="lib_beautyui/src/main/res/drawable/icon_beauty_shape_cheek_bones_close_selector.xml" value="0.251" />
-        <entry key="lib_beautyui/src/main/res/drawable/seekbar_thumb.xml" value="0.251" />
-        <entry key="lib_beautyui/src/main/res/layout/fragment_dialog_beauty.xml" value="0.24375" />
-        <entry key="lib_beautyui/src/main/res/layout/item_beauty.xml" value="0.35" />
-        <entry key="lib_beautyui/src/main/res/layout/view_indicator_seekbar.xml" value="0.35" />
         <entry key="login/src/main/res/drawable/shape_ffbb56_ff7f8f_ff56b7.xml" value="0.251" />
         <entry key="login/src/main/res/drawable/shape_white_5.xml" value="0.39375" />
         <entry key="login/src/main/res/layout/activity_login.xml" value="0.33" />
@@ -158,6 +150,7 @@
         <entry key="room/src/main/res/layout/view_svga.xml" value="0.3619791666666667" />
         <entry key="room/src/main/res/layout/view_waft.xml" value="0.39166666666666666" />
         <entry key="tuikit/src/main/res/drawable/message_send_border.xml" value="0.204" />
+        <entry key="tuikit/src/main/res/drawable/shape_search.xml" value="0.2015" />
         <entry key="tuikit/src/main/res/layout/activity_camera.xml" value="0.303125" />
         <entry key="tuikit/src/main/res/layout/chat_input_layout.xml" value="0.3015625" />
         <entry key="tuikit/src/main/res/layout/chat_inputmore_layout.xml" value="0.2296875" />
@@ -216,6 +209,7 @@
         <entry key="user/src/main/res/drawable/shape_37393f_444652.xml" value="0.33177083333333335" />
         <entry key="user/src/main/res/drawable/shape_c3a165_ead6a7_top_10.xml" value="0.3333333333333333" />
         <entry key="user/src/main/res/drawable/shape_eff1f4.xml" value="0.4078125" />
+        <entry key="user/src/main/res/drawable/shape_exchange_selected.xml" value="0.2015" />
         <entry key="user/src/main/res/drawable/shape_f4faff_12.xml" value="0.251" />
         <entry key="user/src/main/res/drawable/shape_f7f8fa.xml" value="0.4078125" />
         <entry key="user/src/main/res/drawable/shape_f7f8fa_5.xml" value="0.4078125" />
@@ -226,6 +220,7 @@
         <entry key="user/src/main/res/drawable/shape_white_stroke.xml" value="0.3333333333333333" />
         <entry key="user/src/main/res/layout/activity_country.xml" value="0.3625" />
         <entry key="user/src/main/res/layout/activity_custom_service.xml" value="0.25677083333333334" />
+        <entry key="user/src/main/res/layout/activity_diamond_coin.xml" value="0.33" />
         <entry key="user/src/main/res/layout/activity_level.xml" value="0.315625" />
         <entry key="user/src/main/res/layout/activity_recharge.xml" value="0.36302083333333335" />
         <entry key="user/src/main/res/layout/activity_setting.xml" value="0.36302083333333335" />
@@ -233,6 +228,7 @@
         <entry key="user/src/main/res/layout/activity_task.xml" value="0.3776041666666667" />
         <entry key="user/src/main/res/layout/activity_user_edit.xml" value="0.3638968481375358" />
         <entry key="user/src/main/res/layout/dialog_edit.xml" value="0.39166666666666666" />
+        <entry key="user/src/main/res/layout/dialog_exchange.xml" value="0.3776041666666667" />
         <entry key="user/src/main/res/layout/dialog_sex.xml" value="0.34057971014492755" />
         <entry key="user/src/main/res/layout/fragment_anchor.xml" value="0.3015625" />
         <entry key="user/src/main/res/layout/fragment_anchor_level.xml" value="0.3171875" />
@@ -245,6 +241,7 @@
         <entry key="user/src/main/res/layout/item_black.xml" value="0.34601449275362317" />
         <entry key="user/src/main/res/layout/item_black_room.xml" value="0.3619791666666667" />
         <entry key="user/src/main/res/layout/item_country_large_padding.xml" value="0.3625" />
+        <entry key="user/src/main/res/layout/item_exchange.xml" value="0.3776041666666667" />
         <entry key="user/src/main/res/layout/item_follow_fan.xml" value="0.39166666666666666" />
         <entry key="user/src/main/res/layout/item_letter.xml" value="0.3625" />
         <entry key="user/src/main/res/layout/item_level.xml" value="0.39166666666666666" />

+ 2 - 2
app/build.gradle

@@ -15,8 +15,8 @@ android {
         applicationId "com.swago.app"
         minSdkVersion 21
         targetSdkVersion 30
-        versionCode 1087
-        versionName "1.0.8.7"
+        versionCode 1088
+        versionName "1.0.8.8"
         multiDexEnabled true
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 

BIN
app/debug/com.swago.app-debug-1.0.8.6.apk


+ 1 - 0
baseswago/src/main/java/com/swago/baseswago/constant/ARouteConstant.kt

@@ -21,6 +21,7 @@ object ARouteConstant {
         const val taskCenter = "$rootPath/TaskActivity"
         const val blacklist = "$rootPath/TabBlackActivity"
         const val customService = "$rootPath/CustomServiceActivity"
+        const val exchange = "$rootPath/DiamondCoinExchangeActivity"
     }
 
     object Home {

+ 13 - 4
baseswago/src/main/java/com/swago/baseswago/inter/UserApi.kt

@@ -1,10 +1,7 @@
 package com.swago.baseswago.inter
 
 import com.swago.baseswago.model.*
-import com.swago.baseswago.model.mine.LevelModel
-import com.swago.baseswago.model.mine.RoomBlackBean
-import com.swago.baseswago.model.mine.RoomBlackModel
-import com.swago.baseswago.model.mine.TaskModel
+import com.swago.baseswago.model.mine.*
 import okhttp3.MultipartBody
 import retrofit2.http.*
 
@@ -107,4 +104,16 @@ interface UserApi {
     @POST("/v1/rtc/broadcast/log/black/list")
     suspend fun getRoomBlackList(@Field("page") page: Int):RoomBlackBean
 
+    //钻石金币兑换列表
+    @POST("/v1/user/diamond/exchange/list")
+    suspend fun getExchangeList():List<ExchangeModel>
+
+    //钻石金币兑换   //exchange_type 兑换类型(1自己兑换2其他用户兑换)
+    @FormUrlEncoded
+    @POST("/v1/user/diamond/exchange")
+    suspend fun exchangeCoin(@Field("id") id: Int,
+                             @Field("exchange_type") exchange_type: Int,
+                             @Field("user_id") user_id: String):ExchangeResult
+
+
 }

+ 12 - 0
baseswago/src/main/java/com/swago/baseswago/model/mine/ExchangeModel.kt

@@ -0,0 +1,12 @@
+package com.swago.baseswago.model.mine
+
+/**
+ *@date 2022/4/8 10:08
+ *description:钻石金币兑换
+ */
+data class ExchangeModel(
+    val diamond_num:String="",
+    val coin_num:String="",
+    val id:Int,
+    var isSelected:Boolean
+)

+ 10 - 0
baseswago/src/main/java/com/swago/baseswago/model/mine/ExchangeResult.kt

@@ -0,0 +1,10 @@
+package com.swago.baseswago.model.mine
+
+/**
+ *@date 2022/4/8 10:58
+ *description:
+ */
+data class ExchangeResult(
+    val user_diamonds:String = "",
+    val user_coins:String = ""
+)

+ 7 - 0
baseswago/src/main/res/drawable/shape_3d8aff_3d7fff_all_15.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient android:angle="270"
+        android:startColor="#3d8aff"
+        android:endColor="#3d7fff"/>
+    <corners android:radius="15dp"/>
+</shape>

BIN
baseswago/src/main/res/mipmap-xxhdpi/icon_arrow_exchange.png


BIN
baseswago/src/main/res/mipmap-xxhdpi/icon_close_black.png


BIN
baseswago/src/main/res/mipmap-xxhdpi/icon_diamond.png


+ 9 - 4
baseswago/src/main/res/values/strings.xml

@@ -26,8 +26,8 @@
     <string name="id_x">ID:%s</string>
     <string name="swago_offical_msg">Swago official information</string>
     <string name="message">Message</string>
-    <string name="coin">Coin</string>
-    <string name="diamond">Diamond</string>
+    <string name="coin">Coins</string>
+    <string name="diamond">Diamonds</string>
     <string name="my_level">My Level</string>
     <string name="top_up_center">Top up Center</string>
     <string name="task_center">Task Center</string>
@@ -157,6 +157,11 @@
     <string name="follow_anchor">already follow the host, don\'t worry about missing the live again~</string>
     <string name="big_prize">How lucky! %s sent %s to win %s times the reward, congratulations to him!</string>
     <string name="update_now">立即更新</string>
-
-
+    <string name="exchange_coin">金币兑换</string>
+    <string name="exchange">兑换</string>
+    <string name="coin_balance">金币余额</string>
+    <string name="diamond_balance">钻石余额</string>
+    <string name="self">自己</string>
+    <string name="other">其他人</string>
+    <string name="exchange_success">兑换成功</string>
 </resources>

+ 7 - 0
home/src/main/java/com/swago/home/MineFragment.kt

@@ -65,6 +65,13 @@ class MineFragment : BaseXFragment<FragmentMineBinding>() {
             }
         })
 
+
+        binding.llDiamonds.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                ARouter.getInstance().build(ARouteConstant.User.exchange).navigation()
+            }
+        })
+
         binding.tvEdit.setOnClickListener(object: NoDoubleClickListener(){
             override fun onClick() {
                 ARouter.getInstance().build(ARouteConstant.User.editInfo).navigation()

BIN
room/src/main/res/mipmap-xxhdpi/icon_diamond.png


+ 2 - 0
user/src/main/AndroidManifest.xml

@@ -21,6 +21,8 @@
             android:screenOrientation="portrait"/>
         <activity android:name=".CustomServiceActivity"
             android:screenOrientation="portrait"/>
+        <activity android:name=".exchange.DiamondCoinExchangeActivity"
+            android:screenOrientation="portrait"/>
     </application>
 
 </manifest>

+ 159 - 0
user/src/main/java/com/swago/user/exchange/DiamondCoinExchangeActivity.kt

@@ -0,0 +1,159 @@
+package com.swago.user.exchange
+
+import android.graphics.Rect
+import android.view.View
+import android.widget.Toast
+import androidx.activity.viewModels
+import androidx.recyclerview.widget.GridLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.swago.baseswago.activity.BaseXActivity
+import com.swago.baseswago.constant.ARouteConstant
+import com.swago.baseswago.util.*
+import com.swago.user.R
+import com.swago.user.databinding.ActivityDiamondCoinBinding
+import com.swago.user.vm.ExchangeVm
+import com.zy.multistatepage.state.EmptyState
+import com.zy.multistatepage.state.ErrorState
+import com.zy.multistatepage.state.LoadingState
+import com.zy.multistatepage.state.SuccessState
+
+/**
+ *@date 2022/4/7 20:10
+ *description:
+ */
+@Route(path = ARouteConstant.User.exchange)
+class DiamondCoinExchangeActivity : BaseXActivity<ActivityDiamondCoinBinding>() {
+
+    private val exchangeVm by viewModels<ExchangeVm>()
+
+    private val adapter by lazy {
+        ExchangeAdapter()
+    }
+
+    private var selectedPosition = -1
+
+    //给其他用户兑换
+    private var otherUserId = ""
+    private var exchangeType = 1
+
+    override fun loadData() {
+        multiStateContainer.show<LoadingState>()
+        exchangeVm.getExchangeList()
+    }
+
+    override fun initOther() {
+        setBackView(binding.toolbar.ivBack)
+        binding.toolbar.tvTitle.text = AppContext.getContext().resources.getString(R.string.exchange_coin)
+
+        UserInfo.getUserInfo()?.let {
+            binding.tvCoinBalance.text = it.user_coins
+            binding.tvDiamondsBalance.text = it.user_diamonds
+        }
+
+        binding.recyclerView.addItemDecoration(GridItemDecoration())
+        binding.recyclerView.layoutManager = GridLayoutManager(this,2)
+        binding.recyclerView.adapter = adapter
+
+        adapter.setOnItemClickListener { _, _, position ->
+            if (adapter.data.size>position){
+                if (selectedPosition != -1){
+                    adapter.data[selectedPosition].isSelected = false
+                }
+                adapter.data[position].isSelected = true
+                selectedPosition = position
+                adapter.notifyDataSetChanged()
+            }
+        }
+
+        binding.tvSelf.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                binding.tvOther.setBackgroundResource(R.drawable.shape_tranparent)
+                binding.tvSelf.setBackgroundResource(R.drawable.shape_white_20)
+                binding.tv4.visibility = View.GONE
+                binding.etInputID.visibility = View.GONE
+                binding.view2.visibility = View.GONE
+                exchangeType = 1
+            }
+        })
+
+        binding.tvOther.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                binding.tvOther.setBackgroundResource(R.drawable.shape_white_20)
+                binding.tvSelf.setBackgroundResource(R.drawable.shape_tranparent)
+                binding.tv4.visibility = View.VISIBLE
+                binding.etInputID.visibility = View.VISIBLE
+                binding.view2.visibility = View.VISIBLE
+                exchangeType = 2
+            }
+        })
+
+        binding.tvExchange.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                if (selectedPosition!=-1&&adapter.data.size>selectedPosition){
+                    ExchangeDialog.newInstance(adapter.data[selectedPosition].diamond_num,adapter.data[selectedPosition].coin_num).apply {
+                        this.exchangeFun = {
+                            otherUserId = if (exchangeType == 2){
+                                this@DiamondCoinExchangeActivity.binding.etInputID.text.toString().trim()
+                            }else{
+                                ""
+                            }
+                            SwagoLoading.showLoadingDialog(this@DiamondCoinExchangeActivity)
+                            exchangeVm.exchangeCoin(adapter.data[selectedPosition].id,exchangeType,otherUserId)
+                        }
+                    }.show(supportFragmentManager,"ExchangeDialog")
+                }
+            }
+        })
+
+    }
+
+    override fun initLiveData() {
+        exchangeVm.exchangeListLiveData.observe(this){
+            if (it == null){
+                multiStateContainer.show<ErrorState>()
+            }else{
+                if (it.isEmpty()){
+                    multiStateContainer.show<EmptyState>()
+                }else{
+                    multiStateContainer.show<SuccessState>()
+                    adapter.setNewData(it)
+                }
+            }
+        }
+
+        exchangeVm.exchangeResultLiveData.observe(this){
+            Toast.makeText(AppContext.getContext(), AppContext.getContext().resources.getString(R.string.exchange_success), Toast.LENGTH_SHORT).show()
+            binding.tvCoinBalance.text = it.user_coins
+            binding.tvDiamondsBalance.text = it.user_diamonds
+            UserInfo.getUserInfo()?.let { userInfo ->
+                userInfo.user_coins = it.user_coins
+                userInfo.user_diamonds = it.user_diamonds
+            }
+        }
+    }
+
+    inner class GridItemDecoration : RecyclerView.ItemDecoration() {
+        override fun getItemOffsets(
+            outRect: Rect,
+            view: View,
+            parent: RecyclerView,
+            state: RecyclerView.State
+        ) {
+            val itemPosition = (view.layoutParams as RecyclerView.LayoutParams).viewLayoutPosition
+            val column = itemPosition % 2
+            val margin = DpPxUtil.dip2px(16f)
+            val middle = DpPxUtil.dip2px(6f)
+            val bottom = DpPxUtil.dip2px(12f)
+            when (column) {
+                0 -> {
+                    outRect.set(margin, 0, middle, bottom)
+                }
+
+                1 -> {
+                    outRect.set(middle, 0, margin, bottom)
+                }
+            }
+        }
+    }
+}

+ 26 - 0
user/src/main/java/com/swago/user/exchange/ExchangeAdapter.kt

@@ -0,0 +1,26 @@
+package com.swago.user.exchange
+
+import com.chad.library.adapter.base.BaseQuickAdapter
+import com.chad.library.adapter.base.BaseViewHolder
+import com.swago.baseswago.model.mine.ExchangeModel
+import com.swago.user.R
+
+/**
+ *@date 2022/4/8 11:11
+ *description:
+ */
+class ExchangeAdapter : BaseQuickAdapter<ExchangeModel,BaseViewHolder>(R.layout.item_exchange, arrayListOf()) {
+
+    override fun convert(helper: BaseViewHolder, item: ExchangeModel) {
+        helper.apply {
+            if (item.isSelected){
+                setBackgroundRes(R.id.clRoot,R.drawable.shape_exchange_selected)
+            }else{
+                setBackgroundRes(R.id.clRoot,R.drawable.shape_f1f4f8_16)
+            }
+
+            setText(R.id.tvCoin,item.coin_num)
+            setText(R.id.tvDiamond,item.diamond_num)
+        }
+    }
+}

+ 59 - 0
user/src/main/java/com/swago/user/exchange/ExchangeDialog.kt

@@ -0,0 +1,59 @@
+package com.swago.user.exchange
+
+import android.os.Bundle
+import android.view.Gravity
+import com.swago.baseswago.dialog.BaseXDFragment
+import com.swago.baseswago.util.NoDoubleClickListener
+import com.swago.user.databinding.DialogExchangeBinding
+
+/**
+ *@date 2022/4/8 14:06
+ *description:
+ */
+class ExchangeDialog : BaseXDFragment<DialogExchangeBinding>() {
+    
+
+    var exchangeFun:(()->Unit)? = null
+
+    init {
+        setCanCancel(false)
+        setGravity(Gravity.BOTTOM)
+        setDimAmount(0.5f)
+    }
+    
+    companion object{
+        fun newInstance(diamonds:String,coins:String): ExchangeDialog {
+            val args = Bundle()
+            args.putString("diamonds",diamonds)
+            args.putString("coins",coins)
+            val fragment = ExchangeDialog()
+            fragment.arguments = args
+            return fragment
+        }
+    }
+    
+    override fun initOther() {
+        arguments?.let {
+            val diamonds = it.getString("diamonds","")
+            val coins = it.getString("coins","")
+            binding.tvCoins.text = coins
+            binding.tvDiamonds.text = diamonds
+
+            binding.tvExchange.setOnClickListener(object:NoDoubleClickListener(){
+                override fun onClick() {
+                    exchangeFun?.invoke()
+                    dismissAllowingStateLoss()
+                }
+            })
+
+            binding.ivClose.setOnClickListener(object:NoDoubleClickListener(){
+                override fun onClick() {
+                    dismissAllowingStateLoss()
+                }
+            })
+        }
+    }
+
+    override fun initLiveData() {
+    }
+}

+ 56 - 0
user/src/main/java/com/swago/user/vm/ExchangeVm.kt

@@ -0,0 +1,56 @@
+package com.swago.user.vm
+
+import android.app.Application
+import android.widget.Toast
+import androidx.lifecycle.MutableLiveData
+import com.swago.baseswago.http.SwagoException
+import com.swago.baseswago.inter.ApiManager
+import com.swago.baseswago.model.mine.ExchangeModel
+import com.swago.baseswago.model.mine.ExchangeResult
+import com.swago.baseswago.util.AppContext
+import com.swago.baseswago.util.BaseViewModel
+import com.swago.baseswago.util.SwagoLoading
+
+/**
+ *@date 2022/4/8 10:04
+ *description:
+ */
+class ExchangeVm(application: Application) : BaseViewModel(application) {
+
+    val exchangeListLiveData by lazy {
+        MutableLiveData<List<ExchangeModel>?>()
+    }
+
+    fun getExchangeList(){
+        requestData2 {
+            requestData {
+                exchangeListLiveData.value = ApiManager.userApi.getExchangeList()
+            }
+
+            requestError {
+                exchangeListLiveData.value = null
+            }
+        }
+    }
+
+    val exchangeResultLiveData by lazy {
+        MutableLiveData<ExchangeResult>()
+    }
+
+
+    fun exchangeCoin(id:Int,exchange_type:Int,user_id:String){
+        requestData2 {
+            requestData {
+                exchangeResultLiveData.value = ApiManager.userApi.exchangeCoin(id, exchange_type, user_id)
+                SwagoLoading.cancelLoadingDialog()
+            }
+            requestError {
+                if (it is SwagoException){
+                    Toast.makeText(AppContext.getContext(), it.message, Toast.LENGTH_SHORT).show()
+                }
+                SwagoLoading.cancelLoadingDialog()
+            }
+        }
+    }
+
+}

+ 15 - 0
user/src/main/res/drawable/shape_exchange_selected.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape>
+            <solid android:color="#FEFAF1" />
+            <corners android:radius="16dp"/>
+        </shape>
+    </item>
+    <item>
+        <shape>
+            <stroke android:color="#FFAA21" android:width="1dp"/>
+            <corners android:radius="16dp"/>
+        </shape>
+    </item>
+</layer-list>

+ 228 - 0
user/src/main/res/layout/activity_diamond_coin.xml

@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <include
+        android:id="@+id/toolbar"
+        layout="@layout/layout_toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="56dp"
+        android:layout_marginTop="25dp"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/clTop"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar"
+        android:layout_marginTop="15dp"
+        android:layout_marginStart="15dp"
+        android:layout_marginEnd="15dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:background="@drawable/shape_3d8aff_3d7fff_all_15"
+        android:layout_width="0dp"
+        android:layout_height="100dp">
+
+
+        <com.swago.baseswago.cusview.MediumTextView
+            android:id="@+id/tv1"
+            android:layout_marginTop="24dp"
+            android:drawableStart="@mipmap/icon_coin_48"
+            android:textSize="12dp"
+            android:textColor="#fff"
+            android:text="@string/coin_balance"
+            android:gravity="center"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="@+id/view"
+            app:layout_constraintTop_toTopOf="parent"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+
+
+        <com.swago.baseswago.cusview.BoldTextView
+            android:id="@+id/tvCoinBalance"
+            android:textSize="24dp"
+            android:textColor="#fff"
+            tools:text="123456"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="@+id/view"
+            app:layout_constraintBottom_toBottomOf="parent"
+            android:layout_marginBottom="24dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+
+        <View
+            android:id="@+id/view"
+            android:layout_marginTop="24dp"
+            android:layout_marginBottom="24dp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            android:layout_width="2dp"
+            android:background="#1AFFFFFF"
+            android:layout_height="0dp"/>
+
+
+        <com.swago.baseswago.cusview.MediumTextView
+            android:id="@+id/tv2"
+            android:layout_marginTop="24dp"
+            android:drawableStart="@mipmap/icon_diamond"
+            android:textSize="12dp"
+            android:textColor="#fff"
+            android:text="@string/diamond_balance"
+            android:gravity="center"
+            app:layout_constraintStart_toEndOf="@+id/view"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+
+
+        <com.swago.baseswago.cusview.BoldTextView
+            android:id="@+id/tvDiamondsBalance"
+            android:textSize="24dp"
+            android:textColor="#fff"
+            tools:text="1234567890"
+            app:layout_constraintStart_toEndOf="@+id/view"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            android:layout_marginBottom="24dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+
+    <com.swago.baseswago.cusview.BoldTextView
+        android:id="@+id/tv3"
+        android:textSize="16dp"
+        android:textColor="#131B23"
+        android:layout_marginTop="27dp"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_marginStart="15dp"
+        android:text="@string/exchange_coin"
+        app:layout_constraintTop_toBottomOf="@+id/clTop"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+
+    <LinearLayout
+        app:layout_constraintTop_toBottomOf="@+id/clTop"
+        android:layout_marginTop="22dp"
+        android:layout_marginEnd="15dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:orientation="horizontal"
+        android:layout_width="wrap_content"
+        android:background="@drawable/shape_f1f4f8_16"
+        android:layout_height="28dp">
+
+        <com.swago.baseswago.cusview.MediumTextView
+            android:id="@+id/tvSelf"
+            android:textSize="14dp"
+            android:text="@string/self"
+            android:paddingStart="10dp"
+            android:paddingEnd="10dp"
+            android:textColor="#131B23"
+            android:layout_marginStart="2dp"
+            android:background="@drawable/shape_white_20"
+            android:gravity="center_vertical"
+            android:layout_gravity="center_vertical"
+            android:layout_width="wrap_content"
+            android:layout_height="24dp"/>
+
+        <com.swago.baseswago.cusview.MediumTextView
+            android:id="@+id/tvOther"
+            android:textSize="14dp"
+            android:text="@string/other"
+            android:layout_marginEnd="2dp"
+            android:paddingStart="10dp"
+            android:paddingEnd="10dp"
+            android:gravity="center_vertical"
+            android:layout_gravity="center_vertical"
+            android:textColor="#131B23"
+            android:layout_width="wrap_content"
+            android:layout_height="24dp"/>
+
+    </LinearLayout>
+
+
+    <com.swago.baseswago.cusview.MediumTextView
+        android:id="@+id/tv4"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_marginStart="15dp"
+        android:layout_marginTop="26dp"
+        android:textColor="#435568"
+        android:textSize="16dp"
+        android:text="User ID"
+        android:visibility="gone"
+        tools:visibility="visible"
+        app:layout_constraintTop_toBottomOf="@+id/tv3"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+    <androidx.appcompat.widget.AppCompatEditText
+        android:id="@+id/etInputID"
+        app:layout_constraintTop_toTopOf="@+id/tv4"
+        app:layout_constraintBottom_toBottomOf="@+id/tv4"
+        app:layout_constraintStart_toEndOf="@+id/tv4"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_marginEnd="15dp"
+        android:textSize="16dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:inputType="number"
+        android:layout_marginStart="15dp"
+        android:textColor="#435568"
+        android:textColorHint="#AFB9C3"
+        android:hint="Please enter"
+        android:background="@drawable/trans_bg"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"/>
+
+    <View
+        android:id="@+id/view2"
+        app:layout_constraintTop_toBottomOf="@+id/etInputID"
+        android:layout_marginTop="10dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_marginStart="15dp"
+        android:layout_marginEnd="15dp"
+        android:background="#33AFB9C3"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_width="0dp"
+        android:layout_height="1dp"/>
+
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/recyclerView"
+        app:layout_constraintTop_toBottomOf="@+id/view2"
+        app:layout_constraintBottom_toTopOf="@+id/tvExchange"
+        android:layout_marginTop="15dp"
+        android:layout_marginBottom="48dp"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"/>
+
+
+    <com.swago.baseswago.cusview.BoldTextView
+        android:id="@+id/tvExchange"
+        android:textSize="15dp"
+        android:textColor="#fff"
+        android:text="@string/exchange"
+        android:gravity="center"
+        android:background="@drawable/shape_ff56b7_37"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_marginStart="15dp"
+        android:layout_marginEnd="15dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="30dp"
+        android:layout_width="0dp"
+        android:layout_height="48dp"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 1
user/src/main/res/layout/activity_recharge.xml

@@ -38,7 +38,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="8dp"
-        android:drawableStart="@mipmap/icon_coin"
+        android:drawableStart="@mipmap/icon_coin_90"
         android:drawablePadding="5dp"
         android:textColor="#131B23"
         android:textSize="32dp"

+ 133 - 0
user/src/main/res/layout/dialog_exchange.xml

@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        app:layout_constraintTop_toTopOf="parent"
+        android:background="@drawable/shape_white_top_20"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <com.swago.baseswago.cusview.BoldTextView
+            android:id="@+id/tv"
+            android:text="@string/exchange_coin"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:textSize="20dp"
+            android:layout_marginTop="16dp"
+            android:textColor="#131B23"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+
+        <ImageView
+            android:id="@+id/ivClose"
+            android:padding="4dp"
+            android:layout_marginTop="16dp"
+            android:layout_marginEnd="16dp"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:src="@mipmap/icon_close_black"
+            android:layout_width="24dp"
+            android:layout_height="24dp"/>
+
+        <View
+            android:id="@+id/view"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:layout_marginStart="16dp"
+            android:layout_marginEnd="16dp"
+            android:layout_marginTop="20dp"
+            app:layout_constraintTop_toBottomOf="@+id/tv"
+            android:background="@drawable/shape_f1f4f8_16"
+            android:layout_width="0dp"
+            android:layout_height="128dp"/>
+
+
+        <com.swago.baseswago.cusview.BoldTextView
+            android:id="@+id/tvDiamonds"
+            android:textSize="18dp"
+            android:textColor="#828C9D"
+            tools:text="1000"
+            android:drawableTop="@mipmap/icon_diamond"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toStartOf="@+id/iv"
+            app:layout_constraintTop_toTopOf="@id/view"
+            android:layout_marginTop="30dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+
+        <com.swago.baseswago.cusview.RegularTextView
+            android:id="@+id/tvDiamondText"
+            android:textSize="12dp"
+            android:textColor="#828C9D"
+            android:text="@string/diamond"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toStartOf="@+id/iv"
+            app:layout_constraintTop_toBottomOf="@+id/tvDiamonds"
+            android:layout_marginTop="3dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+
+
+        <com.swago.baseswago.cusview.BoldTextView
+            android:id="@+id/tvCoins"
+            android:textSize="18dp"
+            android:textColor="#828C9D"
+            tools:text="1000"
+            android:drawableTop="@mipmap/icon_coin_48"
+            app:layout_constraintEnd_toEndOf="@id/view"
+            app:layout_constraintStart_toEndOf="@+id/iv"
+            app:layout_constraintTop_toTopOf="@id/view"
+            android:layout_marginTop="30dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+
+        <com.swago.baseswago.cusview.RegularTextView
+            android:id="@+id/tvCoinsText"
+            android:textSize="12dp"
+            android:textColor="#828C9D"
+            android:text="@string/coin"
+            app:layout_constraintEnd_toEndOf="@id/view"
+            app:layout_constraintStart_toEndOf="@+id/iv"
+            app:layout_constraintTop_toBottomOf="@+id/tvCoins"
+            android:layout_marginTop="3dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+
+        <ImageView
+            android:id="@+id/iv"
+            app:layout_constraintStart_toStartOf="@+id/view"
+            app:layout_constraintEnd_toEndOf="@+id/view"
+            app:layout_constraintTop_toTopOf="@+id/view"
+            app:layout_constraintBottom_toBottomOf="@+id/view"
+            android:src="@mipmap/icon_arrow_exchange"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+
+
+        <com.swago.baseswago.cusview.BoldTextView
+            android:id="@+id/tvExchange"
+            android:textSize="15dp"
+            android:textColor="#fff"
+            android:text="@string/exchange"
+            android:gravity="center"
+            android:background="@drawable/shape_ff56b7_37"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            android:layout_marginStart="16dp"
+            android:layout_marginEnd="16dp"
+            android:layout_marginTop="32dp"
+            app:layout_constraintTop_toBottomOf="@+id/view"
+            app:layout_constraintBottom_toBottomOf="parent"
+            android:layout_marginBottom="32dp"
+            android:layout_width="0dp"
+            android:layout_height="48dp"/>
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 53 - 0
user/src/main/res/layout/item_exchange.xml

@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="70dp"
+    android:id="@+id/clRoot"
+    android:background="@drawable/shape_f1f4f8_16"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <com.swago.baseswago.cusview.BoldTextView
+        android:id="@+id/tvCoin"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:textSize="16dp"
+        android:textColor="#131B23"
+        tools:text="123"
+        android:drawablePadding="2dp"
+        android:layout_marginStart="10dp"
+        android:layout_marginTop="12dp"
+        android:drawableStart="@mipmap/icon_coin_48"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+
+    <TextView
+        android:id="@+id/tvConsume"
+        android:textColor="#828C9D"
+        android:textSize="12dp"
+        android:layout_marginStart="10dp"
+        android:layout_marginBottom="12dp"
+        android:text="Consume"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+
+    <TextView
+        android:id="@+id/tvDiamond"
+        app:layout_constraintStart_toEndOf="@+id/tvConsume"
+        android:drawableStart="@mipmap/icon_diamond"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginBottom="12dp"
+        android:layout_marginStart="4dp"
+        android:textSize="12dp"
+        android:textColor="#435568"
+        tools:text="123456"
+        android:gravity="center"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

BIN
user/src/main/res/mipmap-xxhdpi/icon_coin.png


BIN
user/src/main/res/mipmap-xxhdpi/icon_coin_48.png


BIN
user/src/main/res/mipmap-xxhdpi/icon_coin_90.png