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

DROID-3314 Navigation | Fix | Navigation panel fixes (#2051)

This commit is contained in:
Evgenii Kozlov 2025-01-31 15:02:09 +01:00 committed by GitHub
parent 29d45cf5b0
commit 8e78171ad1
Signed by: github
GPG key ID: B5690EEEBB952194
24 changed files with 217 additions and 119 deletions

View file

@ -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,

View file

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

View file

@ -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
)

View file

@ -605,6 +605,11 @@ open class EditorFragment : NavigationFragment<FragmentEditorBinding>(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<FragmentEditorBinding>(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)

View file

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

View file

@ -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,
)
}

View file

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

View file

@ -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 -> {

View file

@ -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 {

View file

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

View file

@ -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),

View file

@ -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 -> {
}

View file

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:viewportWidth="32"
android:viewportHeight="32">
<path
android:pathData="M26,23.998V13.998L16,5.998L6,13.998V23.998"
android:strokeWidth="1.5"
android:strokeColor="@color/transparent_active_full_alpha"
android:strokeAlpha="0.4"
android:strokeLineCap="round"/>
<path
android:pathData="M18.5,23.998L18.5,18.498C18.5,17.117 17.381,15.998 16,15.998V15.998C14.619,15.998 13.5,17.117 13.5,18.498L13.5,23.998"
android:strokeWidth="1.5"
android:strokeColor="@color/transparent_active_full_alpha"
android:strokeAlpha="0.4"
android:strokeLineCap="round"/>
</vector>

View file

@ -4,6 +4,24 @@
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.anytypeio.anytype.core_ui.widgets.toolbar.MainBottomToolbar">
<FrameLayout
android:id="@+id/btnHome"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/default_ripple">
<ImageView
android:id="@+id/icHome"
android:layout_width="@dimen/main_bottom_toolbar_icon_width"
android:layout_height="@dimen/main_bottom_toolbar_icon_height"
android:layout_gravity="center"
android:scaleType="center"
android:contentDescription="@string/content_desc_home_button"
app:srcCompat="@drawable/ic_nav_panel_home" />
</FrameLayout>
<FrameLayout
android:id="@+id/btnShare"
android:layout_width="0dp"
@ -17,11 +35,29 @@
android:layout_height="@dimen/main_bottom_toolbar_icon_height"
android:layout_gravity="center"
android:scaleType="center"
android:contentDescription="@string/content_desc_back_button"
android:contentDescription="@string/content_desc_share_button"
app:srcCompat="@drawable/ic_nav_panel_members" />
</FrameLayout>
<FrameLayout
android:id="@+id/btnAddDoc"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/default_ripple">
<ImageView
android:id="@+id/icAddDoc"
android:layout_width="@dimen/main_bottom_toolbar_icon_width"
android:layout_height="@dimen/main_bottom_toolbar_icon_height"
android:layout_gravity="center"
android:scaleType="center"
android:contentDescription="@string/content_desc_add_doc_button"
app:srcCompat="@drawable/ic_nav_panel_plus" />
</FrameLayout>
<FrameLayout
android:id="@+id/btnSearch"
android:layout_width="0dp"
@ -41,22 +77,4 @@
</FrameLayout>
<FrameLayout
android:id="@+id/btnAddDoc"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/default_ripple">
<ImageView
android:id="@+id/icAddDoc"
android:layout_width="@dimen/main_bottom_toolbar_icon_width"
android:layout_height="@dimen/main_bottom_toolbar_icon_height"
android:layout_gravity="center"
android:scaleType="center"
android:contentDescription="@string/content_desc_add_doc_button"
app:srcCompat="@drawable/ic_nav_panel_plus" />
</FrameLayout>
</merge>

View file

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

View file

@ -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 = {}
)
}

View file

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

View file

@ -424,6 +424,7 @@
<string name="scroll_to_select_position">Scroll to select new position</string>
<string name="block_action_add_below">Add below</string>
<string name="content_desc_back_button">Back button</string>
<string name="content_desc_share_button">Share button</string>
<string name="content_desc_home_button">Home button</string>
<string name="content_desc_search_button">Search button</string>
<string name="content_desc_add_doc_button">Add doc</string>
@ -1825,6 +1826,7 @@ Please provide specific details of your needs here.</string>
<string name="main_navigation_content_desc_back_button">Back button</string>
<string name="main_navigation_content_desc_members_button">Share and members button</string>
<string name="main_navigation_content_desc_home_button">Home button</string>
<string name="main_navigation_content_desc_search_button">Search objects button</string>
<string name="main_navigation_content_desc_create_button">Create object button</string>

View file

@ -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")

View file

@ -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(

View file

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

View file

@ -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 -> {

View file

@ -1623,6 +1623,12 @@ class ObjectSetViewModel(
}
}
fun onHomeButtonClicked() {
viewModelScope.launch {
dispatch(AppNavigation.Command.ExitToSpaceHome)
}
}
fun onShareButtonClicked() {
viewModelScope.launch {
dispatch(

View file

@ -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<List<CollectionView>> {
private fun filesSubscriptionFlow(): Flow<List<CollectionView>> {
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()
}