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

DROID-1124 Analytics | BackLink or add to Collection event (#3124)

* DROID-1124 add context and originalId to analytics

* DROID-1124 editor, set analytics params

* DROID-1124 addToCollection and backLink events
This commit is contained in:
Konstantin Ivanov 2023-04-26 11:35:33 +02:00 committed by uburoiubu
parent 02f1c960c0
commit 7777c2e898
No known key found for this signature in database
GPG key ID: C8FB80E0A595FBB6
5 changed files with 68 additions and 7 deletions

View file

@ -24,6 +24,11 @@ interface Analytics {
fun observeEvents(): Flow<EventAnalytics>
fun observeUserProperties(): Flow<UserProperty>
fun setContext(ctx: String?)
fun getContext(): String?
fun setOriginalId(originalId: String?)
fun getOriginalId(): String?
}
fun CoroutineScope.sendEvent(

View file

@ -12,4 +12,19 @@ class DefaultAnalytics : Analytics {
override suspend fun updateUserProperty(property: UserProperty) = userProps.emit(property)
override fun observeEvents(): Flow<EventAnalytics> = events
override fun observeUserProperties(): Flow<UserProperty> = userProps
private var analyticsContext: String? = null
private var analyticsOriginalId: String? = null
override fun setContext(ctx: String?) {
analyticsContext = ctx
}
override fun getContext(): String? = analyticsContext
override fun setOriginalId(originalId: String?) {
analyticsOriginalId = originalId
}
override fun getOriginalId(): String? = analyticsOriginalId
}

View file

@ -980,6 +980,8 @@ class EditorViewModel(
isSyncStatusVisible.value = false
}
val block = event.blocks.firstOrNull { it.id == context }
analytics.setContext(block?.fields?.analyticsContext)
analytics.setOriginalId(block?.fields?.analyticsOriginalId)
analyticsContext = block?.fields?.analyticsContext
if (analyticsContext != null) {
analyticsOriginalId = block?.fields?.analyticsOriginalId

View file

@ -352,12 +352,43 @@ fun CoroutineScope.sendAnalyticsRemoveFromFavoritesEvent(
)
}
fun CoroutineScope.sendAnalyticsObjectLinkToEvent(
analytics: Analytics
fun CoroutineScope.sendAnalyticsBackLinkAddEvent(
analytics: Analytics,
startTime: Long
) {
val props = Props(
buildMap {
analytics.getContext()?.let { put("context", it) }
analytics.getOriginalId()?.let { put("originalId", it) }
put("linkType", "Object")
}
)
sendEvent(
analytics = analytics,
eventName = EventsDictionary.objectLinkTo
eventName = EventsDictionary.objectLinkTo,
props = props,
startTime = startTime,
middleTime = System.currentTimeMillis()
)
}
fun CoroutineScope.sendAnalyticsAddToCollectionEvent(
analytics: Analytics,
startTime: Long
) {
val props = Props(
buildMap {
analytics.getContext()?.let { put("context", it) }
analytics.getOriginalId()?.let { put("originalId", it) }
put("linkType", "Collection")
}
)
sendEvent(
analytics = analytics,
eventName = EventsDictionary.objectLinkTo,
props = props,
startTime = startTime,
middleTime = System.currentTimeMillis()
)
}

View file

@ -1,7 +1,6 @@
package com.anytypeio.anytype.presentation.objects.menu
import android.net.Uri
import android.widget.Toast
import androidx.lifecycle.viewModelScope
import com.anytypeio.anytype.analytics.base.Analytics
import com.anytypeio.anytype.core_models.Id
@ -18,9 +17,10 @@ import com.anytypeio.anytype.domain.page.AddBackLinkToObject
import com.anytypeio.anytype.presentation.common.Action
import com.anytypeio.anytype.presentation.common.BaseViewModel
import com.anytypeio.anytype.presentation.common.Delegator
import com.anytypeio.anytype.presentation.extension.sendAnalyticsAddToCollectionEvent
import com.anytypeio.anytype.presentation.extension.sendAnalyticsAddToFavoritesEvent
import com.anytypeio.anytype.presentation.extension.sendAnalyticsBackLinkAddEvent
import com.anytypeio.anytype.presentation.extension.sendAnalyticsMoveToBinEvent
import com.anytypeio.anytype.presentation.extension.sendAnalyticsObjectLinkToEvent
import com.anytypeio.anytype.presentation.extension.sendAnalyticsRemoveFromFavoritesEvent
import com.anytypeio.anytype.presentation.objects.ObjectAction
import com.anytypeio.anytype.presentation.objects.ObjectIcon
@ -221,10 +221,14 @@ abstract class ObjectMenuViewModelBase(
targets = listOf(ctx)
)
viewModelScope.launch {
val startTime = System.currentTimeMillis()
addObjectToCollection.execute(params).fold(
onSuccess = { payload ->
dispatcher.send(payload)
sendAnalyticsObjectLinkToEvent(analytics)
sendAnalyticsAddToCollectionEvent(
analytics = analytics,
startTime = startTime
)
commands.emit(
Command.OpenSnackbar(
id = collection,
@ -243,11 +247,15 @@ abstract class ObjectMenuViewModelBase(
fun onLinkedMyselfTo(myself: Id, addTo: Id, fromName: String?) {
Timber.d("onLinkedMyselfTo, myself:[$myself], addTo:[$addTo], fromName:[$fromName]")
jobs += viewModelScope.launch {
val startTime = System.currentTimeMillis()
addBackLinkToObject.execute(
AddBackLinkToObject.Params(objectToLink = myself, objectToPlaceLink = addTo)
).fold(
onSuccess = { obj ->
sendAnalyticsObjectLinkToEvent(analytics)
sendAnalyticsBackLinkAddEvent(
analytics = analytics,
startTime = startTime
)
commands.emit(
Command.OpenSnackbar(
id = addTo,