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 dcc8bfdda5..6e288169c0 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 @@ -406,7 +406,8 @@ private fun WidgetList( onToggleExpandedWidgetState = onToggleExpandedWidgetState, onObjectCheckboxClicked = onObjectCheckboxClicked, onSeeAllObjectsClicked = onSeeAllObjectsClicked, - onWidgetMenuTriggered = onWidgetMenuTriggered + onWidgetMenuTriggered = onWidgetMenuTriggered, + onCreateElement = onCreateElement ) } } @@ -691,7 +692,8 @@ private fun GalleryWidgetItem( onChangeWidgetView: (WidgetId, ViewId) -> Unit, onToggleExpandedWidgetState: (WidgetId) -> Unit, onObjectCheckboxClicked: (Id, Boolean) -> Unit, - onSeeAllObjectsClicked: (WidgetView.Gallery) -> Unit + onSeeAllObjectsClicked: (WidgetView.Gallery) -> Unit, + onCreateElement: (WidgetView) -> Unit = {} ) { Box( modifier = modifier @@ -712,7 +714,8 @@ private fun GalleryWidgetItem( mode = mode, onObjectCheckboxClicked = onObjectCheckboxClicked, onSeeAllObjectsClicked = onSeeAllObjectsClicked, - onWidgetMenuTriggered = onWidgetMenuTriggered + onWidgetMenuTriggered = onWidgetMenuTriggered, + onCreateElement = onCreateElement ) AnimatedVisibility( visible = mode is InteractionMode.Edit, 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 3f83578d38..9d6c4b4d50 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 @@ -101,7 +101,6 @@ class HomeScreenFragment : BaseComposeFragment(), ): View = ComposeView(requireContext()).apply { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) setContent { - MaterialTheme( typography = typography, shapes = MaterialTheme.shapes.copy(medium = RoundedCornerShape(16.dp)), diff --git a/app/src/main/java/com/anytypeio/anytype/ui/widgets/types/DataViewWidget.kt b/app/src/main/java/com/anytypeio/anytype/ui/widgets/types/DataViewWidget.kt index c8072f50e9..17c26fae99 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/widgets/types/DataViewWidget.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/widgets/types/DataViewWidget.kt @@ -214,7 +214,8 @@ fun GalleryWidgetCard( onChangeWidgetView: (WidgetId, ViewId) -> Unit, onToggleExpandedWidgetState: (WidgetId) -> Unit, onObjectCheckboxClicked: (Id, Boolean) -> Unit, - onSeeAllObjectsClicked: (WidgetView.Gallery) -> Unit + onSeeAllObjectsClicked: (WidgetView.Gallery) -> Unit, + onCreateElement: (WidgetView) -> Unit ) { val isCardMenuExpanded = remember { mutableStateOf(false) @@ -259,7 +260,9 @@ fun GalleryWidgetCard( isInEditMode = mode is InteractionMode.Edit, hasReadOnlyAccess = mode is InteractionMode.ReadOnly, onDropDownMenuAction = onDropDownMenuAction, - onWidgetMenuTriggered = { onWidgetMenuTriggered(item.id) } + onWidgetMenuTriggered = { onWidgetMenuTriggered(item.id) }, + canCreate = mode is InteractionMode.Default && item.canCreateObjectOfType, + onCreateElement = { onCreateElement(item) }, ) if (item.tabs.size > 1 && item.isExpanded) { DataViewTabs( 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 ab00a93a52..9d5511a6c7 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 @@ -2554,6 +2554,55 @@ class HomeScreenViewModel( } } + } + is WidgetView.Gallery -> { + viewModelScope.launch { + val source = view.source + if (source is Widget.Source.Default) { + when (source.obj.layout) { + ObjectType.Layout.OBJECT_TYPE -> { + val wrapper = ObjectWrapper.Type(source.obj.map) + val space = SpaceId(spaceManager.get()) + val startTime = System.currentTimeMillis() + createObject.async( + params = CreateObject.Param( + space = space, + type = TypeKey(wrapper.uniqueKey), + prefilled = mapOf(Relations.IS_FAVORITE to true) + ) + ).onSuccess { result -> + sendAnalyticsObjectCreateEvent( + objType = wrapper.uniqueKey, + analytics = analytics, + route = EventsDictionary.Routes.widget, + startTime = startTime, + view = null, + spaceParams = provideParams(space.id) + ) + proceedWithNavigation(result.obj.navigation()) + } + } + ObjectType.Layout.COLLECTION -> { + onCreateDataViewObject( + widget = view.id, + view = null, + navigate = true + ) + } + ObjectType.Layout.SET -> { + onCreateDataViewObject( + widget = view.id, + view = null, + navigate = true + ) + } + else -> { + Timber.w("Unexpected source layout: ${source.obj.layout}") + } + } + } + } + } else -> { Timber.w("Unexpected widget type: ${view::class.java.simpleName}") diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/WidgetView.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/WidgetView.kt index e9100a3d9f..576badecce 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/WidgetView.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/WidgetView.kt @@ -119,7 +119,26 @@ sealed class WidgetView { val isExpanded: Boolean, val showIcon: Boolean = false, val showCover: Boolean = false - ) : WidgetView(), Draggable + ) : WidgetView(), Draggable { + val canCreateObjectOfType : Boolean get() { + return when(source) { + Widget.Source.Bundled.AllObjects -> false + Widget.Source.Bundled.Chat -> false + Widget.Source.Bundled.Bin -> false + Widget.Source.Bundled.Favorites -> true + Widget.Source.Bundled.Recent -> false + Widget.Source.Bundled.RecentLocal -> false + is Widget.Source.Default -> { + if (source.obj.layout == ObjectType.Layout.OBJECT_TYPE) { + val wrapper = ObjectWrapper.Type(source.obj.map) + SupportedLayouts.createObjectLayouts.contains(wrapper.recommendedLayout) + } else { + true + } + } + } + } + } data class ListOfObjects( override val id: Id,