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

DROID-3362 Widgets | Fix | Add "Plus" button to widgets with "View" layout (#2429)

This commit is contained in:
Evgenii Kozlov 2025-05-22 11:45:23 +02:00 committed by GitHub
parent fdad393eac
commit fd5fcb50e8
Signed by: github
GPG key ID: B5690EEEBB952194
5 changed files with 80 additions and 7 deletions

View file

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

View file

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

View file

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

View file

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

View file

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