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

DROID-3375 New settings | Enhancement | Redesigned delete-space and leave-space warnings (#2163)

This commit is contained in:
Evgenii Kozlov 2025-03-17 18:22:06 +01:00 committed by GitHub
parent 29c43b0cfc
commit 67d092ede8
Signed by: github
GPG key ID: B5690EEEBB952194
4 changed files with 200 additions and 26 deletions

View file

@ -4,13 +4,44 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
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.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material.MaterialTheme
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.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.core.os.bundleOf
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.DefaultPreviews
import com.anytypeio.anytype.core_ui.foundation.AlertConfig
import com.anytypeio.anytype.core_ui.foundation.AlertIcon
import com.anytypeio.anytype.core_ui.foundation.Dragger
import com.anytypeio.anytype.core_ui.foundation.GRADIENT_TYPE_RED
import com.anytypeio.anytype.core_ui.foundation.Header
import com.anytypeio.anytype.core_ui.foundation.Warning
import com.anytypeio.anytype.core_ui.foundation.noRippleClickable
import com.anytypeio.anytype.core_ui.views.BodyCalloutRegular
import com.anytypeio.anytype.core_ui.views.ButtonSize
import com.anytypeio.anytype.core_ui.views.ButtonWarning
import com.anytypeio.anytype.core_utils.ext.arg
import com.anytypeio.anytype.core_utils.ui.BaseBottomSheetComposeFragment
import com.anytypeio.anytype.ui.settings.typography
@ -31,17 +62,10 @@ class LeaveSpaceWarning : BaseBottomSheetComposeFragment() {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
MaterialTheme(typography = typography) {
Warning(
actionButtonText = stringResource(R.string.multiplayer_leave_space),
cancelButtonText = stringResource(R.string.cancel),
title = stringResource(R.string.multiplayer_leave_space),
subtitle = stringResource(R.string.multiplayer_leave_space_warning_subtitle),
onNegativeClick = {
onLeaveSpaceCancelled()
dismiss()
},
onPositiveClick = { onLeaveSpaceAccepted() },
isInProgress = false
LeaveSpaceWarningScreen(
onLeaveClicked = {
onLeaveSpaceAccepted()
}
)
}
}
@ -62,4 +86,51 @@ class LeaveSpaceWarning : BaseBottomSheetComposeFragment() {
arguments = bundleOf()
}
}
}
@Composable
fun LeaveSpaceWarningScreen(
onLeaveClicked: () -> Unit
) {
Column {
Dragger(
modifier = Modifier
.align(Alignment.CenterHorizontally)
.padding(vertical = 6.dp)
)
Header(text = stringResource(R.string.multiplayer_leave_space))
Spacer(modifier = Modifier.height(8.dp))
AlertIcon(
icon = AlertConfig.Icon(
gradient = GRADIENT_TYPE_RED,
icon = R.drawable.ic_alert_question_warning
)
)
Spacer(modifier = Modifier.height(12.dp))
Text(
text = stringResource(R.string.multiplayer_leave_space_warning_subtitle),
style = BodyCalloutRegular,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 24.dp),
color = colorResource(id = R.color.text_primary),
textAlign = TextAlign.Center,
)
ButtonWarning(
text = stringResource(R.string.multiplayer_leave_space),
onClick = onLeaveClicked,
size = ButtonSize.Large,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 24.dp, vertical = 24.dp)
)
}
}
@DefaultPreviews
@Composable
fun LeaveSpaceWarningScreenPreview() {
LeaveSpaceWarningScreen(
onLeaveClicked = {}
)
}

View file

