[Modify]完成兑换权限功能

This commit is contained in:
wushaocheng
2023-02-14 19:43:09 +08:00
parent c91bd5f8d3
commit 424e4c870d
28 changed files with 577 additions and 143 deletions

View File

@@ -1,37 +0,0 @@
package com.yizhuan.erban.association
import androidx.lifecycle.MutableLiveData
import com.yizhuan.erban.base.BaseViewModel
import com.yizhuan.xchat_android_core.association.AssociationModel
import com.yizhuan.xchat_android_core.association.HallListInfo
import com.yizhuan.xchat_android_core.association.ClanListInfo
import com.yizhuan.xchat_android_core.bean.response.ListResult
import com.yizhuan.xchat_android_core.utils.toast
class AssociationViewModel : BaseViewModel() {
//公会列表
private val _clanListLiveData = MutableLiveData<List<ClanListInfo>?>()
val clanListLiveData: MutableLiveData<List<ClanListInfo>?> = _clanListLiveData
//牌照房列表
private val _hallListLiveData = MutableLiveData<List<HallListInfo>?>()
val hallListLiveData: MutableLiveData<List<HallListInfo>?> = _hallListLiveData
fun getClanList() {
safeLaunch(
block = {
_clanListLiveData.value = AssociationModel.getClanList()
}
)
}
fun getHallList() {
safeLaunch(
block = {
_hallListLiveData.value = AssociationModel.getHallList()
}
)
}
}

View File

@@ -8,8 +8,8 @@ import androidx.fragment.app.Fragment
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.netease.nim.uikit.StatusBarUtil import com.netease.nim.uikit.StatusBarUtil
import com.yizhuan.erban.R import com.yizhuan.erban.R
import com.yizhuan.erban.association.fragment.AssociationFragment import com.yizhuan.erban.module_hall.hall.fragment.AssociationFragment
import com.yizhuan.erban.association.fragment.AssociationRoomFragment import com.yizhuan.erban.module_hall.hall.fragment.AssociationRoomFragment
import com.yizhuan.erban.base.BaseViewBindingActivity import com.yizhuan.erban.base.BaseViewBindingActivity
import com.yizhuan.erban.common.CommonPagerAdapter import com.yizhuan.erban.common.CommonPagerAdapter
import com.yizhuan.erban.databinding.ActivityAssociationBinding import com.yizhuan.erban.databinding.ActivityAssociationBinding

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#19EBFF"
android:startColor="#ED66FF"
android:type="linear"
android:useLevel="true" />
<corners android:radius="@dimen/dp_15" />
</shape>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#19EBFF"
android:startColor="#ED66FF"
android:type="linear"
android:useLevel="true" />
<corners android:radius="@dimen/dp_30" />
</shape>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/color_E6E6F0" />
<corners android:radius="@dimen/dp_15" />
</shape>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/color_E6E6F0" />
<corners android:radius="@dimen/dp_30" />
</shape>

View File

