From 8c82c1f270fffe109d5f5fdc05b25e4fd08780b5 Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Sat, 12 Apr 2025 23:27:48 +0200 Subject: [PATCH] =?UTF-8?q?DROID-3538=20Widgets=20|=20Fix=20|=20Add=20anal?= =?UTF-8?q?ytics=20for=20object=20creation=20via=20widget=20=E2=80=9Cplus?= =?UTF-8?q?=E2=80=9D=20button=20(#2301)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../analytics/base/EventsDictionary.kt | 1 + .../presentation/home/HomeScreenViewModel.kt | 65 +++++++++++++++++-- 2 files changed, 59 insertions(+), 7 deletions(-) diff --git a/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt b/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt index 74467d8119..fc1c280155 100644 --- a/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt +++ b/analytics/src/main/java/com/anytypeio/anytype/analytics/base/EventsDictionary.kt @@ -304,6 +304,7 @@ object EventsDictionary { // Routes object Routes { const val home = "HomeScreen" + const val widget = "Widget" const val searchScreen = "ScreenSearch" const val mention = "MenuMention" const val searchMenu = "MenuSearch" 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 26f85d87a3..0c4f7bd372 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 @@ -2180,17 +2180,20 @@ class HomeScreenViewModel( viewer, storeOfObjectTypes ) + val type = TypeKey(defaultObjectType?.uniqueKey ?: VIEW_DEFAULT_OBJECT_TYPE) val prefilled = viewer.resolveSetByRelationPrefilledObjectData( storeOfRelations = storeOfRelations, dateProvider = dateProvider, dataViewRelationLinks = dv.relationLinks, objSetByRelation = ObjectWrapper.Relation(dataViewSourceObj.map) ) + val space = spaceManager.get() + val startTime = System.currentTimeMillis() createDataViewObject.async( params = CreateDataViewObject.Params.SetByRelation( filters = viewer.filters, template = defaultTemplate, - type = TypeKey(defaultObjectType?.uniqueKey ?: VIEW_DEFAULT_OBJECT_TYPE), + type = type, prefilled = prefilled ).also { Timber.d("Calling with params: $it") @@ -2198,6 +2201,14 @@ class HomeScreenViewModel( ).fold( onSuccess = { result -> Timber.d("Successfully created object with id: ${result.objectId}") + viewModelScope.sendAnalyticsObjectCreateEvent( + analytics = analytics, + route = EventsDictionary.Routes.widget, + startTime = startTime, + view = null, + objType = type.key, + spaceParams = provideParams(space) + ) if (navigate) { val wrapper = ObjectWrapper.Basic(result.struct.orEmpty()) if (wrapper.isValid) { @@ -2227,9 +2238,12 @@ class HomeScreenViewModel( dataViewRelationLinks = dv.relationLinks, dateProvider = dateProvider ) + val type = TypeKey(dataViewSourceType ?: VIEW_DEFAULT_OBJECT_TYPE) + val space = spaceManager.get() + val startTime = System.currentTimeMillis() createDataViewObject.async( params = CreateDataViewObject.Params.SetByType( - type = TypeKey(dataViewSourceType ?: VIEW_DEFAULT_OBJECT_TYPE), + type = type, filters = viewer.filters, template = defaultTemplate, prefilled = prefilled @@ -2239,6 +2253,14 @@ class HomeScreenViewModel( ).fold( onSuccess = { result -> Timber.d("Successfully created object with id: ${result.objectId}") + viewModelScope.sendAnalyticsObjectCreateEvent( + analytics = analytics, + route = EventsDictionary.Routes.widget, + startTime = startTime, + view = null, + objType = type.key, + spaceParams = provideParams(space) + ) if (navigate) { val wrapper = ObjectWrapper.Basic(result.struct.orEmpty()) if (wrapper.isValid) { @@ -2277,12 +2299,25 @@ class HomeScreenViewModel( prefilled = prefilled ) + val space = spaceManager.get() + val startTime = System.currentTimeMillis() + createDataViewObject.async(params = createObjectParams).fold( onFailure = { Timber.e("Error creating object for collection") }, onSuccess = { result -> Timber.d("Successfully created object with id: ${result.objectId}") + + viewModelScope.sendAnalyticsObjectCreateEvent( + analytics = analytics, + route = EventsDictionary.Routes.widget, + startTime = startTime, + view = null, + objType = defaultObjectTypeUniqueKey.key, + spaceParams = provideParams(space) + ) + addObjectToCollection.async( AddObjectToCollection.Params( ctx = collection, @@ -2402,9 +2437,6 @@ class HomeScreenViewModel( } fun onCreateWidgetElementClicked(view: WidgetView) { - viewModelScope.launch { - - } when(view) { is WidgetView.ListOfObjects -> { if (view.type == WidgetView.ListOfObjects.Type.Favorites) { @@ -2413,12 +2445,21 @@ class HomeScreenViewModel( val type = getDefaultObjectType.async(space) .getOrNull() ?.type ?: TypeKey(ObjectTypeIds.PAGE) + val startTime = System.currentTimeMillis() createObject.async( params = CreateObject.Param( - space = SpaceId(spaceManager.get()), + space = space, type = type ) ).onSuccess { result -> + sendAnalyticsObjectCreateEvent( + objType = type.key, + analytics = analytics, + route = EventsDictionary.Routes.widget, + startTime = startTime, + view = null, + spaceParams = provideParams(space.id) + ) proceedWithNavigation(result.obj.navigation()) setAsFavourite.async( params = SetObjectListIsFavorite.Params( @@ -2438,13 +2479,23 @@ class HomeScreenViewModel( if (source is Widget.Source.Default) { if (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 = SpaceId(spaceManager.get()), + 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()) } } else if (source.obj.layout == ObjectType.Layout.COLLECTION) {