diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index dbe826328..fda65ea7e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -502,6 +502,10 @@
android:name=".avroom.activity.RoomBlackListActivity"
android:label="黑名单"
android:screenOrientation="portrait" />
+
>()
+ val roomBgListLiveData: LiveData> = _roomBgListLiveData
+
+ fun getRoomBackgroundList(type: String) {
+ safeLaunch(
+ block = {
+ _roomBgListLiveData.value = RoomBgModel.getRoomBgList(
+ type, AvRoomDataManager.get().roomUid.toString()
+ )
+ }
+ )
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nnbc123/app/avroom/activity/RoomBgActivity.kt b/app/src/main/java/com/nnbc123/app/avroom/activity/RoomBgActivity.kt
new file mode 100644
index 000000000..dbb69d8dd
--- /dev/null
+++ b/app/src/main/java/com/nnbc123/app/avroom/activity/RoomBgActivity.kt
@@ -0,0 +1,89 @@
+package com.nnbc123.app.avroom.activity
+
+import android.content.Context
+import android.content.Intent
+import android.graphics.Color
+import android.text.SpannableString
+import android.text.Spanned
+import android.text.method.LinkMovementMethod
+import android.view.View
+import android.widget.LinearLayout
+import android.widget.TextView
+import androidx.core.content.ContextCompat
+import androidx.fragment.app.Fragment
+import com.netease.nim.uikit.StatusBarUtil
+import com.netease.nim.uikit.common.util.sys.ScreenUtil
+import com.nnbc123.app.R
+import com.nnbc123.app.adapter.CommonVPAdapter
+import com.nnbc123.app.avroom.dialog.CreatePrivilegeCardDialog
+import com.nnbc123.app.avroom.fragment.PrivilegeCardFragment
+import com.nnbc123.app.avroom.fragment.RoomBgFragment
+import com.nnbc123.app.base.BaseViewBindingActivity
+import com.nnbc123.app.common.widget.OriginalDrawStatusClickSpan
+import com.nnbc123.app.databinding.ActivityPrivilegeBinding
+import com.nnbc123.app.databinding.ActivityRoomBgBinding
+import com.nnbc123.app.home.adapter.MainMagicIndicatorAdapter
+import com.nnbc123.app.ui.webview.CommonWebViewActivity
+import com.nnbc123.app.ui.widget.magicindicator.ViewPagerHelper
+import com.nnbc123.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
+import com.nnbc123.core.UriProvider
+import com.nnbc123.library.annatation.ActLayoutRes
+
+/**
+ * @author wushaocheng
+ * @Description 特权卡
+ * @Date 2023/07/21
+ */
+@ActLayoutRes(R.layout.activity_room_bg)
+class RoomBgActivity : BaseViewBindingActivity() {
+
+ companion object {
+ @JvmStatic
+ fun start(context: Context) {
+ val starter = Intent(context, RoomBgActivity::class.java)
+ context.startActivity(starter)
+ }
+ }
+
+ override fun init() {
+ initTitleBar(getString(R.string.room_bg))
+ initViewPager()
+ }
+
+ private fun initViewPager() {
+ val fragmentList: MutableList = ArrayList(2)
+ fragmentList.add(RoomBgFragment.newInstance("0"))
+ fragmentList.add(RoomBgFragment.newInstance("1"))
+
+ val tagList: MutableList = ArrayList(2)
+ tagList.add(getString(R.string.room_bg_recommend))
+ tagList.add(getString(R.string.room_bg_exclusive))
+
+ val commonNavigator = CommonNavigator(context)
+ commonNavigator.titleMargin = ScreenUtil.dip2px(2.0f)
+ val magicIndicatorAdapter = MainMagicIndicatorAdapter(context, tagList)
+ magicIndicatorAdapter.setOnItemSelectListener { position: Int, _: TextView? ->
+ binding.viewPager.currentItem = position
+ }
+ magicIndicatorAdapter.textSize = 16
+ magicIndicatorAdapter.minScale = 0.875f
+ magicIndicatorAdapter.selectedColor = ContextCompat.getColor(this, R.color.color_2B2D33)
+ magicIndicatorAdapter.normalColor = ContextCompat.getColor(this, R.color.color_A2A7B8)
+ magicIndicatorAdapter.setResId(R.drawable.ic_home_indicator_center)
+ commonNavigator.setTitleWrapContent(true)
+ commonNavigator.adapter = magicIndicatorAdapter
+ binding.magicIndicator.navigator = commonNavigator
+ commonNavigator.titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE
+ binding.viewPager.adapter = CommonVPAdapter(supportFragmentManager, lifecycle, fragmentList)
+ ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
+ }
+
+ override fun needSteepStateBar() = true
+
+ override fun setStatusBar() {
+ super.setStatusBar()
+ StatusBarUtil.transparencyBar(this)
+ StatusBarUtil.StatusBarLightMode(this)
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nnbc123/app/avroom/activity/RoomSettingActivity.java b/app/src/main/java/com/nnbc123/app/avroom/activity/RoomSettingActivity.java
index e6a1b52af..59e488a8a 100644
--- a/app/src/main/java/com/nnbc123/app/avroom/activity/RoomSettingActivity.java
+++ b/app/src/main/java/com/nnbc123/app/avroom/activity/RoomSettingActivity.java
@@ -120,8 +120,8 @@ public class RoomSettingActivity extends BaseMvpActivity()
this.url = it.cardUrl
}
+ binding.edName.addTextChangedListener(object : TextWatcher {
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
+
+ }
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
+
+ }
+
+ override fun afterTextChanged(s: Editable?) {
+ if ((s?.length ?: 0) > 12) {
+ ToastUtils.show("最多只能输入12个字")
+ binding.edName.setText(s?.substring(0, 12))
+ }
+ }
+
+ })
+
+ binding.edExplain.addTextChangedListener(object : TextWatcher {
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
+
+ }
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
+
+ }
+
+ override fun afterTextChanged(s: Editable?) {
+ if ((s?.length ?: 0) > 20) {
+ ToastUtils.show("最多只能输入20个字")
+ binding.edExplain.setText(s?.substring(0, 20))
+ }
+ }
+
+ })
+
binding.ivPic.setOnClickListener {
ErbanTakePhotoActivity.startToSelectPhoto(context, this)
}
@@ -80,7 +121,9 @@ class CreatePrivilegeCardDialog : BaseDialog()
dismissAllowingStateLoss()
}
binding.tvConfirm.setOnClickListener {
- if (checkEmpty()) {
+ if(!isStringComma(binding.edId.text.toString())){
+ SingleToastUtil.showToast("请输入以逗号分隔的id")
+ } else if (checkEmpty()) {
SingleToastUtil.showToast("请填写完整信息")
} else {
showTip()
@@ -130,6 +173,12 @@ class CreatePrivilegeCardDialog : BaseDialog()
))
}
+ private fun isStringComma(text: CharSequence?): Boolean {
+ val pattern = Pattern.compile("^[0-9]+(,[0-9]+)*$")
+ val matcher = pattern.matcher(text)
+ return matcher.matches()
+ }
+
@SuppressLint("CheckResult")
override fun takeSuccess(result: TResult?) {
FileModel.get()
diff --git a/app/src/main/java/com/nnbc123/app/avroom/fragment/PrivilegeCardFragment.kt b/app/src/main/java/com/nnbc123/app/avroom/fragment/PrivilegeCardFragment.kt
index 7c1606b18..b0c767538 100644
--- a/app/src/main/java/com/nnbc123/app/avroom/fragment/PrivilegeCardFragment.kt
+++ b/app/src/main/java/com/nnbc123/app/avroom/fragment/PrivilegeCardFragment.kt
@@ -1,7 +1,11 @@
package com.nnbc123.app.avroom.fragment
import android.annotation.SuppressLint
+import android.graphics.Typeface
import android.os.Bundle
+import android.text.Spannable
+import android.text.SpannableStringBuilder
+import android.text.style.StyleSpan
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.nnbc123.app.R
@@ -20,6 +24,7 @@ import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
+
/**
* @author wushaocheng
* @Description 特权卡
@@ -80,33 +85,41 @@ class PrivilegeCardFragment : BaseViewBindingFragment
when (view.id) {
R.id.ivDelete -> {
- mAdapter.getItem(position)?.id?.let { showDeleteDialog(it) }
+ mAdapter.getItem(position)?.let { showDeleteDialog(it.id, it.cardName) }
}
R.id.tvCause -> {
mAdapter.getItem(position)?.checkReason?.let { showFailureDialog(it) }
}
R.id.tvEdit -> {
- mAdapter.getItem(position)?.let { CreatePrivilegeCardDialog.newInstance(it).show(context) }
+ mAdapter.getItem(position)
+ ?.let { CreatePrivilegeCardDialog.newInstance(it).show(context) }
}
}
}
}
- private fun showDeleteDialog(id: Int) {
- if (deleteTipDialog == null) {
- deleteTipDialog = CommonTipDialog(context)
- deleteTipDialog?.setTipMsg("确认将【女神卡】删除吗")
- deleteTipDialog?.setOnActionListener(object : CommonTipDialog.OnActionListener {
- override fun onOk() {
- privilegeViewModel?.deletePrivilegeCard(id)
- deleteTipDialog?.dismiss()
- }
+ private fun showDeleteDialog(id: Int, cardName: String) {
+ val title = "确认将【${cardName}】删除吗"
+ val spannableStringBuilder = SpannableStringBuilder(title)
+ val styleSpan = StyleSpan(Typeface.BOLD) //粗体
+ spannableStringBuilder.setSpan(
+ styleSpan,
+ 3,
+ title.length - 3,
+ Spannable.SPAN_EXCLUSIVE_INCLUSIVE
+ )
+ deleteTipDialog = CommonTipDialog(context)
+ deleteTipDialog?.setTipMsg(spannableStringBuilder.toString())
+ deleteTipDialog?.setOnActionListener(object : CommonTipDialog.OnActionListener {
+ override fun onOk() {
+ privilegeViewModel?.deletePrivilegeCard(id)
+ deleteTipDialog?.dismiss()
+ }
- override fun onCancel() {
- deleteTipDialog?.dismiss()
- }
- })
- }
+ override fun onCancel() {
+ deleteTipDialog?.dismiss()
+ }
+ })
if (deleteTipDialog?.isShowing == true) {
deleteTipDialog?.dismiss()
}
@@ -114,18 +127,16 @@ class PrivilegeCardFragment : BaseViewBindingFragment() {
+
+ private var type = ""
+
+ private val roomBgViewModel: RoomBgViewModel by viewModels()
+
+ companion object {
+ private const val TYPE = "type"
+ fun newInstance(type: String): RoomBgFragment {
+ val args = Bundle()
+ args.putString(TYPE, type)
+ val fragment = RoomBgFragment()
+ fragment.arguments = args
+ return fragment
+ }
+ }
+
+ override fun init() {
+ type = arguments?.getString(TYPE, "").toString()
+
+ roomBgViewModel.roomBgListLiveData.observe(this) {
+
+ }
+ }
+
+ override fun onLazyLoad() {
+ super.onLazyLoad()
+ roomBgViewModel.getRoomBackgroundList(type)
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nnbc123/app/ui/widget/GiftDialog.java b/app/src/main/java/com/nnbc123/app/ui/widget/GiftDialog.java
index 9b2afb852..89af91795 100644
--- a/app/src/main/java/com/nnbc123/app/ui/widget/GiftDialog.java
+++ b/app/src/main/java/com/nnbc123/app/ui/widget/GiftDialog.java
@@ -434,7 +434,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_SING_ROOM, "人气", "人气"));
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_DRAW_GIFT, "涂鸦礼物", "涂鸦礼物"));
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_PENALTY, "惩罚礼物", "惩罚礼物"));
- tabInfoList.add(new GiftTab(GiftIndicator.TYPE_PRIVILEGE, "特权卡", "特权卡"));
+ if(AvRoomDataManager.get().isHasRoomPrivilegeCard()) {
+ tabInfoList.add(new GiftTab(GiftIndicator.TYPE_PRIVILEGE, "特权卡", "特权卡"));
+ }
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_KNAP, "背包", "背包"));
giftIndicator = findViewById(R.id.gift_indicator);
giftIndicator.initTab(
@@ -1458,6 +1460,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
giftIndicator.showPosition(GiftIndicator.TYPE_NOBLE);
giftIndicator.showPosition(GiftIndicator.TYPE_WEEK);
giftIndicator.showPosition(GiftIndicator.TYPE_NORMAL);
+ giftIndicator.showPosition(GiftIndicator.TYPE_PRIVILEGE);
if (AvRoomDataManager.get().isSingleRoom()) {
giftIndicator.showPosition(GiftIndicator.TYPE_SING_ROOM);
} else {
diff --git a/app/src/main/res/drawable-xhdpi/bg_pk.png b/app/src/main/res/drawable-xhdpi/bg_pk.png
new file mode 100644
index 000000000..da6bf3aaf
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/bg_pk.png differ
diff --git a/app/src/main/res/layout/activity_room_bg.xml b/app/src/main/res/layout/activity_room_bg.xml
new file mode 100644
index 000000000..6ff2e333e
--- /dev/null
+++ b/app/src/main/res/layout/activity_room_bg.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_room_setting.xml b/app/src/main/res/layout/activity_room_setting.xml
index 5d324263e..f7d8832b6 100644
--- a/app/src/main/res/layout/activity_room_setting.xml
+++ b/app/src/main/res/layout/activity_room_setting.xml
@@ -231,6 +231,38 @@
android:layout_height="@dimen/dp_10"
android:background="@color/line_353548" />
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
@@ -150,6 +151,7 @@
android:textColorHint="@color/color_CED1DB"
android:textCursorDrawable="@null"
android:textSize="@dimen/sp_13"
+ android:maxLength="4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv4"
app:layout_constraintTop_toBottomOf="@+id/view3" />
@@ -184,6 +186,7 @@
android:background="@null"
android:gravity="end"
android:hint="@string/dialog_privilege_10"
+ android:inputType="number"
android:textColor="@color/color_696D7A"
android:textColorHint="@color/color_CED1DB"
android:textCursorDrawable="@null"
diff --git a/app/src/main/res/layout/fragment_room_bg.xml b/app/src/main/res/layout/fragment_room_bg.xml
new file mode 100644
index 000000000..5ed2dc827
--- /dev/null
+++ b/app/src/main/res/layout/fragment_room_bg.xml
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_party_hot.xml b/app/src/main/res/layout/item_party_hot.xml
index e050c5d03..4cb8ddfe3 100644
--- a/app/src/main/res/layout/item_party_hot.xml
+++ b/app/src/main/res/layout/item_party_hot.xml
@@ -21,23 +21,6 @@
app:layout_constraintTop_toTopOf="parent"
app:riv_corner_radius="@dimen/dp_16" />
-
-
+
+
图片比例:16:9
取消
确认
+ 房间背景
+ 推荐
+ 专属
diff --git a/core/src/diff_src_erban/java/com/nnbc123/core/roombg/bean/RoomBgInfo.kt b/core/src/diff_src_erban/java/com/nnbc123/core/roombg/bean/RoomBgInfo.kt
new file mode 100644
index 000000000..516c292fc
--- /dev/null
+++ b/core/src/diff_src_erban/java/com/nnbc123/core/roombg/bean/RoomBgInfo.kt
@@ -0,0 +1,15 @@
+package com.nnbc123.core.roombg.bean
+
+data class RoomBgInfo(
+ val erbanNoStr: String = "",
+ val id: Int = 0,
+ val isDefault: Int = 0,
+ val isUsed: Int = 0,
+ val name: String = "",
+ val picUrl: String = "",
+ val roomUid: Int = 0,
+ val roomUidStr: String = "",
+ val seq: Int = 0,
+ val type: Int = 0,
+ val viewUrl: String = ""
+)
\ No newline at end of file
diff --git a/core/src/diff_src_erban/java/com/nnbc123/core/roombg/model/RoomBgModel.kt b/core/src/diff_src_erban/java/com/nnbc123/core/roombg/model/RoomBgModel.kt
new file mode 100644
index 000000000..0cc6d8dae
--- /dev/null
+++ b/core/src/diff_src_erban/java/com/nnbc123/core/roombg/model/RoomBgModel.kt
@@ -0,0 +1,38 @@
+package com.nnbc123.core.roombg.model
+
+import com.nnbc123.core.base.BaseModel
+import com.nnbc123.core.bean.response.ServiceResult
+import com.nnbc123.core.home.bean.*
+import com.nnbc123.core.privilege.bean.PrivilegeCardInfo
+import com.nnbc123.core.roombg.bean.RoomBgInfo
+import com.nnbc123.core.utils.net.launchRequest
+import com.nnbc123.library.net.rxnet.RxNet
+import retrofit2.http.GET
+import retrofit2.http.POST
+import retrofit2.http.Query
+
+object RoomBgModel : BaseModel() {
+
+ private val api = RxNet.create(Api::class.java)
+
+ suspend fun getRoomBgList(type: String, roomUid: String): List? =
+ launchRequest {
+ api.getRoomBgList(type, roomUid)
+ }
+
+ private interface Api {
+
+ /**
+ * 房间背景列表
+ *
+ * @return
+ */
+ @GET("/room/background/list")
+ suspend fun getRoomBgList(
+ @Query("type") type: String,
+ @Query("roomUid") roomUid: String
+ ): ServiceResult>
+
+ }
+
+}
\ No newline at end of file