From 1e015e3d1b11250edc215caf1e65442521f963f9 Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Thu, 13 Jun 2024 22:39:50 +0200 Subject: [PATCH 1/5] DROID-2538 removed legacy interface actions --- .../anytype/ui/editor/EditorFragment.kt | 24 --------------- .../editor/sheets/ObjectMenuBaseFragment.kt | 6 ---- .../presentation/editor/EditorViewModel.kt | 30 ------------------- .../anytype/presentation/widgets/Widget.kt | 2 +- 4 files changed, 1 insertion(+), 61 deletions(-) diff --git a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt index fed5e8784d..df065f19e8 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt @@ -2024,10 +2024,6 @@ open class EditorFragment : NavigationFragment(R.layout.f vm.onMovedToBin() } - override fun onSearchOnPageClicked() { - vm.onEnterSearchModeClicked() - } - override fun onSetTextBlockValue() { vm.onSetTextBlockValue() } @@ -2036,26 +2032,6 @@ open class EditorFragment : NavigationFragment(R.layout.f vm.onMentionClicked(target = target) } - override fun onUndoRedoClicked() { - vm.onUndoRedoActionClicked() - } - - override fun onDocRelationsClicked() { - vm.onDocRelationsClicked() - } - - override fun onAddCoverClicked() { - vm.onAddCoverClicked() - } - - override fun onSetIconClicked() { - vm.onSetObjectIconClicked() - } - - override fun onLayoutClicked() { - vm.onLayoutClicked() - } - override fun onTextValueChanged(ctx: Id, text: String, objectId: Id, relationKey: Key) { vm.onRelationTextValueChanged( ctx = ctx, diff --git a/app/src/main/java/com/anytypeio/anytype/ui/editor/sheets/ObjectMenuBaseFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/editor/sheets/ObjectMenuBaseFragment.kt index 7707de084f..3a0e10d556 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/editor/sheets/ObjectMenuBaseFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/editor/sheets/ObjectMenuBaseFragment.kt @@ -342,12 +342,6 @@ abstract class ObjectMenuBaseFragment : interface DocumentMenuActionReceiver { fun onMoveToBinSuccess() - fun onSearchOnPageClicked() - fun onDocRelationsClicked() - fun onAddCoverClicked() - fun onSetIconClicked() - fun onLayoutClicked() - fun onUndoRedoClicked() } } 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 110f1bd9e9..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 @@ -2190,17 +2190,6 @@ class EditorViewModel( viewModelScope.launch { refresh() } } - fun onDocRelationsClicked() { - Timber.d("onDocRelationsClicked, ") - dispatch( - Command.OpenObjectRelationScreen.RelationList( - ctx = context, - target = null, - isLocked = mode == EditorMode.Locked - ) - ) - } - fun onSearchToolbarEvent(event: SearchInDocEvent) { Timber.d("onSearchToolbarEvent, event:[$event]") if (mode !is EditorMode.Search) return @@ -3330,25 +3319,6 @@ class EditorViewModel( } } - fun onSetObjectIconClicked() { - viewModelScope.launch { - val obj = orchestrator.stores.details.getAsObject(context) - val space = obj?.spaceId - if (space != null) { - dispatch(Command.SetObjectIcon(ctx = context, space = space)) - } else { - Timber.e("Space not found").also { - sendToast("Space not found") - } - } - } - } - - fun onLayoutClicked() { - Timber.d("onLayoutClicked, ") - dispatch(Command.OpenObjectLayout(context)) - } - fun onLayoutDialogDismissed() { Timber.d("onLayoutDialogDismissed, ") proceedWithOpeningObjectMenu() diff --git a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/Widget.kt b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/Widget.kt index 222f7a095f..358b9f5c8c 100644 --- a/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/Widget.kt +++ b/presentation/src/main/java/com/anytypeio/anytype/presentation/widgets/Widget.kt @@ -164,7 +164,7 @@ fun List.parseWidgets( } Block.Content.Widget.Layout.VIEW -> { - + // Do nothing. } } } From 06c0e8de3ac59ab3c24a53f60dabd78d928296f7 Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Thu, 13 Jun 2024 22:45:34 +0200 Subject: [PATCH 2/5] DROID-2538 removed legacy --- .../anytypeio/anytype/ui/editor/EditorFragment.kt | 14 -------------- .../anytype/ui/editor/sheets/ObjectMenuFragment.kt | 1 - .../anytype/presentation/editor/editor/Command.kt | 8 +------- 3 files changed, 1 insertion(+), 22 deletions(-) diff --git a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt index df065f19e8..a74bdbc2ff 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/editor/EditorFragment.kt @@ -1023,20 +1023,6 @@ open class EditorFragment : NavigationFragment(R.layout.f ) .showChildFragment() } - is Command.OpenObjectRelationScreen.RelationList -> { - hideKeyboard() - findNavController().safeNavigate( - R.id.pageScreen, - R.id.objectRelationListScreen, - bundleOf( - ObjectRelationListFragment.ARG_CTX to command.ctx, - ObjectRelationListFragment.ARG_SPACE to space, - ObjectRelationListFragment.ARG_TARGET to command.target, - ObjectRelationListFragment.ARG_LOCKED to command.isLocked, - ObjectRelationListFragment.ARG_MODE to ObjectRelationListFragment.MODE_LIST, - ) - ) - } is Command.OpenObjectRelationScreen.Value.Default -> { hideKeyboard() val fr = RelationValueFragment.new( diff --git a/app/src/main/java/com/anytypeio/anytype/ui/editor/sheets/ObjectMenuFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/editor/sheets/ObjectMenuFragment.kt index 5887d0d6ca..ca23c2de88 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/editor/sheets/ObjectMenuFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/editor/sheets/ObjectMenuFragment.kt @@ -46,7 +46,6 @@ class ObjectMenuFragment : ObjectMenuBaseFragment() { } companion object { - fun new( ctx: Id, space: Id, 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 6d0279eaa8..5379fd4e5e 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 @@ -63,7 +63,7 @@ sealed class Command { val isArchived: Boolean, val isFavorite: Boolean, val isLocked: Boolean, - val isTemplate: Boolean + val isTemplate: Boolean, ) : Command() data class OpenCoverGallery(val ctx: Id) : Command() @@ -82,12 +82,6 @@ sealed class Command { } sealed class OpenObjectRelationScreen : Command() { - data class RelationList( - val ctx: String, - val target: String?, - val isLocked: Boolean - ) : OpenObjectRelationScreen() - data class RelationAdd(val ctx: String, val target: String) : OpenObjectRelationScreen() sealed class Value : OpenObjectRelationScreen() { abstract val isReadOnlyValue: Boolean From 468b09272c8b89f750ba943ffaec216deb516b02 Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Thu, 13 Jun 2024 22:51:57 +0200 Subject: [PATCH 3/5] adding object restrictions for doc menu screen 1 --- .../anytype/presentation/editor/EditorViewModel.kt | 6 ++++-- .../anytype/presentation/editor/editor/Command.kt | 2 ++ .../anytype/presentation/editor/editor/EditorMenuTest.kt | 9 ++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) 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 df9e305e7b..b79e052069 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,7 +1562,8 @@ class EditorViewModel( isArchived = false, isFavorite = false, isLocked = false, - isTemplate = true + isTemplate = true, + restrictions = wrapper.restrictions ) ) } @@ -1574,7 +1575,8 @@ class EditorViewModel( isArchived = details[context]?.isArchived ?: false, isFavorite = details[context]?.isFavorite ?: false, isLocked = mode == EditorMode.Locked, - isTemplate = isObjectTemplate() + isTemplate = isObjectTemplate(), + restrictions = wrapper.restrictions ) ) } 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 5379fd4e5e..d439ef0a02 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 @@ -3,6 +3,7 @@ package com.anytypeio.anytype.presentation.editor.editor import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Key import com.anytypeio.anytype.core_models.Url +import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction import com.anytypeio.anytype.core_utils.ext.Mimetype import com.anytypeio.anytype.presentation.objects.ObjectIcon @@ -64,6 +65,7 @@ sealed class Command { val isFavorite: Boolean, val isLocked: Boolean, val isTemplate: Boolean, + val restrictions: List ) : Command() data class OpenCoverGallery(val ctx: Id) : Command() 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 8b2c0ec9ea..814aa16748 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,7 +101,8 @@ class EditorMenuTest : EditorPresentationTestSetup() { isLocked = false, isTemplate = false, space = defaultSpace, - ctx = root + ctx = root, + restrictions = emptyList() ) } } @@ -158,7 +159,8 @@ class EditorMenuTest : EditorPresentationTestSetup() { isLocked = false, isTemplate = false, space = space, - ctx = root + ctx = root, + restrictions = emptyList() ) } } @@ -239,7 +241,8 @@ class EditorMenuTest : EditorPresentationTestSetup() { isArchived = false, isTemplate = false, space = space, - ctx = root + ctx = root, + restrictions = emptyList() ) } } From b2eeb5e5d52ebfc736ffb52b980e973b32dbcd98 Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Thu, 13 Jun 2024 23:48:15 +0200 Subject: [PATCH 4/5] DROID-2538 fixes --- .../com/anytypeio/anytype/di/feature/EditorDI.kt | 6 ++++++ .../anytype/di/feature/ObjectRelationListDI.kt | 7 +++++-- .../com/anytypeio/anytype/di/feature/ObjectSetDI.kt | 7 +++++++ .../anytypeio/anytype/presentation/editor/Editor.kt | 8 +++++++- .../anytype/presentation/editor/EditorViewModel.kt | 6 ++---- .../anytype/presentation/editor/editor/Command.kt | 3 +-- .../objects/ObjectRestrictionProvider.kt | 7 +++++++ .../relations/ObjectRelationListViewModelFactory.kt | 7 +++++-- .../presentation/relations/RelationListViewModel.kt | 2 ++ .../presentation/sets/state/ObjectStateReducer.kt | 13 ++++++++++++- .../presentation/editor/editor/EditorMenuTest.kt | 9 +++------ 11 files changed, 57 insertions(+), 18 deletions(-) create mode 100644 presentation/src/main/java/com/anytypeio/anytype/presentation/objects/ObjectRestrictionProvider.kt 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 ) } } From 9118882ec20559e07a4fc926cd5609973ac1055f Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Fri, 14 Jun 2024 00:09:04 +0200 Subject: [PATCH 5/5] DROID-2538 fixes --- .../anytype/ui/relations/ObjectRelationListFragment.kt | 8 ++++++++ .../relations/ObjectRelationListViewModelFactory.kt | 2 +- .../presentation/relations/RelationListViewModel.kt | 4 +++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/anytypeio/anytype/ui/relations/ObjectRelationListFragment.kt b/app/src/main/java/com/anytypeio/anytype/ui/relations/ObjectRelationListFragment.kt index 1f4004266a..85a2b41bf9 100644 --- a/app/src/main/java/com/anytypeio/anytype/ui/relations/ObjectRelationListFragment.kt +++ b/app/src/main/java/com/anytypeio/anytype/ui/relations/ObjectRelationListFragment.kt @@ -14,6 +14,7 @@ import com.anytypeio.anytype.R import com.anytypeio.anytype.core_models.Id import com.anytypeio.anytype.core_models.Key import com.anytypeio.anytype.core_models.primitives.SpaceId +import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction import com.anytypeio.anytype.core_ui.features.relations.DocumentRelationAdapter import com.anytypeio.anytype.core_ui.reactive.textChanges import com.anytypeio.anytype.core_utils.ext.arg @@ -188,6 +189,13 @@ open class ObjectRelationListFragment : BaseBottomSheetFragment execute(command) } jobs += lifecycleScope.subscribe(vm.toasts) { toast(it) } + jobs += lifecycleScope.subscribe(vm.restrictions) { restrictions -> + if (restrictions.contains(ObjectRestriction.RELATIONS) || restrictions.contains(ObjectRestriction.DETAILS)) { + binding.topToolbar.gone() + } else { + binding.topToolbar.visible() + } + } jobs += lifecycleScope.subscribe(vm.isEditMode) { isEditMode -> if (isEditMode) { binding.btnEditOrDone.setText(R.string.done) 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 cf8deb53ba..10b91be2c9 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 @@ -45,7 +45,7 @@ class ObjectRelationListViewModelFactory( analytics = analytics, storeOfRelations = storeOfRelations, addRelationToObject = addRelationToObject, - restrictions = restrictions + objectRestrictionProvider = 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 82e410ede2..a53da92857 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 @@ -14,6 +14,7 @@ import com.anytypeio.anytype.core_models.Payload import com.anytypeio.anytype.core_models.RelationFormat import com.anytypeio.anytype.core_models.RelationLink import com.anytypeio.anytype.core_models.ext.mapToObjectWrapperType +import com.anytypeio.anytype.core_models.restrictions.ObjectRestriction import com.anytypeio.anytype.core_utils.diff.DefaultObjectDiffIdentifier import com.anytypeio.anytype.domain.misc.UrlBuilder import com.anytypeio.anytype.domain.`object`.UpdateDetail @@ -42,7 +43,7 @@ import timber.log.Timber class RelationListViewModel( private val relationListProvider: RelationListProvider, - private val restrictions: ObjectRestrictionProvider, + private val objectRestrictionProvider: ObjectRestrictionProvider, private val lockedStateProvider: LockedStateProvider, private val urlBuilder: UrlBuilder, private val dispatcher: Dispatcher, @@ -62,6 +63,7 @@ class RelationListViewModel( private val isInAddMode = MutableStateFlow(false) val commands = MutableSharedFlow(replay = 0) val views = MutableStateFlow>(emptyList()) + val restrictions = MutableStateFlow(objectRestrictionProvider.provide()) fun onStartListMode(ctx: Id) { Timber.d("onStartListMode, ctx: $ctx")