diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/EditorDI.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/EditorDI.kt index d7cca0e63b..0cefc3d093 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/EditorDI.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/EditorDI.kt @@ -117,6 +117,7 @@ import com.anytypeio.anytype.presentation.editor.render.DefaultBlockViewRenderer import com.anytypeio.anytype.presentation.editor.selection.SelectionStateHolder import com.anytypeio.anytype.presentation.editor.toggle.ToggleStateHolder import com.anytypeio.anytype.presentation.objects.LockedStateProvider +import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider import com.anytypeio.anytype.presentation.relations.providers.DefaultObjectRelationProvider import com.anytypeio.anytype.presentation.relations.providers.DefaultObjectValueProvider import com.anytypeio.anytype.presentation.relations.providers.ObjectDetailProvider @@ -218,6 +219,11 @@ object EditorSessionModule { @PerScreen fun provideStorage(): Editor.Storage = Editor.Storage() + @JvmStatic + @Provides + @PerScreen + fun provideRestriction(storage: Editor.Storage): ObjectRestrictionProvider = storage + @JvmStatic @Provides @PerScreen diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectRelationListDI.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectRelationListDI.kt index 8e2351ea68..1b86fa1413 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectRelationListDI.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectRelationListDI.kt @@ -12,6 +12,7 @@ import com.anytypeio.anytype.domain.relations.AddToFeaturedRelations import com.anytypeio.anytype.domain.relations.DeleteRelationFromObject import com.anytypeio.anytype.domain.relations.RemoveFromFeaturedRelations import com.anytypeio.anytype.presentation.objects.LockedStateProvider +import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider import com.anytypeio.anytype.presentation.relations.ObjectRelationListViewModelFactory import com.anytypeio.anytype.presentation.relations.providers.RelationListProvider import com.anytypeio.anytype.presentation.util.Dispatcher @@ -49,7 +50,8 @@ object ObjectRelationListModule { deleteRelationFromObject: DeleteRelationFromObject, analytics: Analytics, storeOfRelations: StoreOfRelations, - addRelationToObject: AddRelationToObject + addRelationToObject: AddRelationToObject, + restrictions: ObjectRestrictionProvider ): ObjectRelationListViewModelFactory { return ObjectRelationListViewModelFactory( lockedStateProvider = lockedStateProvider, @@ -62,7 +64,8 @@ object ObjectRelationListModule { deleteRelationFromObject = deleteRelationFromObject, analytics = analytics, storeOfRelations = storeOfRelations, - addRelationToObject = addRelationToObject + addRelationToObject = addRelationToObject, + restrictions = restrictions ) } diff --git a/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectSetDI.kt b/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectSetDI.kt index 3a7308f766..39d4e74f53 100644 --- a/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectSetDI.kt +++ b/app/src/main/java/com/anytypeio/anytype/di/feature/ObjectSetDI.kt @@ -70,8 +70,10 @@ import com.anytypeio.anytype.domain.workspace.SpaceManager import com.anytypeio.anytype.presentation.analytics.AnalyticSpaceHelperDelegate import com.anytypeio.anytype.presentation.common.Action import com.anytypeio.anytype.presentation.common.Delegator +import com.anytypeio.anytype.presentation.editor.Editor import com.anytypeio.anytype.presentation.editor.cover.CoverImageHashProvider import com.anytypeio.anytype.presentation.objects.LockedStateProvider +import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider import com.anytypeio.anytype.presentation.relations.providers.DataViewObjectRelationProvider import com.anytypeio.anytype.presentation.relations.providers.DataViewObjectValueProvider import com.anytypeio.anytype.presentation.relations.providers.ObjectDetailProvider @@ -406,6 +408,11 @@ object ObjectSetModule { @PerScreen fun provideObjectStateReducer(): ObjectStateReducer = DefaultObjectStateReducer() + @JvmStatic + @Provides + @PerScreen + fun provideRestriction(reducer: ObjectStateReducer): ObjectRestrictionProvider = reducer + @JvmStatic @Provides @PerScreen diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/Editor.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/Editor.kt index 84a9457056..0fb0019791 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/Editor.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/Editor.kt @@ -3,6 +3,7 @@ package com.anytypeio.anytype.presentation.editor import com.anytypeio.anytype.core_models.Block import com.anytypeio.anytype.core_models.Document import com.anytypeio.anytype.core_models.Id +import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction import com.anytypeio.anytype.domain.editor.Editor import com.anytypeio.anytype.domain.editor.Editor.Focus import com.anytypeio.anytype.presentation.editor.editor.Proxy @@ -10,6 +11,7 @@ import com.anytypeio.anytype.presentation.editor.editor.Store import com.anytypeio.anytype.presentation.editor.editor.actions.ActionItemType import com.anytypeio.anytype.presentation.editor.editor.model.BlockView import com.anytypeio.anytype.presentation.editor.selection.SelectionStateHolder +import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -95,7 +97,7 @@ interface Editor { ) : Mode() } - class Storage { + class Storage : ObjectRestrictionProvider { val document: DocumentProvider = DocumentProvider.Default() val views: Store> = Store.Screen() val focus: Store = Store.Focus() @@ -106,6 +108,10 @@ interface Editor { val textSelection: Store = Store.TextSelection() val objectRestrictions: Store.ObjectRestrictions = Store.ObjectRestrictions() val relationLinks: Store.RelationLinks = Store.RelationLinks() + + override fun provide(): List { + return objectRestrictions.current() + } } class Proxer( diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt index b79e052069..df9e305e7b 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/EditorViewModel.kt @@ -1562,8 +1562,7 @@ class EditorViewModel( isArchived = false, isFavorite = false, isLocked = false, - isTemplate = true, - restrictions = wrapper.restrictions + isTemplate = true ) ) } @@ -1575,8 +1574,7 @@ class EditorViewModel( isArchived = details[context]?.isArchived ?: false, isFavorite = details[context]?.isFavorite ?: false, isLocked = mode == EditorMode.Locked, - isTemplate = isObjectTemplate(), - restrictions = wrapper.restrictions + isTemplate = isObjectTemplate() ) ) } diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/Command.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/Command.kt index d439ef0a02..b058142cf4 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/Command.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/editor/editor/Command.kt @@ -64,8 +64,7 @@ sealed class Command { val isArchived: Boolean, val isFavorite: Boolean, val isLocked: Boolean, - val isTemplate: Boolean, - val restrictions: List + val isTemplate: Boolean ) : Command() data class OpenCoverGallery(val ctx: Id) : Command() diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/objects/ObjectRestrictionProvider.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/objects/ObjectRestrictionProvider.kt new file mode 100644 index 0000000000..db7ac72a62 --- /dev/null +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/objects/ObjectRestrictionProvider.kt @@ -0,0 +1,7 @@ +package com.anytypeio.anytype.presentation.objects + +import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction + +interface ObjectRestrictionProvider { + fun provide() : List +} \ No newline at end of file diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectRelationListViewModelFactory.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectRelationListViewModelFactory.kt index 3ba7a8302e..cf8deb53ba 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectRelationListViewModelFactory.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/ObjectRelationListViewModelFactory.kt @@ -12,6 +12,7 @@ import com.anytypeio.anytype.domain.relations.AddToFeaturedRelations import com.anytypeio.anytype.domain.relations.DeleteRelationFromObject import com.anytypeio.anytype.domain.relations.RemoveFromFeaturedRelations import com.anytypeio.anytype.presentation.objects.LockedStateProvider +import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider import com.anytypeio.anytype.presentation.relations.providers.RelationListProvider import com.anytypeio.anytype.presentation.util.Dispatcher @@ -26,7 +27,8 @@ class ObjectRelationListViewModelFactory( private val deleteRelationFromObject: DeleteRelationFromObject, private val analytics: Analytics, private val storeOfRelations: StoreOfRelations, - private val addRelationToObject: AddRelationToObject + private val addRelationToObject: AddRelationToObject, + private val restrictions: ObjectRestrictionProvider ) : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") @@ -42,7 +44,8 @@ class ObjectRelationListViewModelFactory( deleteRelationFromObject = deleteRelationFromObject, analytics = analytics, storeOfRelations = storeOfRelations, - addRelationToObject = addRelationToObject + addRelationToObject = addRelationToObject, + restrictions = restrictions ) as T } } \ No newline at end of file diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationListViewModel.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationListViewModel.kt index 07ddefc4a2..82e410ede2 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationListViewModel.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/relations/RelationListViewModel.kt @@ -27,6 +27,7 @@ import com.anytypeio.anytype.presentation.common.BaseViewModel import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationDeleteEvent import com.anytypeio.anytype.presentation.extension.sendAnalyticsRelationValueEvent import com.anytypeio.anytype.presentation.objects.LockedStateProvider +import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider import com.anytypeio.anytype.presentation.objects.getProperType import com.anytypeio.anytype.presentation.relations.model.RelationOperationError import com.anytypeio.anytype.presentation.relations.providers.RelationListProvider @@ -41,6 +42,7 @@ import timber.log.Timber class RelationListViewModel( private val relationListProvider: RelationListProvider, + private val restrictions: ObjectRestrictionProvider, private val lockedStateProvider: LockedStateProvider, private val urlBuilder: UrlBuilder, private val dispatcher: Dispatcher, diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/state/ObjectStateReducer.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/state/ObjectStateReducer.kt index 6359a3f34f..217c62508b 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/state/ObjectStateReducer.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/sets/state/ObjectStateReducer.kt @@ -1,10 +1,12 @@ package com.anytypeio.anytype.presentation.sets.state import com.anytypeio.anytype.core_models.Event +import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction +import com.anytypeio.anytype.presentation.objects.ObjectRestrictionProvider import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharedFlow -interface ObjectStateReducer { +interface ObjectStateReducer : ObjectRestrictionProvider { val state: MutableStateFlow val effects: SharedFlow> @@ -13,4 +15,13 @@ interface ObjectStateReducer { suspend fun dispatch(events: List) fun reduce(state: ObjectState, events: List): DefaultObjectStateReducer.Transformation fun clear() + + override fun provide(): List { + return when(val value = state.value) { + is ObjectState.DataView.Collection -> value.objectRestrictions + is ObjectState.DataView.Set -> value.objectRestrictions + ObjectState.ErrorLayout -> emptyList() + ObjectState.Init -> emptyList() + } + } } \ No newline at end of file diff --git a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorMenuTest.kt b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorMenuTest.kt index 814aa16748..8b2c0ec9ea 100644 --- a/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorMenuTest.kt +++ b/presentation/src/test/java/com/anytypeio/anytype/presentation/editor/editor/EditorMenuTest.kt @@ -101,8 +101,7 @@ class EditorMenuTest : EditorPresentationTestSetup() { isLocked = false, isTemplate = false, space = defaultSpace, - ctx = root, - restrictions = emptyList() + ctx = root ) } } @@ -159,8 +158,7 @@ class EditorMenuTest : EditorPresentationTestSetup() { isLocked = false, isTemplate = false, space = space, - ctx = root, - restrictions = emptyList() + ctx = root ) } } @@ -241,8 +239,7 @@ class EditorMenuTest : EditorPresentationTestSetup() { isArchived = false, isTemplate = false, space = space, - ctx = root, - restrictions = emptyList() + ctx = root ) } }