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:
parent
29d45cf5b0
commit
8e78171ad1
24 changed files with 217 additions and 119 deletions
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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() }
|
||||
|
|
|
@ -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 -> {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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 -> {
|
||||
|
||||
}
|
||||
|
|
18
core-ui/src/main/res/drawable/ic_nav_panel_home.xml
Normal file
18
core-ui/src/main/res/drawable/ic_nav_panel_home.xml
Normal 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>
|
|
@ -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>
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
@ -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 = {}
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
}
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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 -> {
|
||||
|
|
|
@ -1623,6 +1623,12 @@ class ObjectSetViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
fun onHomeButtonClicked() {
|
||||
viewModelScope.launch {
|
||||
dispatch(AppNavigation.Command.ExitToSpaceHome)
|
||||
}
|
||||
}
|
||||
|
||||
fun onShareButtonClicked() {
|
||||
viewModelScope.launch {
|
||||
dispatch(
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue