Merge pull request #52 from Kevinlinpr/feat/pr-20251104-154907

添加深色模式缺省图
This commit is contained in:
2025-11-05 22:25:09 +08:00
committed by GitHub
71 changed files with 424 additions and 86 deletions

View File

@@ -4,10 +4,10 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2025-09-17T06:25:35.585100400Z">
<DropdownSelection timestamp="2025-11-05T12:24:27.034893100Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="Default" identifier="serial=192.168.0.216:5555;connection=698a7727" />
<DeviceId pluginId="PhysicalDevice" identifier="serial=c328a150" />
</handle>
</Target>
</DropdownSelection>

View File

@@ -71,4 +71,29 @@ object AppStore {
AppState.chatBackgroundUrl = url
}
// ===================== 用户本地扩展信息 =====================
// 后端暂未提供 MBTI 与星座字段,使用本地持久化按用户维度进行存储
private fun mbtiKey(userId: Int) = "mbti_user_$userId"
private fun zodiacKey(userId: Int) = "zodiac_user_$userId"
fun getUserMbti(userId: Int): String? {
return sharedPreferences.getString(mbtiKey(userId), null)
}
fun setUserMbti(userId: Int, mbti: String?) {
sharedPreferences.edit().apply {
if (mbti.isNullOrEmpty()) remove(mbtiKey(userId)) else putString(mbtiKey(userId), mbti)
}.apply()
}
fun getUserZodiac(userId: Int): String? {
return sharedPreferences.getString(zodiacKey(userId), null)
}
fun setUserZodiac(userId: Int, zodiac: String?) {
sharedPreferences.edit().apply {
if (zodiac.isNullOrEmpty()) remove(zodiacKey(userId)) else putString(zodiacKey(userId), zodiac)
}.apply()
}
}

View File