@@ -0,0 +1,121 @@
<?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:layout_width="310dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/shape_white_12dp_round">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_15"
android:src="@drawable/ic_close_exchange"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_25"
android:gravity="center"
android:lineSpacingMultiplier="1.2"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:text="@string/close_exchange"
android:textColor="@color/text_title_color"
android:textSize="@dimen/sp_17"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_20"
android:src="@drawable/ic_close_exchange_tip"
app:layout_constraintBottom_toBottomOf="@+id/tv_sure_close"
app:layout_constraintEnd_toStartOf="@+id/tv_sure_close"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_sure_close" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_sure_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_6"
android:layout_marginTop="@dimen/dp_18"
android:text="@string/sure_to_close"
android:textColor="@color/text_title_color"
android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toStartOf="@+id/tv_name"
app:layout_constraintStart_toEndOf="@+id/iv_close_tip"
app:layout_constraintTop_toBottomOf="@+id/tv_message" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_9168FA"
android:textSize="@dimen/sp_14"
app:layout_constraintBaseline_toBaselineOf="@+id/tv_sure_close"
app:layout_constraintEnd_toStartOf="@+id/tv_sure_tip"
app:layout_constraintStart_toEndOf="@+id/tv_sure_close"
tools:text="PEKO小新" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_sure_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_20"
android:text="@string/gold_exchange_power"
android:textColor="@color/text_title_color"
android:textSize="@dimen/sp_14"
app:layout_constraintBaseline_toBaselineOf="@+id/tv_name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_name" />
<LinearLayout
android:id="@+id/ll_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_44"
android:layout_marginBottom="24dp"
android:gravity="center_horizontal"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@+id/tv_sure_tip">
<TextView
android:id="@+id/btn_cancel"
android:layout_width="110dp"
android:layout_height="38dp"
android:layout_marginEnd="@dimen/dp_28"
android:background="@drawable/bg_common_confirm_gray_30"
android:gravity="center"
android:text="@string/cancel"
android:textColor="@color/color_B3B3C3"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/btn_ok"
android:layout_width="110dp"
android:layout_height="38dp"
android:background="@drawable/bg_common_confirm"
android:gravity="center"
android:text="@string/text_ok"
android:textColor="@color/white"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_30"
app:layout_constraintTop_toBottomOf="@+id/ll_bottom"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -5061,6 +5061,9 @@
<string name="exchangeable">可兌換</string> <string name="exchangeable">可兌換</string>
<string name="no_more_members_with_gold_for_now">暫無更多不可兌換金幣的成員~</string> <string name="no_more_members_with_gold_for_now">暫無更多不可兌換金幣的成員~</string>
<string name="open_exchange">開啓兌換</string> <string name="open_exchange">開啓兌換</string>
<string name="close_exchange">關閉兌換</string>
<string name="gold_coin_balance">金幣餘額:%s</string> <string name="gold_coin_balance">金幣餘額:%s</string>
<string name="sure_to_close">確定關閉</string>
<string name="gold_exchange_power">的金幣兌換權限嗎?</string>
</resources> </resources>

View File

