Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
4540802
DROID-3965 icons
konstantiniiv Sep 11, 2025
2a66c3a
DROID-3965 ref
konstantiniiv Sep 11, 2025
432a747
DROID-3965 ui
konstantiniiv Sep 11, 2025
f19c2f7
DROID-3965 new logic of types on widgets
konstantiniiv Sep 11, 2025
c5490c7
DROID-3965 ui fix
konstantiniiv Sep 11, 2025
3ad213c
DROID-3965 insets
konstantiniiv Sep 11, 2025
bd5fa1c
DROID-3965 permissions
konstantiniiv Sep 11, 2025
d47a9d7
DROID-3965 ui
konstantiniiv Sep 11, 2025
02c3aaf
DROID-3965 space manager fix
konstantiniiv Sep 11, 2025
b426e66
DROID-3965 vm params
konstantiniiv Sep 11, 2025
7e96650
DROID-3965 ui
konstantiniiv Sep 11, 2025
5a6bbf1
DROID-3965 fix shared flow
konstantiniiv Sep 11, 2025
96b05df
DROID-3965 fix
konstantiniiv Sep 11, 2025
2a48927
DROID-3965 Merge branch 'main' into droid-3965-epic-widgets-restructu…
konstantiniiv Sep 12, 2025
3e0417b
DROID-3965 Merge branch 'main' into droid-3965-epic-widgets-restructu…
konstantiniiv Sep 15, 2025
75c099a
DROID-3965 filter by space member and templates
konstantiniiv Sep 15, 2025
a702c9f
DROID-3965 new type relations
konstantiniiv Sep 15, 2025
f5da6dc
DROID-3965 pinned section
konstantiniiv Sep 15, 2025
70f921a
DROID-3965 new type widgets
konstantiniiv Sep 15, 2025
0cad7fd
DROID-3965 Merge branch 'main' into droid-3965-epic-widgets-restructu…
konstantiniiv Sep 15, 2025
d5fc29a
DROID-3965 fix
konstantiniiv Sep 15, 2025
799cf90
DROID-3965 mapping
konstantiniiv Sep 15, 2025
f4885ba
DROID-3965 widgets mapping
konstantiniiv Sep 15, 2025
6458df7
DROID-3965 models refactoring
konstantiniiv Sep 16, 2025
0e1361c
DROID-3965 model
konstantiniiv Sep 16, 2025
b75ddbf
DROID-3965 legacy
konstantiniiv Sep 16, 2025
49b09f5
DROID-3965 fixes
konstantiniiv Sep 16, 2025
89902cd
DROID-3965 containers without sub
konstantiniiv Sep 16, 2025
312b6b7
DROID-3965 dataViewListWidgetContainer
konstantiniiv Sep 16, 2025
f6cf3b5
DROID-3965 ui
konstantiniiv Sep 17, 2025
6ba4ea5
DROID-3965 ui
konstantiniiv Sep 17, 2025
89a2cc7
DROID-3965 data view container refactoring
konstantiniiv Sep 17, 2025
21470ea
DROID-3965 make use case async
konstantiniiv Sep 17, 2025
d1bb3e9
DROID-3965 refactoring
konstantiniiv Sep 17, 2025
f3d3972
DROID-3965 refactoring
konstantiniiv Sep 17, 2025
b20aeb2
DROID-3965 refactoring
konstantiniiv Sep 17, 2025
da573b2
DROID-3965 kdoc
konstantiniiv Sep 17, 2025
ade198a
DROID-3965 spacer
konstantiniiv Sep 17, 2025
5ddb645
DROID-3965 list widget
konstantiniiv Sep 18, 2025
53bc113
DROID-3965 widget header
konstantiniiv Sep 18, 2025
0994d4f
DROID-3965 ui
konstantiniiv Sep 18, 2025
40ea7bb
DROID-3965 clicks
konstantiniiv Sep 18, 2025
98d6697
DROID-3965 res
konstantiniiv Sep 18, 2025
2707b27
DROID-3965 menu
konstantiniiv Sep 18, 2025
0ad2bc6
DROID-3965 ext
konstantiniiv Sep 18, 2025
3a3a41f
DROID-3965 ext
konstantiniiv Sep 18, 2025
54231e2
DROID-3965 containers
konstantiniiv Sep 18, 2025
e80cb05
DROID-3965 data view widget
konstantiniiv Sep 18, 2025
4b24ac1
DROID-3965 action
konstantiniiv Sep 18, 2025
318310a
DROID-3965 view model
konstantiniiv Sep 18, 2025
6adc65b
DROID-3965 tests
konstantiniiv Sep 18, 2025
f318689
DROID-3965 fixes
konstantiniiv Sep 18, 2025
d5b2161
DROID-3965 refactoring
konstantiniiv Sep 19, 2025
60f95ec
DROID-3965 skip sub when collapsed
konstantiniiv Sep 19, 2025
9ab2447
DROID-3965 refactoring
konstantiniiv Sep 19, 2025
6cd34d6
DROID-3965 fixes
konstantiniiv Sep 19, 2025
a5e0180
DROID-3965 fixes
konstantiniiv Sep 19, 2025
6868384
DROID-3965 tabs
konstantiniiv Sep 19, 2025
cce4fff
DROID-3965 fixes
konstantiniiv Sep 19, 2025
46611ff
DROID-3965 fixes
konstantiniiv Sep 19, 2025
57ed129
DROID-3965 tests
konstantiniiv Sep 19, 2025
878d6b1
DROID-3965 Merge branch 'main' into droid-3965-epic-widgets-restructu…
konstantiniiv Sep 19, 2025
4c1a9b4
DROID-3965 Π°ΡˆΡ‡
konstantiniiv Sep 20, 2025
e2539d1
DROID-3965 fix
konstantiniiv Sep 20, 2025
f61fa04
DROID-3965 on cleared
konstantiniiv Sep 20, 2025
234653c
DROID-3965 test
konstantiniiv Sep 20, 2025
8ffd360
DROID-3965 di
konstantiniiv Sep 20, 2025
b10745a
DROID-3965 fix
konstantiniiv Sep 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ import com.anytypeio.anytype.presentation.relations.RelationAddViewModelBase
import com.anytypeio.anytype.presentation.relations.RelationListViewModel
import com.anytypeio.anytype.feature_properties.space.SpacePropertiesViewModel
import com.anytypeio.anytype.presentation.publishtoweb.MySitesViewModel
import com.anytypeio.anytype.presentation.home.HomeScreenViewModel
import com.anytypeio.anytype.presentation.publishtoweb.PublishToWebViewModel
import com.anytypeio.anytype.presentation.relations.option.CreateOrEditOptionViewModel
import com.anytypeio.anytype.presentation.relations.value.`object`.ObjectValueViewModel
Expand Down Expand Up @@ -177,10 +178,12 @@ class ComponentManager(
.build()
}