@ -4,13 +4,44 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
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.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material.MaterialTheme
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.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.core.os.bundleOf
import com.anytypeio.anytype.R
import com.anytypeio.anytype.core_ui.common.DefaultPreviews
import com.anytypeio.anytype.core_ui.foundation.AlertConfig
import com.anytypeio.anytype.core_ui.foundation.AlertIcon
import com.anytypeio.anytype.core_ui.foundation.Dragger
import com.anytypeio.anytype.core_ui.foundation.GRADIENT_TYPE_RED
import com.anytypeio.anytype.core_ui.foundation.Header
import com.anytypeio.anytype.core_ui.foundation.Warning
import com.anytypeio.anytype.core_ui.foundation.noRippleClickable
import com.anytypeio.anytype.core_ui.views.BodyCalloutRegular
import com.anytypeio.anytype.core_ui.views.ButtonSize
import com.anytypeio.anytype.core_ui.views.ButtonWarning
import com.anytypeio.anytype.core_utils.ext.arg
import com.anytypeio.anytype.core_utils.ui.BaseBottomSheetComposeFragment
import com.anytypeio.anytype.ui.settings.typography
@ -31,17 +62,10 @@ class DeleteSpaceWarning : BaseBottomSheetComposeFragment() {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
MaterialTheme(typography = typography) {
Warning(
actionButtonText = stringResource(R.string.delete),
cancelButtonText = stringResource(R.string.back),
title = stringResource(R.string.delete_space_title),
subtitle = stringResource(R.string.delete_space_subtitle),
onNegativeClick = {
onDeletionCancelled()
dismiss()
},
onPositiveClick = { onDeletionAccepted() },
isInProgress = false
DeleteSpaceWarningScreen(
onDeleteClick = {
onDeletionAccepted()
}
)
}
}
@ -62,4 +86,80 @@ class DeleteSpaceWarning : BaseBottomSheetComposeFragment() {
arguments = bundleOf()
}
}
}
}
@Composable
fun DeleteSpaceWarningScreen(
onDeleteClick: () -> Unit
) {
var isCheckboxChecked by remember { mutableStateOf(false) }
Column {
Dragger(
modifier = Modifier
.align(Alignment.CenterHorizontally)
.padding(vertical = 6.dp)
)
Header(text = stringResource(R.string.delete_space))
Spacer(modifier = Modifier.height(8.dp))
AlertIcon(
icon = AlertConfig.Icon(
gradient = GRADIENT_TYPE_RED,
icon = R.drawable.ic_alert_question_warning
)
)
Spacer(modifier = Modifier.height(12.dp))
Text(
text = stringResource(R.string.delete_space_subtitle),
style = BodyCalloutRegular,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 24.dp),
color = colorResource(id = R.color.text_primary),
textAlign = TextAlign.Center
)
Spacer(modifier = Modifier.height(12.dp))
Row(
modifier = Modifier
.padding(horizontal = 24.dp)
.fillMaxWidth()
.noRippleClickable {
isCheckboxChecked = !isCheckboxChecked
},
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Center
) {
Image(
painter = if (isCheckboxChecked)
painterResource(R.drawable.ic_data_view_grid_checkbox_checked)
else
painterResource(R.drawable.ic_data_view_grid_checkbox),
contentDescription = "Checkbox icon"
)
Spacer(modifier = Modifier.width(8.dp))
Text(
text = stringResource(R.string.delete_space_checkbox_text),
color = colorResource(R.color.text_primary),
style = BodyCalloutRegular,
)
}
Spacer(modifier = Modifier.height(16.dp))
ButtonWarning(
text = stringResource(R.string.delete_space),
onClick = onDeleteClick,
size = ButtonSize.Large,
modifier = Modifier
.fillMaxWidth()
.padding(start = 24.dp, end = 24.dp, bottom = 24.dp, top = 16.dp),
isEnabled = isCheckboxChecked
)
}
}
@DefaultPreviews
@Composable
fun DeleteSpaceWarningScreenPreview() {
DeleteSpaceWarningScreen(
onDeleteClick = {}
)
}

View file

@ -427,7 +427,8 @@ fun ButtonWarning(
text: String = "",
onClick: () -> Unit,
modifier: Modifier = Modifier,
size: ButtonSize
size: ButtonSize,
isEnabled: Boolean = true
) {
val interactionSource = remember { MutableInteractionSource() }
val isPressed = interactionSource.collectIsPressedAsState()
@ -453,7 +454,8 @@ fun ButtonWarning(
defaultElevation = 0.dp,
pressedElevation = 0.dp
),
contentPadding = size.contentPadding
contentPadding = size.contentPadding,
enabled = isEnabled
) {
Text(
text = text,

View file

@ -924,7 +924,7 @@
<string name="created_by">Created by</string>
<string name="space_id">Space ID</string>
<string name="network_id">Network ID</string>
<string name="delete_space_subtitle">This space will be deleted irrevocably. You can\'t undo this action.</string>
<string name="delete_space_subtitle">Space deletion is permanent and cannot be undone. Please note that all the data connected to this space will be permanently removed and you will lose an access to it forever.</string>
<string name="delete_space_title_with_param">Delete \'%1$s\' space</string>
<string name="delete_space_title">Are you sure to delete this space?</string>
<string name="space_id_copied_toast_msg">Space ID copied</string>
@ -1981,5 +1981,6 @@ Please provide specific details of your needs here.</string>
<string name="property_select_format_title">Select property format</string>
<string name="property_edit_menu_delete">Delete from space</string>
<string name="property_edit_menu_unlink">Unlink from type</string>
<string name="delete_space_checkbox_text">I have read and want to delete this space</string>
</resources>