@@ -2,11 +2,19 @@ package com.yizhuan.erban.module_hall.hall.activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.view.View
import androidx.activity.viewModels
import androidx.core.content.ContextCompat
import com.netease.nim.uikit.StatusBarUtil import com.netease.nim.uikit.StatusBarUtil
import com.yizhuan.erban.R import com.yizhuan.erban.R
import com.yizhuan.erban.base.BaseViewBindingActivity import com.yizhuan.erban.base.BaseViewBindingActivity
import com.yizhuan.erban.common.util.Utils
import com.yizhuan.erban.databinding.ActivityExchangePermissionBinding import com.yizhuan.erban.databinding.ActivityExchangePermissionBinding
import com.yizhuan.erban.module_hall.hall.adapter.EnableExchangeAdapter
import com.yizhuan.erban.module_hall.hall.adapter.NoExchangeAdapter import com.yizhuan.erban.module_hall.hall.adapter.NoExchangeAdapter
import com.yizhuan.erban.module_hall.hall.view.dialog.CloseExchangeTipDialog
import com.yizhuan.erban.module_hall.viewmodel.AssociationViewModel
import com.yizhuan.erban.ui.widget.recyclerview.decoration.ColorDecoration
import com.yizhuan.xchat_android_library.utils.ResUtil import com.yizhuan.xchat_android_library.utils.ResUtil
/** /**
@@ -17,6 +25,10 @@ class ExchangePermissionActivity : BaseViewBindingActivity<ActivityExchangePermi
private val mNoExchangeAdapter by lazy { NoExchangeAdapter() } private val mNoExchangeAdapter by lazy { NoExchangeAdapter() }
private val mEnableExchangeAdapter by lazy { EnableExchangeAdapter() }
private val associationViewModel: AssociationViewModel by viewModels()
companion object { companion object {
@JvmStatic @JvmStatic
fun start(context: Context) { fun start(context: Context) {
@@ -27,6 +39,65 @@ class ExchangePermissionActivity : BaseViewBindingActivity<ActivityExchangePermi
override fun init() { override fun init() {
initWhiteTitleBar(ResUtil.getString(R.string.exchange_permission_setting)) initWhiteTitleBar(ResUtil.getString(R.string.exchange_permission_setting))
binding.mRecyclerViewNo.addItemDecoration(
ColorDecoration(
ContextCompat.getColor(this, R.color.color_F3F5FA),
0, Utils.dip2px(this, 1f), false
)
)
binding.mRecyclerViewNo.adapter = mNoExchangeAdapter
binding.mRecyclerViewEnable.addItemDecoration(
ColorDecoration(
ContextCompat.getColor(this, R.color.color_F3F5FA),
0, Utils.dip2px(this, 1f), false
)
)
binding.mRecyclerViewEnable.adapter = mEnableExchangeAdapter
mNoExchangeAdapter.setOnItemChildClickListener { _, _, position ->
associationViewModel.operateMemberExchange(
0,
mEnableExchangeAdapter.data[position].uid
)
}
mEnableExchangeAdapter.setOnItemChildClickListener { _, _, position ->
CloseExchangeTipDialog(context).apply {
setName(mEnableExchangeAdapter.data[position].nick)
setOnActionListener(object : CloseExchangeTipDialog.OnActionListener {
override fun onOk() {
associationViewModel.operateMemberExchange(
0,
mEnableExchangeAdapter.data[position].uid
)
}
})
}.show()
}
associationViewModel.loadingLiveData.observe(this) { loading ->
if (loading) dialogManager.showProgressDialog(this)
else dialogManager.dismissDialog()
}
associationViewModel.operateMemberExchangeLiveData.observe(this) {
associationViewModel.getMemberExchangeList()
}
associationViewModel.memberExchangeLiveData.observe(this) { list ->
list?.let { memberExchangeInfo ->
val noList = memberExchangeInfo.filter { it.exchangeAuthStatus == 0 }
.sortedByDescending { it.golds }
val enableList = memberExchangeInfo.filter { it.exchangeAuthStatus == 1 }
.sortedByDescending { it.golds }
mNoExchangeAdapter.setNewData(noList)
mEnableExchangeAdapter.setNewData(enableList)
binding.group.visibility = View.VISIBLE
}
}
associationViewModel.getMemberExchangeList()
} }
override fun needSteepStateBar(): Boolean { override fun needSteepStateBar(): Boolean {

View File

@@ -1,4 +1,4 @@
package com.yizhuan.erban.association.adapter; package com.yizhuan.erban.module_hall.hall.adapter;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
@@ -8,7 +8,7 @@ import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder; import com.chad.library.adapter.base.BaseViewHolder;
import com.yizhuan.erban.R; import com.yizhuan.erban.R;
import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2; import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2;
import com.yizhuan.xchat_android_core.association.ClanListInfo; import com.yizhuan.xchat_android_core.association.bean.ClanListInfo;
/** /**
* Created by yudi * Created by yudi

View File

@@ -1,13 +1,12 @@
package com.yizhuan.erban.association.adapter; package com.yizhuan.erban.module_hall.hall.adapter;
import android.view.View; import android.view.View;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder; import com.chad.library.adapter.base.BaseViewHolder;
import com.yizhuan.erban.R; import com.yizhuan.erban.R;
import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2; import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2;
import com.yizhuan.xchat_android_core.association.HallListInfo; import com.yizhuan.xchat_android_core.association.bean.HallListInfo;
/** /**
* Created by yudi * Created by yudi

View File

@@ -1,30 +1,50 @@
package com.yizhuan.erban.module_hall.hall.adapter package com.yizhuan.erban.module_hall.hall.adapter
import androidx.appcompat.widget.AppCompatTextView
import androidx.core.content.ContextCompat
import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder import com.chad.library.adapter.base.BaseViewHolder
import com.yizhuan.erban.R import com.yizhuan.erban.R
import com.yizhuan.erban.ui.utils.ImageLoadUtils import com.yizhuan.erban.ui.utils.ImageLoadUtils
import com.yizhuan.xchat_android_core.module_hall.hall.bean.SuperAdminInfo import com.yizhuan.xchat_android_core.association.bean.MemberExchangeInfo
import com.yizhuan.xchat_android_library.utils.ResUtil
/** /**
* 可兑换 * 可兑换
* Created by wushaocheng on 2023/2/13. * Created by wushaocheng on 2023/2/13.
*/ */
class EnableExchangeAdapter : class EnableExchangeAdapter :
BaseQuickAdapter<String, BaseViewHolder>(R.layout.item_hall_exchange) { BaseQuickAdapter<MemberExchangeInfo, BaseViewHolder>(R.layout.item_hall_exchange) {
override fun convert(helper: BaseViewHolder, item: String) { override fun convert(helper: BaseViewHolder, item: MemberExchangeInfo) {
// ImageLoadUtils.loadAvatar(item.avatar, helper.getView(R.id.iv_avatar)) ImageLoadUtils.loadAvatar(item.avatar, helper.getView(R.id.iv_avatar))
// helper.setText(R.id.tv_nickname, item.nick) ImageLoadUtils.loadImage(
// .setText(R.id.tv_id, item.erbanNo) mContext,
// .setText(R.id.tv_set, if (item.hasSet) ResUtil.getString(R.string.hall_adapter_searchadminadapter_01) else ResUtil.getString(R.string.hall_adapter_searchadminadapter_02)) item.userLevelVo?.experUrl,
// .setEnabled(R.id.tv_set, !item.hasSet) helper.getView(R.id.iv_user_level)
// .setImageResource( )
// R.id.iv_gender, ImageLoadUtils.loadImage(
// if (item.gender == 1) R.drawable.ic_gender_male else R.drawable.ic_gender_female mContext,
// ) item.userLevelVo?.charmUrl,
// .addOnClickListener(R.id.tv_set) helper.getView(R.id.iv_user_charm)
)
helper.getView<AppCompatTextView>(R.id.tv_confirm).background = ContextCompat.getDrawable(
mContext,
R.drawable.bg_common_confirm_gray_15
)
helper.setText(R.id.tv_confirm, mContext.getString(R.string.close_exchange))
.setTextColor(R.id.tv_confirm, ContextCompat.getColor(mContext, R.color.color_B3B3C3))
.setText(R.id.tv_nickname, item.nick)
.setImageResource(
R.id.iv_gender,
if (item.gender == 1) R.drawable.ic_gender_male else R.drawable.ic_gender_female
)
.setText(R.id.tv_id, mContext.getString(R.string.text_user_id, item.erbanNo.toString()))
.setText(R.id.tv_room_name, item.hallName)
.setText(
R.id.tv_gold_balance,
mContext.getString(R.string.gold_coin_balance, item.golds.toString())
)
.addOnClickListener(R.id.tv_confirm)
} }
} }

