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:
parent
4da3160cb8
commit
d81c36ff92
6 changed files with 109 additions and 35 deletions
|
@ -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
|
||||
)
|
||||
}
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>()
|
||||
|
||||
|
|
|
@ -1495,5 +1495,6 @@
|
|||
|
||||
|
||||
<string name="three_dots_text_placeholder">...</string>
|
||||
<string name="multiplayer_you_as_member">you</string>
|
||||
|
||||
</resources>
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue