diff --git a/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/ShareSpaceFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/ShareSpaceFragment.kt
index edc7f10992..6edaad2ec0 100644
--- a/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/ShareSpaceFragment.kt
+++ b/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/ShareSpaceFragment.kt
@@ -23,6 +23,7 @@ import com.anytypeio.anytype.core_utils.ext.toast
import com.anytypeio.anytype.core_utils.ui.BaseBottomSheetComposeFragment
import com.anytypeio.anytype.di.common.componentManager
import com.anytypeio.anytype.presentation.multiplayer.ShareSpaceViewModel
+import com.anytypeio.anytype.presentation.multiplayer.ShareSpaceViewModel.Command
import com.anytypeio.anytype.ui.settings.typography
import javax.inject.Inject
import timber.log.Timber
@@ -83,9 +84,9 @@ class ShareSpaceFragment : BaseBottomSheetComposeFragment() {
expand()
}
- private fun proceedWithCommand(command: ShareSpaceViewModel.Command) {
+ private fun proceedWithCommand(command: Command) {
when (command) {
- is ShareSpaceViewModel.Command.ShareInviteLink -> {
+ is Command.ShareInviteLink -> {
val intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, command.link)
@@ -93,7 +94,8 @@ class ShareSpaceFragment : BaseBottomSheetComposeFragment() {
}
startActivity(Intent.createChooser(intent, null))
}
- is ShareSpaceViewModel.Command.ShareQrCode -> {
+
+ is Command.ShareQrCode -> {
runCatching {
findNavController().navigate(
resId = R.id.shareSpaceInviteQrCodeScreen,
@@ -105,7 +107,8 @@ class ShareSpaceFragment : BaseBottomSheetComposeFragment() {
Timber.d(it, "Error while navigation")
}
}
- is ShareSpaceViewModel.Command.ViewJoinRequest -> {
+
+ is Command.ViewJoinRequest -> {
runCatching {
findNavController().navigate(
resId = R.id.spaceJoinRequestScreen,
@@ -118,14 +121,33 @@ class ShareSpaceFragment : BaseBottomSheetComposeFragment() {
Timber.e(it, "Error while navigation")
}
}
- is ShareSpaceViewModel.Command.ShowHowToShareSpace -> {
+
+ is Command.ShowHowToShareSpace -> {
runCatching {
findNavController().navigate(R.id.howToShareSpaceScreen)
}.onFailure {
Timber.e(it, "Error while navigation")
}
}
- is ShareSpaceViewModel.Command.Dismiss -> {
+
+ is Command.ShowStopSharingWarning -> {
+ runCatching {
+ val dialog = StopSharingWarning()
+ dialog.onAccepted = {
+ vm.onStopSharingAccepted().also {
+ dialog.dismiss()
+ }
+ }
+ dialog.onCancelled = {
+ // Do nothing.
+ }
+ dialog.show(childFragmentManager, null)
+ }.onFailure {
+ Timber.e(it, "Error while navigation")
+ }
+ }
+
+ is Command.Dismiss -> {
dismiss()
}
}
diff --git a/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/StopSharingWarning.kt b/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/StopSharingWarning.kt
new file mode 100644
index 0000000000..c709ab0ae8
--- /dev/null
+++ b/app/src/main/java/com/anytypeio/anytype/ui/multiplayer/StopSharingWarning.kt
@@ -0,0 +1,55 @@
+package com.anytypeio.anytype.ui.multiplayer
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.compose.material.MaterialTheme
+import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.platform.ViewCompositionStrategy
+import androidx.compose.ui.res.stringResource
+import com.anytypeio.anytype.R
+import com.anytypeio.anytype.core_ui.foundation.Warning
+import com.anytypeio.anytype.core_utils.ui.BaseBottomSheetComposeFragment
+import com.anytypeio.anytype.ui.settings.typography
+
+class StopSharingWarning : BaseBottomSheetComposeFragment() {
+
+ var onAccepted: () -> Unit = {}
+ var onCancelled: () -> Unit = {}
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ return ComposeView(requireContext()).apply {
+ setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
+ setContent {
+ MaterialTheme(typography = typography) {
+ Warning(
+ actionButtonText = stringResource(R.string.multiplayer_space_stop_sharing),
+ cancelButtonText = stringResource(R.string.cancel),
+ title = stringResource(R.string.multiplayer_space_stop_sharing),
+ subtitle = stringResource(R.string.multiplayer_space_stop_sharing_space_description),
+ onNegativeClick = {
+ onCancelled()
+ dismiss()
+ },
+ onPositiveClick = { onAccepted() },
+ isInProgress = false
+ )
+ }
+ }
+ }
+ }
+
+
+ override fun injectDependencies() {
+ // Do nothing
+ }
+
+ override fun releaseDependencies() {
+ // Do nothing
+ }
+}
\ No newline at end of file
diff --git a/localization/src/main/res/values/strings.xml b/localization/src/main/res/values/strings.xml
index 39f3b3bd91..8f63f3b1ab 100644
--- a/localization/src/main/res/values/strings.xml
+++ b/localization/src/main/res/values/strings.xml
@@ -1330,6 +1330,8 @@
Remove member
Request sent
Stop sharing
+ Stop sharing the space
+ Participants will no longer sync to this space and the share link will be deactivated.
More info
Sharing
Share
diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/ShareSpaceViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/ShareSpaceViewModel.kt
index 678d72152a..e7350c9d8f 100644
--- a/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/ShareSpaceViewModel.kt
+++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/multiplayer/ShareSpaceViewModel.kt
@@ -305,6 +305,19 @@ class ShareSpaceViewModel(
fun onStopSharingSpaceClicked() {
Timber.d("onStopSharingClicked")
+ viewModelScope.launch {
+ if (isCurrentUserOwner.value && shareLinkViewState.value is ShareLinkViewState.Shared) {
+ viewModelScope.launch {
+ commands.emit(Command.ShowStopSharingWarning)
+ }
+ } else {
+ Timber.w("Something wrong with permissions.")
+ }
+ }
+ }
+
+ fun onStopSharingAccepted() {
+ Timber.d("onStopSharingAccepted")
viewModelScope.launch {
if (isCurrentUserOwner.value && shareLinkViewState.value is ShareLinkViewState.Shared) {
stopSharingSpace.async(
@@ -387,6 +400,7 @@ class ShareSpaceViewModel(
data class ShareQrCode(val link: String) : Command()
data class ViewJoinRequest(val space: SpaceId, val member: Id) : Command()
data object ShowHowToShareSpace: Command()
+ data object ShowStopSharingWarning: Command()
data object Dismiss : Command()
}