View File

@@ -4,27 +4,30 @@ import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder import com.chad.library.adapter.base.BaseViewHolder
import com.yizhuan.erban.R import com.yizhuan.erban.R
import com.yizhuan.erban.ui.utils.ImageLoadUtils import com.yizhuan.erban.ui.utils.ImageLoadUtils
import com.yizhuan.xchat_android_core.module_hall.hall.bean.SuperAdminInfo import com.yizhuan.xchat_android_core.association.bean.MemberExchangeInfo
import com.yizhuan.xchat_android_library.utils.ResUtil
/** /**
* 不可兑换 * 不可兑换
* Created by wushaocheng on 2023/2/13. * Created by wushaocheng on 2023/2/13.
*/ */
class NoExchangeAdapter : class NoExchangeAdapter :
BaseQuickAdapter<String, BaseViewHolder>(R.layout.item_hall_exchange) { BaseQuickAdapter<MemberExchangeInfo, BaseViewHolder>(R.layout.item_hall_exchange) {
override fun convert(helper: BaseViewHolder, item: String) { override fun convert(helper: BaseViewHolder, item: MemberExchangeInfo) {
ImageLoadUtils.loadAvatar(item.avatar, helper.getView(R.id.iv_avatar))
// ImageLoadUtils.loadAvatar(item.avatar, helper.getView(R.id.iv_avatar)) ImageLoadUtils.loadImage(mContext, item.userLevelVo?.experUrl, helper.getView(R.id.iv_user_level))
// helper.setText(R.id.tv_nickname, item.nick) ImageLoadUtils.loadImage(mContext, item.userLevelVo?.charmUrl, helper.getView(R.id.iv_user_charm))
// .setText(R.id.tv_id, item.erbanNo) helper.setText(R.id.tv_nickname, item.nick)
// .setText(R.id.tv_set, if (item.hasSet) ResUtil.getString(R.string.hall_adapter_searchadminadapter_01) else ResUtil.getString(R.string.hall_adapter_searchadminadapter_02)) .setImageResource(
// .setEnabled(R.id.tv_set, !item.hasSet) R.id.iv_gender,
// .setImageResource( if (item.gender == 1) R.drawable.ic_gender_male else R.drawable.ic_gender_female
// R.id.iv_gender, )
// if (item.gender == 1) R.drawable.ic_gender_male else R.drawable.ic_gender_female .setText(R.id.tv_id, mContext.getString(R.string.text_user_id, item.erbanNo.toString()))
// ) .setText(R.id.tv_room_name, item.hallName)
// .addOnClickListener(R.id.tv_set) .setText(
R.id.tv_gold_balance,
mContext.getString(R.string.gold_coin_balance, item.golds.toString())
)
.addOnClickListener(R.id.tv_confirm)
} }
} }