@@ -35,8 +35,10 @@ import com.aiosman.ravenow.LocalSharedTransitionScope
import com.aiosman.ravenow.ui.about.AboutScreen
import com.aiosman.ravenow.ui.account.AccountEditScreen2
import com.aiosman.ravenow.ui.account.AccountSetting
import com.aiosman.ravenow.ui.account.MbtiSelectScreen
import com.aiosman.ravenow.ui.account.RemoveAccountScreen
import com.aiosman.ravenow.ui.account.ResetPasswordScreen
import com.aiosman.ravenow.ui.account.ZodiacSelectScreen
import com.aiosman.ravenow.ui.agent.AddAgentScreen
import com.aiosman.ravenow.ui.agent.AgentImageCropScreen
import com.aiosman.ravenow.ui.group.CreateGroupChatScreen
@@ -120,6 +122,8 @@ sealed class NavigationRoute(
data object VipSelPage : NavigationRoute("VipSelPage")
data object RemoveAccountScreen: NavigationRoute("RemoveAccount")
data object NotificationScreen : NavigationRoute("NotificationScreen")
data object MbtiSelect : NavigationRoute("MbtiSelect")
data object ZodiacSelect : NavigationRoute("ZodiacSelect")
}
@@ -421,6 +425,12 @@ fun NavigationController(
composable(route = NavigationRoute.RemoveAccountScreen.route) {
RemoveAccountScreen()
}
composable(route = NavigationRoute.MbtiSelect.route) {
MbtiSelectScreen()
}
composable(route = NavigationRoute.ZodiacSelect.route) {
ZodiacSelectScreen()
}
composable(route = NavigationRoute.VipSelPage.route) {
VipSelPage()
}

View File

@@ -26,6 +26,9 @@ object AccountEditViewModel : ViewModel() {
var croppedBitmap by mutableStateOf<Bitmap?>(null)
var isUpdating by mutableStateOf(false)
var isLoading by mutableStateOf(false)
// 本地扩展字段
var mbti by mutableStateOf<String?>(null)
var zodiac by mutableStateOf<String?>(null)
suspend fun reloadProfile(updateTrtcProfile:Boolean = false) {
Log.d("AccountEditViewModel", "reloadProfile: 开始加载用户资料")
isLoading = true
@@ -38,6 +41,12 @@ object AccountEditViewModel : ViewModel() {
bio = it.bio
// 清除之前裁剪的图片
croppedBitmap = null
// 读取本地扩展字段
try {
val uid = it.id // 使用 profile 的 id确保非空
mbti = com.aiosman.ravenow.AppStore.getUserMbti(uid)
zodiac = com.aiosman.ravenow.AppStore.getUserZodiac(uid)
} catch (_: Exception) { }
if (updateTrtcProfile) {
TrtcHelper.updateTrtcProfile(
it.nickName,
@@ -84,6 +93,13 @@ object AccountEditViewModel : ViewModel() {
nickName = newName,
bio = cleanBio
)
// 保存本地扩展字段
try {
profile?.id?.let { uid ->
com.aiosman.ravenow.AppStore.setUserMbti(uid, mbti)
com.aiosman.ravenow.AppStore.setUserZodiac(uid, zodiac)
}
} catch (_: Exception) { }
// 刷新用户资料
reloadProfile()
// 刷新个人资料页面的用户资料

View File

@@ -0,0 +1,136 @@
package com.aiosman.ravenow.ui.account
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check
import com.aiosman.ravenow.LocalAppTheme
import com.aiosman.ravenow.LocalNavController
import com.aiosman.ravenow.R
import com.aiosman.ravenow.ui.comment.NoticeScreenHeader
// MBTI类型列表
val MBTI_TYPES = listOf(
"INTJ", "INTP", "ENTJ", "ENTP",
"INFJ", "INFP", "ENFJ", "ENFP",
"ISTJ", "ISFJ", "ESTJ", "ESFJ",
"ISTP", "ISFP", "ESTP", "ESFP"
)
@Composable
fun MbtiSelectScreen() {
val navController = LocalNavController.current
val appColors = LocalAppTheme.current
val model = AccountEditViewModel
val currentMbti = model.mbti
Column(
modifier = Modifier
.fillMaxSize()
.background(appColors.profileBackground)
) {
// 头部
Box(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 16.dp)
) {
NoticeScreenHeader(
title = stringResource(R.string.choose_mbti),
moreIcon = false
)
}
// 列表
LazyColumn(
modifier = Modifier.fillMaxSize(),
contentPadding = androidx.compose.foundation.layout.PaddingValues(horizontal = 16.dp, vertical = 8.dp)
) {
items(MBTI_TYPES) { mbti ->
MBTIItem(
mbti = mbti,
isSelected = mbti == currentMbti,
onClick = {
model.mbti = mbti
navController.navigateUp()
}
)
Spacer(modifier = Modifier.height(8.dp))
}
}
}
}
@Composable
fun MBTIItem(
mbti: String,
isSelected: Boolean,
onClick: () -> Unit
) {
val appColors = LocalAppTheme.current
Box(
modifier = Modifier
.fillMaxWidth()
.clip(RoundedCornerShape(16.dp))
.background(if (isSelected) appColors.main.copy(alpha = 0.1f) else Color.White)
.clickable(
indication = null,
interactionSource = remember { MutableInteractionSource() }
) {
onClick()
}
.padding(16.dp)
) {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = mbti,
fontSize = 17.sp,
fontWeight = FontWeight.Normal,
color = if (isSelected) appColors.main else appColors.text,
modifier = Modifier.weight(1f)
)
if (isSelected) {
Icon(
imageVector = Icons.Default.Check,
contentDescription = "Selected",
modifier = Modifier.size(20.dp),
tint = appColors.main
)
}
}
}
}

View File

@@ -0,0 +1,132 @@
package com.aiosman.ravenow.ui.account
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check
import com.aiosman.ravenow.LocalAppTheme
import com.aiosman.ravenow.LocalNavController
import com.aiosman.ravenow.R
import com.aiosman.ravenow.ui.comment.NoticeScreenHeader
// 星座列表
val ZODIAC_SIGNS = listOf(
"白羊座", "金牛座", "双子座", "巨蟹座",
"狮子座", "处女座", "天秤座", "天蝎座",
"射手座", "摩羯座", "水瓶座", "双鱼座"
)
@Composable
fun ZodiacSelectScreen() {
val navController = LocalNavController.current
val appColors = LocalAppTheme.current
val model = AccountEditViewModel
val currentZodiac = model.zodiac
Column(
modifier = Modifier
.fillMaxSize()
.background(appColors.profileBackground)
) {
// 头部
Box(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 16.dp)
) {
NoticeScreenHeader(
title = stringResource(R.string.choose_zodiac),
moreIcon = false
)
}
// 列表
LazyColumn(
modifier = Modifier.fillMaxSize(),
contentPadding = androidx.compose.foundation.layout.PaddingValues(horizontal = 16.dp, vertical = 8.dp)
) {
items(ZODIAC_SIGNS) { zodiac ->
ZodiacItem(
zodiac = zodiac,
isSelected = zodiac == currentZodiac,
onClick = {
model.zodiac = zodiac
navController.navigateUp()
}
)
Spacer(modifier = Modifier.height(8.dp))
}
}
}
}
@Composable
fun ZodiacItem(
zodiac: String,
isSelected: Boolean,
onClick: () -> Unit
) {
val appColors = LocalAppTheme.current
Box(
modifier = Modifier
.fillMaxWidth()
.clip(RoundedCornerShape(16.dp))
.background(if (isSelected) appColors.main.copy(alpha = 0.1f) else Color.White)
.clickable(
indication = null,
interactionSource = remember { MutableInteractionSource() }
) {
onClick()
}
.padding(16.dp)
) {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = zodiac,
fontSize = 17.sp,
fontWeight = FontWeight.Normal,
color = if (isSelected) appColors.main else appColors.text,
modifier = Modifier.weight(1f)
)
if (isSelected) {
Icon(
imageVector = Icons.Default.Check,
contentDescription = "Selected",
modifier = Modifier.size(20.dp),
tint = appColors.main
)
}
}
}
}