val homeScreenComponent = Component {
val homeScreenComponent = ComponentWithParams { vmParams: HomeScreenViewModel.VmParams ->
DaggerHomeScreenComponent
.factory()
.create(findComponentDependencies())
.create(
vmParams = vmParams, dependencies = findComponentDependencies()
)
}

val collectionComponent = ComponentWithParams { vmParams: CollectionViewModel.VmParams ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.anytypeio.anytype.core_models.Payload
import com.anytypeio.anytype.core_utils.di.scope.PerScreen
import com.anytypeio.anytype.core_utils.tools.FeatureToggles
import com.anytypeio.anytype.di.common.ComponentDependencies
import com.anytypeio.anytype.di.main.ConfigModule.DEFAULT_APP_COROUTINE_SCOPE
import com.anytypeio.anytype.domain.auth.repo.AuthRepository
import com.anytypeio.anytype.domain.base.AppCoroutineDispatchers
import com.anytypeio.anytype.domain.bin.EmptyBin
Expand Down Expand Up @@ -61,9 +62,12 @@ import com.anytypeio.anytype.presentation.widgets.WidgetSessionStateHolder
import com.anytypeio.anytype.providers.DefaultCoverImageHashProvider
import com.anytypeio.anytype.ui.home.HomeScreenFragment
import dagger.Binds
import dagger.BindsInstance
import dagger.Component
import dagger.Module
import dagger.Provides
import javax.inject.Named
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers

@Component(
Expand All @@ -77,7 +81,10 @@ import kotlinx.coroutines.Dispatchers
interface HomeScreenComponent {
@Component.Factory
interface Factory {
fun create(dependencies: HomeScreenDependencies): HomeScreenComponent
fun create(
@BindsInstance vmParams: HomeScreenViewModel.VmParams,
dependencies: HomeScreenDependencies
): HomeScreenComponent
}

fun inject(fragment: HomeScreenFragment)
Expand All @@ -86,6 +93,11 @@ interface HomeScreenComponent {
@Module
object HomeScreenModule {

@Provides
fun provideUnqualifiedScope(
@Named(DEFAULT_APP_COROUTINE_SCOPE) scope: CoroutineScope
): CoroutineScope = scope

@JvmStatic
@Provides
@PerScreen
Expand Down Expand Up @@ -307,4 +319,5 @@ interface HomeScreenDependencies : ComponentDependencies {
fun provideChatEventChannel(): ChatEventChannel
fun provideChatPreviewContainer(): ChatPreviewContainer
fun clipboard(): com.anytypeio.anytype.domain.clipboard.Clipboard
@Named(DEFAULT_APP_COROUTINE_SCOPE) fun scope(): CoroutineScope
}
106 changes: 81 additions & 25 deletions app/src/main/java/com/anytypeio/anytype/ui/home/HomeScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
Expand All @@ -34,6 +35,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
Expand All @@ -48,6 +50,7 @@ import com.anytypeio.anytype.core_models.ObjectWrapper
import com.anytypeio.anytype.core_ui.extensions.throttledClick
import com.anytypeio.anytype.core_ui.foundation.components.BottomNavigationMenu
import com.anytypeio.anytype.core_ui.foundation.noRippleClickable
import com.anytypeio.anytype.core_ui.views.Caption1Medium
import com.anytypeio.anytype.core_ui.views.UXBody
import com.anytypeio.anytype.core_ui.widgets.dv.DefaultDragAndDropModifier
import com.anytypeio.anytype.presentation.home.InteractionMode
Expand Down Expand Up @@ -100,11 +103,10 @@ fun HomeScreen(
onSpaceWidgetClicked: () -> Unit,
onMove: (List<WidgetView>, FromIndex, ToIndex) -> Unit,
onSpaceWidgetShareIconClicked: (ObjectWrapper.SpaceView) -> Unit,
onSeeAllObjectsClicked: (WidgetView.Gallery) -> Unit,
onCreateObjectInsideWidget: (Id) -> Unit,
onCreateDataViewObject: (WidgetId, ViewId?) -> Unit,
onCreateElement: (WidgetView) -> Unit = {}
) {
onCreateElement: (WidgetView) -> Unit = {},
onCreateNewTypeClicked: () -> Unit
) {

Box(modifier = modifier.fillMaxSize()) {
WidgetList(
Expand All @@ -122,12 +124,11 @@ fun HomeScreen(
onMove = onMove,
onObjectCheckboxClicked = onObjectCheckboxClicked,
onSpaceWidgetShareIconClicked = onSpaceWidgetShareIconClicked,
onSeeAllObjectsClicked = onSeeAllObjectsClicked,
onCreateWidget = onCreateWidget,
onCreateObjectInsideWidget = onCreateObjectInsideWidget,
onCreateDataViewObject = onCreateDataViewObject,
onCreateElement = onCreateElement,
onWidgetMenuTriggered = onWidgetMenuTriggered
onWidgetMenuTriggered = onWidgetMenuTriggered,
onCreateNewTypeClicked = onCreateNewTypeClicked
)
AnimatedVisibility(
visible = mode is InteractionMode.Edit,
Expand Down Expand Up @@ -196,11 +197,10 @@ private fun WidgetList(
onObjectCheckboxClicked: (Id, Boolean) -> Unit,
onSpaceWidgetClicked: () -> Unit,
onSpaceWidgetShareIconClicked: (ObjectWrapper.SpaceView) -> Unit,
onSeeAllObjectsClicked: (WidgetView.Gallery) -> Unit,
onCreateWidget: () -> Unit,
onCreateObjectInsideWidget: (Id) -> Unit,
onCreateDataViewObject: (WidgetId, ViewId?) -> Unit,
onCreateElement: (WidgetView) -> Unit = {}
onCreateElement: (WidgetView) -> Unit = {},
onCreateNewTypeClicked: () -> Unit
) {

val view = LocalView.current
Expand Down Expand Up @@ -276,8 +276,8 @@ private fun WidgetList(
onObjectCheckboxClicked = onObjectCheckboxClicked,
onWidgetSourceClicked = onWidgetSourceClicked,
onToggleExpandedWidgetState = onToggleExpandedWidgetState,
onCreateObjectInsideWidget = onCreateObjectInsideWidget,
onWidgetMenuTriggered = onWidgetMenuTriggered
onWidgetMenuTriggered = onWidgetMenuTriggered,
onCreateElement = onCreateElement
)
}
} else {
Expand All @@ -294,8 +294,8 @@ private fun WidgetList(
onObjectCheckboxClicked = onObjectCheckboxClicked,
onWidgetSourceClicked = onWidgetSourceClicked,
onToggleExpandedWidgetState = onToggleExpandedWidgetState,
onCreateObjectInsideWidget = onCreateObjectInsideWidget,
onWidgetMenuTriggered = onWidgetMenuTriggered
onWidgetMenuTriggered = onWidgetMenuTriggered,
onCreateElement = onCreateElement
)
}
}
Expand All @@ -311,7 +311,7 @@ private fun WidgetList(
item = item,
onWidgetMenuAction = onWidgetMenuAction,
onWidgetSourceClicked = onWidgetSourceClicked,
onWidgetMenuTriggered = onWidgetMenuTriggered
onObjectCheckboxClicked = onObjectCheckboxClicked
)
}
} else {
Expand All @@ -322,7 +322,7 @@ private fun WidgetList(
item = item,
onWidgetMenuAction = onWidgetMenuAction,
onWidgetSourceClicked = onWidgetSourceClicked,
onWidgetMenuTriggered = onWidgetMenuTriggered
onObjectCheckboxClicked = onObjectCheckboxClicked
)
}
}
Expand Down Expand Up @@ -387,7 +387,6 @@ private fun WidgetList(
onChangeWidgetView = onChangeWidgetView,
onToggleExpandedWidgetState = onToggleExpandedWidgetState,
onObjectCheckboxClicked = onObjectCheckboxClicked,
onSeeAllObjectsClicked = onSeeAllObjectsClicked,
onWidgetMenuTriggered = onWidgetMenuTriggered
)
}
Expand All @@ -405,7 +404,6 @@ private fun WidgetList(
onChangeWidgetView = onChangeWidgetView,
onToggleExpandedWidgetState = onToggleExpandedWidgetState,
onObjectCheckboxClicked = onObjectCheckboxClicked,
onSeeAllObjectsClicked = onSeeAllObjectsClicked,
onWidgetMenuTriggered = onWidgetMenuTriggered,
onCreateElement = onCreateElement
)
Expand Down Expand Up @@ -557,8 +555,21 @@ private fun WidgetList(
)
}
}

WidgetView.Section.ObjectTypes -> {
SpaceObjectTypesSectionHeader(
onCreateNewTypeClicked = onCreateNewTypeClicked
)
}
WidgetView.Section.Pinned -> {
PinnedSectionHeader()
}
}
}

