1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-2438 Multiplayer | Fix | Show "you" in space members list (#1133)

This commit is contained in:
Evgenii Kozlov 2024-04-17 19:20:27 +02:00 committed by uburoiubu
parent 4da3160cb8
commit d81c36ff92
No known key found for this signature in database
GPG key ID: C8FB80E0A595FBB6
6 changed files with 109 additions and 35 deletions

View file

@ -51,8 +51,6 @@ import com.anytypeio.anytype.core_models.ext.EMPTY_STRING_VALUE
import com.anytypeio.anytype.core_models.multiplayer.ParticipantStatus
import com.anytypeio.anytype.core_models.multiplayer.SpaceAccessType
import com.anytypeio.anytype.core_ui.R
import com.anytypeio.anytype.core_ui.extensions.dark
import com.anytypeio.anytype.core_ui.extensions.light
import com.anytypeio.anytype.core_ui.extensions.throttledClick
import com.anytypeio.anytype.core_ui.foundation.Divider
import com.anytypeio.anytype.core_ui.foundation.Dragger
@ -192,7 +190,8 @@ fun ShareSpaceScreen(
},
icon = member.icon,
canEditEnabled = member.canEditEnabled,
canReadEnabled = member.canReadEnabled
canReadEnabled = member.canReadEnabled,
isUser = member.isUser
)
}
is ShareSpaceMemberView.Config.Request -> {
@ -203,9 +202,10 @@ fun ShareSpaceScreen(
onViewRequestClicked = {
onViewRequestClicked(member)
},
onApproveUnjoinRequestClicked = {
onApproveLeaveRequestClicked = {
onApproveLeaveRequestClicked(member)
}
},
isUser = member.isUser
)
}
}
@ -255,6 +255,7 @@ fun ShareSpaceScreen(
@Composable
private fun SpaceMember(
isUser: Boolean,
isCurrentUserOwner: Boolean,
member: ObjectWrapper.SpaceMember,
icon: SpaceMemberIconView,
@ -282,11 +283,25 @@ private fun SpaceMember(
.align(Alignment.CenterVertically)
.weight(1.0f)
) {
Text(
text = member.name.orEmpty().ifEmpty { stringResource(id = R.string.untitled) },
style = PreviewTitle2Medium,
color = colorResource(id = R.color.text_primary)
)
Row {
Text(
text = member.name.orEmpty().ifEmpty { stringResource(id = R.string.untitled) },
style = PreviewTitle2Medium,
color = colorResource(id = R.color.text_primary),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
modifier = Modifier.weight(1f, fill = false)
)
if (isUser) {
Spacer(modifier = Modifier.width(4.dp))
val youAsMemberText = stringResource(id = R.string.multiplayer_you_as_member)
Text(
text = "($youAsMemberText)",
style = PreviewTitle2Medium,
color = colorResource(id = R.color.text_secondary),
)
}
}
Spacer(modifier = Modifier.height(2.dp))
Text(
text = when(config) {
@ -433,10 +448,11 @@ fun SpaceMemberIcon(
@Composable
private fun SpaceMemberRequest(
member: ObjectWrapper.SpaceMember,
isUser: Boolean,
icon: SpaceMemberIconView,
request: ShareSpaceMemberView.Config.Request,
onViewRequestClicked: () -> Unit,
onApproveUnjoinRequestClicked: () -> Unit
onApproveLeaveRequestClicked: () -> Unit
) {
Row(
modifier = Modifier
@ -454,11 +470,23 @@ private fun SpaceMemberRequest(
.align(Alignment.CenterVertically)
.weight(1.0f)
) {
Text(
text = member.name.orEmpty(),
style = PreviewTitle2Medium,
color = colorResource(id = R.color.text_primary)
)
Row {
Text(
text = member.name.orEmpty().ifEmpty { stringResource(id = R.string.untitled) },
style = PreviewTitle2Medium,
color = colorResource(id = R.color.text_primary),
modifier = Modifier.weight(1f, fill = false)
)
if (isUser) {
Spacer(modifier = Modifier.width(4.dp))
val youAsMemberText = stringResource(id = R.string.multiplayer_you_as_member)
Text(
text = "($youAsMemberText)",
style = PreviewTitle2Medium,
color = colorResource(id = R.color.text_secondary),
)
}
}
Spacer(modifier = Modifier.height(2.dp))
val color = when(request) {
ShareSpaceMemberView.Config.Request.Join -> ThemeColor.PINK
@ -474,11 +502,11 @@ private fun SpaceMemberRequest(
}
Text(
text = text,
color = dark(color),
color = colorResource(id = R.color.text_label_inversion),
modifier = Modifier
.wrapContentWidth()
.background(
color = light(color),
color = colorResource(id = R.color.background_multiplayer_request),
shape = RoundedCornerShape(size = 3.dp)
)
.padding(start = 6.dp, end = 6.dp),
@ -502,7 +530,7 @@ private fun SpaceMemberRequest(
ButtonSecondary(
text = stringResource(R.string.multiplayer_approve_request),
onClick = throttledClick(
onClick = { onApproveUnjoinRequestClicked() }
onClick = { onApproveLeaveRequestClicked() }
),
size = ButtonSize.Small,
modifier = Modifier.align(Alignment.CenterVertically)
@ -526,14 +554,15 @@ fun SpaceJoinRequestPreview() {
),
icon = SpaceMemberIconView.Placeholder(name = "Konstantin"),
request = ShareSpaceMemberView.Config.Request.Join,
onApproveUnjoinRequestClicked = {},
onViewRequestClicked = {}
onApproveLeaveRequestClicked = {},
onViewRequestClicked = {},
isUser = false
)
}
@Composable
@Preview
fun SpaceUnjoinRequestPreview() {
fun SpaceLeaveRequestPreview() {
SpaceMemberRequest(
member = ObjectWrapper.SpaceMember(
mapOf(
@ -544,8 +573,9 @@ fun SpaceUnjoinRequestPreview() {
),
icon = SpaceMemberIconView.Placeholder(name = "Konstantin"),
request = ShareSpaceMemberView.Config.Request.Leave,
onApproveUnjoinRequestClicked = {},
onViewRequestClicked = {}
onApproveLeaveRequestClicked = {},
onViewRequestClicked = {},
isUser = true
)
}
@ -646,7 +676,8 @@ private fun SpaceOwnerMemberPreview() {
onRemoveMemberClicked = {},
isCurrentUserOwner = true,
canEditEnabled = true,
canReadEnabled = true
canReadEnabled = true,
isUser = true
)
}
@ -667,6 +698,29 @@ private fun SpaceEditorMemberPreview() {
onRemoveMemberClicked = {},
isCurrentUserOwner = true,
canReadEnabled = true,
canEditEnabled = true
canEditEnabled = true,
isUser = true
)
}
@Composable
@Preview
private fun SpaceMemberLongNamePreview() {
SpaceMember(
member = ObjectWrapper.SpaceMember(
mapOf(
Relations.ID to "2",
Relations.NAME to "Walter Walter Walter Walter Walter Walter"
)
),
icon = SpaceMemberIconView.Placeholder(name = "Evgenii"),
config = ShareSpaceMemberView.Config.Member.Writer,
onCanEditClicked = {},
onCanViewClicked = {},
onRemoveMemberClicked = {},
isCurrentUserOwner = true,
canReadEnabled = true,
canEditEnabled = true,
isUser = true
)
}

View file

@ -7,12 +7,14 @@
<color name="text_secondary_widgets">#80F3F2EC</color>
<color name="text_tertiary">#64635B</color>
<color name="text_white">#FFFFFF</color>
<color name="text_label_inversion">#000000</color>
<color name="text_button_label">#000000</color>
<color name="background_primary">#000000</color>
<color name="background_notification_primary">#FFFFFF</color>
<color name="background_secondary">#1F1E1D</color>
<color name="background_highlighted">#24DAD7CA</color>
<color name="background_multiplayer_request">#F3F2EC</color>
<color name="shape_primary">#3A3935</color>
<color name="shape_secondary">#302F2B</color>

View file

@ -114,12 +114,14 @@
<color name="text_secondary_widgets">#949494</color>
<color name="text_tertiary">#C8C8C8</color>
<color name="text_white">#FFFFFF</color>
<color name="text_label_inversion">#FFFFFF</color>
<color name="text_button_label">#FFFFFF</color>
<color name="background_primary">#FFFFFF</color>
<color name="background_notification_primary">#000000</color>
<color name="background_secondary">#FFFFFF</color>
<color name="background_highlighted">#144F4F4F</color>
<color name="background_multiplayer_request">#252525</color>
<color name="shape_primary">#E3E3E3</color>
<color name="shape_secondary">#EBEBEB</color>

View file

@ -53,6 +53,9 @@ class DefaultUserPermissionProvider @Inject constructor(
private val logger: Logger
) : UserPermissionProvider {
/**
* User-as-member in all available spaces
*/
private val members = MutableStateFlow<List<ObjectWrapper.SpaceMember>>(emptyList())
private val jobs = mutableListOf<Job>()

View file

@ -1495,5 +1495,6 @@
<string name="three_dots_text_placeholder">...</string>
<string name="multiplayer_you_as_member">you</string>
</resources>

View file

@ -83,6 +83,7 @@ class ShareSpaceViewModel(
private fun proceedWithSubscriptions() {
viewModelScope.launch {
val account = getAccount.async(Unit).getOrNull()?.id
val spaceSearchParams = getSpaceViewSearchParams(
targetSpaceId = params.space.id,
subscription = SHARE_SPACE_SPACE_SUBSCRIPTION
@ -109,7 +110,8 @@ class ShareSpaceViewModel(
urlBuilder = urlBuilder,
canChangeWriterToReader = canChangeWriterToReader,
canChangeReaderToWriter = canChangeReaderToWriter,
includeRequests = isCurrentUserOwner
includeRequests = isCurrentUserOwner,
account = account
)
}
@ -482,7 +484,8 @@ data class ShareSpaceMemberView(
val config: Config = Config.Member.Owner,
val icon: SpaceMemberIconView,
val canReadEnabled: Boolean = false,
val canEditEnabled: Boolean = false
val canEditEnabled: Boolean = false,
val isUser: Boolean = false
) {
sealed class Config {
sealed class Request : Config() {
@ -500,6 +503,7 @@ data class ShareSpaceMemberView(
companion object {
fun fromObject(
account: Id?,
obj: ObjectWrapper.SpaceMember,
urlBuilder: UrlBuilder,
canChangeWriterToReader: Boolean,
@ -510,6 +514,7 @@ data class ShareSpaceMemberView(
obj = obj,
urlBuilder = urlBuilder
)
val isUser = obj.identity == account
return when(obj.status) {
ParticipantStatus.ACTIVE -> {
when(obj.permissions) {
@ -518,31 +523,36 @@ data class ShareSpaceMemberView(
config = Config.Member.Reader,
icon = icon,
canReadEnabled = canChangeWriterToReader,
canEditEnabled = canChangeReaderToWriter
canEditEnabled = canChangeReaderToWriter,
isUser = isUser
)
SpaceMemberPermissions.WRITER -> ShareSpaceMemberView(
obj = obj,
config = Config.Member.Writer,
icon = icon,
canReadEnabled = canChangeWriterToReader,
canEditEnabled = canChangeReaderToWriter
canEditEnabled = canChangeReaderToWriter,
isUser = isUser
)
SpaceMemberPermissions.OWNER -> ShareSpaceMemberView(
obj = obj,
config = Config.Member.Owner,
icon = icon,
canReadEnabled = canChangeWriterToReader,
canEditEnabled = canChangeReaderToWriter
canEditEnabled = canChangeReaderToWriter,
isUser = isUser
)
SpaceMemberPermissions.NO_PERMISSIONS -> ShareSpaceMemberView(
obj = obj,
config = Config.Member.NoPermissions,
icon = icon
icon = icon,
isUser = isUser
)
null -> ShareSpaceMemberView(
obj = obj,
config = Config.Member.Unknown,
icon = icon
icon = icon,
isUser = isUser
)
}
}
@ -551,7 +561,8 @@ data class ShareSpaceMemberView(
ShareSpaceMemberView(
obj = obj,
config = Config.Request.Join,
icon = icon
icon = icon,
isUser = isUser
)
else
null
@ -561,7 +572,8 @@ data class ShareSpaceMemberView(
ShareSpaceMemberView(
obj = obj,
config = Config.Request.Leave,
icon = icon
icon = icon,
isUser = isUser
)
else
null