From 75eb38b188f9e07973485e51fd44c1a37b41448e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=B8=86?= <3031465419@qq.com> Date: Fri, 7 Nov 2025 21:19:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E7=95=8C=E9=9D=A2ui=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=EF=BC=8C=E6=96=B0=E5=8A=A0=E7=BE=A4=E8=81=8A=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E4=BB=A5=E5=8F=8A=E7=BC=BA=E7=9C=81=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/index/tabs/profile/ProfileV3.kt | 109 +++---- .../composable/GroupChatEmptyContent.kt | 167 +++++++++++ .../tabs/profile/composable/UserAgentsList.kt | 200 ++++++++++++- .../index/tabs/profile/composable/UserItem.kt | 274 ++++++++++++++---- .../main/res/drawable/icons_circle_camera.png | Bin 0 -> 1434 bytes app/src/main/res/mipmap-hdpi/icons_block.png | Bin 0 -> 476 bytes .../main/res/mipmap-hdpi/icons_padlock.png | Bin 0 -> 391 bytes app/src/main/res/mipmap-hdpi/icons_remove.png | Bin 0 -> 396 bytes app/src/main/res/mipmap-hdpi/l_empty_img.png | Bin 0 -> 2551 bytes .../main/res/mipmap-mdpi/icon_email_light.png | Bin 0 -> 354 bytes .../mipmap-mdpi/icon_eyes_closed_light.png | Bin 0 -> 268 bytes .../main/res/mipmap-mdpi/icon_lock_light.png | Bin 0 -> 319 bytes app/src/main/res/mipmap-mdpi/icons_block.png | Bin 0 -> 404 bytes .../main/res/mipmap-mdpi/icons_padlock.png | Bin 0 -> 323 bytes app/src/main/res/mipmap-mdpi/icons_remove.png | Bin 0 -> 289 bytes app/src/main/res/mipmap-mdpi/l_empty_img.png | Bin 0 -> 1925 bytes .../res/mipmap-xhdpi/icon_email_light.png | Bin 0 -> 563 bytes .../mipmap-xhdpi/icon_eyes_closed_light.png | Bin 0 -> 393 bytes .../main/res/mipmap-xhdpi/icon_lock_light.png | Bin 0 -> 456 bytes app/src/main/res/mipmap-xhdpi/icons_block.png | Bin 0 -> 588 bytes .../main/res/mipmap-xhdpi/icons_padlock.png | Bin 0 -> 473 bytes .../main/res/mipmap-xhdpi/icons_remove.png | Bin 0 -> 457 bytes app/src/main/res/mipmap-xhdpi/l_empty_img.png | Bin 0 -> 3301 bytes .../res/mipmap-xxhdpi/icon_email_light.png | Bin 0 -> 729 bytes .../mipmap-xxhdpi/icon_eyes_closed_light.png | Bin 0 -> 524 bytes .../res/mipmap-xxhdpi/icon_lock_light.png | Bin 0 -> 643 bytes .../main/res/mipmap-xxhdpi/icons_block.png | Bin 0 -> 779 bytes .../main/res/mipmap-xxhdpi/icons_padlock.png | Bin 0 -> 660 bytes .../main/res/mipmap-xxhdpi/icons_remove.png | Bin 0 -> 648 bytes .../main/res/mipmap-xxhdpi/l_empty_img.png | Bin 0 -> 4642 bytes .../main/res/mipmap-xxxhdpi/icons_block.png | Bin 0 -> 978 bytes .../main/res/mipmap-xxxhdpi/icons_padlock.png | Bin 0 -> 806 bytes .../main/res/mipmap-xxxhdpi/icons_remove.png | Bin 0 -> 755 bytes .../main/res/mipmap-xxxhdpi/l_empty_img.png | Bin 0 -> 5970 bytes app/src/main/res/values-ja/strings.xml | 8 +- app/src/main/res/values-zh/strings.xml | 8 +- app/src/main/res/values/strings.xml | 8 +- 37 files changed, 647 insertions(+), 127 deletions(-) create mode 100644 app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/GroupChatEmptyContent.kt create mode 100644 app/src/main/res/drawable/icons_circle_camera.png create mode 100644 app/src/main/res/mipmap-hdpi/icons_block.png create mode 100644 app/src/main/res/mipmap-hdpi/icons_padlock.png create mode 100644 app/src/main/res/mipmap-hdpi/icons_remove.png create mode 100644 app/src/main/res/mipmap-hdpi/l_empty_img.png create mode 100644 app/src/main/res/mipmap-mdpi/icon_email_light.png create mode 100644 app/src/main/res/mipmap-mdpi/icon_eyes_closed_light.png create mode 100644 app/src/main/res/mipmap-mdpi/icon_lock_light.png create mode 100644 app/src/main/res/mipmap-mdpi/icons_block.png create mode 100644 app/src/main/res/mipmap-mdpi/icons_padlock.png create mode 100644 app/src/main/res/mipmap-mdpi/icons_remove.png create mode 100644 app/src/main/res/mipmap-mdpi/l_empty_img.png create mode 100644 app/src/main/res/mipmap-xhdpi/icon_email_light.png create mode 100644 app/src/main/res/mipmap-xhdpi/icon_eyes_closed_light.png create mode 100644 app/src/main/res/mipmap-xhdpi/icon_lock_light.png create mode 100644 app/src/main/res/mipmap-xhdpi/icons_block.png create mode 100644 app/src/main/res/mipmap-xhdpi/icons_padlock.png create mode 100644 app/src/main/res/mipmap-xhdpi/icons_remove.png create mode 100644 app/src/main/res/mipmap-xhdpi/l_empty_img.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_email_light.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_eyes_closed_light.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icon_lock_light.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icons_block.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icons_padlock.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icons_remove.png create mode 100644 app/src/main/res/mipmap-xxhdpi/l_empty_img.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/icons_block.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/icons_padlock.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/icons_remove.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/l_empty_img.png diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/ProfileV3.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/ProfileV3.kt index 58827ef..31a4d70 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/ProfileV3.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/ProfileV3.kt @@ -87,8 +87,8 @@ import com.aiosman.ravenow.ui.composables.toolbar.rememberCollapsingToolbarScaff import com.aiosman.ravenow.ui.index.IndexViewModel import com.aiosman.ravenow.ui.index.tabs.profile.composable.GalleryGrid import com.aiosman.ravenow.ui.post.MenuActionItem +import com.aiosman.ravenow.ui.index.tabs.profile.composable.GroupChatEmptyContent import com.aiosman.ravenow.ui.index.tabs.profile.composable.OtherProfileAction -import com.aiosman.ravenow.ui.index.tabs.profile.composable.SelfProfileAction import com.aiosman.ravenow.ui.index.tabs.profile.composable.UserAgentsList import com.aiosman.ravenow.ui.index.tabs.profile.composable.UserAgentsRow import com.aiosman.ravenow.ui.index.tabs.profile.composable.UserContentPageIndicator @@ -129,7 +129,8 @@ fun ProfileV3( postCount: Long? = null, // 新增参数用于传递帖子总数 ) { val model = MyProfileViewModel - val pagerState = rememberPagerState(pageCount = { if (isAiAccount) 1 else 2 }) + // Tabs: 动态、(可选)智能体、群聊 + val pagerState = rememberPagerState(pageCount = { if (isAiAccount) 2 else 3 }) val enabled by remember { mutableStateOf(true) } val statusBarPaddingValues = WindowInsets.systemBars.asPaddingValues() var expanded by remember { mutableStateOf(false) } @@ -370,41 +371,34 @@ fun ProfileV3( profile?.let { UserItem( accountProfileEntity = it, - postCount = postCount ?: if (isSelf) MyProfileViewModel.momentLoader.total else moments.size.toLong() + postCount = postCount ?: if (isSelf) MyProfileViewModel.momentLoader.total else moments.size.toLong(), + isSelf = isSelf, + onEditClick = { + navController.navigate(NavigationRoute.AccountEdit.route) + } ) } } Spacer(modifier = Modifier.height(20.dp)) - // 操作按钮 + // 操作按钮(仅其他用户显示) profile?.let { - Box( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = 16.dp) - ) { - if (isSelf) { - SelfProfileAction( - onEditProfile = { - navController.navigate(NavigationRoute.AccountEdit.route) + if (!isSelf && it.id != AppState.UserId) { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp) + ) { + OtherProfileAction( + it, + onFollow = { + onFollowClick() }, - onPremiumClick = { - navController.navigate(NavigationRoute.VipSelPage.route) + onChat = { + onChatClick() } ) - } else { - if (it.id != AppState.UserId) { - OtherProfileAction( - it, - onFollow = { - onFollowClick() - }, - onChat = { - onChatClick() - } - ) - } } } } @@ -458,36 +452,44 @@ fun ProfileV3( pagerState = pagerState, showAgentTab = !isAiAccount ) - Spacer(modifier = Modifier.height(8.dp)) HorizontalPager( state = pagerState, modifier = Modifier.height(500.dp) // 固定滚动高度 ) { idx -> when (idx) { - 0 -> - GalleryGrid(moments = moments) - 1 -> - UserAgentsList( - agents = agents, - onAgentClick = onAgentClick, - onAvatarClick = { agent -> - // 导航到智能体个人主页,需要通过openId获取用户ID - scope.launch { - try { - val userService = com.aiosman.ravenow.data.UserServiceImpl() - val profile = userService.getUserProfileByOpenId(agent.openId) - navController.navigate( - NavigationRoute.AccountProfile.route - .replace("{id}", profile.id.toString()) - .replace("{isAiAccount}", "true") - ) - } catch (e: Exception) { - // 处理错误 + 0 -> GalleryGrid(moments = moments) + 1 -> { + if (!isAiAccount) { + UserAgentsList( + agents = agents, + onAgentClick = onAgentClick, + onAvatarClick = { agent -> + // 导航到智能体个人主页,需要通过openId获取用户ID + scope.launch { + try { + val userService = com.aiosman.ravenow.data.UserServiceImpl() + val profile = userService.getUserProfileByOpenId(agent.openId) + navController.navigate( + NavigationRoute.AccountProfile.route + .replace("{id}", profile.id.toString()) + .replace("{isAiAccount}", "true") + ) + } catch (e: Exception) { + // 处理错误 + } } - } - }, - modifier = Modifier.fillMaxSize() - ) + }, + modifier = Modifier.fillMaxSize() + ) + } else { + GroupChatPlaceholder() + } + } + 2 -> { + if (!isAiAccount) { + GroupChatPlaceholder() + } + } } } } @@ -582,6 +584,11 @@ fun ProfileV3( } } +@Composable +private fun GroupChatPlaceholder() { + GroupChatEmptyContent() +} + //顶部导航栏组件 @Composable fun TopNavigationBar( diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/GroupChatEmptyContent.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/GroupChatEmptyContent.kt new file mode 100644 index 0000000..2c5fa48 --- /dev/null +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/GroupChatEmptyContent.kt @@ -0,0 +1,167 @@ +package com.aiosman.ravenow.ui.index.tabs.profile.composable + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +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.shape.RoundedCornerShape +import androidx.compose.material3.Divider +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.aiosman.ravenow.R + +@Composable +fun GroupChatEmptyContent() { + var selectedSegment by remember { mutableStateOf(0) } // 0: 全部, 1: 公开, 2: 私有 + + Column( + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 16.dp) + ) { + // 分割线(紧贴上方栏) + Divider( + color = Color(0xFFF0F0F0), // 更浅的灰色 + thickness = 1.dp, + modifier = Modifier.fillMaxWidth() + ) + + Spacer(modifier = Modifier.height(16.dp)) + + // 分段控制器 + SegmentedControl( + selectedIndex = selectedSegment, + onSegmentSelected = { selectedSegment = it }, + modifier = Modifier.fillMaxWidth() + ) + + Spacer(modifier = Modifier.height(8.dp)) + + // 空状态内容(居中) + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + // 空状态插图 + EmptyStateIllustration() + + Spacer(modifier = Modifier.height(9.dp)) + + // 空状态文本 + Text( + text = "空空如也~", + fontSize = 16.sp, + fontWeight = FontWeight.SemiBold, + color = Color(0xFF000000) + ) + } + } +} + +@Composable +private fun SegmentedControl( + selectedIndex: Int, + onSegmentSelected: (Int) -> Unit, + modifier: Modifier = Modifier +) { + Row( + modifier = modifier + .height(32.dp), + horizontalArrangement = Arrangement.Start, + verticalAlignment = Alignment.CenterVertically + ) { + // 全部 + SegmentButton( + text = "全部", + isSelected = selectedIndex == 0, + onClick = { onSegmentSelected(0) }, + width = 54.dp + ) + + Spacer(modifier = Modifier.width(8.dp)) + + // 公开 + SegmentButton( + text = "公开", + isSelected = selectedIndex == 1, + onClick = { onSegmentSelected(1) }, + width = 59.dp + ) + + Spacer(modifier = Modifier.width(8.dp)) + + // 私有 + SegmentButton( + text = "私有", + isSelected = selectedIndex == 2, + onClick = { onSegmentSelected(2) }, + width = 54.dp + ) + } +} + +@Composable +private fun SegmentButton( + text: String, + isSelected: Boolean, + onClick: () -> Unit, + width: androidx.compose.ui.unit.Dp +) { + Box( + modifier = Modifier + .width(width) + .height(32.dp) + .background( + color = if (isSelected) { + Color(0xFF110C13) // RGB(17, 12, 19) + } else { + Color(0x147C7480) // RGB(124, 116, 128, alpha 0.08) + }, + shape = RoundedCornerShape(1000.dp) + ) + .clickable(onClick = onClick), + contentAlignment = Alignment.Center + ) { + Text( + text = text, + fontSize = 13.sp, + fontWeight = FontWeight.Normal, + color = if (isSelected) Color(0xFFFFFFFF) else Color(0xFF000000) + ) + } +} + +@Composable +private fun EmptyStateIllustration() { + Image( + painter = painterResource(id = R.mipmap.l_empty_img), + contentDescription = "空状态", + modifier = Modifier + .width(181.dp) + .height(153.dp), + contentScale = ContentScale.Fit + ) +} + diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/UserAgentsList.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/UserAgentsList.kt index 30884d2..d91db42 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/UserAgentsList.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/UserAgentsList.kt @@ -17,6 +17,7 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Divider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -60,15 +61,14 @@ fun UserAgentsList( ) { val AppColors = LocalAppTheme.current - LazyColumn( - modifier = modifier.fillMaxSize(), - verticalArrangement = Arrangement.spacedBy(8.dp) - ) { - if (agents.isEmpty()) { - item { - EmptyAgentsView() - } - } else { + if (agents.isEmpty()) { + // 使用带分段控制器的空状态布局 + AgentEmptyContentWithSegments() + } else { + LazyColumn( + modifier = modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { items(agents) { agent -> UserAgentCard( agent = agent, @@ -76,11 +76,11 @@ fun UserAgentsList( onAvatarClick = onAvatarClick ) } - } - - // 底部间距 - item { - Spacer(modifier = Modifier.height(120.dp)) + + // 底部间距 + item { + Spacer(modifier = Modifier.height(120.dp)) + } } } } @@ -198,6 +198,178 @@ fun UserAgentCard( } } +@Composable +fun AgentEmptyContentWithSegments() { + var selectedSegment by remember { mutableStateOf(0) } // 0: 全部, 1: 公开, 2: 私有 + val AppColors = LocalAppTheme.current + val isNetworkAvailable = NetworkUtils.isNetworkAvailable(LocalContext.current) + + Column( + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 16.dp) + ) { + // 分割线(紧贴上方栏) + Divider( + color = Color(0xFFF0F0F0), // 更浅的灰色 + thickness = 1.dp, + modifier = Modifier.fillMaxWidth() + ) + + Spacer(modifier = Modifier.height(16.dp)) + + // 分段控制器 + AgentSegmentedControl( + selectedIndex = selectedSegment, + onSegmentSelected = { selectedSegment = it }, + modifier = Modifier.fillMaxWidth() + ) + + Spacer(modifier = Modifier.height(8.dp)) + + // 空状态内容(使用智能体原本的图标和文字) + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + if (isNetworkAvailable) { + Image( + painter = painterResource( + id = if(AppState.darkMode) R.mipmap.ai_dark + else R.mipmap.ai), + contentDescription = "暂无Agent", + modifier = Modifier + .size(width = 181.dp, height = 153.dp) + .align(Alignment.CenterHorizontally), + ) + + // 根据是否为深色模式调整间距 + Spacer(modifier = Modifier.height(if(AppState.darkMode) 9.dp else 24.dp)) + + Text( + text = "专属AI等你召唤", + fontSize = 16.sp, + color = AppColors.text, + fontWeight = FontWeight.W600 + ) + + Spacer(modifier = Modifier.height(8.dp)) + + Text( + text = "AI将成为你的伙伴,而不是工具", + fontSize = 14.sp, + color = AppColors.secondaryText, + fontWeight = FontWeight.W400 + ) + } else { + Image( + painter = painterResource(id = R.mipmap.invalid_name_10), + contentDescription = "network error", + modifier = Modifier.size(181.dp), + ) + + Spacer(modifier = Modifier.height(24.dp)) + + Text( + text = stringResource(R.string.friend_chat_no_network_title), + fontSize = 16.sp, + color = AppColors.text, + fontWeight = FontWeight.W600 + ) + + Spacer(modifier = Modifier.height(8.dp)) + + Text( + text = stringResource(R.string.friend_chat_no_network_subtitle), + fontSize = 14.sp, + color = AppColors.secondaryText, + fontWeight = FontWeight.W400 + ) + Spacer(modifier = Modifier.height(16.dp)) + ReloadButton( + onClick = { + MyProfileViewModel.ResetModel() + MyProfileViewModel.loadProfile(pullRefresh = true) + } + ) + } + } + } +} + +@Composable +private fun AgentSegmentedControl( + selectedIndex: Int, + onSegmentSelected: (Int) -> Unit, + modifier: Modifier = Modifier +) { + Row( + modifier = modifier + .height(32.dp), + horizontalArrangement = Arrangement.Start, + verticalAlignment = Alignment.CenterVertically + ) { + // 全部 + AgentSegmentButton( + text = "全部", + isSelected = selectedIndex == 0, + onClick = { onSegmentSelected(0) }, + width = 54.dp + ) + + Spacer(modifier = Modifier.width(8.dp)) + + // 公开 + AgentSegmentButton( + text = "公开", + isSelected = selectedIndex == 1, + onClick = { onSegmentSelected(1) }, + width = 59.dp + ) + + Spacer(modifier = Modifier.width(8.dp)) + + // 私有 + AgentSegmentButton( + text = "私有", + isSelected = selectedIndex == 2, + onClick = { onSegmentSelected(2) }, + width = 54.dp + ) + } +} + +@Composable +private fun AgentSegmentButton( + text: String, + isSelected: Boolean, + onClick: () -> Unit, + width: androidx.compose.ui.unit.Dp +) { + Box( + modifier = Modifier + .width(width) + .height(32.dp) + .background( + color = if (isSelected) { + Color(0xFF110C13) // RGB(17, 12, 19) + } else { + Color(0x147C7480) // RGB(124, 116, 128, alpha 0.08) + }, + shape = RoundedCornerShape(1000.dp) + ) + .clickable(onClick = onClick), + contentAlignment = Alignment.Center + ) { + Text( + text = text, + fontSize = 13.sp, + fontWeight = FontWeight.Normal, + color = if (isSelected) Color(0xFFFFFFFF) else Color(0xFF000000) + ) + } +} + @Composable fun EmptyAgentsView() { val AppColors = LocalAppTheme.current diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/UserItem.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/UserItem.kt index ec7b99a..75a3583 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/UserItem.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/composable/UserItem.kt @@ -1,26 +1,38 @@ package com.aiosman.ravenow.ui.index.tabs.profile.composable +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +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.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape 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.layout.ContentScale import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource +import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import com.aiosman.ravenow.AppStore import com.aiosman.ravenow.LocalAppTheme import com.aiosman.ravenow.LocalNavController import com.aiosman.ravenow.R @@ -29,23 +41,52 @@ import com.aiosman.ravenow.ui.NavigationRoute import com.aiosman.ravenow.ui.composables.CustomAsyncImage import com.aiosman.ravenow.ui.composables.rememberDebouncer import com.aiosman.ravenow.ui.modifiers.noRippleClickable +import java.text.NumberFormat +import java.util.Locale @Composable fun UserItem( accountProfileEntity: AccountProfileEntity, - postCount: Long = 0 + postCount: Long = 0, + isSelf: Boolean = false, + onEditClick: () -> Unit = {} ) { val navController = LocalNavController.current val AppColors = LocalAppTheme.current val followerDebouncer = rememberDebouncer() val followingDebouncer = rememberDebouncer() + + // 获取 MBTI 和星座信息 + val mbti = remember(accountProfileEntity.id) { + AppStore.getUserMbti(accountProfileEntity.id) + } + val zodiac = remember(accountProfileEntity.id) { + AppStore.getUserZodiac(accountProfileEntity.id) + } + + // 格式化粉丝数 + val numberFormat = remember { NumberFormat.getNumberInstance(Locale.getDefault()) } + val formattedFollowerCount = remember(accountProfileEntity.followerCount) { + if (accountProfileEntity.followerCount >= 10000) { + val wan = accountProfileEntity.followerCount / 10000.0 + if (wan >= 100) { + "${wan.toInt()}万" + } else { + String.format("%.1f万", wan) + } + } else { + numberFormat.format(accountProfileEntity.followerCount) + } + } Column( modifier = Modifier .fillMaxWidth() ) { + // 顶部:头像和统计数据 Row( - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) ) { // 头像 CustomAsyncImage( @@ -53,39 +94,47 @@ fun UserItem( accountProfileEntity.avatar, modifier = Modifier .clip(CircleShape) - .size(48.dp), + .size(96.dp), contentDescription = "", contentScale = ContentScale.Crop ) - Spacer(modifier = Modifier.width(32.dp)) - //个人统计 + + // 统计数据 Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), + horizontalArrangement = Arrangement.spacedBy(0.dp), + verticalAlignment = Alignment.CenterVertically ) { // 帖子数 Column( + modifier = Modifier + .width(80.dp) + .height(40.dp), horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.weight(1f) + verticalArrangement = Arrangement.Center ) { Text( text = postCount.toString(), - fontWeight = FontWeight.W600, - fontSize = 16.sp, - color = AppColors.text + fontWeight = FontWeight.Medium, + fontSize = 15.sp, + color = Color(0xFF000000), + textAlign = TextAlign.Center ) - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.height(2.dp)) Text( text = "帖子", - color = AppColors.text + fontWeight = FontWeight.Normal, + fontSize = 11.sp, + color = Color(0xFF000000), + textAlign = TextAlign.Center ) } // 粉丝数 Column( - horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier - .weight(1f) + .width(80.dp) + .height(40.dp) .noRippleClickable { followerDebouncer { navController.navigate( @@ -95,26 +144,33 @@ fun UserItem( ) ) } - } + }, + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center ) { Text( - text = accountProfileEntity.followerCount.toString(), - fontWeight = FontWeight.W600, - fontSize = 16.sp, - color = AppColors.text + text = formattedFollowerCount, + fontWeight = FontWeight.Medium, + fontSize = 15.sp, + color = Color(0xFF000000), + textAlign = TextAlign.Center ) - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.height(2.dp)) Text( text = "粉丝", - color = AppColors.text + fontWeight = FontWeight.Normal, + fontSize = 11.sp, + color = Color(0xFF000000), + textAlign = TextAlign.Center ) } // 关注数 Column( - horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier - .weight(1f) + .width(80.dp) + .height(40.dp) + .offset(x = 6.dp) .noRippleClickable { followingDebouncer { navController.navigate( @@ -124,49 +180,161 @@ fun UserItem( ) ) } - } + }, + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center ) { Text( text = accountProfileEntity.followingCount.toString(), - fontWeight = FontWeight.W600, - fontSize = 16.sp, - color = AppColors.text + fontWeight = FontWeight.Medium, + fontSize = 15.sp, + color = Color(0xFF000000), + textAlign = TextAlign.Center ) - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.height(2.dp)) Text( text = "关注", - color = AppColors.text + fontWeight = FontWeight.Normal, + fontSize = 11.sp, + color = Color(0xFF000000), + textAlign = TextAlign.Center ) } } } + Spacer(modifier = Modifier.height(12.dp)) - // 昵称 - Text( - text = accountProfileEntity.nickName, - fontWeight = FontWeight.W600, - fontSize = 16.sp, - color = AppColors.text - ) - Spacer(modifier = Modifier.height(4.dp)) - // 个人简介 - if (accountProfileEntity.bio.isNotEmpty()){ + + // 中间:昵称、简介、创建者信息 + Column( + modifier = Modifier + .fillMaxWidth() + ) { + // 昵称 Text( - text = accountProfileEntity.bio, - fontSize = 14.sp, - color = AppColors.secondaryText, - maxLines = 1, - overflow = TextOverflow.Ellipsis + text = accountProfileEntity.nickName, + fontWeight = FontWeight.Bold, + fontSize = 22.sp, + letterSpacing = (-0.3).sp, + color = Color(0xFF000000) ) - }else{ + + Spacer(modifier = Modifier.height(4.dp)) + + // 个人简介 + if (accountProfileEntity.bio.isNotEmpty()) { + Text( + text = accountProfileEntity.bio, + fontSize = 13.sp, + color = Color(0x993C3C43), // 60/255, 60/255, 67/255, alpha 0.6 + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) + } else { + Text( + text = "Welcome to my fantiac word i will show you something about magic", + fontSize = 13.sp, + color = Color(0x993C3C43), + maxLines = 2, + overflow = TextOverflow.Ellipsis + ) + } + + // 创建者信息(如果是 AI 账户,可以显示创建者) + // 注意:当前 AccountProfileEntity 没有创建者字段,这里暂时留空 + // 如果需要显示,需要从其他地方获取创建者信息 + } + + Spacer(modifier = Modifier.height(12.dp)) + + // 底部:标签按钮 + Row( + horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalAlignment = Alignment.CenterVertically + ) { + // MBTI 标签 + if (!mbti.isNullOrEmpty()) { + ProfileTag( + text = mbti, + backgroundColor = Color(0x33FF8D28), // 255/255, 141/255, 40/255, alpha 0.2 + textColor = Color(0xFF000000) + ) + } + + // 星座标签 + if (!zodiac.isNullOrEmpty()) { + ProfileTag( + text = zodiac, + backgroundColor = Color(0x33FFCC00), // 255/255, 204/255, 0/255, alpha 0.2 + textColor = Color(0xFF000000) + ) + } + + // 编辑标签(仅自己可见) + if (isSelf) { + ProfileTag( + text = "编辑", + backgroundColor = Color(0x14947A80), // 124/255, 116/255, 128/255, alpha 0.08 + textColor = Color(0xFF9284BD), // 146/255, 132/255, 189/255 + leadingIcon = { + EditIcon( + color = Color(0xFF9284BD), + modifier = Modifier.size(16.dp) + ) + }, + onClick = onEditClick + ) + } + } + } +} + +@Composable +private fun ProfileTag( + text: String, + backgroundColor: Color, + textColor: Color, + leadingIcon: (@Composable () -> Unit)? = null, + onClick: (() -> Unit)? = null +) { + Box( + modifier = Modifier + .height(25.dp) + .clip(RoundedCornerShape(12.dp)) + .background(backgroundColor) + .then( + if (onClick != null) { + Modifier.clickable(onClick = onClick) + } else { + Modifier + } + ) + .padding(horizontal = 8.dp, vertical = 4.dp), + contentAlignment = Alignment.Center + ) { + Row( + horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalAlignment = Alignment.CenterVertically + ) { + leadingIcon?.invoke() Text( - text = "No bio here.", - fontSize = 14.sp, - color = AppColors.secondaryText, - maxLines = 1, - overflow = TextOverflow.Ellipsis + text = text, + fontSize = 12.sp, + color = textColor ) } } - +} + +@Composable +private fun EditIcon( + color: Color, + modifier: Modifier = Modifier +) { + Image( + painter = painterResource(id = R.mipmap.bi), + contentDescription = "编辑", + modifier = modifier, + colorFilter = ColorFilter.tint(color) + ) } diff --git a/app/src/main/res/drawable/icons_circle_camera.png b/app/src/main/res/drawable/icons_circle_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..16046301c61ad26fc4ccffa66c1cdb7a739c23df GIT binary patch literal 1434 zcmV;L1!ek)P)Px#Bv4FLMRPO%M{rDXH2Fi zYLiv`ss8%AJnrc(Jmf{I+ihbK?QXZj{Ach;SO^}E0b3&FJOx+90j==pxx{m@l$UPmaaIHx0&6Prs7ii>Qii$Gh&SskIR;;fEP zS8+y1sH-@mBh*!#(GmJ8-s%W_6>oKfW?x+Fk1$Yisv`_koazVz6{k8v-S{)+hegSX zqQRnMMbThUvZ83PC|OZ7n3OCp8ca%-7Y!yQn}xOYVd-jMp`Xy$db!PU2qOHk)_2Z5 zVH6GF{%DL@&b^{9YlN3`WN8=IUZY7Ist%yO4$TYhkCNuzD3)J`#$l(ANy{NvD8amBKb;&3IJ{+n0hJxmid#?31wbbI7O^b}j|$EyBKrF0?jr znT=szt6?Xku1|(t=IcutmVZtE{8eQ5BdmpxVDlgQ`DO*!z}y#S2y@}ErX7s*tlz(% zuoiWl#XnzBetD)nLzw45pWYigl&y(%0*uo2N&6sc1lW!gEF-}7X|T449SP4M#9cXp zLk2WhQ=(|3HBH<}?Mpa6A#O+?Ntltk``z%tj)^eRhGQ?jWb`){j|6^G(_j1yqg7Do>h)KJ!ZhDo9$UIW_t(Bm*UxG%w7`v4g81j zZHbhBkfE^|3QIzcXdJ!>gLOgu$#VOk>VWyYeOt10j^vC2bT)i~CRBC%&Rz9`V@``hES1xZ$ zyFa-*7w%l6Oox$3c_g`e17vJR|k3?#4J%UA`ZSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?sm$1o(uwx)=EHaPYCSalrz{kx8R3^wH3}ky&xpM<4p^_lKV1@_l`yb@Lm!H2s-cg|bfr9>p%#GDRMT`ob zE{-7^;N$3<{8Z_4KX|Krizw<+P=oIh3SJ6{>6n1=QVObJ4 z;dzhhrxn_jKAH+eym1}VZZ258^rZg+50x(Ai~r2GOqhDzN5tMKi)*L%3BM_7ZgF#G z@45f<=)5F}b2UXS*OuDq*4eG_n%?FAJNNYGs{a$3ZCn2zQL|uvW@~nkF{*lj=G>k; z-0vdFEJ~!eu00ditk?gw%lFIH>V`;$?g9;;7tedP>j)nEcs5L8)7&J!!wVnp(> PkYw<5^>bP0l+XkKrTexD literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/icons_padlock.png b/app/src/main/res/mipmap-hdpi/icons_padlock.png new file mode 100644 index 0000000000000000000000000000000000000000..9b66dec01bf7a16fb984a7957bbd22f5c57cfe81 GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k3?#4J%UA`ZSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skg2l#}zx)=BWnIwVRj(S=^4FV-We!&d+0{!w2-q+9HAAf$my}rMqZSHiS z+%-=Z#}JFtM?*aMS`2s=d+!qe^Z&YEYuc{1hfOX1oJN^%CAPiw^?10)|DpbK0}IFc z3^9Xqw?Z-=buDgOabC$OcA}C;-Dw?t3+oB_Q#mi}t>OMJadHQjsLAuKhgh~>FcDP_ zo;}6OU)WpdOv)yMv)gt}sQq~M03UzGt9q|rX3RYjmVNfe%5VKK$WhrARU$3E=jJZ! zoBZareOK;#ZVl*La=<+^B-}~!=9%w-Q`?GdeBMpvU31W&pqT3!ztQDMQ};em*NR?f qv*Tf=-?HaSb3#9fdOp4WFG`-Pl6!qplX@8_xIA6`T-G@yGywoh%7^Fx literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/icons_remove.png b/app/src/main/res/mipmap-hdpi/icons_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..b597232db186777cec412c1858043bc6650dfa7e GIT binary patch literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k3?#4J%UA`ZSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?sm01^9%xx)=ETx3B>rOPl`=4*xBzL2N6l{}vYi&29gi1Es(sKv^rGELf$5 z4U=sF$T-20AirRS{r&X<=k?_kg6$v7&sTWAe(JYA4xr?9PZ!4!i_=#_Zi_W5@I0;) z6#4Yu-a5og^HJaJ*_GN)W=z;-^o>Cy`)c?hm6AhTy34q`_%j6lc&JU6*4tZnuHvM( zp#LT>@h;0(s$v)Cg`P{RGGgBOx%g3z&MR$&dAUU_pUMu*^JL4IEbw4)fQ3tN<_SSh zC-cz!kDupUX<=C-7}<39is02vKgAR#yf1c|G)2WKXlgObUK#K3V;{3wwjY{P7Az}v zYucp;2bU}5e%KqBSZPvHXs~air1)X>$EQQqbSLD-wygOVy>izaX~kIm^r@wOwhzm{ ZFa~d{!PC{xWt~$(695rTotXdt literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/l_empty_img.png b/app/src/main/res/mipmap-hdpi/l_empty_img.png new file mode 100644 index 0000000000000000000000000000000000000000..eca7860433f6f9266aa51a30b7253cde372f68e5 GIT binary patch literal 2551 zcmb7GS5y<&77a}zD1=@FV`w5G-AHH?LI}MW5h=dp*s(obA+PJ5P;fYnKd?9x3_jMH4C<8EN$T9 z7MknJj+W~F>h5GD8e~r%4!4mGmqu7vZPxbGP9`c6waHwruC1-5@2;}8Czx?M`^g3; zw7-~G9k#faVi<*@WlgYZMwv&el@X>?wiszj-EH2@nmRn8b)2leWaqSv6}HHv)Da@a z>gwv4@j3^SR2EieZD47qd1tacXo3{PHnKKacUyKDyA-yOebLD(;Xg;6u(AG{@|7@2 z3Sw+V%#(2mAo8b65ugM-)SXNORxYd-QM4JGmJ@v`?7HX`9cPpyeLqha9(- zKfy1xRc_F-X(1G$8UO$oV1YDtcr-;Vx*L}7BAO5a5bV`N*pz z0Mvk*q6T_1PL6IXS+i_Z`;S}oU3wPxWYXs1hd$1cD|qW29e6e*D`3{ zVLwj12?YQAORGUTa2nen5S4cp@%@>a@gQMG_2pOUAA`%7rs-;|WOcmG3h%nndF^jp z9kgmkmB2Bgeo@5`P-Xh!Czks7z};~x#TViHj*7-= zh3fM!L z=-F>3>2-aD+<}D=#dr)SHY=FB04jzC8^mcmi)oDt6#w{$7`u20RF1@ZRyrJ9?miFs zXo78nj|;ansN2YT`U=|CLiIS!RQSr^S;AFQmV|XleR|UzQ!KqmpjSiKns@q$GIx@z zftB$$eCO6u_xI+sI>%BMsjU?%JU?Y(nhufQD*HSpc3U|o0U!OC;@OLhBISK!df$@b zu}R<*NyVGF{Py7n;q?h~BD?r_x$ATDR3n_MCEB_5Q9ILuTC<1gkALq<`tSkKS6-eT zY4qjvEu5BrZR`NB&ht^UoTp}eYNkH5pqb}z(t6dmExbeai`J*yOHrLE*+!?QRx7M<`pDWCyLROX~?m%7iR?8h)#H=&ewe{3MUaWh_49 zYZ`MS-VUCUO;&WnIbQgecLj#4NaF6!1Jhnuhd&9MUE>RpzoKB|Qih7Z(RR$%npy&tCka9rn80 zI(7OjJ(nRO=ht_199<&?ihfP|OeV|L(MOyw=z+mziNa$`WV(#>y8B5~CgY9D^`N<9 z=%y3QZHuy(MjmrFahTnM7#sN|r^VYrLK&rByK=&FqRf*7kM;`!`kej9N_VblVfR=o z8S+d0a#+vEb9uFCCpL*GioU?dtidZyS1j0%eP3iJEh4t9K;{`0{Of zfcN*~wZLo!9i*#&7MjPixSH4UM_oWqxK~H?z#+4-<;@JSvDHx~0i}gHdv79)tOxet z&#Yl!#0RvZQ$;$jid+lTMCHa)joq*2_>2ME^ z=n+7C$jPHz7z{81h2Z%epn)DM4L! z2roH+a6^v0k@5Cf;j0EMRwTO9>u+Zva0NamUDsZi=2e~!hZK`o=i5hB2eNMBl(0Ie zd{|a|-sLc|3(z9v=M2g#S*ykK48+)zum$Qf70U95zF3nqF)x*DF-!`aQ5(toeqH`B zbrLuULwPh3|HKGai;l{9sVW%i-kzc$L7f|tnRrQ`>5n}Z(vmlQB6EKILcBhrG=bxjFNc>wR4V-Scz5Cc}grQ^_cVz(t8T-q^>Wp`mMFF^90;^gj=TwTE_X4A_`}C_ZdqF<0CTW zo2k&PU^R*LCMOY)%ume#|QsEwguDEv8)pM|5h^T)} z`f(ZmXb$xh7pPwC`KwnSf5*QRaO=PDf{}rNaPeVt<9D4w9;&7<^mgoOK;DYNGhr!c zWvs`DTpPLs1=)%`!-0SUfgF$v+}I}|5a)jheQCuYq+=l=X|C2&7<1z?`V-a=);jwE zKNVgdGoNNyb%$nWj!Ev~JSuOIfHbOKV(#@VhHJY(u2D=?yh}4nVfw?4A$ZD9-OwKQ z=UJI9xd^nY3^!X12yqJCcg?gnhbDF9ziXHCE@UiDX!>d*?p@3~zH{&*Y&cc6$N0wN ztJUInKTK2vT!-C)gfOAey3p^T-$3ZgXx>Ca-#%U!nfK+cLvl;@$y^ah21dUYgWZz2 k1>c)<@c!?o0DtM2_oNS%G}U;vjb? zhIQv;UIIC~0X`wF?gc(mr%sm1|prfigQiT^vIsE+;1(V2=ou zalON&aOUOndyNj$nIZK0ncCmCMZJX|}D4(h2@J}WWnflcX*KUO~ ztHiz2W-7eo|DHP`q3T4)=Elax-xW=Bn3z8cv+*vtR_e=B#Hqk{c#lwLI1f)5Ujkq9 zU1>&x_P2@w=H6P&GY)?dc;>Qzan1U~Ih79E=QR~xV<=?rVNN>JY$=jq<^1FJO{F}o wzTNK{V~%cNdb8bpYQX+w7F`ys4|pXRwqLYflKD_i9_R@MPgg&ebxsLQ0DR_)wEzGB literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/icon_eyes_closed_light.png b/app/src/main/res/mipmap-mdpi/icon_eyes_closed_light.png new file mode 100644 index 0000000000000000000000000000000000000000..0a985c38ff24c02dbe869fa3fcb95a836cba7afb GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;wmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIB<0X`wF?gc(TCNY40-L!0=I^L2XzhDM|2lDT$to-Ls*neUD-S&U;ffDJS zE{-7*my;6~=xMYV9+8xgh)tXm!N}Goz|1lGr`iO8TO1ELG?_Tf_!$Lef8_9B-Mr4I zBe_;u<=Dz)w~rl|@G|5I!z958J6NS%G}U;vjb? zhIQv;UIIC~0X`wF?gc*6r_7u-W!BWGKyv2v=`&_bnK5b7{OMC?Or0`o&YU^ZfdD8q zbtX`m}&zDy?zg{XzQwS(C&C|s(MB;LC!U66GS2?Kz zmQ_ib{Ruf~3f}x`M;{+Ja6p6M=?6^%0|VQJqHl~-4GvqBvB%c9%yYWoW3r!U_tcIW-&@8@wm=9OURlu(`#o5wp7=t2fhS3j3^ HP6fWd%@A^%POa=C@Y%k?sETB!#ZU*7A@{PS;HS&Ql8dSt(h$x zwnSVxr&xJUR5-&-vug)m{C|*U>&a>+dazgH^2}f-`QxdD8>R)#U9-{TYR|p7ff@HJ$LFufxyqMw#~<`aEs(R<#F!xdVA!AbJy98U)LrDyx5qc$-lfb_VD`B h_Yqq;rS{eK%Wr?h@l9>5UN_J`44$rjF6*2UngH-dhW`Kn literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/icons_padlock.png b/app/src/main/res/mipmap-mdpi/icons_padlock.png new file mode 100644 index 0000000000000000000000000000000000000000..e5852c69f05ea6dfca4ed96f58f8e3ffbd3d561e GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAv7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgB03-AeXbuaJ%GD!so+>@>X^$3;(`2{od>-)>w$M2v2;Qe`l`iA`VdM1Ar zfRcTlE{-7@=jR4RiZv*3Oo?Hb-t{|v+flDg&;36yHafwx!tnpYPT`&Tdpwp*O?~-z za)6l{^B0y+4vq;fQyNth*Dzd<^b%Jz+Fl`W;`_bEO=n)F8f=qmQfu1be)Bp@xoqzA zrijpaOwNZ+g@pfJ^+$03=Q5WoEL$t}R^8_LRd>_fRsGru_o6-8pE_Osy}y5hVb*z8 Uo%^AZYd~K0boFyt=akR{0Q)X#9RL6T literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/icons_remove.png b/app/src/main/res/mipmap-mdpi/icons_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..523091bdf23d3dd5282920b56237c666718640e8 GIT binary patch literal 289 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 B?f?J) literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/icon_eyes_closed_light.png b/app/src/main/res/mipmap-xhdpi/icon_eyes_closed_light.png new file mode 100644 index 0000000000000000000000000000000000000000..eff9952f9e67ff4a739a9055bfb2111589fa069e GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)ISkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?slb1^9%xx)=BWnZyA0bUc|n{DK+o$?snp-}XM=Ucg`9{q^g+K#3=w zE{-7Gx&}jxt;b z-FU#^sav;fpAlOJi*pron#}RIqk=!Xd)qW)Wus8Eak-aXL9+fqFv8<-K#8d=EX= z6IhYZwfR14GZRnet=*@X=J=JbU({`Uf3F_HG&6_E0! z7q(r$pz^?(1E8Jo#FdP{?UHx3vIVCg!08O^IqyPW_ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/icons_block.png b/app/src/main/res/mipmap-xhdpi/icons_block.png new file mode 100644 index 0000000000000000000000000000000000000000..317e8d003ddbbb1e672b5b8397f0a025021cda66 GIT binary patch literal 588 zcmV-S0<-;zP)Px#LQqUpMMrQ<0000D2@eJY2M7iU2?q%e3K0zn4G9Pd z4-66z5D)+W01yll4+{|x4G;$f2o4Jm5DgFz3=t3w5D^R$0000)Wp)7o000zpQchC< zfA7z4Kj5Dqe-IGAk6*90Promk($FdZ00D?eL_t(Y$K6!ha)lralxw)^Sn>aVwZWqh ztUd71=}em^oY^(Wvdc96yE1bGu&Wt_tB}ruA&O14_&kW$01$XSsqXk0exhciXxAYC zV#?$S*|I~xpUw^aqoWZ1(>0&`Jz>R(ZX3OqcD~IpLZBU7m$0@&Z%BB*gKO_frX)JD z2D*gNDa8%}mnaw`x+}a|pp{mo=9tZ7yXJG6xHZ9myL@2`5yxQbP#BT8~7#qR&MoQj&`#xhO-V<7UW)$M|F9YWANcQ6^X zTu#9=nd)#tNJYW>+*1=RcNq{Nj;HEmU<*a!`_&03 z5ln;ub?xT|g1wY13|5uh+6Sg36b2zUlvJ4Kkt&0Xl=F*QL#b%4r3r&9eY}fJUc|n{DK+k=iBd(Rm{KhUZ8({YgF4>pwT9t zE{-7_8GNi}JEJKZ&x0~~hiM7Bq#05T?}<80b0|pk3c96m^3gh`SuJl$O*q9? zoT&W8u7t+(66RAN>%&ZribyS6WU zf@+Pv;z~h>ZNH_2ehb-nZvLsX`qJL&zopr07;Fk$N&HU literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/icons_remove.png b/app/src/main/res/mipmap-xhdpi/icons_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..a33ec95aa75e82049f9b0ee53a5d6cfafac690f2 GIT binary patch literal 457 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)ISkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?slb1^9%xx)=ETx3KwdVg29S=D!V)0Y>JwU=iE@4h|p@OOT+aZ`DDdF5Z$L zzhH*?2X^xB=f|J&7wFHoS~V#gXtau_i(`nz>Er~7I}NG379@OR@+maFyW62aQ!@6? zg;8ph<%P_P3c@(&bvTo+iuPiLOlg~ z!ZDn)7_-+eVsm~Ys&V)m+bWm$zB97dFZ6nH=#L(E$=ZbqA|1vCZ}xUfNZ7~C&X&;1 zqLOE9AabZjD9yp+!Im1mUB&v&lKWoB?Qzxcxbcol!CT?bl%IJbn^-0>?ojG__$Ktp z3Rf>RnH8OmjRl_=)r4p0#w;q&SGsvzvO1i1l8fv6I9-RbPGOBeZm(vcQtm7Rk%LaL o?KgUuw_J+}*l;Ov!gO|qc*FL+X}8^*fC0(i>FVdQ&MBb@0CYyS0RR91 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/l_empty_img.png b/app/src/main/res/mipmap-xhdpi/l_empty_img.png new file mode 100644 index 0000000000000000000000000000000000000000..55906f28569893ea589ddb5892c450e009b07b8a GIT binary patch literal 3301 zcmb`J`8yQe+sE~do+2c&WoaXdl&m8&$yOLyX2>#B8q1J<9hy*LkR`k9#F#N-C!@iK zD0|V^YDmHuX2e*UVffDH4|uNUm*-sPocp}b{d(W$I@kH-psg%T1^K1xp}1lgG0;USF3tZ)V0$^v3+>Tkh* zc@xvt6JC_O$6*y3GA1e1Og$-h{4*TZoS`PFZO27 zaM&+2Sj-jH)-rbyWy(096X{W!doMJ&WNmHj=6p5tJ@atAGs>9GmD$rA?wmEl*=pV5 z&>AL4{#=stD>1K!OLDVwpW|3eDz_ll#jSZrt>AjO#~mIXE|V*!NPb+)MaeV! z>qC1R)4S=WZ00<>*mbWflUieK|N;u2Ry0w z#nJxfQ{FY5W)^eQ^J0y!djlAlbXB?VW1rdIBXcNkHNZD)ZbVkRw?7ARckJ?mCWIh zcLmZGetQIWQ6J0<4QffxJh|g7&j?2e+dE6CWd+C7#A9U6y(J{_D|E>yi<|koiJ9QhUo&ZJuMHM3-GyiO>E#p&si&2B-{Pig;D05RXw6QZg~H}XFd@>y)p6#Gxx6y-|HD1{uyNh*XBcH)#iecFH1 zCNePiZay?BV^2=c*J>#Jv;et}(OjyrPzEq-w`5c*6WnvfnpB_aV%#UeHN2R+8kQ@54^Me8UbDMd?%oPE~Fm!^&$4=-4V z$7o0ICyz<5Vqa|yjnyp&tX%~Q)f}=C+Tto3c%T&Y{bzfLyCa}pWA(ZwUb~M4&22nG z=+@CH)FCC6)EO>}McXp(_pwUxBb|i_z)A7AF5_Xk5YR1X9U(Z}%Qw8nG_;n}WZbI# z1q_zYUo02}yN&6N3h?f&{*J#rHUtET!E4%4EJlEQ!uBHzZI_L%UANd|UgerH)>{}e z(shATXpT}cD}FHH#FQ3K7M5(3z<=?{9$YMV^(0BSNFvC-UwB?V-hG(q+#UIIpPFha z`uc0QCkRj=SCIVbStqXphUyd$AakYIRc=%bfwn6Ri(?6NZ@XRDFs{2oFHKi z$^PUYinGF^Mk3B4iZN_^;Mo6JnTwu zttjE1-@w#63>{b4pIg1&kwcSAiPF@?tcq+5Vly`UMWM2t>G%B)txY&Qm4f>-3ZmqI zvn+%hC=pOJC};N!%4s(5+U#9D3S zJUuir?at(WlB1m_`M!^(?8=Rb5fI2RA7K)pY8rlWx~pRHE!KB8x8PRyMc1cCS&uO8 zVw35zEUo$|uRN?&Z-}6={;066W;t37>vk6|%6e4I1-=Fs&fP@~K|uBB)w?d4)3>dK zeXtG|QCay3Wktr@&YIir3CkA&(cczd8#RM9$>`b+*=Z69Y=K0grl7V-tH&cJL|PAB zr*CuRIC^y;REF?R0?RQj2&Dt51#K8Ni4ZT{>*%}M;$)7UOjLekm_mB_FBh(xFaIYxr|Vm4ztt)jXT_kBn>mi91!(g;#VV^>xfZMdD( z)goGykqvZQ3JeJ&14WC^e6fI-^C>^ZPOfLE3X|mmz<(@kLr}Hjy0439&B4OApzSJO z`iqpY;u_L#q#`z#6}5QvJnOU z8N*0BwSYqgXh=0(fRPI=ffHCd$>wzmB4&*ZWMEY(cq%3|h;;d*>-L4WcKS{!YQzyk zO^$*^k@HlQ75I5G_4I|)ka5@C3|NxY@I&F>($Hb^ZT*J)9GdNSq0igfD_+1+CPj7y zLTW`H@@YY_%(ISfsvc~69mBFPvxB!ay~%tBXXU-1s!x|(-fCb+#C8CYRZ^Ixpx#>< zF$f^`rj;Q1|L*il6UFE1 zN5beiVnyx0q)^2>QRqb4OYx?Q#FemtKSiLVyv&l20ooE|y|Sdl!C0Fg5Y4DW#3+m@BIg_wzHv|6HLmnM|0zx)6w@FO`?p($k;Kbw~i zOtL*4mSOcprRC_qIXJt;RC_|%wsCG$mxy!0T7OB_Q{c~csxmUTnZk(RhM<*9WH6|- jq|I1c<$wM6MrZz!ce`)XV~i^3{TI4tY-vQe^Dy?mU7(#Y literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_email_light.png b/app/src/main/res/mipmap-xxhdpi/icon_email_light.png new file mode 100644 index 0000000000000000000000000000000000000000..27551c028b2e727e17114482a440c19294de4ac0 GIT binary patch literal 729 zcmV;~0w(>5P)Px#Bv4FLMMrQ6n3tEFm6e&7l$n;6n3j~8 zm6e~Dl$n>5nWp$XP5=M^3v^OWQvl_^rXyyLM1K&_FQ`ch0006!Nkl-cI4sGE*Ejg2Ka@1|ZU(y0Z}a|!U&MDkq)co(@VZ9T|r zu0#Uh42RNk>$4CT^v&2Xz?!EJtl&_}hBwx%0(|1o9temu;SpozK&DitG9i8@siZIL zW0Gq77Kf^#=Iq0Ul5SHJccjx7i4&Qs@dcB_m3$X~5PXF$->*aabY6-}-U(0(6VYTR z!!RC=F~|#TdQnWyl*8=lDtwL?iVJ-bnuX8?0kO@|?iy!0`4qm1bd)At;8Qsx(c(6f zCc(7mk|+OKq+!F921QA8Kl&{V>VRkIRh}K&FOOSR(4o)>vfv^4vul|kx?gx0Qtd{d zB)e}?3j_+?Au(e82GKpU-Rn?7yDZ1U&bIOy(+LX>rGJOERD<#0_N3&6k6#%5JQ<;y zJidkyW8z<8#elDpF;*TmDXs+)Qp2_xl9rXB*93Kog0W|YdPM1|!m9~d7RT=tt2=!D z2WwqH&@}qn8!yChnWm&c=ECYJ?L1b+Pt@5Rv^F~0V|lYsakHfR9(l?h9QWeFb+M<+ z{3!0K%g^J?n7+vcf9NMMSlUF6YQ5qQx5#d@gHEY&Uc|n{DK+eQ}5RAfA21^e!hOcaqjiSK%>(= zT^vI^j=!B^?|s-o;+XLN3sdwMR~9dHUf!_dh0u!&u8tQ%PbOS13V4&XVD)@QZmUk` z1FrjB*{jupUVe_<^K9M8yHEXMT5X(*cK&&H@B7~BcQVVv*4FEmXZ?Sk`|qrHnMTCN za_*U>TINTz^BHQTw=n5=d&R&o++P`9R z$C}KxqS7+muN!ZjJAGBbU|l-HtLgC@4Zn(gSbENSmDBquG0qDsulR2Wvf9?@FKflj z_l3`9UcdcLVXTlt`@}3)u&efF-tlq*eBhohcHTX0+g+*7(eze>^ zzx=e@gQmCoQx|M^{`TToXDlC^ex;T3HPfA|B1-u@?~8f68%>Fl{id+v%askxhZ3)R z&-0VGHM{D_qu(muyHB5Y&*^(!WY4`Ka*pa(hsk#mnUX&CJT2{?BUGez_+W literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icon_lock_light.png b/app/src/main/res/mipmap-xxhdpi/icon_lock_light.png new file mode 100644 index 0000000000000000000000000000000000000000..1355549c565447c71d1e45a478404b7c781d8278 GIT binary patch literal 643 zcmV-}0(||6P)Px#Cs0gOMMrQNoztB&wOcSn!0005vNklc5$iB?x=yjW3~7_BHyu`#ib%7#Kaiz|qQ4UJmUT9{Y} z=L6*Xqg?QDv%52N+Bgk6%WrpQ_r953$N5ioIPZoRH=~&Y7s|riC?+vv6ty8U<8^#l zTZWF+-@RHUP(Rlqq$XPN9VeLu-Xtal^!-62sc0#x3XuN6*TmJ@QBzni39Ns&tANiR z5(y+B1(iY=otTSr78;{*)UnJ$CwPvWGG2rec#oWx02R@p&hJBQ&)du>oAo>?@G>;( zaLghMyJvM`TG~=>U_)J>QSQp!-u{;$_Lj1Yh97||y=P15)QZSTki03ET_(&J5uq&C zygs|q7$f{DLSIm>wjS-B0Ct$HcX3MGNp!g{6`-NXo2?LeP3W4usV-gxc^~A2Y@nia zqkU^yrCuB;@DQ1oLKQ94KZaU7RHTWoZ6oMA(h)>M;spV!NS}qC_>A;{pQIv3Q;4cy znv_dodf|+beMc78Q%Jc?v7Io623(~nqh}Pb(8`3QYaC39xp7ohH_TDyl{)2Gv$xd6 zyG=WeRKa?;Zy%s}R?7@+?(AXUTUoteSGraEwyT>=pUM2VL3Io4tKjysRQh~jluFH6 d|G&JvJ^Px#JWxzjMMrQ<3kM7g2@VJc2nhxW2n7iY2@VYk4G;_x z2nPrd5D*Lr3<(Dc5DO6i0000001F5V4hj$v3=;qV0DF0wZ2$lO5_D2dQvl$9Z$Iz9 zU!NZkFHesUpRdqBf~5@r00K`*L_t(o!|j&YlB^&MhCy}#MScHwJ+ib4M0-%{TueEAlFLUVWBhF1*XZO&6$~)tKI{l_q zkD}^#st|D3tdL|=Nb*P_-_z{(w#eGZIOo{=>z2xmHFXcSwx;Vk68a(K|C}kBQaU_@ z41}{K7~|q6t)&dH(sAx&NA?p*jZ0?ZHA=1jnwLK*kzh+km<28vl{h&mgqOFJ`pg!G@1T&OX)Z`1|D;yfQw&1frz8DpCk@`EOw4Ia>iJdX zzi_A`je%b}G@VcS@QI-y5&y2rv*@DXssF&Bie&t|E>=E9UqBR9q{I8w$_GIisRD)5 z(O$^q7Ftd+CCJRz_lC+EW+#!VBV#{eNkneuQ2r5BBv+O{o>GwULqiS~scOh{0Yj$u zhUv;lm>?lh_zE+ITSN-Ph)!SB z-St4NG*E^mmgV5m|BkyYEHlL^5Qm${V4;QMonoBNW zn!9wlX36OV7H5jWdf6|1F{!C|S1J+lxkajh(ch!>W$hNbKNZezPh3?`8jK?;QuOB#Zrs#r-#Zwmc_RZe0^L4$h&o@p<>S@etyv&jsyy=Vi zsskbwLLtxM|yH($`=%AKl~xckfHFcs0M&lWNW zEdBp?Zu_&DC65+;x$*4%;^Z|F_J@vTY)sv7bgID4@ZUS5uRP)w-0OU<;ulxVK{n&1 z$4W0bUJ0)H=h?AKVzHs!L(6HAVzSQ-u13ABJ-PNrio{9YMZSkSTwgys{92qbw&nP7 SPm>T(+VOPtb6Mw<&;$Sl!xVS` literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icons_remove.png b/app/src/main/res/mipmap-xxhdpi/icons_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..73a03ceccfa8b5a22219e826bbf46f6ef2ce27f5 GIT binary patch literal 648 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/icons_block.png b/app/src/main/res/mipmap-xxxhdpi/icons_block.png new file mode 100644 index 0000000000000000000000000000000000000000..e13dcb36e0624899b89b99a470aa17db32a99762 GIT binary patch literal 978 zcmV;@11Px#IZ#YgMMrQ<3kVAg3=9kj4hjYf3kVGe1_=%d5DWh!ZJykAkZ9-A-;mma36ekNw zNH#c4H*Vax#yo31(;wM3iZ2mNI6K4w2`(N(=7489N zFq<`HtS3ZUxrKyx=Pb#&DfIr^axB+NppcX)#GOte$&5Lz&@ki(61Ot57@58(gi69E zay!673S6YDve*b42{gPKvz7OUfYq-E?M_lrKi}LzAgW#_RR{hDg6SWeKvfC+C<6Yw zEUIUEsuf+`zTqZ|9)eVEL@maB^;%Spp!#E6f)FSg;;vd(d<0~wX9L>7PE@@29K%M* zijeh#+MG>IZuv{U3Qnyzs%j;rbVX&4P%T?9L4+Z*f@PR}F=!Sc9JcSKVUPfY(9=N7 z_BewuH`IJ|l$A>G6-t@$)^Ch}H!ASQ3ND24qpefP9tUvw*7T+wFXIJ?b^{qV5L}RLnmF3Baei^9DL7& z(Qi8;@iQs*PYmg7@R+L()-B$+W+5-{4P$fQYk|>ZN zt$IXKue&#wvMlE3cIG34fbT+1Pj{^uMDa4n5F?~uRnA&8o7gTB#9&{`0al}?r4I6) zlL3a9#2gH9n<|e{e9OI!fgaY|o)0Pn00T(ist+JFf-?h1U_a31(EvpmKmz)~lV}Vw znGgmK207n@mOKqF3wA;nbiRkkP3F#O2=uMm$O&PPFhS+9`u!2r02X!(NU11KqBwM| zoD~Lw6uVWdUon(CWKgxq3=EDj+%S>ZMuM$9F;sh|7cDMY2lcp10x+a*il)1F7{|U( zNLa+FV!!@wOF-=V1m&O-^;xX;{|&PjUiz6Zbe*-Dgje%xMol^n`KL;LD^1(I)Fa>9 zCR_!Wzfe@4Qb_(w^JxeaA`XE;jUNJU+_=$-Kkhkw;qSTc9RL6T07*qoM6N<$f*stM A0ssI2 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/icons_padlock.png b/app/src/main/res/mipmap-xxxhdpi/icons_padlock.png new file mode 100644 index 0000000000000000000000000000000000000000..492b16a553d7c4fa994d8c9475badb3fe4100a2e GIT binary patch literal 806 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeE3?v1%WpM*3mUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIC~0X`wF?gc(TCXrz6wz%a$rF$uNyVSnlpD&=lexgC>B?bnj zT2B|pkch*{2@+u=7dvr4wKjtRv7j8@cMWKEO408X7|MAuhS)#_3L8a8yxgzzw>J6 zuMHU$-vyTQ$?YtUU_5sz^Qg7V1JSatYYK!}7dr6OPn2Yzl;!8NasKZaiXLAy!{nP& zmL+znHysgAI6wFOt_?GvFixpx-rI0cPG-TO4~pNI+&HQ;G?KoWDZl%W#&j&*eA_3c zbjHnm(IE`7R*e21zX=_Vs+r0z9T3EL`8@wev5VXWuUn6+OwFI8an#1@#9Gp3Wj<@STmRlfVAc zF{SRKJR!fO4T@zlBd18FZ)Maysh1%3P5+}=k(fYW*hBrNzdo3(ow0FhQDMa?N!y&I zG8=AG>|iYS{K=6meT$*|vs7@`ZvOO_S?zn*MYd;LTg>Du6KZ|pQ9E}*N#_R3Y0@F@ z?MsLRH!Zas?d8i|IYUUQ@?w83Ky&#*|`gju23uc zT3oRFluyp9bP0l+XkKzlcFJ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/icons_remove.png b/app/src/main/res/mipmap-xxxhdpi/icons_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..da1adc6354458c18b8a742fb67dd3cd863ac7a7b GIT binary patch literal 755 zcmVPx#Do{*RMMrQ<|2RAUKtTUFJpVX6|2RDVH$4A0J^wg7 z|2{weIy(P2JpVX5|2RAh+$E{b3w2udJe;{!n?f*=P<&_)6Q6|2A%f+7f7C@2ID1$!;D5`vAb zuQva|Gr0sK`(NC>lQWr}+4YEpMW(ym`DS*$nVX$8jIMO$AIU>@b)2!Mt&9C%sZXr4 zNJh@I>gED#lkJQ~e~AGZDaX@itg1pBF+@gb{mD?n&z)Qw#?)@M7=E8q`l&$S^D>Il z+)0ZSk2=&8jnvf;bZBu1m~C~n{T+t zdWo;kVSrw~(ZEBl;%smiUIw+};s6WveTSNf=y;Y^Ip1}v1P+kX3M@v(-Lj@=yfVv8B2UFd{SW^QShN*lfdS%clXBm5J z0}L_t_MHw%oS%IOU||6FF98V*P{shUgN{wBE^!AiaeeyIkN~>kb2}^Vr2YqTq*fK{ z7d0xnCg913bZJ1J9HI?V3G)hBpVhU>54jopN>&TVjYYP5@n0Q6;wrL{)|ln%%vN7n zavjX5FU4l(*RH9)*vp-d4)KQ*vq+CWI2~~ZtZ;;@f#?Q`iYYM|5^L>4Vo@<9hAx=5 z_A`d=RTwfjVuS9zVNB}>-T0%lk+Nm|7v+N>wGvOC$9deYzmd_tQEpqDyw3mX6?C(> lB_2(ixzp|gvMc{dz5wR^Z$ShF8SVf8002ovPDHLkV1mw|M9KgF literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/l_empty_img.png b/app/src/main/res/mipmap-xxxhdpi/l_empty_img.png new file mode 100644 index 0000000000000000000000000000000000000000..412d54dc08f12836db87e105e4eeaa48ccd63565 GIT binary patch literal 5970 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 79684f9..2cd8e9d 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -23,10 +23,11 @@ ログイン レッツ・レヴ・ナウ または - ログイン状態を保持する + ログインを記憶 パスワードをお忘れですか? パスワード メールアドレス + パスワードの確認 メールアドレスは必須です パスワードは必須です メールアドレスを入力してください @@ -91,7 +92,7 @@ メールの送信に失敗しました。ネットワーク接続を確認するか、後でもう一度お試しください。 %1d秒前 %1d分前 - 同意する + パイパイに同意する Rave Nowのプライバシーポリシー ギャラリー チャット @@ -114,9 +115,10 @@ この投稿を報告する理由は? 閉じる ブロック済み + ブロック済みユーザー フィードバック Rave Nowについて - アカウントとセキュリティ + アカウントセキュリティ アカウントを削除 本当にアカウントを削除しますか?この操作は元に戻せません。 確認のためパスワードを入力してください diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index cf26ca3..13398da 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -22,10 +22,11 @@ 登录 确认 其他账号登录 - 记住我 + 记住登录 忘记密码 密码 邮箱 + 确认密码 邮箱是必填项 密码是必填项 输入邮箱 @@ -92,7 +93,7 @@ 邮件发送失败,请检查您的网络连接或稍后重试。 %1d秒前 %1d分钟前 - 同意 + 我同意派派的 用户协议 图片 私信 @@ -116,8 +117,9 @@ 关闭 关于Rave Now 已拉黑 + 被屏蔽的用户 反馈 - 账户与安全 + 账号安全 删除账户 注销账号为不可逆的操作,请确认 输入密码以确认 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9a3cf4f..f2bcb18 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,10 +22,11 @@ Log in Let\'s Rave Now or - Remember me. + Remember login Forgot password? What\'s your password What\'s your email + Confirm password Email is required Password is required Enter your email @@ -90,7 +91,7 @@ Failed to send email. Please check your network connection or try again later. %1d seconds ago %1d minutes ago - I agree to the + I agree to Paipai\'s Rave Now’s Privacy Policy Gallery CHAT @@ -113,9 +114,10 @@ Reason for reporting this post? Close Blocked + Blocked Users Feedback About Rave Now - Account and security + Account Security Remove Account Are you sure you want to remove your account? This action cannot be undone. Please enter your password to confirm