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() }