View File

@@ -125,12 +125,13 @@ fun CommentNoticeScreen() {
) {
androidx.compose.foundation.Image(
painter = painterResource(
id =if(AppState.darkMode) R.mipmap.qst_pl_qs_as_img
id = if(AppState.darkMode) R.mipmap.tietie_dark
else R.mipmap.invalid_name_11),
contentDescription = "No Comment",
modifier = Modifier.size(181.dp)
modifier = Modifier
.size(width = 181.dp, height = 153.dp)
)
Spacer(modifier = Modifier.size(24.dp))
Spacer(modifier = Modifier.height(24.dp))
Text(
text = "等一位旅人~",
color = AppColors.text,

View File

@@ -137,9 +137,9 @@ fun FavouriteListPage() {
id = if (com.aiosman.ravenow.AppState.darkMode) R.mipmap.invalid_dark
else R.mipmap.invalid_name_1),
contentDescription = "No favourites",
modifier = Modifier.size(110.dp)
modifier = Modifier.size(181.dp, 153.dp)
)
Spacer(modifier = Modifier.size(24.dp))
Spacer(modifier = Modifier.size(9.dp)) // 调整间距为9dp
Text(
text = stringResource(R.string.favourites_null),
color = AppColors.text,

View File

@@ -124,21 +124,21 @@ fun FollowerListScreen(userId: Int) {
) {
Image(
painter = painterResource(
id =if(AppState.darkMode) R.mipmap.qst_fs_qs_as_img
id = if(AppState.darkMode) R.mipmap.frame_4
else R.mipmap.invalid_name_8),
contentDescription = null,
modifier = Modifier.size(181.dp)
modifier = Modifier.size(181.dp, 153.dp)
)
Spacer(modifier = Modifier.size(24.dp))
Spacer(modifier = Modifier.size(9.dp)) // 调整间距为9dp
androidx.compose.material.Text(
text = "还没有人关注",
text = "还没有人关注你呢",
color = appColors.text,
fontSize = 16.sp,
fontWeight = FontWeight.W600
)
Spacer(modifier = Modifier.size(8.dp))
androidx.compose.material.Text(
text = "去发布动态,吸引更多粉丝",
text = "试着发信号出来,某人就会被吸引啦",
color = appColors.text,
fontSize = 14.sp,
fontWeight = FontWeight.W400

View File

@@ -114,21 +114,22 @@ fun FollowerNoticeScreen() {
) {
Image(
painter = painterResource(
id =if(AppState.darkMode) R.mipmap.qst_fs_qs_as_img
id = if(AppState.darkMode) R.mipmap.frame_4
else R.mipmap.invalid_name_8),
contentDescription = "No Followers",
modifier = Modifier.size(181.dp)
modifier = Modifier
.size(width = 181.dp, height = 153.dp)
)
Spacer(modifier = Modifier.size(24.dp))
Spacer(modifier = Modifier.height(if (AppState.darkMode) 9.dp else 24.dp))
androidx.compose.material.Text(
text = "还没有人关注",
text = "还没有人关注你呢",
color = AppColors.text,
fontSize = 16.sp,
fontWeight = FontWeight.W600
)
Spacer(modifier = Modifier.size(8.dp))
androidx.compose.material.Text(
text = "去发布动态,吸引更多粉丝",
text = "试着发信号出来,某人就会被吸引啦",
color = AppColors.text,
fontSize = 14.sp,
fontWeight = FontWeight.W400

View File

@@ -126,14 +126,14 @@ fun FollowingListScreen(userId: Int) {
) {
Image(
painter = painterResource(
id =if(AppState.darkMode) R.mipmap.qst_gz_qs_as_img_my
id = if(AppState.darkMode) R.mipmap.frame_3
else R.mipmap.invalid_name_9),
contentDescription = null,
modifier = Modifier.size(181.dp)
modifier = Modifier.size(181.dp, 153.dp)
)
Spacer(modifier = Modifier.size(24.dp))
Spacer(modifier = Modifier.size(9.dp)) // 调整间距为9dp
androidx.compose.material.Text(
text = "没有关注任何灵魂",
text = "没有关注任何灵魂",
color = appColors.text,
fontSize = 16.sp,
fontWeight = FontWeight.W600

View File

@@ -97,13 +97,13 @@ fun AgentChatListScreen() {
Spacer(modifier = Modifier.height(39.dp))
Image(
painter = painterResource(
id = if(AppState.darkMode) R.mipmap.qs_znt_qs_as_img
id = if(AppState.darkMode) R.mipmap.juhao_dark
else R.mipmap.invalid_name_5),
contentDescription = "null data",
modifier = Modifier
.size(181.dp)
.size(width = 181.dp, height = 153.dp)
)
Spacer(modifier = Modifier.height(24.dp))
Spacer(modifier = Modifier.height(if (AppState.darkMode) 9.dp else 24.dp))
Text(
text = stringResource(R.string.agent_chat_empty_title),
color = AppColors.text,

View File

@@ -175,13 +175,13 @@ fun AllChatListScreen() {
Spacer(modifier = Modifier.height(39.dp))
Image(
painter = painterResource(
id = if(AppState.darkMode) R.mipmap.qs_py_qs_as_img
id = if(AppState.darkMode) R.mipmap.piao_dark
else R.mipmap.invalid_name_2),
contentDescription = "null data",
modifier = Modifier
.size(181.dp)
.size(width = 181.dp, height = 153.dp)
)
Spacer(modifier = Modifier.height(24.dp))
Spacer(modifier = Modifier.height(if (AppState.darkMode) 9.dp else 24.dp))
Text(
text = stringResource(R.string.friend_chat_empty_title),
color = AppColors.text,

View File

@@ -85,13 +85,13 @@ fun FriendChatListScreen() {
Spacer(modifier = Modifier.height(39.dp))
Image(
painter = painterResource(
id = if(AppState.darkMode) R.mipmap.qs_py_qs_as_img
id = if(AppState.darkMode) R.mipmap.piao_dark
else R.mipmap.invalid_name_2),
contentDescription = "null data",
modifier = Modifier
.size(181.dp)
.size(width = 181.dp, height = 153.dp)
)
Spacer(modifier = Modifier.height(24.dp))
Spacer(modifier = Modifier.height(if (AppState.darkMode) 9.dp else 24.dp))
Text(
text = stringResource(R.string.friend_chat_empty_title),
color = AppColors.text,

View File

@@ -77,13 +77,13 @@ fun GroupChatListScreen() {
Spacer(modifier = Modifier.height(39.dp))
Image(
painter = painterResource(
id = if(AppState.darkMode) R.mipmap.qs_ql_qs_as_img
id = if(AppState.darkMode) R.mipmap.fei_dark
else R.mipmap.invalid_name_12),
contentDescription = "null data",
modifier = Modifier
.size(181.dp)
.size(width = 181.dp, height = 153.dp)
)
Spacer(modifier = Modifier.height(24.dp))
Spacer(modifier = Modifier.height(if (AppState.darkMode) 9.dp else 24.dp))
Text(
text = stringResource(R.string.group_chat_empty),
color = AppColors.text,

View File

@@ -189,16 +189,17 @@ fun GalleryGrid(
) {
Image(
painter = painterResource(
id = if(AppState.darkMode) R.mipmap.qs_dt_qs_as_img
id = if(AppState.darkMode) R.mipmap.shuihu_dark
else R.mipmap.invalid_name_7),
contentDescription = "暂无图片",
modifier = Modifier.size(181.dp),
modifier = Modifier
.size(width = 181.dp, height = 153.dp),
)
Spacer(modifier = Modifier.height(24.dp))
Spacer(modifier = Modifier.height(if(AppState.darkMode) 9.dp else 24.dp))
Text(
text = "故事还没开始",
text = "你的故事还没开始",
fontSize = 16.sp,
color = AppColors.text,
fontWeight = FontWeight.W600

View File

@@ -220,7 +220,8 @@ fun EmptyAgentsView() {
.align(Alignment.CenterHorizontally),
)
Spacer(modifier = Modifier.height(24.dp))
// 根据是否为深色模式调整间距
Spacer(modifier = Modifier.height(if(AppState.darkMode) 9.dp else 24.dp))
Text(
text = "专属AI等你召唤",

View File

@@ -123,14 +123,15 @@ fun LikeNoticeScreen() {
) {
Image(
painter = painterResource(
id =if(AppState.darkMode) R.mipmap.qst_z_qs_as_img
id = if(AppState.darkMode) R.mipmap.sanqiu_dark
else R.mipmap.invalid_name_6),
contentDescription = "No Notice",
modifier = Modifier.size(181.dp)
modifier = Modifier
.size(width = 181.dp, height = 153.dp)
)
Spacer(modifier = Modifier.height(24.dp))
Spacer(modifier = Modifier.height(if (AppState.darkMode) 9.dp else 24.dp))
Text(
text = "你的赞在路上",
text = "你的赞在赶来的路上",
color = AppColors.text,
fontSize = 16.sp,
fontWeight = FontWeight.W600,

View File

@@ -26,7 +26,7 @@ fun SplashScreen() {
) {
// 居中的图标
Image(
painter = painterResource(id = R.mipmap.invalid_name),
painter = painterResource(id = R.mipmap.kp_logo_img),
contentDescription = "App Logo",
modifier = Modifier
.align(Alignment.Center)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@@ -152,8 +152,8 @@
<string name="favourites_null">暂无数据</string>
<string name="agent_chat_list_title">智能体聊天</string>
<string name="agent_chat_empty_title">AI 在等你的开场白</string>
<string name="agent_chat_empty_subtitle">去首页探索一下,主动发起对话!</string>
<string name="agent_chat_empty_title">AI在等你开启第一句对话</string>
<string name="agent_chat_empty_subtitle">去首页探索一下,主动发起一场对话!</string>
<string name="agent_chat_me_prefix">我: </string>
<string name="agent_chat_image">[图片]</string>
<string name="agent_chat_voice">[语音]</string>
@@ -163,12 +163,12 @@
<string name="agent_chat_load_failed">加载失败</string>
<string name="agent_chat_load_more_failed">加载更多失败</string>
<string name="agent_chat_user_info_failed">获取用户信息失败: %s</string>
<string name="group_chat_empty">没有群聊宇宙安静</string>
<string name="group_chat_empty">没有群聊消息的宇宙安静</string>
<string name="group_chat_empty_title">没有群聊消息的宇宙太安静了</string>
<string name="group_chat_empty_subtitle">在首页探索感兴趣的主题房间</string>
<string name="group_chat_empty_join">去首页探索感兴趣的高能对话</string>
<string name="friend_chat_empty_title">和朋友,还没有对话哦~</string>
<string name="friend_chat_empty_subtitle">点击好友头像,即刻发起聊天</string>
<string name="group_chat_empty_join">去首页探索感兴趣的主题房间</string>
<string name="friend_chat_empty_title">和朋友,还没说第一句话呢</string>
<string name="friend_chat_empty_subtitle">一段崭新的友谊 等待被唤醒</string>
<string name="friend_chat_me_prefix">我: </string>
<string name="friend_chat_load_failed">加载失败</string>
<string name="create_group_chat">创建群聊</string>
@@ -250,4 +250,11 @@
<string name="each_theme_unique_experience">每个主题都有自己独特的体验</string>
<string name="select_apply_to_use_theme">选择"应用"可选中这个主题</string>
<string name="tap_cancel_to_preview_other_themes">轻触"取消"可预览其他主题</string>
<!-- Edit Profile Extras -->
<string name="mbti_type">MBTI 类型</string>
<string name="zodiac">星座</string>
<string name="save">保存</string>
<string name="choose_mbti">选择 MBTI</string>
<string name="choose_zodiac">选择星座</string>
</resources>

View File

@@ -247,4 +247,11 @@
<string name="tap_cancel_to_preview_other_themes">Tap "Cancel" to preview other themes</string>
<!-- Edit Profile Extras -->
<string name="mbti_type">MBTI</string>
<string name="zodiac">Zodiac</string>
<string name="save">Save</string>
<string name="choose_mbti">Choose MBTI</string>
<string name="choose_zodiac">Choose Zodiac</string>
</resources>