diff --git a/app/src/main/java/com/anytypeio/anytype/navigation/Navigator.kt b/app/src/main/java/com/anytypeio/anytype/navigation/Navigator.kt index 6338e994a3..95114a0507 100644 --- a/app/src/main/java/com/anytypeio/anytype/navigation/Navigator.kt +++ b/app/src/main/java/com/anytypeio/anytype/navigation/Navigator.kt @@ -15,6 +15,7 @@ import com.anytypeio.anytype.ui.auth.account.DeletedAccountFragment import com.anytypeio.anytype.ui.date.DateObjectFragment import com.anytypeio.anytype.ui.editor.EditorFragment import com.anytypeio.anytype.ui.editor.EditorModalFragment +import com.anytypeio.anytype.ui.home.HomeScreenFragment import com.anytypeio.anytype.ui.multiplayer.ShareSpaceFragment import com.anytypeio.anytype.ui.primitives.CreateTypeFragment import com.anytypeio.anytype.ui.primitives.ObjectTypeFieldsFragment @@ -150,17 +151,26 @@ class Navigator : AppNavigation { ) } - override fun exit() { + override fun exit(space: Id) { val popped = navController?.popBackStack() if (popped == false) { - navController?.navigate(R.id.homeScreen) + navController?.navigate( + R.id.homeScreen, + HomeScreenFragment.args(space = space) + ) } } - override fun exitToDesktop() { - val popped = navController?.popBackStack(R.id.homeScreen, false) + override fun exitToDesktop(space: Id) { + val popped = navController?.popBackStack(R + .id.homeScreen, + false + ) if (popped == false) { - navController?.navigate(R.id.homeScreen) + navController?.navigate( + R.id.homeScreen, + HomeScreenFragment.args(space = space) + ) } } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/allcontent/AllContentFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/allcontent/AllContentFragment.kt index 2cea002f43..aace69487f 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/allcontent/AllContentFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/allcontent/AllContentFragment.kt @@ -32,6 +32,7 @@ import com.anytypeio.anytype.feature_allcontent.ui.AllContentWrapperScreen import com.anytypeio.anytype.presentation.navigation.NavPanelState import com.anytypeio.anytype.presentation.widgets.collection.Subscription import com.anytypeio.anytype.ui.base.navigation +import com.anytypeio.anytype.ui.home.HomeScreenFragment import com.anytypeio.anytype.ui.multiplayer.ShareSpaceFragment import com.anytypeio.anytype.ui.objects.creation.ObjectTypeSelectionFragment import com.anytypeio.anytype.ui.objects.types.pickers.ObjectTypeSelectionListener @@ -280,8 +281,12 @@ class AllContentFragment : BaseComposeFragment(), ObjectTypeSelectionListener { onBackClicked = vm::onBackClicked, moveToBin = vm::proceedWithMoveToBin, onBackLongClicked = { + // Currently not used. runCatching { - findNavController().navigate(R.id.actionExitToSpaceWidgets) + findNavController().navigate( + R.id.actionExitToSpaceWidgets, + HomeScreenFragment.args(space = space) + ) }.onFailure { Timber.e(it, "Error while opening space switcher from all-content screen") } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/base/NavigationRouter.kt b/app/src/main/java/com/anytypeio/anytype/ui/base/NavigationRouter.kt index 70ee8ecc2b..c349be768b 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/base/NavigationRouter.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/base/NavigationRouter.kt @@ -46,8 +46,8 @@ class NavigationRouter( target = command.target, space = command.space ) - is AppNavigation.Command.Exit -> navigation.exit() - is AppNavigation.Command.ExitToDesktop -> navigation.exitToDesktop() + is AppNavigation.Command.Exit -> navigation.exit(command.space) + is AppNavigation.Command.ExitToDesktop -> navigation.exitToDesktop(command.space) is AppNavigation.Command.ExitToVault -> navigation.exitToVault() is AppNavigation.Command.ExitToSpaceHome -> navigation.exitToSpaceHome() is AppNavigation.Command.OpenGlobalSearch -> navigation.openGlobalSearch( diff --git a/app/src/main/java/com/anytypeio/anytype/ui/date/DateObjectFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/date/DateObjectFragment.kt index da1ce462ef..7479c5668c 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/date/DateObjectFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/date/DateObjectFragment.kt @@ -37,6 +37,7 @@ import com.anytypeio.anytype.feature_date.ui.DateMainScreen import com.anytypeio.anytype.feature_date.viewmodel.DateObjectCommand import com.anytypeio.anytype.feature_date.viewmodel.DateObjectVmParams import com.anytypeio.anytype.ui.base.navigation +import com.anytypeio.anytype.ui.home.HomeScreenFragment import com.anytypeio.anytype.ui.objects.creation.ObjectTypeSelectionFragment import com.anytypeio.anytype.ui.objects.types.pickers.ObjectTypeSelectionListener import com.anytypeio.anytype.ui.profile.ParticipantFragment @@ -159,7 +160,10 @@ class DateObjectFragment : BaseComposeFragment(), ObjectTypeSelectionListener { DateObjectCommand.ExitToSpaceWidgets -> { runCatching { - findNavController().navigate(R.id.actionExitToSpaceWidgets) + findNavController().navigate( + R.id.actionExitToSpaceWidgets, + HomeScreenFragment.args(space = space) + ) }.onFailure { Timber.e(it, "Error while opening space switcher from all-content screen") } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt index 423d5b1de1..7a4e60b654 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt @@ -1051,7 +1051,7 @@ open class EditorFragment : NavigationFragment(R.layout.f is Command.AlertDialog -> { if (childFragmentManager.findFragmentByTag(TAG_ALERT) == null) { AlertUpdateAppFragment().apply { - onCancel = { navigation().exit() } + onCancel = { navigation().exit(space) } }.showChildFragment(TAG_ALERT) } else { // Do nothing diff --git a/app/src/main/java/com/anytypeio/anytype/ui/settings/RemoteFilesManageFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/settings/RemoteFilesManageFragment.kt index 60a32edaae..b20b92d816 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/settings/RemoteFilesManageFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/settings/RemoteFilesManageFragment.kt @@ -94,7 +94,7 @@ class RemoteFilesManageFragment : BaseBottomSheetComposeFragment() { space = command.space, target = command.target ) - is CollectionViewModel.Command.ToDesktop -> navigation.exitToDesktop() + is CollectionViewModel.Command.ToDesktop -> navigation.exitToDesktop(space) is CollectionViewModel.Command.ToSearch -> { // Do nothing. } @@ -127,7 +127,7 @@ class RemoteFilesManageFragment : BaseBottomSheetComposeFragment() { } private fun exit() { - navigation.exit() + navigation.exit(space) } private fun launchObjectSet(target: Id, space: Id) { diff --git a/app/src/main/java/com/anytypeio/anytype/ui/widgets/collection/CollectionFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/widgets/collection/CollectionFragment.kt index 63f46ae53a..82779cf1af 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/widgets/collection/CollectionFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/widgets/collection/CollectionFragment.kt @@ -28,6 +28,7 @@ import com.anytypeio.anytype.presentation.widgets.collection.Subscription import com.anytypeio.anytype.presentation.widgets.collection.SubscriptionMapper import com.anytypeio.anytype.ui.base.navigation import com.anytypeio.anytype.ui.dashboard.DeleteAlertFragment +import com.anytypeio.anytype.ui.home.HomeScreenFragment import com.anytypeio.anytype.ui.multiplayer.ShareSpaceFragment import com.anytypeio.anytype.ui.objects.creation.ObjectTypeSelectionFragment import com.anytypeio.anytype.ui.objects.types.pickers.ObjectTypeSelectionListener @@ -104,7 +105,7 @@ class CollectionFragment : BaseComposeFragment(), ObjectTypeSelectionListener { target = command.target, space = command.space ) - is Command.ToDesktop -> navigation.exitToDesktop() + is Command.ToDesktop -> navigation.exitToDesktop(space = space) is Command.ToSearch -> navigation.openGlobalSearch( space = command.space ) @@ -113,7 +114,10 @@ class CollectionFragment : BaseComposeFragment(), ObjectTypeSelectionListener { } is Command.ExitToSpaceWidgets -> { runCatching { - findNavController().navigate(R.id.actionExitToSpaceWidgets) + findNavController().navigate( + R.id.actionExitToSpaceWidgets, + HomeScreenFragment.args(space = space) + ) }.onFailure { Timber.e(it, "Error while opening space switcher from full-screen widget") } @@ -169,7 +173,7 @@ class CollectionFragment : BaseComposeFragment(), ObjectTypeSelectionListener { } private fun exit() { - navigation.exit() + navigation.exit(space) } private fun launchObjectSet(target: Id, space: Id) { diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt index cf025667f8..14c6e74f6c 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt @@ -1256,8 +1256,8 @@ class EditorViewModel( private fun exitBack() { when (session.value) { - Session.ERROR -> navigate(EventWrapper(AppNavigation.Command.Exit)) - Session.IDLE -> navigate(EventWrapper(AppNavigation.Command.Exit)) + Session.ERROR -> navigate(EventWrapper(AppNavigation.Command.Exit(vmParams.space.id))) + Session.IDLE -> navigate(EventWrapper(AppNavigation.Command.Exit(vmParams.space.id))) Session.OPEN -> { viewModelScope.launch { closePage.async( @@ -1266,10 +1266,10 @@ class EditorViewModel( vmParams.space ) ).fold( - onSuccess = { navigate(EventWrapper(AppNavigation.Command.Exit)) }, + onSuccess = { navigate(EventWrapper(AppNavigation.Command.Exit(vmParams.space.id))) }, onFailure = { Timber.e(it, "Error while closing document: $context") - navigate(EventWrapper(AppNavigation.Command.Exit)) + navigate(EventWrapper(AppNavigation.Command.Exit(vmParams.space.id))) } ) } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/navigation/AppNavigation.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/navigation/AppNavigation.kt index 36fc3a40c8..4e334bf7d9 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/navigation/AppNavigation.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/navigation/AppNavigation.kt @@ -54,8 +54,8 @@ interface AppNavigation { fun launchCollections(subscription: Subscription, space: Id) fun launchObjectSet(target: Id, space: Id) - fun exit() - fun exitToDesktop() + fun exit(space: Id) + fun exitToDesktop(space: Id) fun exitToVault() fun exitToSpaceHome() fun openGlobalSearch(space: Id) @@ -76,8 +76,9 @@ interface AppNavigation { sealed class Command { - data object Exit : Command() - data object ExitToDesktop : Command() + @Deprecated("To be deleted. Too generic and confusing.") + data class Exit(val space: Id) : Command() + data class ExitToDesktop(val space: Id) : Command() data object ExitToVault : Command() data object ExitToSpaceHome : Command() data class OpenObject(val target: Id, val space: Id) : Command() diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/search/ObjectSearchViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/search/ObjectSearchViewModel.kt index d35692c7ea..51cae5635c 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/search/ObjectSearchViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/search/ObjectSearchViewModel.kt @@ -290,7 +290,7 @@ open class ObjectSearchViewModel( ) override fun onDialogCancelled() { - navigation.postValue(EventWrapper(AppNavigation.Command.Exit)) + navigation.postValue(EventWrapper(AppNavigation.Command.Exit(vmParams.space.id))) } companion object { diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt index f124c7c1a3..181efd3fe3 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/ObjectSetViewModel.kt @@ -574,7 +574,7 @@ class ObjectSetViewModel( } Error.NotFoundObject -> { toast(TOAST_SET_NOT_EXIST).also { - dispatch(AppNavigation.Command.Exit) + dispatch(AppNavigation.Command.Exit(vmParams.space.id)) } } } @@ -929,10 +929,10 @@ class ObjectSetViewModel( space = vmParams.space ) ).fold( - onSuccess = { dispatch(AppNavigation.Command.Exit) }, + onSuccess = { dispatch(AppNavigation.Command.Exit(vmParams.space.id)) }, onFailure = { Timber.e(it, "Error while closing object set: ${vmParams.ctx}").also { - dispatch(AppNavigation.Command.Exit) + dispatch(AppNavigation.Command.Exit(vmParams.space.id)) } } ) diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/EditorViewModelTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/EditorViewModelTest.kt index 658efbfc4d..af6b28c38d 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/EditorViewModelTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/EditorViewModelTest.kt @@ -612,7 +612,7 @@ open class EditorViewModelTest { testObserver .assertHasValue() - .assertValue { value -> value.peekContent() == AppNavigation.Command.Exit } + .assertValue { value -> value.peekContent() == AppNavigation.Command.Exit(spaceId.id) } } @Test