item {
Spacer(modifier = Modifier.height(200.dp))
}
}
}

Expand Down Expand Up @@ -657,7 +668,6 @@ private fun SetOfObjectsItem(
onToggleExpandedWidgetState = onToggleExpandedWidgetState,
mode = mode,
onObjectCheckboxClicked = onObjectCheckboxClicked,
onCreateDataViewObject = onCreateDataViewObject,
onCreateElement = onCreateElement
)
AnimatedVisibility(
Expand Down Expand Up @@ -698,7 +708,6 @@ private fun GalleryWidgetItem(
onChangeWidgetView: (WidgetId, ViewId) -> Unit,
onToggleExpandedWidgetState: (WidgetId) -> Unit,
onObjectCheckboxClicked: (Id, Boolean) -> Unit,
onSeeAllObjectsClicked: (WidgetView.Gallery) -> Unit,
onCreateElement: (WidgetView) -> Unit = {}
) {
Box(
Expand All @@ -719,7 +728,6 @@ private fun GalleryWidgetItem(
onToggleExpandedWidgetState = onToggleExpandedWidgetState,
mode = mode,
onObjectCheckboxClicked = onObjectCheckboxClicked,
onSeeAllObjectsClicked = onSeeAllObjectsClicked,
onWidgetMenuTriggered = onWidgetMenuTriggered,
onCreateElement = onCreateElement
)
Expand Down Expand Up @@ -756,7 +764,7 @@ private fun LinkWidgetItem(
item: WidgetView.Link,
onWidgetMenuAction: (WidgetId, DropDownMenuAction) -> Unit,
onWidgetSourceClicked: (WidgetId, Widget.Source) -> Unit,
onWidgetMenuTriggered: (WidgetId) -> Unit,
onObjectCheckboxClicked: (Id, Boolean) -> Unit
) {
Box(
modifier = modifier
Expand All @@ -772,7 +780,7 @@ private fun LinkWidgetItem(
onWidgetSourceClicked = onWidgetSourceClicked,
isInEditMode = mode is InteractionMode.Edit,
hasReadOnlyAccess = mode is InteractionMode.ReadOnly,
onWidgetMenuTriggered = onWidgetMenuTriggered
onObjectCheckboxClicked = onObjectCheckboxClicked
)
AnimatedVisibility(
visible = mode is InteractionMode.Edit,
Expand Down Expand Up @@ -812,7 +820,7 @@ private fun TreeWidgetItem(
onObjectCheckboxClicked: (Id, Boolean) -> Unit,
onWidgetSourceClicked: (WidgetId, Widget.Source) -> Unit,
onToggleExpandedWidgetState: (WidgetId) -> Unit,
onCreateObjectInsideWidget: (Id) -> Unit
onCreateElement: (WidgetView) -> Unit
) {
Box(
modifier = modifier
Expand All @@ -831,8 +839,8 @@ private fun TreeWidgetItem(
onObjectCheckboxClicked = onObjectCheckboxClicked,
onWidgetSourceClicked = onWidgetSourceClicked,
onToggleExpandedWidgetState = onToggleExpandedWidgetState,
onCreateElement = onCreateElement,
mode = mode,
onCreateObjectInsideWidget = onCreateObjectInsideWidget,
onWidgetMenuClicked = onWidgetMenuTriggered
)
AnimatedVisibility(
Expand Down Expand Up @@ -881,4 +889,52 @@ fun WidgetEditModeButton(
color = colorResource(id = R.color.text_white)
)
}
}

@Composable
private fun SpaceObjectTypesSectionHeader(
onCreateNewTypeClicked: () -> Unit
) {
Box(
modifier = Modifier
.fillMaxWidth()
.height(52.dp)
) {
Text(
modifier = Modifier
.align(Alignment.BottomStart)
.padding(start = 20.dp, bottom = 12.dp),
text = stringResource(R.string.widgets_section_object_types),
style = Caption1Medium,
color = colorResource(id = R.color.control_transparent_secondary)
)
Image(
painter = painterResource(id = R.drawable.ic_default_plus),
contentDescription = "Create new type",
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(end = 20.dp, bottom = 12.dp)
.size(18.dp)
.noRippleClickable { onCreateNewTypeClicked() },
contentScale = ContentScale.Inside
)
}
}

@Composable
private fun PinnedSectionHeader() {
Box(
modifier = Modifier
.fillMaxWidth()
.height(52.dp)
) {
Text(
modifier = Modifier
.align(Alignment.BottomStart)
.padding(start = 20.dp, bottom = 12.dp),
text = stringResource(R.string.widgets_section_pinned),
style = Caption1Medium,
color = colorResource(id = R.color.control_transparent_secondary)
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,10 @@ class HomeScreenFragment : Fragment(),
private val vm by viewModels<HomeScreenViewModel> { factory }

override fun onCreate(savedInstanceState: Bundle?) {
componentManager().homeScreenComponent.get().inject(this)
val vmParams = HomeScreenViewModel.VmParams(
spaceId = SpaceId(space),
)
componentManager().homeScreenComponent.get(vmParams).inject(this)
super.onCreate(savedInstanceState)
}

Expand Down Expand Up @@ -224,14 +227,13 @@ class HomeScreenFragment : Fragment(),
onMove = vm::onMove,
onObjectCheckboxClicked = vm::onObjectCheckboxClicked,
onSpaceWidgetShareIconClicked = vm::onSpaceWidgetShareIconClicked,
onSeeAllObjectsClicked = vm::onSeeAllObjectsClicked,
onCreateObjectInsideWidget = vm::onCreateObjectInsideWidget,
onCreateDataViewObject = vm::onCreateDataViewObject,
onCreateDataViewObject = {_, _ -> },
onNavBarShareButtonClicked = vm::onNavBarShareIconClicked,
navPanelState = vm.navPanelState.collectAsStateWithLifecycle().value,
onHomeButtonClicked = vm::onHomeButtonClicked,
onCreateElement = vm::onCreateWidgetElementClicked,
onWidgetMenuTriggered = vm::onWidgetMenuTriggered
onWidgetMenuTriggered = vm::onWidgetMenuTriggered,
onCreateNewTypeClicked = vm::onCreateNewTypeClicked
)
}

Expand Down Expand Up @@ -468,6 +470,13 @@ class HomeScreenFragment : Fragment(),
}
startActivity(Intent.createChooser(intent, null))
}
is Command.CreateNewType -> {
runCatching {
navigation().openCreateObjectTypeScreen(spaceId = command.space)
}.onFailure { e ->
Timber.e(e, "Error while opening create new type screen")
}
}
}
}

Expand Down
Loading