From 13ed16078bd724573caad1e94e29952ccd5e3701 Mon Sep 17 00:00:00 2001 From: zhong <2724770085@qq.com> Date: Thu, 23 Oct 2025 17:56:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8B=B9=E6=9E=9C=E8=B4=A6?= =?UTF-8?q?=E6=88=B7=E7=99=BB=E5=BD=95=EF=BC=9B=E6=96=B0=E5=A2=9E=E6=8B=89?= =?UTF-8?q?=E9=BB=91=E5=8A=9F=E8=83=BD=EF=BC=9BUI=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ravenow/ui/index/NavigationItem.kt | 6 +- .../index/tabs/profile/BlockConfirmDialog.kt | 178 ++++++++++++++++ .../ui/index/tabs/profile/ProfileV3.kt | 197 +++++++++++++++++- .../com/aiosman/ravenow/ui/login/login.kt | 88 ++++---- .../com/aiosman/ravenow/ui/login/signup.kt | 2 +- .../res/mipmap-hdpi/apple_logo_medium.png | Bin 0 -> 356 bytes .../res/mipmap-hdpi/icons_infor_off_bell.png | Bin 0 -> 348 bytes .../res/mipmap-hdpi/icons_infor_off_eye.png | Bin 0 -> 477 bytes .../res/mipmap-mdpi/apple_logo_medium.png | Bin 0 -> 291 bytes .../res/mipmap-mdpi/icons_infor_off_bell.png | Bin 0 -> 248 bytes .../res/mipmap-mdpi/icons_infor_off_eye.png | Bin 0 -> 396 bytes .../res/mipmap-xhdpi/apple_logo_medium.png | Bin 0 -> 423 bytes .../res/mipmap-xhdpi/icons_infor_off_bell.png | Bin 0 -> 374 bytes .../res/mipmap-xhdpi/icons_infor_off_eye.png | Bin 0 -> 560 bytes .../res/mipmap-xxhdpi/apple_logo_medium.png | Bin 0 -> 541 bytes .../mipmap-xxhdpi/icons_infor_off_bell.png | Bin 0 -> 510 bytes .../res/mipmap-xxhdpi/icons_infor_off_eye.png | Bin 0 -> 741 bytes .../res/mipmap-xxxhdpi/apple_logo_medium.png | Bin 0 -> 620 bytes .../mipmap-xxxhdpi/icons_infor_off_bell.png | Bin 0 -> 623 bytes .../mipmap-xxxhdpi/icons_infor_off_eye.png | Bin 0 -> 897 bytes app/src/main/res/values-ja/strings.xml | 14 +- app/src/main/res/values-zh/strings.xml | 12 +- app/src/main/res/values/strings.xml | 13 +- 23 files changed, 452 insertions(+), 58 deletions(-) create mode 100644 app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/BlockConfirmDialog.kt create mode 100644 app/src/main/res/mipmap-hdpi/apple_logo_medium.png create mode 100644 app/src/main/res/mipmap-hdpi/icons_infor_off_bell.png create mode 100644 app/src/main/res/mipmap-hdpi/icons_infor_off_eye.png create mode 100644 app/src/main/res/mipmap-mdpi/apple_logo_medium.png create mode 100644 app/src/main/res/mipmap-mdpi/icons_infor_off_bell.png create mode 100644 app/src/main/res/mipmap-mdpi/icons_infor_off_eye.png create mode 100644 app/src/main/res/mipmap-xhdpi/apple_logo_medium.png create mode 100644 app/src/main/res/mipmap-xhdpi/icons_infor_off_bell.png create mode 100644 app/src/main/res/mipmap-xhdpi/icons_infor_off_eye.png create mode 100644 app/src/main/res/mipmap-xxhdpi/apple_logo_medium.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icons_infor_off_bell.png create mode 100644 app/src/main/res/mipmap-xxhdpi/icons_infor_off_eye.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/apple_logo_medium.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/icons_infor_off_bell.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/icons_infor_off_eye.png diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/NavigationItem.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/NavigationItem.kt index f7ad435..020bfc1 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/index/NavigationItem.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/NavigationItem.kt @@ -16,9 +16,9 @@ sealed class NavigationItem( ) { data object Home : NavigationItem("Home", - icon = { R.drawable.rider_pro_nav_home }, - selectedIcon = { R.mipmap.bars_x_buttons_home_s }, - label = { stringResource(R.string.main_home) } + icon = { R.mipmap.bars_x_buttons_home_n_copy }, + selectedIcon = { R.mipmap.bars_x_buttons_home_n_copy_2 }, + label = { stringResource(R.string.main_ai) } ) data object Ai : NavigationItem("Ai", diff --git a/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/BlockConfirmDialog.kt b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/BlockConfirmDialog.kt new file mode 100644 index 0000000..1d91671 --- /dev/null +++ b/app/src/main/java/com/aiosman/ravenow/ui/index/tabs/profile/BlockConfirmDialog.kt @@ -0,0 +1,178 @@ +package com.aiosman.ravenow.ui.index.tabs.profile + +import androidx.compose.foundation.background +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.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.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +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 com.aiosman.ravenow.LocalAppTheme +import com.aiosman.ravenow.R +import com.aiosman.ravenow.entity.AccountProfileEntity +import com.aiosman.ravenow.ui.composables.CustomAsyncImage + +/** + * 拉黑确认弹窗 + */ +@Composable +fun BlockConfirmDialog( + userProfile: AccountProfileEntity?, + onConfirmBlock: () -> Unit = {}, + onDismiss: () -> Unit = {} +) { + val AppColors = LocalAppTheme.current + + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.BottomCenter + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .background( + color = AppColors.background, + shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp) + ) + .padding(24.dp) + ) { + // 用户头像 + Box( + modifier = Modifier + .align(Alignment.CenterHorizontally) + .padding(bottom = 16.dp) + ) { + CustomAsyncImage( + LocalContext.current, + userProfile?.avatar, + modifier = Modifier + .size(60.dp) + .clip(CircleShape) + .background( + color = AppColors.background, + shape = CircleShape + ), + contentDescription = "用户头像", + contentScale = ContentScale.Crop + ) + } + + // 确认文本 + Text( + text = stringResource(R.string.confirm_block_user, userProfile?.nickName ?: "该用户"), + + fontSize = 18.sp, + fontWeight = FontWeight.Bold, + color = AppColors.text, + modifier = Modifier + .align(Alignment.CenterHorizontally) + .padding(bottom = 24.dp) + ) + + // 说明信息 + Column( + modifier = Modifier.padding(bottom = 32.dp) + ) { + // 第一条说明 + Row( + modifier = Modifier.padding(bottom = 12.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + painter = painterResource(id = R.mipmap.icons_infor_off_eye), + contentDescription = "", + tint = AppColors.text, + modifier = Modifier.size(20.dp) + ) + Spacer(modifier = Modifier.width(12.dp)) + Text( + text = stringResource(R.string.block_description_1), + fontSize = 14.sp, + color = AppColors.text, + lineHeight = 20.sp + ) + } + + // 第二条说明 + Row( + modifier = Modifier.padding(bottom = 12.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + painter = painterResource(id = R.drawable.rider_pro_notice_mute), + contentDescription = "", + tint = AppColors.text, + modifier = Modifier.size(20.dp) + ) + Spacer(modifier = Modifier.width(12.dp)) + Text( + text = stringResource(R.string.block_description_2), + fontSize = 14.sp, + color = AppColors.text, + lineHeight = 20.sp + ) + } + + // 第三条说明 + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + painter = painterResource(id = R.mipmap.icons_infor_off_bell), + contentDescription = "", + tint = AppColors.text, + modifier = Modifier.size(20.dp) + ) + Spacer(modifier = Modifier.width(12.dp)) + Text( + text = stringResource(R.string.block_description_3), + fontSize = 14.sp, + color = AppColors.text, + lineHeight = 20.sp + ) + } + } + + // 确认拉黑按钮 + androidx.compose.material3.Button( + onClick = { + onConfirmBlock() + onDismiss() + }, + modifier = Modifier + .fillMaxWidth() + .height(48.dp), + colors = androidx.compose.material3.ButtonDefaults.buttonColors( + containerColor = AppColors.text + ), + shape = RoundedCornerShape(24.dp) + ) { + Text( + stringResource(R.string.block), + color = AppColors.background, + fontSize = 16.sp, + fontWeight = FontWeight.Bold + ) + } + } + } +} 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 49bb9cd..8ee1612 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 @@ -99,6 +99,8 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.io.File import androidx.compose.foundation.rememberScrollState +import androidx.compose.ui.res.stringResource + @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class) @Composable fun ProfileV3( @@ -127,6 +129,8 @@ fun ProfileV3( var showAgentMenu by remember { mutableStateOf(false) } var contextAgent by remember { mutableStateOf(null) } var showDeleteConfirmDialog by remember { mutableStateOf(false) } + var showOtherUserMenu by remember { mutableStateOf(false) } + var showBlockConfirmDialog by remember { mutableStateOf(false) } val context = LocalContext.current val scope = rememberCoroutineScope() val navController = LocalNavController.current @@ -154,9 +158,13 @@ fun ProfileV3( val toolbarAlpha by remember { derivedStateOf { - val maxScroll = 500f // 最大滚动距离,可调整 - val progress = (scrollState.value.coerceAtMost(maxScroll.toInt()) / maxScroll).coerceIn(0f, 1f) - progress + if (!isSelf) { + 1f + } else { + val maxScroll = 500f // 最大滚动距离,可调整 + val progress = (scrollState.value.coerceAtMost(maxScroll.toInt()) / maxScroll).coerceIn(0f, 1f) + progress + } } } @@ -478,7 +486,10 @@ fun ProfileV3( isSelf = isSelf, profile = profile, navController = navController, - alpha = toolbarAlpha + alpha = toolbarAlpha, + onMenuClick = { + showOtherUserMenu = true + } ) PullRefreshIndicator( @@ -486,8 +497,70 @@ fun ProfileV3( refreshState, Modifier.align(Alignment.TopCenter) ) + + // 其他用户菜单弹窗 + if (showOtherUserMenu) { + ModalBottomSheet( + onDismissRequest = { showOtherUserMenu = false }, + sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true), + containerColor = Color.Transparent, // 设置容器背景透明 + contentColor = Color.Transparent, // 设置内容背景透明 + dragHandle = null, // 移除拖拽手柄 + windowInsets = androidx.compose.foundation.layout.WindowInsets(0) // 移除窗口边距 + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .background(Color.Transparent) + ) { + OtherUserMenuModal( + onBlockClick = { + showBlockConfirmDialog = true + }, + onReportClick = { + // 实现举报逻辑 + }, + onCancelClick = { + showOtherUserMenu = false + }, + onDismiss = { showOtherUserMenu = false } + ) + } + } + + // 拉黑确认弹窗 + if (showBlockConfirmDialog) { + ModalBottomSheet( + onDismissRequest = { + showBlockConfirmDialog = false + }, + sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true), + containerColor = Color.Transparent, + contentColor = Color.Transparent, + dragHandle = null, + windowInsets = androidx.compose.foundation.layout.WindowInsets(0) + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .background(Color.Transparent) + ) { + BlockConfirmDialog( + userProfile = profile, + onConfirmBlock = { + // 实现拉黑逻辑 + }, + onDismiss = { + showBlockConfirmDialog = false + showOtherUserMenu = false + } + ) + } + } + } } } +} //顶部导航栏组件 @Composable @@ -496,14 +569,14 @@ fun TopNavigationBar( isSelf: Boolean, profile: AccountProfileEntity?, navController: androidx.navigation.NavController, - - alpha: Float + alpha: Float, + onMenuClick: () -> Unit = {} ) { val appColors = LocalAppTheme.current Box( modifier = Modifier .fillMaxWidth() - .graphicsLayer { this.alpha = alpha } // 应用透明度 + .graphicsLayer { this.alpha = alpha } ) { Column( modifier = Modifier @@ -555,6 +628,21 @@ fun TopNavigationBar( .size(24.dp) .padding(16.dp) ) + } else if (!isSelf) { + Box( + modifier = Modifier + .noRippleClickable { + onMenuClick() + } + .padding(16.dp) + ) { + Icon( + painter = painterResource(id = R.drawable.rider_pro_more_horizon), + contentDescription = "菜单", + tint = appColors.text, + modifier = Modifier.size(24.dp) + ) + } } } Spacer(modifier = Modifier.height(8.dp)) @@ -661,7 +749,7 @@ fun AgentMenuModal( if (isSelf) { MenuActionItem( icon = R.drawable.rider_pro_moment_delete, - text = "删除" + text = stringResource(R.string.delete) ) { onDeleteClick() } @@ -737,3 +825,96 @@ fun DeleteConfirmDialog( containerColor = AppColors.background ) } + +/** + * 其他用户主页菜单弹窗 + */ +@Composable +fun OtherUserMenuModal( + onBlockClick: () -> Unit = {}, + onReportClick: () -> Unit = {}, + onCancelClick: () -> Unit = {}, + onDismiss: () -> Unit = {} +) { + val AppColors = LocalAppTheme.current + + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.BottomCenter + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp) + .padding(bottom = 11.dp) + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .background( + color = AppColors.background, + shape = RoundedCornerShape(8.dp) + ) + ) { + // 拉黑选项 + androidx.compose.material3.TextButton( + onClick = { + onBlockClick() + }, + modifier = Modifier.fillMaxWidth() + ) { + Text( + stringResource(R.string.block), + color = AppColors.error, + fontWeight = FontWeight.Bold, + fontSize = 16.sp + ) + } + + // 分割线 + androidx.compose.material3.HorizontalDivider( + color = AppColors.divider, + thickness = 0.5.dp + ) + + // 举报选项 + androidx.compose.material3.TextButton( + onClick = { + onReportClick() + onDismiss() + }, + modifier = Modifier.fillMaxWidth() + ) { + Text( + stringResource(R.string.report), + color = AppColors.error, + fontWeight = FontWeight.Bold, + fontSize = 16.sp + ) + } + } + + Spacer(modifier = Modifier.height(8.dp)) + + // 取消按钮 + androidx.compose.material3.TextButton( + onClick = { + onCancelClick() + onDismiss() + }, + modifier = Modifier + .fillMaxWidth() + .background( + color = AppColors.background, + shape = RoundedCornerShape(8.dp) + ) + ) { + Text( + stringResource(R.string.cancel), + color = AppColors.text, + fontSize = 16.sp + ) + } + } + } +} diff --git a/app/src/main/java/com/aiosman/ravenow/ui/login/login.kt b/app/src/main/java/com/aiosman/ravenow/ui/login/login.kt index 806097b..1ded727 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/login/login.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/login/login.kt @@ -6,6 +6,7 @@ import android.util.Log import android.widget.Toast import androidx.compose.foundation.Image import androidx.compose.foundation.background +import androidx.compose.foundation.border import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.gestures.rememberScrollableState import androidx.compose.foundation.gestures.scrollable @@ -272,16 +273,10 @@ fun LoginPage() { modifier = Modifier .fillMaxWidth() .padding(horizontal = 24.dp) - .padding(top = 100.dp), + .padding(top = 60.dp), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { - Text( - text = stringResource(R.string.join_party_carnival), - fontSize = 14.sp, - color = AppColors.text - ) - Box( modifier = Modifier .size(30.dp) @@ -302,17 +297,8 @@ fun LoginPage() { ) } } - Box( - modifier = Modifier.fillMaxSize() - ) { - val lottieFile = if (AppState.darkMode) "login.lottie" else "login_light.lottie" - LottieAnimation( - composition = rememberLottieComposition(LottieCompositionSpec.Asset(lottieFile)).value, - iterations = LottieConstants.IterateForever, - modifier = Modifier.fillMaxSize() - .padding(30.dp) - ) - } + + Spacer(modifier = Modifier.height(20.dp)) Column( modifier = Modifier @@ -321,6 +307,25 @@ fun LoginPage() { horizontalAlignment = Alignment.CenterHorizontally ) { Spacer(modifier = Modifier.weight(1f)) + Box( + modifier = Modifier + .fillMaxWidth() + .height(400.dp) + + ) { + val lottieFile = if (AppState.darkMode) "login.lottie" else "login_light.lottie" + LottieAnimation( + composition = rememberLottieComposition(LottieCompositionSpec.Asset(lottieFile)).value, + iterations = LottieConstants.IterateForever, + modifier = Modifier.fillMaxSize() + ) + } + Text( + text = stringResource(R.string.join_party_carnival), + fontSize = 17.sp, + fontWeight = FontWeight.W600, + color = AppColors.text + ) // Image( // painter = painterResource(id = R.mipmap.invalid_name), // contentDescription = "Rave Now", @@ -343,7 +348,7 @@ fun LoginPage() { // color = AppColors.text // ) //注册tab - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.height(48.dp)) ActionButton( modifier = Modifier.fillMaxWidth(), text = stringResource(R.string.sign_up_upper), @@ -354,25 +359,32 @@ fun LoginPage() { NavigationRoute.EmailSignUp.route, ) } -// if (showGoogleLogin) { -// Spacer(modifier = Modifier.height(16.dp)) -// ActionButton( -// modifier = Modifier.fillMaxWidth(), -// text = stringResource(R.string.sign_in_with_google), -// color = AppColors.text, -// leading = { -// Image( -// painter = painterResource(id = R.drawable.rider_pro_google), -// contentDescription = "Google", -// modifier = Modifier.size(36.dp) -// ) -// }, -// expandText = true, -// contentPadding = PaddingValues(vertical = 8.dp, horizontal = 8.dp) -// ) { -// googleLogin() -// } -// } + //苹果登录tab + Spacer(modifier = Modifier.height(16.dp)) + ActionButton( + modifier = Modifier + .fillMaxWidth() + .border( + width = 1.dp, + color = if (AppState.darkMode) Color.White else Color.Black, + shape = RoundedCornerShape(24.dp) + ), + text = stringResource(R.string.sign_in_with_apple), + color = if (AppState.darkMode) Color.White else Color.Black, + backgroundColor = if (AppState.darkMode) Color.Black else Color.White, + leading = { + Image( + painter = painterResource(id = R.mipmap.apple_logo_medium), + contentDescription = "Apple", + modifier = Modifier.size(36.dp), + colorFilter = ColorFilter.tint(if (AppState.darkMode) Color.White else Color.Black) + ) + }, + expandText = true, + contentPadding = PaddingValues(vertical = 8.dp, horizontal = 8.dp) + ) { + } + //登录tab Spacer(modifier = Modifier.height(24.dp)) Text( diff --git a/app/src/main/java/com/aiosman/ravenow/ui/login/signup.kt b/app/src/main/java/com/aiosman/ravenow/ui/login/signup.kt index 63e3852..00c29a0 100644 --- a/app/src/main/java/com/aiosman/ravenow/ui/login/signup.kt +++ b/app/src/main/java/com/aiosman/ravenow/ui/login/signup.kt @@ -211,7 +211,7 @@ fun SignupScreen() { ) Spacer(modifier = Modifier.width(8.dp)) }, - text = stringResource(R.string.sign_in_with_google), + text = stringResource(R.string.sign_in_with_apple), ) { googleLogin() diff --git a/app/src/main/res/mipmap-hdpi/apple_logo_medium.png b/app/src/main/res/mipmap-hdpi/apple_logo_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..80b01c31fbf6241dff0b90270bd6417cc9972f24 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^`atZ&!VDx$lP5_7DVB6cUq=Rpjs4tz5?O(K#^NA% zCx&(BWL^R}S^+*GuI>ds0^Gtp+&lu@LIT`^0s;d3-2D7JLIOO(0zi^iP=H5JfKNb> zNBGRIFVlg#cuRu(f*BsjAL$pcs((M@+g+^jnJlY?hRd=@9vdo2yJ@0PM~aZ#F>qm9yi|{J5Uu>A-1dH!`1ULG)>$Y y9gp4Jt#-8h{kB9k|Mx*`Y*RJ47E4y#U}l)=x0a7HM*bbpD-52lelF{r5}E)h$bCHk literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/icons_infor_off_bell.png b/app/src/main/res/mipmap-hdpi/icons_infor_off_bell.png new file mode 100644 index 0000000000000000000000000000000000000000..0420e0ce608096b21dbb21eb25fa174b5c434ef5 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|l3?zm1T2})pmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UV>Bx_=LE+7x(~~_yL>trISDv+$BMN!3+(F{Aa)Ilbl$7g5lEFcR=C&o-U3d z8t0P}7Kj)~CvdD}Ti9*z_TJhCwIzG2zpJI}TeRTFJKcM`rCD1in7qCBHitepXRz3_GL7G2OaM>6bvO2Ul2-3M6~^;lMQGdh1MV{3c0mgmg9Xx|k3?#4J%UA`ZSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?smW2Ka=yx)=BWnG}MXi`O;*jSwpd@(X4-BFX&4wU=@3)5;x6oO;=2=fmTc z-sn1J4YZ$8#M8ww#NzbcDL2IqDe$=5RP^u`fBN74>VgF37n$?V1Y7QX>%+#B{9jM{ z;EiCeprYkdJjFF$Yc1tvU)nG`_m}6(FPf=G!e6Cvw#=ArTUsBu`+Cx>mT&z%AK#@L ztGtq%8Xj}lXC^~F=cUD8W^%DBPYAqK>Y34c#XYbnMQoDGN>)uh&l$VEop`ywAompe zj~AIj>{DxX^*4U4Ff4!fR(Gi>_q&W0W`e)vm~Y*364L1&LW zH)ArfG8O4u&=x6@JjZ*L@C1X?+jyR9U&z&z_BrS8Sz4ZGp|v_MD5vbj+7p}ax);AV z_Hshp(uKz)h1^V=AM6Xf@!8G&)UMN?Gj6bQoqI3D{PDfGL^ab7JDEU5qt)r4Nbq#^ Kb6Mw<&;$Tkey3#s literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/apple_logo_medium.png b/app/src/main/res/mipmap-mdpi/apple_logo_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..2140eebc4bbae52decec3e84c0981cfd796e2774 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^@<6P^!VDzy^XfQ(6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~g8-ipSN8%R0RaJi9w7m4Apss?5Xmbbz$3uN&Bw>ZCjb=(3JL;|Adm2| z{J(2~dihI&{DK(->L0v67H_XFzofr4-+xb?dJ#~n%+tj&MB{vNf<#+GvGgp5llCTz z)yyGw_ouU^=skAn>%Po7;fL1$NS%G}U;vjb? zhIQv;UV>Bx_=LE+7x(~~m>`4c3djKVk|4iehRk&`FI_)fKe^8pD3tB#;us=vIXU3~ ze+2Uci$|>-X33R18K#^JiHp;Si(AL=Y{T^FoCeFLi#u4batL`CuC|bLuzbX+_Vnqw zoK}IwELW!Xc1av$YZEuxA#E_-pkw-?;(#d&B^t6!RxLeo&aqIVOZWg>1_sRv V`D$y0|9e30^K|udS?83{1OQcpNlX9$ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/icons_infor_off_eye.png b/app/src/main/res/mipmap-mdpi/icons_infor_off_eye.png new file mode 100644 index 0000000000000000000000000000000000000000..897fe10002b32472475856ebd1c80bb4f6e2f53a GIT binary patch literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAv7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgDM2=EDUbuaJ%GARe1ZEBZ+rihmW`2{n)RE|0P_Oa*{X4@X4n>&B;o~z1O zu) zwqb6nR(m9L@pg*t+GF=Qy}M=ZigvbMov$G@jqiq^(Km@K*?gT}hWo3T*vrcnNKPqE z+hF(V#pE+DdzhWpE%x#|An-lesX9i~Z>!j4UV|xmkKU{IFBox_@t$uZmk4@c&tN Z4db%o+`DwHdq;u7%+uA+Wt~$(696_)fe8Qr literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/apple_logo_medium.png b/app/src/main/res/mipmap-xhdpi/apple_logo_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..d140b5cfbe74fce58ed69527966d6054ab06178c GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^c0e4#!VDziogxi@6id3JuOkD)#(wTUiL5|AV{wqX z6T`Z5GB1G~^#Gp`SN8%R0d65)US0tp-~l2bAXk7#Sb#?m%m#@F@(8c2DFj)>QxfDC z%y36uzn;h6(D2i{!V#IV}L z{me|`V2OxJ=jT}NkgPty(5NxPW<`T(g1`a}=UI_#k^flC`jrn9vh!5R{<$StHQ}jx z!l~m5r;`iocqe^v)Vb$=txhC+kJ16pOHTvO98a^~^!r?bCzHm(Zq?Rj3a8}{PWkT0 zS${?(sZXc=naQ-4O1Aaf5dlwSKe%6TWa6_q*l?dQVv|KM??0A?IZb|#Pt2+~BtGfu z`3|;69rha-kCz)7WX!Xi*Q4CLN{4M?Ot<^#4}k_;9ZU>KCCY|D;aQ-NX7F_Nb6Mw< G&;$U|>6p*} literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/icons_infor_off_bell.png b/app/src/main/res/mipmap-xhdpi/icons_infor_off_bell.png new file mode 100644 index 0000000000000000000000000000000000000000..8af06a7940f4e0e7d3b9d9e4da6dac88e2e6b3d6 GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)ISkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?smG1o(uwx)=BWnfL*l_N9|R72G93e!&c355=^n^s{~T+2TG6rsAL{QbQSXXY~9OA4GNx|7SAT@M!RHl3)l<)9K%!sW7j zr%5+>P1zQ)`X&iqNOH^N;e30g4nDO;f$o6Je}^rpizT?*B* m_S|GhKX!2L)q*s?U(5`L>Q8mceCiSag^s7IpUXO@geCy6f_=dN literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/icons_infor_off_eye.png b/app/src/main/res/mipmap-xhdpi/icons_infor_off_eye.png new file mode 100644 index 0000000000000000000000000000000000000000..2e9c07873e5e78022844e8463d7e1c71773b1bb6 GIT binary patch literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaNb0(?ST-3xqxOiDoU0(ri|GP{yx$1j|w9Bo-Q^I0-Z>|yCFR#4jjLYX^v(Bw{T`U-L z>D7j7-Xdk~oPHf!xTikPu{(EP$k_V1-r3l->#{k%Z?jlA>wf36-kfHuqy)!Gunm8DTr&gkV|`0}ppl-CKF z-Fr@L;uDq=bE-b{{%Y%zV~JCr#QX|+zRR&_ yOFduz<|q6vTVMa9zQ>#}9DHza&H{_(Z3kG)RF_DinZ=C6OHg^Rcb cim=x)6lzY~UYcU24vZfLPgg&ebxsLQ0KhHN9smFU literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icons_infor_off_bell.png b/app/src/main/res/mipmap-xxhdpi/icons_infor_off_bell.png new file mode 100644 index 0000000000000000000000000000000000000000..43ffbde317cde06c3b86cc1ab81c2e26eeef5be0 GIT binary patch literal 510 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xZ3?!EyURMI7SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?smG2l#}zx)=BWnFK*yuNE6n5l=~wUoeB)kB?KNvdqpu+r~4c;(i6t*jP^& z#}JR>$q5py5(+v~H%Ph7KFq`-$~o6^vBw34xyI>yoC0PY3j!6IIiy(4IvN5K#2*$; zeJ-gHAkwsP*@D%HjVEP<8g_8A$XpO9JjB~%{pQR}&Wx^#2W$uTaIml!Xau=@Qr2^o zVpZU)7WQ*x=jgoPAebGt`RFEwKV1>E4t#b(4dD|FjzqWJ5Ixz@dLtomE<;#}fblQU z173;@8fRN3N;o9mIdCA0Ik?24p^@1(w()WxqlKo-%6spa{TSZ7c(NHp`f5;(Ah1vNNL87B~BrWl=Xg2nk3k9DyZbl zGZ#@?7xAPY-Oh`+!WMO9EaIwuw2JqUw!))TMvJsuAFT>sq?Pq(Rm~zPer0|JhBKYd U=UvG-xe*jgp00i_>zopr0Ny;VQ2+n{ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/icons_infor_off_eye.png b/app/src/main/res/mipmap-xxhdpi/icons_infor_off_eye.png new file mode 100644 index 0000000000000000000000000000000000000000..b63f5cf8c37ca62e9fcf1a4b386402f383166404 GIT binary patch literal 741 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAifOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%AJ0G|+7_W~avlRVJA{@*pAPT`UuzhDNzONXARbhB^!a>t4(+IvOK>>Q29 zGWiS)Od6gpjv*0;-_E#Q)S|%C_Ed-6@!{Y5Tg$lCX)xZo^s;2x&gk}^K6R63yfOKE zd%o#G&8JBW9qo6YF{((hP2A_e>|w*B)cMoh(_?*Kf|lyhBWt7fxEpcvi65S`*D=cJ z)p%-&*2~FWO$*BO9XvlDx|>;9V705OL#6Vxy2#$6E7sdDoKf&<*5l%1mJ>ai zO`iAHewlK2b*odCyKc?Pg{-gE&0*a>UB2;SdhMM1P2J}HJ|CwloSfjzr%?6X@O(*w zi0DF%^1{9Ig3o3}7JG^;SebJzHYffS;|d=kE#|AvhYQ4JcxRMuRAn=s+#2)d*;nR^ zOJ8sAZJDDMr0(h&v)IM2|MU`xc9*Y<&dv(yT;lCoov(aSUBha!)Qy<@9QC8-s!MOZ z+1ix8VB_AXwJ&Cc=0tXXws8sI&-C41{NHQV7t5eE%_*mkPT0p=FWqc;z9%(D{_l))?)&A0iWZ)~ zb-V3Ysnd49$sa|I1^iE87UJgo!1Xa_dXh|B*1Wt_rkKrglX@8I{~lO&V!5M=6|YjQ nyohIwl!Me)_Y?d7PO4?dIGy4fa>zvqlo&l-{an^LB{Ts5KL;{v literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/apple_logo_medium.png b/app/src/main/res/mipmap-xxxhdpi/apple_logo_medium.png new file mode 100644 index 0000000000000000000000000000000000000000..11149ee340037834c5ee47f89474560e74c15fbe GIT binary patch literal 620 zcmV-y0+aoTP)Px#Ay7fz3l)1019+cPE!EnA7;Xte?t&2c_PG80005gNkl*+%4QF97VKLx8^O5~3dv(b(Fqgf@L!>yME>vyOUX)0(Zm z73*zV{VKBkrlnmVC~{@&(O00gtJg@MLMi7D6%zO(h3K0K(T_)fzWZsV?Ob-xy(D$^ z4mY~@Ipo@HyxlkPk9Rjtow~=iuj!YQ@W;#ingVX}JS7IzJH7OpCOP_xj#GY(>InEn zrsa&=-1N-24ML0GW>&bKb!LegZqC_w2fBIDymn64C>d?moNF2NFLrOV&KYyY606`` zDB;cf#(P6BuAMdK3X9UGOVyYA?BK?MX+t9@X{nEuOhZAfZi3Z2aYpP1L8~|SItoU> zc;$8KDq%y)$?(TbWWaK&ww0wfkkE5_eOBx^V=g0hK9u#Wj`K!~n(%F?WB3ZHS>Ac9 z3{7}dbAdOj^xSImPMH<^K2z7XTmA=#l69jt1~1P+HVIyLuz!&wVbehym!1C*pUIs3 zr|3%P1jF>R&-|ZqeDb&(r1vX4cRVEsf*=TjAP9o+clZI|{Lcn&*mdpz0000NS%G}U;vjb? zhIQv;UIIB<0X`wF?gc(TCNY40-L!0=I^L2XzhH)s=2Fj=^>bclJ6w>>{wj7J(CAa1 zE{-7)hu==$?{&mM;MjET743I#WfV?mP!My0OlLh9H42^Bl4TuN*qWE}+BW z9e+rvsH@|*UfL$>v@r9u{UQH$>h|5aQ~NVDy-dy6%lF#;xRV9S?JP45rGD1uC-_WE zV&HIO;0R=7XklgGVDE4

>2_>~geLlAKlb(x)b~#?s|3TR6TfXV}Jhqx;bLUZx}e4zr3^AOC#)^v5RC*^8_< zHhG`hao57J==8n%v-^d={AfRFb>Ov*$84cqhDTTWiq$Xh&h$C{!%HTp_;FvY!fs=~ zDYcpv&yHMr7!rVuP#ADg~z*8Ry-vSv@Y3b?B%Kobi55>9nS|l}GeFr&UHBpKA8;(eIdPD(y>V z%SOC5iTt~wOzc2EOTJXuYJ;P!emD3Y_p#Od`0$ulU0~j#0>J~Pd16lNn(nnnLfe$- z^xjvOkKfd^gsjc$Fiq$(8svh=v_GuQQr4o~rL#|6I@6-N|>>kmt52wG~lk!G!M_}6p z^{-_{^0)P$b2ObgdtEKS+$ErO%eB+@ioW*-{P@c`Ys2?0v&8-N5-S}TJw4PFbJiT& zSQ6iD$!@qf^omN;>Uoc5w5$`>TIs+3XP2Vx(xtBHOBan_%hKxl*sdE~Xpo(>cuvh#ldTFLBb(>i{;k=XG+{;K znde=r?m5l4yscbe({_z10lr<|wU%hGBwjYVxU<~xr?g>+JlF2MzWc+BbR}0g+zw9L z%ab9z%`aCrOz>QE>^|vhCuAm@rW`zR(%1F2ujR|MeT!y)WAYWBU3N3E?>3GU^-qB_2t3(cNHHp=nd7DunDr?#quZ#CJ zFMi#1Y6;7_4Y{Wa8@D$JB<|I^wnJo{DF3~=3vSy_;gFS;&n;;^U@fVeU&qdw->~$= zx7sNTi}_i+k8|wbc&pmwEvM5WPJ6RpKaT5j72nFwJQDcDhrxcWg-x<`a9`uPO}_-T zvt9S^_Yu;RX)lgj=*FqM`BZ^c+<}sM2_qMS$aha3%$&HsuureA*p2hnF>WK1i>Wnc zjciS~ryjVvatqs;e+%-@>@9tv@#=iSw__=DH?{42yHvbdE?~yPA9wdNUtzf}_x|+% zH~j6hd>c}Y8ucf0Zf1~XoVK&2^jZGhllyz+E1$?u(T|mye9C&^oL!)d;_2$=vd$@? F2>@lBfM5Us 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 5936cea..7b7524b 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -33,7 +33,7 @@ パスワードを入力してください サインアップ メールで接続 - Googleで接続 + Appleで接続 戻る パスワードを再入力してください パスワードの確認 @@ -192,6 +192,8 @@ 作成中… 発見 パスワードは%1$d文字を超えることはできません + ブロック + 作成 @@ -219,13 +221,19 @@ オフラインだ.. ネットワークを確認して、この宇宙に接続してください 再ロード - + パーティーに参加して、一緒に盛り上がろう - + おすすめ ショート動画 ニュース + + + %1$sをブロックしますか? + 相手はあなたにメッセージを送信したり、あなたのプロフィールやコンテンツを見つけることができなくなります + 相手はあなたにブロックされた通知を受け取りません + 「設定」でいつでもブロックを解除できます diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 4a0f8f3..3ef7e5e 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -32,7 +32,7 @@ 输入密码 注册 使用邮箱注册 - 使用 Google 账号登录 + 使用Apple登录 返回 再次输入密码 再次输入密码 @@ -127,7 +127,7 @@ 关注 热门 首页 - 智能体 + AI 消息 我的 我的 @@ -195,6 +195,8 @@ 发现 密码不能超过 %1$d 个字符 人正在热聊… + 拉黑 + 创建 @@ -230,5 +232,11 @@ 推荐 短视频 新闻 + + + 确认拉黑%s? + 对方将无法发消息给你,也无法找到你的主页或内容 + 对方不会收到自己被你拉黑的通知 + 你可以随时"设置"中取消拉黑TA \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5ccbfed..7eb604d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -32,7 +32,7 @@ Enter your password Sign Up Connect with Email - Connect with Google + Continue with Apple BACK Enter your password again Confirm password @@ -125,7 +125,7 @@ Following Hot Home - Agent + AI Message Profile Mine @@ -191,7 +191,8 @@ Creating… Discover Password cannot exceed %1$d characters - + Block + Create AI @@ -226,4 +227,10 @@ Recommend Short Video News + + + Confirm block %1$s? + They won\'t be able to send you messages or find your profile or content + They won\'t receive a notification that you blocked them + You can unblock them anytime in "Settings" \ No newline at end of file