View File

@@ -1,4 +1,4 @@
package com.yizhuan.erban.association.fragment package com.yizhuan.erban.module_hall.hall.fragment
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
@@ -6,14 +6,14 @@ import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseQuickAdapter
import com.yizhuan.erban.R import com.yizhuan.erban.R
import com.yizhuan.erban.association.AssociationViewModel import com.yizhuan.erban.module_hall.viewmodel.AssociationViewModel
import com.yizhuan.erban.association.adapter.AssociationAdapter import com.yizhuan.erban.module_hall.hall.adapter.AssociationAdapter
import com.yizhuan.erban.base.BaseViewBindingFragment import com.yizhuan.erban.base.BaseViewBindingFragment
import com.yizhuan.erban.common.EmptyViewHelper import com.yizhuan.erban.common.EmptyViewHelper
import com.yizhuan.erban.databinding.FragmentAssociationBinding import com.yizhuan.erban.databinding.FragmentAssociationBinding
import com.yizhuan.erban.module_hall.hall.activity.ModuleClanActivity import com.yizhuan.erban.module_hall.hall.activity.ModuleClanActivity
import com.yizhuan.erban.ui.utils.RVDelegate import com.yizhuan.erban.ui.utils.RVDelegate
import com.yizhuan.xchat_android_core.association.ClanListInfo import com.yizhuan.xchat_android_core.association.bean.ClanListInfo
import com.yizhuan.xchat_android_core.module_hall.hall.HallModel import com.yizhuan.xchat_android_core.module_hall.hall.HallModel
import com.yizhuan.xchat_android_core.utils.net.BeanObserver import com.yizhuan.xchat_android_core.utils.net.BeanObserver
import com.yizhuan.xchat_android_core.utils.net.RxHelper import com.yizhuan.xchat_android_core.utils.net.RxHelper
@@ -39,7 +39,8 @@ class AssociationFragment : BaseViewBindingFragment<FragmentAssociationBinding>(
private val associationViewModel: AssociationViewModel by viewModels() private val associationViewModel: AssociationViewModel by viewModels()
override fun init() { override fun init() {
associationAdapter = AssociationAdapter() associationAdapter =
AssociationAdapter()
associationAdapter.onItemClickListener = associationAdapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int -> BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val info = associationAdapter.getItem(position) val info = associationAdapter.getItem(position)

View File

@@ -1,4 +1,4 @@
package com.yizhuan.erban.association.fragment package com.yizhuan.erban.module_hall.hall.fragment
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
@@ -14,17 +14,14 @@ import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseQuickAdapter
import com.yizhuan.erban.R import com.yizhuan.erban.R
import com.yizhuan.erban.association.AssociationViewModel import com.yizhuan.erban.module_hall.viewmodel.AssociationViewModel
import com.yizhuan.erban.association.adapter.AssociationRoomAdapter import com.yizhuan.erban.module_hall.hall.adapter.AssociationRoomAdapter
import com.yizhuan.erban.base.BaseViewBindingFragment import com.yizhuan.erban.base.BaseViewBindingFragment
import com.yizhuan.erban.common.EmptyViewHelper import com.yizhuan.erban.common.EmptyViewHelper
import com.yizhuan.erban.databinding.FragmentAssociationRoomBinding import com.yizhuan.erban.databinding.FragmentAssociationRoomBinding
import com.yizhuan.erban.module_hall.hall.activity.ModuleHallActivity import com.yizhuan.erban.module_hall.hall.activity.ModuleHallActivity
import com.yizhuan.erban.ui.utils.RVDelegate import com.yizhuan.erban.ui.utils.RVDelegate
import com.yizhuan.xchat_android_core.association.HallListInfo import com.yizhuan.xchat_android_core.association.bean.HallListInfo
import com.yizhuan.xchat_android_core.module_hall.hall.HallModel
import com.yizhuan.xchat_android_core.utils.net.BeanObserver
import com.yizhuan.xchat_android_core.utils.net.RxHelper
import com.yizhuan.xchat_android_library.utils.ResUtil import com.yizhuan.xchat_android_library.utils.ResUtil
@@ -95,7 +92,8 @@ class AssociationRoomFragment : BaseViewBindingFragment<FragmentAssociationRoomB
} }
false false
}) })
associationRoomAdapter = AssociationRoomAdapter() associationRoomAdapter =
AssociationRoomAdapter()
associationRoomAdapter.onItemClickListener = associationRoomAdapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int -> BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val info = associationRoomAdapter.getItem(position) val info = associationRoomAdapter.getItem(position)

