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