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 d207cf0ee8..055260ce89 100644 --- a/app/src/main/java/com/anytypeio/anytype/navigation/Navigator.kt +++ b/app/src/main/java/com/anytypeio/anytype/navigation/Navigator.kt @@ -171,6 +171,19 @@ class Navigator : AppNavigation { } } + override fun exitToSpaceHome() { + runCatching { + navController?.let { controller -> + val isPopped = controller.popBackStack(R.id.chatScreen, inclusive = false) + if (!isPopped) { + controller.popBackStack(R.id.homeScreen, inclusive = false) + } + } + }.onFailure { + Timber.e(it, "Error while exiting to space home") + } + } + override fun openGlobalSearch(space: Id) { navController?.navigate( resId = R.id.globalSearchScreen, 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 286d25106e..16f1f9879b 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.presentation.AllContentViewModel import com.anytypeio.anytype.feature_allcontent.presentation.AllContentViewModelFactory import com.anytypeio.anytype.feature_allcontent.ui.AllContentNavigation.ALL_CONTENT_MAIN import com.anytypeio.anytype.feature_allcontent.ui.AllContentWrapperScreen +import com.anytypeio.anytype.presentation.navigation.NavPanelState import com.anytypeio.anytype.presentation.objects.ObjectIcon import com.anytypeio.anytype.presentation.widgets.collection.Subscription import com.anytypeio.anytype.ui.base.navigation @@ -107,12 +108,8 @@ class AllContentFragment : BaseComposeFragment(), ObjectTypeSelectionListener { super.onViewCreated(view, savedInstanceState) subscribe(vm.commands) { command -> when (command) { - is AllContentViewModel.Command.ExitToVault -> { - runCatching { - findNavController().navigate(R.id.actionOpenVault) - }.onFailure { e -> - Timber.e(e, "Error while exiting to vault from all content") - } + is AllContentViewModel.Command.ExitToSpaceHome -> { + navigation().exitToSpaceHome() } is AllContentViewModel.Command.Back -> { runCatching { @@ -338,8 +335,9 @@ class AllContentFragment : BaseComposeFragment(), ObjectTypeSelectionListener { onRelationClicked = vm::onRelationClicked, undoMoveToBin = vm::proceedWithUndoMoveToBin, onDismissSnackbar = vm::proceedWithDismissSnackbar, - uiBottomMenu = vm.uiBottomMenu.collectAsStateWithLifecycle().value, - onShareButtonClicked = vm::onMemberButtonClicked + uiBottomMenu = vm.navPanelState.collectAsStateWithLifecycle(NavPanelState.Init).value, + onShareButtonClicked = vm::onMemberButtonClicked, + onHomeButtonClicked = vm::onHomeClicked ) } } 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 12ff5d5360..9a1146ec54 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 @@ -44,6 +44,7 @@ class NavigationRouter( is AppNavigation.Command.Exit -> navigation.exit() is AppNavigation.Command.ExitToDesktop -> navigation.exitToDesktop() is AppNavigation.Command.ExitToVault -> navigation.exitToVault() + is AppNavigation.Command.ExitToSpaceHome -> navigation.exitToSpaceHome() is AppNavigation.Command.OpenGlobalSearch -> navigation.openGlobalSearch( space = command.space ) 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 c2b103bd10..998ce32882 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 @@ -605,6 +605,11 @@ open class EditorFragment : NavigationFragment(R.layout.f .onEach { vm.onShareButtonClicked() } .launchIn(lifecycleScope) + binding.bottomToolbar + .homeClicks() + .onEach { vm.onHomeButtonClicked() } + .launchIn(lifecycleScope) + binding.bottomToolbar .searchClicks() .onEach { vm.onPageSearchClicked() } @@ -2078,10 +2083,6 @@ open class EditorFragment : NavigationFragment(R.layout.f private fun getEditorSettings() { } - override fun onExitToDesktopClicked() { - vm.navigateToDesktop() - } - override fun onLanguageSelected(target: Id, key: String) { Timber.d("key: $key") vm.onSelectProgrammingLanguageClicked(target, key) @@ -2357,7 +2358,6 @@ interface OnFragmentInteractionListener { fun onSetBlockObjectLink(blockId: Id, objectId: Id) fun onRemoveMarkupLinkClicked(blockId: String, range: IntRange) fun onAddBookmarkUrlClicked(target: String, url: String) - fun onExitToDesktopClicked() fun onSetRelationKeyClicked(blockId: Id, key: Id) fun onSetObjectLink(objectId: Id) fun onSetWebLink(link: String) diff --git a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreen.kt b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreen.kt index 6a9bf5dac4..178b3e66f5 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreen.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreen.kt @@ -88,6 +88,7 @@ fun HomeScreen( onToggleExpandedWidgetState: (WidgetId) -> Unit, onExitEditMode: () -> Unit, onSearchClicked: () -> Unit, + onHomeButtonClicked: () -> Unit, onCreateNewObjectClicked: () -> Unit, onCreateNewObjectLongClicked: () -> Unit, onShareButtonClicked: () -> Unit, @@ -161,7 +162,8 @@ fun HomeScreen( searchClick = onSearchClicked, addDocClick = onCreateNewObjectClicked, addDocLongClick = onCreateNewObjectLongClicked, - onShareButtonClicked = onShareButtonClicked + onShareButtonClicked = onShareButtonClicked, + onHomeButtonClicked = onHomeButtonClicked ) } } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt index f47d49e8e0..1a60584c8a 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreenFragment.kt @@ -187,7 +187,8 @@ class HomeScreenFragment : BaseComposeFragment(), onCreateObjectInsideWidget = vm::onCreateObjectInsideWidget, onCreateDataViewObject = vm::onCreateDataViewObject, onShareButtonClicked = vm::onSpaceShareIconClicked, - navPanelState = vm.navPanelState.collectAsStateWithLifecycle().value + navPanelState = vm.navPanelState.collectAsStateWithLifecycle().value, + onHomeButtonClicked = vm::onHomeButtonClicked, ) } diff --git a/app/src/main/java/com/anytypeio/anytype/ui/sets/ObjectSetFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/sets/ObjectSetFragment.kt index 6117cf2168..433da47e82 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/sets/ObjectSetFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/sets/ObjectSetFragment.kt @@ -315,6 +315,11 @@ open class ObjectSetFragment : subscribe( binding.bottomToolbar.searchClicks().throttleFirst() ) { vm.onSearchButtonClicked() } + + subscribe( + binding.bottomToolbar.homeClicks().throttleFirst() + ) { vm.onHomeButtonClicked() } + subscribe( binding.bottomToolbar.addDocClicks().throttleFirst() ) { vm.onAddNewDocumentClicked() } 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 d70e129000..4251432f9b 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 @@ -98,7 +98,7 @@ class RemoteFilesManageFragment : BaseBottomSheetComposeFragment() { // Do nothing. } is CollectionViewModel.Command.Exit -> exit() - is CollectionViewModel.Command.Vault -> { + is CollectionViewModel.Command.ToSpaceHome -> { // Do nothing. } is CollectionViewModel.Command.ExitToSpaceWidgets -> { 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 ddc473a142..d0be94b18b 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 @@ -108,12 +108,8 @@ class CollectionFragment : BaseComposeFragment(), ObjectTypeSelectionListener { is Command.ToSearch -> navigation.openGlobalSearch( space = command.space ) - is Command.Vault -> { - runCatching { - findNavController().navigate(R.id.actionOpenVault) - }.onFailure { - Timber.e(it, "Error while exiting to vault") - } + is Command.ToSpaceHome -> { + navigation().exitToSpaceHome() } is Command.ExitToSpaceWidgets -> { runCatching { diff --git a/app/src/main/java/com/anytypeio/anytype/ui/widgets/collection/CollectionScreen.kt b/app/src/main/java/com/anytypeio/anytype/ui/widgets/collection/CollectionScreen.kt index 5216fe3b76..aabb055c82 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/widgets/collection/CollectionScreen.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/widgets/collection/CollectionScreen.kt @@ -119,7 +119,7 @@ fun ScreenContent( vm: CollectionViewModel, uiState: CollectionUiState, onCreateObjectLongClicked: () -> Unit, - onSearchClicked: () -> Unit + onSearchClicked: () -> Unit, ) { Box( Modifier.background(color = colorResource(R.color.background_primary)) @@ -149,7 +149,8 @@ fun ScreenContent( addDocClick = { vm.onAddClicked(null) }, addDocLongClick = onCreateObjectLongClicked, onShareButtonClicked = vm::onShareButtonClicked, - state = vm.navPanelState.collectAsStateWithLifecycle().value + state = vm.navPanelState.collectAsStateWithLifecycle().value, + onHomeButtonClicked = vm::onHomeButtonClicked ) } } diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/foundation/components/BottomNavigationMenu.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/foundation/components/BottomNavigationMenu.kt index f945dc54d3..f816d3dd7a 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/foundation/components/BottomNavigationMenu.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/foundation/components/BottomNavigationMenu.kt @@ -50,7 +50,8 @@ private fun NavBarPreviewOwner() { leftButtonState = NavPanelState.LeftButtonState.AddMembers( isActive = true ) - ) + ), + onHomeButtonClicked = {} ) } @@ -64,7 +65,8 @@ private fun NavBarPreviewReader() { state = NavPanelState.Default( isCreateObjectButtonEnabled = false, leftButtonState = NavPanelState.LeftButtonState.ViewMembers - ) + ), + onHomeButtonClicked = {} ) } @@ -152,6 +154,7 @@ fun BottomNavigationMenu( state: NavPanelState, modifier: Modifier = Modifier, onShareButtonClicked: () -> Unit = {}, + onHomeButtonClicked: () -> Unit, searchClick: () -> Unit = {}, addDocClick: () -> Unit = {}, addDocLongClick: () -> Unit = {} @@ -186,7 +189,6 @@ fun BottomNavigationMenu( is NavPanelState.LeftButtonState.Comment -> { // TODO } - NavPanelState.LeftButtonState.ViewMembers -> { MenuItem( modifier = Modifier @@ -197,6 +199,16 @@ fun BottomNavigationMenu( onClick = onShareButtonClicked ) } + is NavPanelState.LeftButtonState.Home -> { + MenuItem( + modifier = Modifier + .width(72.dp) + .height(52.dp), + contentDescription = stringResource(id = R.string.main_navigation_content_desc_home_button), + res = BottomNavigationItem.HOME.res, + onClick = onHomeButtonClicked + ) + } } } else { MenuItem( @@ -208,14 +220,6 @@ fun BottomNavigationMenu( onClick = onShareButtonClicked ) } - MenuItem( - modifier = Modifier - .width(72.dp) - .height(52.dp), - contentDescription = stringResource(id = R.string.main_navigation_content_desc_search_button), - res = BottomNavigationItem.SEARCH.res, - onClick = searchClick - ) MenuItem( modifier = Modifier .width(72.dp) @@ -237,6 +241,14 @@ fun BottomNavigationMenu( onLongClick = addDocLongClick, enabled = (state is NavPanelState.Default && state.isCreateObjectButtonEnabled) ) + MenuItem( + modifier = Modifier + .width(72.dp) + .height(52.dp), + contentDescription = stringResource(id = R.string.main_navigation_content_desc_search_button), + res = BottomNavigationItem.SEARCH.res, + onClick = searchClick + ) } } @@ -275,6 +287,7 @@ private fun MenuItem( } private enum class BottomNavigationItem(@DrawableRes val res: Int) { + HOME(R.drawable.ic_nav_panel_home), MEMBERS(R.drawable.ic_nav_panel_members), ADD_MEMBERS(R.drawable.ic_nav_panel_add_member), SEARCH(R.drawable.ic_nav_panel_search), diff --git a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/toolbar/MainBottomToolbar.kt b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/toolbar/MainBottomToolbar.kt index 9ca95d3ae4..3e84edd518 100644 --- a/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/toolbar/MainBottomToolbar.kt +++ b/core-ui/src/main/java/com/anytypeio/anytype/core_ui/widgets/toolbar/MainBottomToolbar.kt @@ -10,6 +10,8 @@ import com.anytypeio.anytype.presentation.navigation.NavPanelState import com.anytypeio.anytype.core_ui.R import com.anytypeio.anytype.core_ui.common.DEFAULT_DISABLED_ALPHA import com.anytypeio.anytype.core_ui.common.FULL_ALPHA +import com.anytypeio.anytype.core_utils.ext.gone +import com.anytypeio.anytype.core_utils.ext.visible class MainBottomToolbar @JvmOverloads constructor( context: Context, @@ -28,6 +30,7 @@ class MainBottomToolbar @JvmOverloads constructor( fun searchClicks() = binding.btnSearch.clicks() fun addDocClicks() = binding.btnAddDoc.clicks() fun shareClicks() = binding.btnShare.clicks() + fun homeClicks() = binding.btnHome.clicks() fun setState(state: NavPanelState) { when(state) { @@ -58,6 +61,7 @@ class MainBottomToolbar @JvmOverloads constructor( private fun setLeftButtonState(state: NavPanelState.Default) { when (val left = state.leftButtonState) { is NavPanelState.LeftButtonState.AddMembers -> { + binding.btnHome.gone() binding.icShare.setImageResource( R.drawable.ic_nav_panel_add_member ) @@ -66,8 +70,12 @@ class MainBottomToolbar @JvmOverloads constructor( } else { binding.icShare.alpha = DEFAULT_DISABLED_ALPHA } + binding.btnShare.visible() + } + is NavPanelState.LeftButtonState.Home -> { + binding.btnShare.gone() + binding.btnHome.visible() } - is NavPanelState.LeftButtonState.Comment -> { } diff --git a/core-ui/src/main/res/drawable/ic_nav_panel_home.xml b/core-ui/src/main/res/drawable/ic_nav_panel_home.xml new file mode 100644 index 0000000000..754e7fabbe --- /dev/null +++ b/core-ui/src/main/res/drawable/ic_nav_panel_home.xml @@ -0,0 +1,18 @@ + + + + diff --git a/core-ui/src/main/res/layout/widget_main_bottom_toolbar.xml b/core-ui/src/main/res/layout/widget_main_bottom_toolbar.xml index 024bb2bb73..033c9f8b2c 100644 --- a/core-ui/src/main/res/layout/widget_main_bottom_toolbar.xml +++ b/core-ui/src/main/res/layout/widget_main_bottom_toolbar.xml @@ -4,6 +4,24 @@ xmlns:tools="http://schemas.android.com/tools" tools:context="com.anytypeio.anytype.core_ui.widgets.toolbar.MainBottomToolbar"> + + + + + + + + + + + + - - - - - - \ No newline at end of file diff --git a/feature-all-content/src/main/java/com/anytypeio/anytype/feature_allcontent/presentation/AllContentViewModel.kt b/feature-all-content/src/main/java/com/anytypeio/anytype/feature_allcontent/presentation/AllContentViewModel.kt index f0f7bbcc1a..4f9660b38a 100644 --- a/feature-all-content/src/main/java/com/anytypeio/anytype/feature_allcontent/presentation/AllContentViewModel.kt +++ b/feature-all-content/src/main/java/com/anytypeio/anytype/feature_allcontent/presentation/AllContentViewModel.kt @@ -62,6 +62,7 @@ import com.anytypeio.anytype.presentation.extension.sendAnalyticsAllContentToBin import com.anytypeio.anytype.presentation.extension.sendAnalyticsObjectCreateEvent import com.anytypeio.anytype.presentation.home.OpenObjectNavigation import com.anytypeio.anytype.presentation.home.navigation +import com.anytypeio.anytype.presentation.navigation.NavPanelState import com.anytypeio.anytype.presentation.objects.getCreateObjectParams import java.time.Instant import java.time.LocalDate @@ -150,6 +151,8 @@ class AllContentViewModel( private val permission = MutableStateFlow(userPermissionProvider.get(vmParams.spaceId)) + val navPanelState = permission.map { permission -> NavPanelState.fromPermission(permission) } + init { Timber.d("AllContentViewModel init, spaceId:[${vmParams.spaceId.id}]") setupInitialStateParams() @@ -745,7 +748,7 @@ class AllContentViewModel( fun onHomeClicked() { Timber.d("onHomeClicked") viewModelScope.launch { - commands.emit(Command.ExitToVault) + commands.emit(Command.ExitToSpaceHome) } } @@ -1036,7 +1039,7 @@ class AllContentViewModel( ) : Command() data class OpenRelationCreation(val space: Id): Command() data object OpenGlobalSearch : Command() - data object ExitToVault : Command() + data object ExitToSpaceHome : Command() data object Back : Command() } diff --git a/feature-all-content/src/main/java/com/anytypeio/anytype/feature_allcontent/ui/AllContentScreen.kt b/feature-all-content/src/main/java/com/anytypeio/anytype/feature_allcontent/ui/AllContentScreen.kt index ca9fb1b740..d8219a4795 100644 --- a/feature-all-content/src/main/java/com/anytypeio/anytype/feature_allcontent/ui/AllContentScreen.kt +++ b/feature-all-content/src/main/java/com/anytypeio/anytype/feature_allcontent/ui/AllContentScreen.kt @@ -99,6 +99,7 @@ import com.anytypeio.anytype.feature_allcontent.models.UiMenuState import com.anytypeio.anytype.feature_allcontent.models.UiSnackbarState import com.anytypeio.anytype.feature_allcontent.models.UiTabsState import com.anytypeio.anytype.feature_allcontent.models.UiTitleState +import com.anytypeio.anytype.presentation.navigation.NavPanelState import com.anytypeio.anytype.presentation.objects.ObjectIcon import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay @@ -112,7 +113,7 @@ fun AllContentWrapperScreen( uiMenuState: UiMenuState, uiSnackbarState: UiSnackbarState, uiItemsState: UiItemsState, - uiBottomMenu: AllContentBottomMenu, + uiBottomMenu: NavPanelState, onTabClick: (AllContentTab) -> Unit, onQueryChanged: (String) -> Unit, onModeClick: (AllContentMenuMode) -> Unit, @@ -132,7 +133,8 @@ fun AllContentWrapperScreen( moveToBin: (UiContentItem.Item) -> Unit, undoMoveToBin: (Id) -> Unit, onDismissSnackbar: () -> Unit, - onShareButtonClicked: () -> Unit + onShareButtonClicked: () -> Unit, + onHomeButtonClicked: () -> Unit ) { AllContentMainScreen( @@ -161,7 +163,8 @@ fun AllContentWrapperScreen( onDismissSnackbar = onDismissSnackbar, canPaginate = canPaginate, onUpdateLimitSearch = onUpdateLimitSearch, - onShareButtonClicked = onShareButtonClicked + onShareButtonClicked = onShareButtonClicked, + onHomeButtonClicked = onHomeButtonClicked ) } @@ -173,7 +176,7 @@ fun AllContentMainScreen( uiTabsState: UiTabsState, uiMenuState: UiMenuState, uiSnackbarState: UiSnackbarState, - uiBottomMenu: AllContentBottomMenu, + uiBottomMenu: NavPanelState, onTabClick: (AllContentTab) -> Unit, onQueryChanged: (String) -> Unit, onModeClick: (AllContentMenuMode) -> Unit, @@ -193,7 +196,8 @@ fun AllContentMainScreen( onDismissSnackbar: () -> Unit, canPaginate: Boolean, onUpdateLimitSearch: () -> Unit, - onShareButtonClicked: () -> Unit + onShareButtonClicked: () -> Unit, + onHomeButtonClicked: () -> Unit ) { var isSearchEmpty by remember { mutableStateOf(true) } val snackBarHostState = remember { SnackbarHostState() } @@ -237,7 +241,8 @@ fun AllContentMainScreen( onAddDocClicked = onAddDocClicked, onCreateObjectLongClicked = onCreateObjectLongClicked, uiBottomMenu = uiBottomMenu, - onShareButtonClicked = onShareButtonClicked + onShareButtonClicked = onShareButtonClicked, + onHomeButtonClicked = onHomeButtonClicked ) } }, @@ -333,12 +338,13 @@ fun AllContentMainScreen( @Composable fun BottomMenu( - uiBottomMenu: AllContentBottomMenu, + uiBottomMenu: NavPanelState, modifier: Modifier = Modifier, onGlobalSearchClicked: () -> Unit, onAddDocClicked: () -> Unit, onCreateObjectLongClicked: () -> Unit, - onShareButtonClicked: () -> Unit + onShareButtonClicked: () -> Unit, + onHomeButtonClicked: () -> Unit ) { val isImeVisible = WindowInsets.ime.getBottom(LocalDensity.current) > 0 if (isImeVisible) return @@ -347,8 +353,9 @@ fun BottomMenu( searchClick = onGlobalSearchClicked, addDocClick = onAddDocClicked, addDocLongClick = onCreateObjectLongClicked, - isOwnerOrEditor = uiBottomMenu.isOwnerOrEditor, - onShareButtonClicked = onShareButtonClicked + onShareButtonClicked = onShareButtonClicked, + state = uiBottomMenu, + onHomeButtonClicked = onHomeButtonClicked ) } @@ -613,13 +620,14 @@ fun PreviewMainScreen() { moveToBin = {}, onBackLongClicked = {}, onRelationClicked = {}, - uiBottomMenu = AllContentBottomMenu(isOwnerOrEditor = false), + uiBottomMenu = NavPanelState.Init, uiSnackbarState = UiSnackbarState.Hidden, undoMoveToBin = {}, onDismissSnackbar = {}, canPaginate = true, onUpdateLimitSearch = {}, - onShareButtonClicked = {} + onShareButtonClicked = {}, + onHomeButtonClicked = {} ) } diff --git a/feature-ui-settings/src/main/java/com/anytypeio/anytype/ui_settings/main/MainSettingScreen.kt b/feature-ui-settings/src/main/java/com/anytypeio/anytype/ui_settings/main/MainSettingScreen.kt index c63ae3294d..84aa0c94e4 100644 --- a/feature-ui-settings/src/main/java/com/anytypeio/anytype/ui_settings/main/MainSettingScreen.kt +++ b/feature-ui-settings/src/main/java/com/anytypeio/anytype/ui_settings/main/MainSettingScreen.kt @@ -112,17 +112,19 @@ fun SpaceHeader( ) } } - DropdownMenuItem( - onClick = { - onRemoveIconClicked() - isSpaceIconMenuExpanded.value = false - }, - ) { - Text( - text = stringResource(R.string.remove_image), - style = BodyRegular, - color = colorResource(id = R.color.text_primary) - ) + if (icon is SpaceIconView.Image) { + DropdownMenuItem( + onClick = { + onRemoveIconClicked() + isSpaceIconMenuExpanded.value = false + }, + ) { + Text( + text = stringResource(R.string.remove_image), + style = BodyRegular, + color = colorResource(id = R.color.text_primary) + ) + } } } } @@ -136,25 +138,4 @@ fun SpaceHeader( isEditEnabled = isEditEnabled ) } -} - -@Composable -fun GradientComposeView( - modifier: Modifier, - from: String, - to: String, - size: Dp -) { - val gradient = Brush.radialGradient( - colors = listOf( - Color(from.toColorInt()), - Color(to.toColorInt()) - ) - ) - Box( - modifier = modifier - .size(size) - .clip(CircleShape) - .background(gradient) - ) } \ 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 8905926cd5..7758b202f0 100644 --- a/localization/src/main/res/values/strings.xml +++ b/localization/src/main/res/values/strings.xml @@ -424,6 +424,7 @@ Scroll to select new position Add below Back button + Share button Home button Search button Add doc @@ -1825,6 +1826,7 @@ Please provide specific details of your needs here. Back button Share and members button + Home button Search objects button Create object button 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 9c427be232..2e56052da3 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 @@ -29,7 +29,6 @@ import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.core_models.Position import com.anytypeio.anytype.core_models.Relation import com.anytypeio.anytype.core_models.RelationFormat -import com.anytypeio.anytype.core_models.RelationLink import com.anytypeio.anytype.core_models.Relations import com.anytypeio.anytype.core_models.Struct import com.anytypeio.anytype.core_models.TextBlock @@ -1205,7 +1204,7 @@ class EditorViewModel( fun onHomeButtonClicked() { Timber.d("onHomeButtonClicked, ") if (stateData.value == ViewState.NotExist) { - navigateToDesktop() + exitToSpaceHome() return } proceedWithExitingToDashboard() @@ -1251,19 +1250,19 @@ class EditorViewModel( vmParams.space ) ).fold( - onSuccess = { navigateToDesktop() }, + onSuccess = { exitToSpaceHome() }, onFailure = { Timber.e(it, "Error while closing this page: $context") - navigateToDesktop() + exitToSpaceHome() } ) } } // TODO DROID-2731 rename the method - fun navigateToDesktop() { + fun exitToSpaceHome() { Timber.d("navigateToDesktop, ") - navigation.postValue(EventWrapper(AppNavigation.Command.ExitToVault)) + navigation.postValue(EventWrapper(ExitToSpaceHome)) } @Deprecated("replace by onTextBlockTextChanged") diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModel.kt index d7c9fd67ba..35bda38c68 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/home/HomeScreenViewModel.kt @@ -369,7 +369,10 @@ class HomeScreenViewModel( viewModelScope.launch { userPermissions .map { permission -> - NavPanelState.fromPermission(permission) + NavPanelState.fromPermission( + permission = permission, + forceHome = false + ) }.collect { navPanelState.value = it } @@ -1780,6 +1783,10 @@ class HomeScreenViewModel( } } + fun onHomeButtonClicked() { + // Do nothing + } + fun onSpaceSettingsClicked() { viewModelScope.launch { commands.emit( 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 38d3a22b39..cffdf265c0 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 @@ -49,6 +49,7 @@ interface AppNavigation { fun exit() fun exitToDesktop() fun exitToVault() + fun exitToSpaceHome() fun openGlobalSearch(space: Id) fun openShareScreen(space: SpaceId) fun openUpdateAppScreen() @@ -73,6 +74,7 @@ interface AppNavigation { data object Exit : Command() data object ExitToDesktop : Command() data object ExitToVault : Command() + data object ExitToSpaceHome : Command() data object ExitFromMigrationScreen : Command() diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/navigation/NavPanelState.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/navigation/NavPanelState.kt index 409dcdf360..770785be20 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/navigation/NavPanelState.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/navigation/NavPanelState.kt @@ -12,38 +12,54 @@ sealed class NavPanelState { ) : NavPanelState() sealed class LeftButtonState { + data object Home : LeftButtonState() data object ViewMembers : LeftButtonState() data class AddMembers(val isActive: Boolean): LeftButtonState() data class Comment(val isActive: Boolean): LeftButtonState() } companion object { - fun fromPermission(permission: SpaceMemberPermissions?) : NavPanelState { + fun fromPermission( + permission: SpaceMemberPermissions?, + forceHome: Boolean = true + ) : NavPanelState { return when(permission) { SpaceMemberPermissions.READER -> { Default( isCreateObjectButtonEnabled = false, - leftButtonState = LeftButtonState.ViewMembers + leftButtonState = if (forceHome) + LeftButtonState.Home + else + LeftButtonState.ViewMembers ) } SpaceMemberPermissions.WRITER -> { Default( isCreateObjectButtonEnabled = true, - leftButtonState = LeftButtonState.ViewMembers + leftButtonState = if (forceHome) + LeftButtonState.Home + else + LeftButtonState.ViewMembers ) } SpaceMemberPermissions.OWNER -> { Default( isCreateObjectButtonEnabled = true, - leftButtonState = LeftButtonState.AddMembers( - isActive = true - ) + leftButtonState = if (forceHome) + LeftButtonState.Home + else + LeftButtonState.AddMembers( + isActive = true + ) ) } SpaceMemberPermissions.NO_PERMISSIONS -> { Default( isCreateObjectButtonEnabled = false, - leftButtonState = LeftButtonState.ViewMembers + leftButtonState = if (forceHome) + LeftButtonState.Home + else + LeftButtonState.ViewMembers ) } else -> { 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 fbefd671dd..961aced6f1 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 @@ -1623,6 +1623,12 @@ class ObjectSetViewModel( } } + fun onHomeButtonClicked() { + viewModelScope.launch { + dispatch(AppNavigation.Command.ExitToSpaceHome) + } + } + fun onShareButtonClicked() { viewModelScope.launch { dispatch( diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/collection/CollectionViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/collection/CollectionViewModel.kt index 426a104c2e..4a02556b9f 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/collection/CollectionViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/collection/CollectionViewModel.kt @@ -859,10 +859,10 @@ class CollectionViewModel( return curr } - fun onHomeClicked() { + fun onHomeButtonClicked() { launch { analytics.sendScreenHomeEvent() - commands.emit(Command.Vault) + commands.emit(ToSpaceHome) } } @@ -976,7 +976,7 @@ class CollectionViewModel( } @OptIn(FlowPreview::class) - private suspend fun filesSubscriptionFlow(): Flow> { + private fun filesSubscriptionFlow(): Flow> { return combine( container.subscribe(buildSearchParams()), queryFlow() @@ -1081,7 +1081,7 @@ class CollectionViewModel( data object ToDesktop : Command() data class ToSearch(val space: Id) : Command() - data object Vault : Command() + data object ToSpaceHome : Command() data object Exit : Command() data object ExitToSpaceWidgets : Command() }