View File

@@ -0,0 +1,85 @@
package com.yizhuan.erban.module_hall.hall.view.dialog;
import android.content.Context;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
import com.yizhuan.erban.R;
import com.yizhuan.erban.ui.widget.dialog.BaseDialog;
/**
* @author wushaocheng
* @Description 关闭兑换弹窗
* @Date 2013/2/14
*/
public class CloseExchangeTipDialog extends BaseDialog {
private String name = "";
public CloseExchangeTipDialog(Context context) {
super(context, R.style.dialog);
init();
}
private void init() {
this.setCancelable(true);
this.setCanceledOnTouchOutside(true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_close_exchange_dialog);
TextView name = findViewById(R.id.tv_name);
if (name != null) {
name.setText(this.name);
}
ImageView close = findViewById(R.id.iv_close);
if (close != null) {
close.setOnClickListener(view -> {
this.dismiss();
});
}
TextView ok = findViewById(R.id.btn_ok);
if (ok != null) {
ok.setOnClickListener(v -> {
this.dismiss();
if (l != null) {
l.onOk();
}
});
}
TextView cancel = findViewById(R.id.btn_cancel);
if (cancel != null) {
cancel.setOnClickListener(v -> {
this.dismiss();
if (l != null) {
l.onCancel();
}
});
}
}
public void setName(String name) {
this.name = name;
}
private OnActionListener l;
public void setOnActionListener(OnActionListener l) {
this.l = l;
}
public interface OnActionListener {
default void onOk() {
}
default void onCancel() {
}
}
}

View File

