feat: 用户屏蔽

This commit is contained in:
HuanCheng65 2023-10-08 01:12:17 +08:00
parent 7677e4d65c
commit c21876458e
No known key found for this signature in database
GPG Key ID: 5EC9DD60A32C7360
2 changed files with 64 additions and 1 deletions

View File

@ -17,12 +17,15 @@ import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.PagerState
import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.ButtonDefaults import androidx.compose.material.ButtonDefaults
import androidx.compose.material.DropdownMenuItem
import androidx.compose.material.Icon import androidx.compose.material.Icon
import androidx.compose.material.LocalContentColor import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme import androidx.compose.material.MaterialTheme
@ -33,6 +36,7 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ContentCopy import androidx.compose.material.icons.outlined.ContentCopy
import androidx.compose.material.icons.rounded.Add import androidx.compose.material.icons.rounded.Add
import androidx.compose.material.icons.rounded.Edit import androidx.compose.material.icons.rounded.Edit
import androidx.compose.material.icons.rounded.NoAccounts
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
@ -69,6 +73,8 @@ import com.huanchengfly.tieba.post.arch.emitGlobalEvent
import com.huanchengfly.tieba.post.arch.getOrNull import com.huanchengfly.tieba.post.arch.getOrNull
import com.huanchengfly.tieba.post.arch.pageViewModel import com.huanchengfly.tieba.post.arch.pageViewModel
import com.huanchengfly.tieba.post.goToActivity import com.huanchengfly.tieba.post.goToActivity
import com.huanchengfly.tieba.post.models.database.Block
import com.huanchengfly.tieba.post.toastShort
import com.huanchengfly.tieba.post.ui.common.theme.compose.ExtendedTheme import com.huanchengfly.tieba.post.ui.common.theme.compose.ExtendedTheme
import com.huanchengfly.tieba.post.ui.page.ProvideNavigator import com.huanchengfly.tieba.post.ui.page.ProvideNavigator
import com.huanchengfly.tieba.post.ui.page.editprofile.view.EditProfileActivity import com.huanchengfly.tieba.post.ui.page.editprofile.view.EditProfileActivity
@ -78,6 +84,7 @@ import com.huanchengfly.tieba.post.ui.widgets.Chip
import com.huanchengfly.tieba.post.ui.widgets.compose.Avatar import com.huanchengfly.tieba.post.ui.widgets.compose.Avatar
import com.huanchengfly.tieba.post.ui.widgets.compose.BackNavigationIcon import com.huanchengfly.tieba.post.ui.widgets.compose.BackNavigationIcon
import com.huanchengfly.tieba.post.ui.widgets.compose.Button import com.huanchengfly.tieba.post.ui.widgets.compose.Button
import com.huanchengfly.tieba.post.ui.widgets.compose.ClickMenu
import com.huanchengfly.tieba.post.ui.widgets.compose.ErrorScreen import com.huanchengfly.tieba.post.ui.widgets.compose.ErrorScreen
import com.huanchengfly.tieba.post.ui.widgets.compose.LazyLoad import com.huanchengfly.tieba.post.ui.widgets.compose.LazyLoad
import com.huanchengfly.tieba.post.ui.widgets.compose.LazyLoadHorizontalPager import com.huanchengfly.tieba.post.ui.widgets.compose.LazyLoadHorizontalPager
@ -91,6 +98,7 @@ import com.huanchengfly.tieba.post.ui.widgets.compose.Toolbar
import com.huanchengfly.tieba.post.ui.widgets.compose.UserHeader import com.huanchengfly.tieba.post.ui.widgets.compose.UserHeader
import com.huanchengfly.tieba.post.ui.widgets.compose.states.StateScreen import com.huanchengfly.tieba.post.ui.widgets.compose.states.StateScreen
import com.huanchengfly.tieba.post.utils.AccountUtil.LocalAccount import com.huanchengfly.tieba.post.utils.AccountUtil.LocalAccount
import com.huanchengfly.tieba.post.utils.BlockManager
import com.huanchengfly.tieba.post.utils.StringUtil import com.huanchengfly.tieba.post.utils.StringUtil
import com.huanchengfly.tieba.post.utils.StringUtil.getShortNumString import com.huanchengfly.tieba.post.utils.StringUtil.getShortNumString
import com.huanchengfly.tieba.post.utils.TiebaUtil import com.huanchengfly.tieba.post.utils.TiebaUtil
@ -192,6 +200,57 @@ fun UserProfilePage(
BackNavigationIcon { BackNavigationIcon {
navigator.navigateUp() navigator.navigateUp()
} }
},
actions = {
user.takeUnless { isSelf }?.let {
ClickMenu(
menuContent = {
DropdownMenuItem(
onClick = {
BlockManager.addBlockAsync(
Block(
category = Block.CATEGORY_BLACK_LIST,
type = Block.TYPE_USER,
username = it.get { name },
uid = it.get { id }.toString()
)
) {
if (it) context.toastShort(R.string.toast_add_success)
}
}
) {
Text(text = stringResource(id = R.string.menu_add_user_to_black_list))
}
DropdownMenuItem(
onClick = {
BlockManager.addBlockAsync(
Block(
category = Block.CATEGORY_WHITE_LIST,
type = Block.TYPE_USER,
username = it.get { name },
uid = it.get { id }.toString()
)
) {
if (it) context.toastShort(R.string.toast_add_success)
}
}
) {
Text(text = stringResource(id = R.string.menu_add_user_to_white_list))
}
},
triggerShape = CircleShape
) {
Box(
modifier = Modifier.size(48.dp),
contentAlignment = Alignment.Center
) {
Icon(
imageVector = Icons.Rounded.NoAccounts,
contentDescription = stringResource(id = R.string.btn_block)
)
}
}
}
} }
) )
} }
@ -538,7 +597,8 @@ private fun UserProfileDetail(
), ),
style = MaterialTheme.typography.h6, style = MaterialTheme.typography.h6,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis,
fontWeight = FontWeight.Bold
) )
ProvideTextStyle(value = MaterialTheme.typography.body2) { ProvideTextStyle(value = MaterialTheme.typography.body2) {
Row( Row(

View File

@ -757,4 +757,7 @@
<string name="title_profile_posts_tab">回复 %s</string> <string name="title_profile_posts_tab">回复 %s</string>
<string name="title_profile_concern_forums_tab">关注吧 %s</string> <string name="title_profile_concern_forums_tab">关注吧 %s</string>
<string name="title_user_hide_post">该用户已隐藏动态</string> <string name="title_user_hide_post">该用户已隐藏动态</string>
<string name="menu_add_user_to_black_list">添加到黑名单</string>
<string name="menu_add_user_to_white_list">添加到白名单</string>
<string name="btn_block">屏蔽选项</string>
</resources> </resources>