From 8f171d3214f8ac06ec5f19e0b5c84f37d4f24093 Mon Sep 17 00:00:00 2001
From: renhaoting <370797079@qq.com>
Date: Wed, 5 Nov 2025 17:24:02 +0800
Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E8=83=8C=E6=99=AF?=
=?UTF-8?q?=E4=B8=8A=E4=BC=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
VisualNovel/app/src/main/AndroidManifest.xml | 4 ++
.../visualnovel/api/service/ChatService.kt | 4 +-
.../visualnovel/entity/response/ActorBean.kt | 30 ++++-----
.../entity/response/ChatBackground.kt | 26 +++++---
.../entity/response/ChatBackgroundBase.kt | 9 ---
.../entity/response/ChatBackgroundUpload.kt | 10 ---
.../chat/setting/customui/ChatSettingView.kt | 27 ++++----
.../ExpandBackgroundSubView.kt | 61 +++++++++++--------
.../ui/main/actor/ActorListFragment.kt | 39 ++++++++----
.../imageviewer/viewer/MyImageLoader.kt | 4 +-
.../layout/layout_item_setting_background.xml | 33 +++++-----
11 files changed, 132 insertions(+), 115 deletions(-)
delete mode 100644 VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackgroundBase.kt
delete mode 100644 VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackgroundUpload.kt
diff --git a/VisualNovel/app/src/main/AndroidManifest.xml b/VisualNovel/app/src/main/AndroidManifest.xml
index 06caa87..a882637 100644
--- a/VisualNovel/app/src/main/AndroidManifest.xml
+++ b/VisualNovel/app/src/main/AndroidManifest.xml
@@ -55,6 +55,10 @@
+
+
>
+ suspend fun getChatBackgroundList(@Body request: AIIDRequest): Response>
/**
* 获取聊天设置
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ActorBean.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ActorBean.kt
index d840c12..b6d7f59 100644
--- a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ActorBean.kt
+++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ActorBean.kt
@@ -2,23 +2,23 @@ package com.remax.visualnovel.entity.response
data class ActorBean(
- val id: Int,
- val roleName: String,
- val description: String,
+ val id: Int = 0,
+ val roleName: String = "",
+ val description: String = "",
var coverImage: String = "",
- val sourceId: Int, //来源ID;所属书籍/漫剧
- val sourceType: Int, //来源分类
- val commonCount: Int, //评论数
- val createTime: String,
- val status: String,
+ val sourceId: Int = 0, //来源ID;所属书籍/漫剧
+ val sourceType: Int = 0, //来源分类
+ val commonCount: Int = 0, //评论数
+ val createTime: String = "",
+ val status: String = "",
// other needed
- val avatarRes: Int,
+ val avatarRes: Int = 0,
val from: String = "from",
- val rating: Float,
- val characterName: String,
- val age: Int,
- val tags: List,
- val workTitle: String,
- val imageRes: Int
+ val rating: Float = 0F,
+ val characterName: String = "",
+ val age: Int = 0,
+ val tags: List = emptyList(),
+ val workTitle: String = "",
+ val imageRes: Int = 0
)
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackground.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackground.kt
index 941ef14..f66198f 100644
--- a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackground.kt
+++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackground.kt
@@ -1,15 +1,23 @@
package com.remax.visualnovel.entity.response
import android.net.Uri
-import com.remax.visualnovel.entity.model.base.BasePhoto
-data class ChatBackground(
- var imageId: Long? = 0L,
- var imageUrl: String? = "",
+sealed class ChatBackgroundBase(val itemType: Int) {
+ data class ChatBackground(
+ var imageId: Long? = 0L,
+ var imageUrl: String? = "",
+
+ var localUri: Uri? = null,
+ var isDefault: Boolean = false,
+ var isSelected: Boolean = false,
+ var isCustomBg: Boolean = false,
+ ) : ChatBackgroundBase(ITEM_TYPE_BACKGROUND)
+
+ object ChatBackgroundUpload : ChatBackgroundBase(ITEM_TYPE_UPLOAD)
+}
+
+const val ITEM_TYPE_BACKGROUND = 1
+const val ITEM_TYPE_UPLOAD = 2
+
- var localUri: Uri? = null,
- var isDefault: Boolean = false,
- var isSelected: Boolean = false,
- var isCustomBg: Boolean = false,
-) : ChatBackgroundBase()
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackgroundBase.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackgroundBase.kt
deleted file mode 100644
index d35843f..0000000
--- a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackgroundBase.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.remax.visualnovel.entity.response
-
-import android.net.Uri
-import com.remax.visualnovel.entity.model.base.BasePhoto
-
-
-abstract class ChatBackgroundBase(
-
-)
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackgroundUpload.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackgroundUpload.kt
deleted file mode 100644
index 000a70e..0000000
--- a/VisualNovel/app/src/main/java/com/remax/visualnovel/entity/response/ChatBackgroundUpload.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.remax.visualnovel.entity.response
-
-import android.net.Uri
-
-
-data class ChatBackgroundUpload(
- var imageId: Long? = 0L,
- var imageUrl: String? = "",
- var localUri: Uri? = null,
-) : ChatBackgroundBase()
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/setting/customui/ChatSettingView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/setting/customui/ChatSettingView.kt
index 4d564f9..2d351de 100644
--- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/setting/customui/ChatSettingView.kt
+++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/setting/customui/ChatSettingView.kt
@@ -10,8 +10,7 @@ import android.widget.LinearLayout
import androidx.core.graphics.toColorInt
import com.remax.visualnovel.R
import com.remax.visualnovel.databinding.LayoutChatMenuViewBinding
-import com.remax.visualnovel.entity.response.ChatBackground
-import com.remax.visualnovel.entity.response.ChatBackgroundUpload
+import com.remax.visualnovel.entity.response.ChatBackgroundBase
import com.remax.visualnovel.entity.response.ChatBubble
import com.remax.visualnovel.entity.response.ChatHistory
import com.remax.visualnovel.entity.response.ChatMode
@@ -291,31 +290,29 @@ class ChatSettingView @JvmOverloads constructor(
fun initBackgroundSelectView() {
val items = listOf(
- ChatBackground(
+ ChatBackgroundBase.ChatBackground(
imageId = 1,
imageUrl = "https://vsn.s3.cn-north-1.amazonaws.com.cn/coverImage/fe8e3c7b-5b22-40f4-bacc-0183888c5149_test.png"
),
- ChatBackground(
- imageId = 1,
- imageUrl = "https://cdhrss.chengdu.gov.cn/cdrsj/xhtml/images/2022_logo.png"
- ),
- ChatBackground(
+ ChatBackgroundBase.ChatBackground(
imageId = 1,
imageUrl = "https://vsn.s3.cn-north-1.amazonaws.com.cn/coverImage/fe8e3c7b-5b22-40f4-bacc-0183888c5149_test.png"
),
- ChatBackground(
- imageId = 1,
- imageUrl = "https://cdhrss.chengdu.gov.cn/cdrsj/xhtml/images/2022_logo.png"
- ),
- ChatBackground(
+ ChatBackgroundBase.ChatBackground(
imageId = 1,
imageUrl = "https://vsn.s3.cn-north-1.amazonaws.com.cn/coverImage/fe8e3c7b-5b22-40f4-bacc-0183888c5149_test.png"
),
- ChatBackground(
+ ChatBackgroundBase.ChatBackground(
imageId = 1,
imageUrl = "https://cdhrss.chengdu.gov.cn/cdrsj/xhtml/images/2022_logo.png"
),
- ChatBackgroundUpload(
+ ChatBackgroundBase.ChatBackground(
+ imageId = 1,
+ imageUrl = "https://vsn.s3.cn-north-1.amazonaws.com.cn/coverImage/fe8e3c7b-5b22-40f4-bacc-0183888c5149_test.png"
+ ),
+ ChatBackgroundBase.ChatBackground(
+ imageId = 1,
+ imageUrl = "https://cdhrss.chengdu.gov.cn/cdrsj/xhtml/images/2022_logo.png"
)
)
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/setting/customui/expandableSelector/ExpandBackgroundSubView.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/setting/customui/expandableSelector/ExpandBackgroundSubView.kt
index 46bc90c..9ae4694 100644
--- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/setting/customui/expandableSelector/ExpandBackgroundSubView.kt
+++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/chat/setting/customui/expandableSelector/ExpandBackgroundSubView.kt
@@ -17,9 +17,7 @@ import com.drake.brv.utils.setup
import com.remax.visualnovel.R
import com.remax.visualnovel.databinding.LayoutItemSettingBackgroundBinding
import com.remax.visualnovel.databinding.LayoutSettingBgSubViewBinding
-import com.remax.visualnovel.entity.response.ChatBackground
import com.remax.visualnovel.entity.response.ChatBackgroundBase
-import com.remax.visualnovel.entity.response.ChatBackgroundUpload
import com.remax.visualnovel.extension.glide.load
import com.remax.visualnovel.extension.toast
import com.remax.visualnovel.utils.imagepick.EpalPickerPresenter
@@ -39,7 +37,7 @@ class ExpandBackgroundSubView @JvmOverloads constructor(
defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
- private lateinit var items: List
+ private var items = mutableListOf()
private var mBinding: LayoutSettingBgSubViewBinding
@@ -57,41 +55,47 @@ class ExpandBackgroundSubView @JvmOverloads constructor(
setDivider(10, true)
orientation = DividerOrientation.VERTICAL
}.setup {
- addType(R.layout.layout_item_setting_background)
- addType(R.layout.layout_item_setting_background_upload)
+ addType(R.layout.layout_item_setting_background)
+ addType(R.layout.layout_item_setting_background_upload)
onClick(R.id.root) {
- when (val item = getModel(it)) {
- is ChatBackground -> {
- val chatBackground = getModel()
+ /*when (val item = getModel(it)) {
+ is ChatBackgroundBase.ChatBackground -> {
+ val chatBackground = getModel()
if (!chatBackground.isSelected) {
- itemsRv.bindingAdapter.models?.filterIsInstance()?.forEach { item ->
+ itemsRv.bindingAdapter.models?.filterIsInstance()?.forEach { item ->
item.isSelected = item == chatBackground
}
itemsRv.bindingAdapter.notifyDataSetChanged()
}
}
- is ChatBackgroundUpload -> {
+ is ChatBackgroundBase.ChatBackgroundUpload -> {
selectCustomBg()
}
- }
+ }*/
- /*when (itemViewType) {
+ when (itemViewType) {
R.layout.layout_item_setting_background -> {
-
+ val chatBackground = getModel()
+ if (!chatBackground.isSelected) {
+ itemsRv.bindingAdapter.models?.filterIsInstance()?.forEach { item ->
+ item.isSelected = item == chatBackground
+ }
+ itemsRv.bindingAdapter.notifyDataSetChanged()
+ }
}
R.layout.layout_item_setting_background_upload -> {
selectCustomBg()
}
- }*/
+ }
}
onBind {
when (itemViewType) {
R.layout.layout_item_setting_background -> {
- val item = getModel()
+ val item = getModel()
with(getBinding()) {
if (!item.imageUrl.isNullOrEmpty()) {
ivBackgroundSrc.load(item.imageUrl)
@@ -99,13 +103,13 @@ class ExpandBackgroundSubView @JvmOverloads constructor(
ivBackgroundSrc.load(item.localUri!!)
}
- ivDel.visibility = if (item.isCustomBg) VISIBLE else GONE
- ivBackgroundSrc.isVisible = item.isSelected
+ ivDel.isVisible = item.isCustomBg
+ selectBg.isVisible = item.isSelected
}
}
R.layout.layout_item_setting_background_upload -> {
- val item = getModel()
+ val item = getModel()
}
}
}
@@ -113,7 +117,9 @@ class ExpandBackgroundSubView @JvmOverloads constructor(
}
fun setItems(newItems: List) {
- items = newItems
+ items.clear()
+ items.addAll(newItems)
+ items.add(ChatBackgroundBase.ChatBackgroundUpload)
mBinding.itemsRv.models = items
}
@@ -141,15 +147,22 @@ class ExpandBackgroundSubView @JvmOverloads constructor(
})
}
- private fun appendCustomBg(items: ArrayList?) {
- val customBgList = items?.map { imageItem ->
- ChatBackground(
+ private fun appendCustomBg(uploadedItems: ArrayList?) {
+ val customBgList = uploadedItems?.map { imageItem ->
+ ChatBackgroundBase.ChatBackground(
imageId = imageItem.id,
imageUrl = imageItem.path,
- localUri = imageItem.uri
+ localUri = imageItem.uri,
+ isCustomBg = true
)
}
- mBinding.itemsRv.addModels(customBgList)
+
+ if (!customBgList.isNullOrEmpty()) {
+ items.add(if (items.isNotEmpty()) items.size - 1 else 0, customBgList!!.get(0))
+ mBinding.itemsRv.models = items
+ }
+
+ //items.add((items.size - 1).takeIf { items.isNotEmpty() } ?: 0, customBgList!!.first())
}
private fun uploadImageAndRequest(items: ArrayList?) {
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorListFragment.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorListFragment.kt
index 36b6866..e2687ca 100644
--- a/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorListFragment.kt
+++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/ui/main/actor/ActorListFragment.kt
@@ -28,7 +28,7 @@ import kotlin.math.max
@Route(path = Routers.ROUTE_FRAG_ACTORLIST)
class ActorListFragment : BaseBindingFragment() {
- private lateinit var mActorAdapter: ActorsAdapter
+ private lateinit var mRvAdapter: ActorsAdapter
private val mActorsModel by viewModels()
private var mLoadedPageIndex = 0
private val mRequestParam by lazy { ParamActorList() }
@@ -67,11 +67,10 @@ class ActorListFragment : BaseBindingFragment() {
mActorsRv.setHasFixedSize(true)
mActorsRv.itemAnimator = DefaultItemAnimator()
- mActorAdapter = ActorsAdapter()
- mActorsRv.adapter = mActorAdapter
- val characterList = createSampleData()
- with(mActorAdapter) {
- setList(characterList)
+ mRvAdapter = ActorsAdapter()
+ mActorsRv.adapter = mRvAdapter
+
+ with(mRvAdapter) {
loadMoreModule.setOnLoadMoreListener {
getActorList(false, showLoading = false)
}
@@ -116,20 +115,20 @@ class ActorListFragment : BaseBindingFragment() {
mActorsModel.getActorList(mRequestParam)
}, showLoading = showLoading) {
onSuccess = {
- val data = it ?: emptyList()
- with(mActorAdapter) {
+ var datas = it ?: emptyList()
+ with(mRvAdapter) {
if (isRefresh) {
- setList(data)
+ setList(datas)
setMyEmptyView(R.string.no_character_yet, topMargin = 60)
} else {
- addData(data)
+ addData(datas)
loadMoreModule.loadMoreComplete()
}
- if (data.size < mRequestParam.limit) {
+ if (datas.size < mRequestParam.limit) {
loadMoreModule.loadMoreEnd()
}
}
- if (data.isNotEmpty()) {
+ if (datas.isNotEmpty()) {
mLoadedPageIndex++
}
}
@@ -139,6 +138,13 @@ class ActorListFragment : BaseBindingFragment() {
binding.refreshLayout.finishRefresh()
}
}
+
+ onFailed = { code, msg ->
+ // TODO - remove temp datas
+ with(mRvAdapter) {
+ setList(createSampleData())
+ }
+ }
}
}
@@ -160,7 +166,14 @@ class ActorListFragment : BaseBindingFragment() {
private fun createSampleData(): List {
- return listOf()
+ return listOf(
+ ActorBean(characterName = "testName-1", description = "Des-xxxxxxxxxxxxx"),
+ ActorBean(characterName = "testName-1", description = "Des-xxxxxxxxxxxxx"),
+ ActorBean(characterName = "testName-1", description = "Des-xxxxxxxxxxxxx"),
+ ActorBean(characterName = "testName-1", description = "Des-xxxxxxxxxxxxx"),
+ ActorBean(characterName = "testName-1", description = "Des-xxxxxxxxxxxxx"),
+ ActorBean(characterName = "testName-1", description = "Des-xxxxxxxxxxxxx"),
+ )
}
diff --git a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/imageviewer/viewer/MyImageLoader.kt b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/imageviewer/viewer/MyImageLoader.kt
index 8b697c7..8b63e31 100644
--- a/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/imageviewer/viewer/MyImageLoader.kt
+++ b/VisualNovel/app/src/main/java/com/remax/visualnovel/widget/imageviewer/viewer/MyImageLoader.kt
@@ -24,7 +24,7 @@ import com.remax.visualnovel.entity.imbean.raw.CustomAlbumData
import com.remax.visualnovel.entity.model.MyImgData
import com.remax.visualnovel.entity.response.Album
import com.remax.visualnovel.entity.response.AppearanceImage
-import com.remax.visualnovel.entity.response.ChatBackground
+import com.remax.visualnovel.entity.response.ChatBackgroundBase
import com.remax.visualnovel.extension.setOnClick
import com.remax.visualnovel.widget.dialoglib.ScreenUtils
import com.remax.visualnovel.widget.imageviewer.core.ImageLoader
@@ -50,7 +50,7 @@ class MyImageLoader : ImageLoader {
data.imageUrl
}
- is ChatBackground -> {
+ is ChatBackgroundBase.ChatBackground -> {
data.imageUrl
}
diff --git a/VisualNovel/app/src/main/res/layout/layout_item_setting_background.xml b/VisualNovel/app/src/main/res/layout/layout_item_setting_background.xml
index a50fd2e..4e8563e 100644
--- a/VisualNovel/app/src/main/res/layout/layout_item_setting_background.xml
+++ b/VisualNovel/app/src/main/res/layout/layout_item_setting_background.xml
@@ -9,28 +9,36 @@
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ app:advBgColor="@color/transparent"
+ app:advRadius="@dimen/dp_10">
+
+
-
+
\ No newline at end of file