@@ -8,19 +8,10 @@ import com.yizhuan.erban.base.BaseViewBindingFragment
import com.yizhuan.erban.common.EmptyViewHelper import com.yizhuan.erban.common.EmptyViewHelper
import com.yizhuan.erban.databinding.FragmentAssociationBinding import com.yizhuan.erban.databinding.FragmentAssociationBinding
import com.yizhuan.erban.earn.EarnRecordViewModel import com.yizhuan.erban.earn.EarnRecordViewModel
import com.yizhuan.erban.earn.adapter.GoldDetailAdapter
import com.yizhuan.erban.earn.adapter.GoldRecordAdapter import com.yizhuan.erban.earn.adapter.GoldRecordAdapter
import com.yizhuan.erban.module_hall.hall.activity.ModuleClanActivity
import com.yizhuan.erban.ui.utils.RVDelegate import com.yizhuan.erban.ui.utils.RVDelegate
import com.yizhuan.xchat_android_core.association.ClanListInfo
import com.yizhuan.xchat_android_core.earn.bean.GoldRecordInfo
import com.yizhuan.xchat_android_core.earn.bean.HallMemberGoldFlowInfo import com.yizhuan.xchat_android_core.earn.bean.HallMemberGoldFlowInfo
import com.yizhuan.xchat_android_core.module_hall.hall.HallModel
import com.yizhuan.xchat_android_core.utils.net.BeanObserver
import com.yizhuan.xchat_android_core.utils.net.RxHelper
import com.yizhuan.xchat_android_library.common.util.Logger
import com.yizhuan.xchat_android_library.utils.ResUtil import com.yizhuan.xchat_android_library.utils.ResUtil
import java.math.BigDecimal
/** /**
* 金币明细 * 金币明细

View File

@@ -0,0 +1,63 @@
package com.yizhuan.erban.module_hall.viewmodel
import androidx.lifecycle.MutableLiveData
import com.yizhuan.erban.base.BaseViewModel
import com.yizhuan.xchat_android_core.association.bean.ClanListInfo
import com.yizhuan.xchat_android_core.association.bean.HallListInfo
import com.yizhuan.xchat_android_core.association.bean.MemberExchangeInfo
import com.yizhuan.xchat_android_core.association.model.AssociationModel
class AssociationViewModel : BaseViewModel() {
//公会列表
private val _clanListLiveData = MutableLiveData<List<ClanListInfo>?>()
val clanListLiveData: MutableLiveData<List<ClanListInfo>?> = _clanListLiveData
//牌照房列表
private val _hallListLiveData = MutableLiveData<List<HallListInfo>?>()
val hallListLiveData: MutableLiveData<List<HallListInfo>?> = _hallListLiveData
//获取家族下的兑换权限管理的成员列表
private val _memberExchangeLiveData = MutableLiveData<List<MemberExchangeInfo>?>()
val memberExchangeLiveData: MutableLiveData<List<MemberExchangeInfo>?> = _memberExchangeLiveData
//修改兑换权限管理
private val _operateMemberExchangeLiveData = MutableLiveData<String>()
val operateMemberExchangeLiveData: MutableLiveData<String> = _operateMemberExchangeLiveData
fun getClanList() {
safeLaunch(
block = {
_clanListLiveData.value = AssociationModel.getClanList()
}
)
}
fun getHallList() {
safeLaunch(
block = {
_hallListLiveData.value = AssociationModel.getHallList()
}
)
}
fun getMemberExchangeList() {
safeLaunch(
true,
block = {
_memberExchangeLiveData.value = AssociationModel.getMemberExchangeList()
}
)
}
fun operateMemberExchange(status: Int, targetUid: Long) {
safeLaunch(
true,
block = {
_operateMemberExchangeLiveData.value =
AssociationModel.operateMemberExchange(status, targetUid)
}
)
}
}

View File

@@ -4,13 +4,15 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/color_F3F5FA"
tools:context=".module_hall.hall.activity.ExchangePermissionActivity"> tools:context=".module_hall.hall.activity.ExchangePermissionActivity">
<com.yizhuan.erban.base.TitleBar <com.yizhuan.erban.base.TitleBar
android:id="@+id/title_bar" android:id="@+id/title_bar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30" android:layout_marginTop="@dimen/dp_44"
android:background="@color/color_white"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
@@ -66,4 +68,11 @@
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintTop_toBottomOf="@+id/tvExchangeable" /> app:layout_constraintTop_toBottomOf="@+id/tvExchangeable" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group"
android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="tvInconvertibility,mRecyclerViewNo,tvNoMore,tvExchangeable,mRecyclerViewEnable" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="80dp" android:layout_height="80dp"
tools:background="@color/bg_secondary_2a2a39"> android:background="@color/color_white">
<com.yizhuan.erban.common.widget.CircleImageView <com.yizhuan.erban.common.widget.CircleImageView
android:id="@+id/iv_avatar" android:id="@+id/iv_avatar"
@@ -40,7 +40,7 @@
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_user_level" android:id="@+id/iv_user_level"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="17dp"
android:layout_marginStart="@dimen/dp_4" android:layout_marginStart="@dimen/dp_4"
android:adjustViewBounds="true" android:adjustViewBounds="true"
app:layout_constraintBottom_toBottomOf="@+id/iv_gender" app:layout_constraintBottom_toBottomOf="@+id/iv_gender"
@@ -50,7 +50,7 @@
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_user_charm" android:id="@+id/iv_user_charm"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="17dp"
android:layout_marginStart="@dimen/dp_4" android:layout_marginStart="@dimen/dp_4"
android:adjustViewBounds="true" android:adjustViewBounds="true"
app:layout_constraintBottom_toBottomOf="@+id/iv_user_level" app:layout_constraintBottom_toBottomOf="@+id/iv_user_level"
@@ -111,11 +111,11 @@
app:layout_constraintStart_toEndOf="@+id/view_room_name" /> app:layout_constraintStart_toEndOf="@+id/view_room_name" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_set" android:id="@+id/tv_confirm"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="24dp" android:layout_height="24dp"
android:layout_marginEnd="@dimen/dp_12" android:layout_marginEnd="@dimen/dp_12"
android:background="@drawable/bg_common_confirm" android:background="@drawable/bg_common_confirm_15"
android:gravity="center" android:gravity="center"
android:paddingStart="@dimen/dp_8" android:paddingStart="@dimen/dp_8"
android:paddingEnd="@dimen/dp_8" android:paddingEnd="@dimen/dp_8"

View File

@@ -1,4 +1,4 @@
package com.yizhuan.xchat_android_core.association; package com.yizhuan.xchat_android_core.association.bean;
import lombok.Data; import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.yizhuan.xchat_android_core.association; package com.yizhuan.xchat_android_core.association.bean;
import lombok.Data; import lombok.Data;

View File

@@ -0,0 +1,20 @@
package com.yizhuan.xchat_android_core.association.bean
import lombok.Data
@Data
data class MemberExchangeInfo(
val avatar: String = "",
val erbanNo: Int = 0,
val exchangeAuthStatus: Int = 0,
val gender: Int = 0,
val golds: Int = 0,
val hallName: String = "",
val hallRoleType: Int = 0,
val isClanElder: Boolean = false,
val manageHall: Boolean = false,
val nick: String = "",
val roleType: Int = 0,
val uid: Long = 0L,
val userLevelVo: UserLevelInfo? = null
)

View File

@@ -0,0 +1,17 @@
package com.yizhuan.xchat_android_core.association.bean
import lombok.Data
@Data
data class UserLevelInfo(
val charmAmount: Int = 0,
val charmLevelGrp: String = "",
val charmLevelName: String = "",
val charmLevelSeq: Int = 0,
val charmUrl: String = "",
val experAmount: Int = 0,
val experLevelGrp: String = "",
val experLevelName: String = "",
val experLevelSeq: Int = 0,
val experUrl: String = ""
)

View File

@@ -0,0 +1,68 @@
package com.yizhuan.xchat_android_core.association.model
import com.yizhuan.xchat_android_core.association.bean.ClanListInfo
import com.yizhuan.xchat_android_core.association.bean.HallListInfo
import com.yizhuan.xchat_android_core.association.bean.MemberExchangeInfo
import com.yizhuan.xchat_android_core.base.BaseModel
import com.yizhuan.xchat_android_core.bean.response.ServiceResult
import com.yizhuan.xchat_android_core.utils.net.launchRequest
import com.yizhuan.xchat_android_library.net.rxnet.RxNet
import retrofit2.http.*
object AssociationModel : BaseModel() {
private val api = RxNet.create(Api::class.java)
suspend fun getClanList(): List<ClanListInfo>? =
launchRequest {
api.getClanList()
}
suspend fun getHallList(): List<HallListInfo>? =
launchRequest {
api.getHallList()
}
suspend fun getMemberExchangeList(): List<MemberExchangeInfo>? =
launchRequest {
api.getMemberExchangeList()
}
suspend fun operateMemberExchange(status: Int, targetUid: Long): String? =
launchRequest {
api.operateMemberExchange(status, targetUid)
}
private interface Api {
/**
* 获取公會周榜
*/
@GET("/clan/list")
suspend fun getClanList(): ServiceResult<List<ClanListInfo>>
/**
* 获取牌照房
*/
@GET("/hall/list")
suspend fun getHallList(): ServiceResult<List<HallListInfo>>
/**
* 获取家族下的兑换权限管理的成员列表
*/
@GET("/clan/memberExchangeAuth/list")
suspend fun getMemberExchangeList(): ServiceResult<List<MemberExchangeInfo>>
/**
* 修改兑换权限管理
*/
@FormUrlEncoded
@POST("/clan/memberExchangeAuth/operate")
suspend fun operateMemberExchange(
@Field("status") status: Int,
@Field("targetUid") targetUid: Long
): ServiceResult<String>
}
}

View File

@@ -1,40 +0,0 @@
package com.yizhuan.xchat_android_core.association
import com.yizhuan.xchat_android_core.base.BaseModel
import com.yizhuan.xchat_android_core.bean.response.ListResult
import com.yizhuan.xchat_android_core.bean.response.ServiceResult
import com.yizhuan.xchat_android_core.utils.net.launchRequest
import com.yizhuan.xchat_android_library.net.rxnet.RxNet
import retrofit2.http.GET
object AssociationModel : BaseModel() {
private val api = RxNet.create(Api::class.java)
suspend fun getClanList(): List<ClanListInfo>? =
launchRequest {
api.getClanList()
}
suspend fun getHallList(): List<HallListInfo>? =
launchRequest {
api.getHallList()
}
private interface Api {
/**
* 获取公會周榜
*/
@GET("/clan/list")
suspend fun getClanList(): ServiceResult<List<ClanListInfo>>
/**
* 获取牌照房
*/
@GET("/hall/list")
suspend fun getHallList(): ServiceResult<List<HallListInfo>>
}
}