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

DROID-1602 Analytics | Self hosting (#689)

This commit is contained in:
Konstantin Ivanov 2023-12-12 22:29:37 +01:00 committed by uburoiubu
parent 3438361022
commit 40216d901c
No known key found for this signature in database
GPG key ID: C8FB80E0A595FBB6
4 changed files with 79 additions and 9 deletions

View file

@ -184,6 +184,10 @@ object EventsDictionary {
const val MENU_HELP_PRIVACY = "MenuHelpPrivacy"
const val MENU_HELP_CONTACT_US = "MenuHelpContact"
// Network mode
const val selectNetwork = "SelectNetwork"
const val uploadNetworkConfiguration = "UploadNetworkConfiguration"
enum class ScreenOnboardingStep(val value: String) {
VOID("Void"),
PHRASE("Phrase"),
@ -229,6 +233,9 @@ object EventsDictionary {
const val dataView = "dataview"
const val block = "block"
const val bookmark = "bookmark"
const val anytype = "Anytype"
const val localOnly = "LocalOnly"
const val selfHost = "SelfHost"
}
object BlockAction {

View file

@ -1,6 +1,7 @@
package com.anytypeio.anytype.di.feature
import android.content.Context
import com.anytypeio.anytype.analytics.base.Analytics
import com.anytypeio.anytype.core_utils.di.scope.PerScreen
import com.anytypeio.anytype.di.common.ComponentDependencies
import com.anytypeio.anytype.domain.auth.repo.AuthRepository
@ -46,11 +47,13 @@ object AppPreferencesModule {
fun provideViewModelFactory(
copyFileToCacheDirectory: CopyFileToCacheDirectory,
getNetworkMode: GetNetworkMode,
setNetworkMode: SetNetworkMode
setNetworkMode: SetNetworkMode,
analytics: Analytics
): PreferencesViewModel.Factory = PreferencesViewModel.Factory(
copyFileToCacheDirectory = copyFileToCacheDirectory,
getNetworkMode = getNetworkMode,
setNetworkMode = setNetworkMode
setNetworkMode = setNetworkMode,
analytics = analytics
)
}
@ -58,4 +61,5 @@ interface AppPreferencesDependencies : ComponentDependencies {
fun context(): Context
fun dispatchers(): AppCoroutineDispatchers
fun authRepository(): AuthRepository
fun analytics(): Analytics
}

View file

@ -1959,4 +1959,34 @@ private fun getAnalyticsObjectType(
val typeStruct = details[objTypeId]?.map
val objType = typeStruct?.mapToObjectWrapperType()
return objType?.sourceObject ?: OBJ_TYPE_CUSTOM
}
}
//region Self-Hosting
fun CoroutineScope.sendAnalyticsSelectNetworkEvent(
analytics: Analytics,
type: String,
route: String
) {
sendEvent(
analytics = analytics,
eventName = EventsDictionary.selectNetwork,
props = Props(
mapOf(
EventsPropertiesKey.type to type,
EventsPropertiesKey.route to route
)
)
)
}
fun CoroutineScope.sendAnalyticsUploadConfigFileEvent(
analytics: Analytics
) {
sendEvent(
analytics = analytics,
eventName = EventsDictionary.uploadNetworkConfiguration
)
}
//endregion

View file

@ -4,6 +4,8 @@ import android.net.Uri
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import com.anytypeio.anytype.analytics.base.Analytics
import com.anytypeio.anytype.analytics.base.EventsDictionary
import com.anytypeio.anytype.core_models.Id
import com.anytypeio.anytype.core_models.NetworkMode
import com.anytypeio.anytype.core_models.NetworkModeConfig
@ -13,6 +15,8 @@ import com.anytypeio.anytype.domain.base.fold
import com.anytypeio.anytype.domain.networkmode.GetNetworkMode
import com.anytypeio.anytype.domain.networkmode.SetNetworkMode
import com.anytypeio.anytype.presentation.editor.picker.PickerListener
import com.anytypeio.anytype.presentation.extension.sendAnalyticsSelectNetworkEvent
import com.anytypeio.anytype.presentation.extension.sendAnalyticsUploadConfigFileEvent
import com.anytypeio.anytype.presentation.util.CopyFileToCacheDirectory
import com.anytypeio.anytype.presentation.util.CopyFileToCacheStatus
import kotlinx.coroutines.flow.MutableStateFlow
@ -22,7 +26,8 @@ import timber.log.Timber
class PreferencesViewModel(
private val copyFileToCache: CopyFileToCacheDirectory,
private val getNetworkMode: GetNetworkMode,
private val setNetworkMode: SetNetworkMode
private val setNetworkMode: SetNetworkMode,
private val analytics: Analytics
) : ViewModel(), PickerListener {
val networkModeState = MutableStateFlow(NetworkModeConfig(NetworkMode.DEFAULT, "", ""))
@ -45,9 +50,30 @@ class PreferencesViewModel(
fun proceedWithNetworkMode(mode: String?) {
viewModelScope.launch {
val config = when (mode) {
NETWORK_MODE_LOCAL -> NetworkModeConfig(NetworkMode.LOCAL)
NETWORK_MODE_CUSTOM -> NetworkModeConfig(NetworkMode.CUSTOM)
else -> NetworkModeConfig()
NETWORK_MODE_LOCAL -> {
sendAnalyticsSelectNetworkEvent(
analytics = analytics,
type = EventsDictionary.Type.localOnly,
route = EventsDictionary.Routes.settings
)
NetworkModeConfig(NetworkMode.LOCAL)
}
NETWORK_MODE_CUSTOM -> {
sendAnalyticsSelectNetworkEvent(
analytics = analytics,
type = EventsDictionary.Type.selfHost,
route = EventsDictionary.Routes.settings
)
NetworkModeConfig(NetworkMode.CUSTOM)
}
else -> {
sendAnalyticsSelectNetworkEvent(
analytics = analytics,
type = EventsDictionary.Type.anytype,
route = EventsDictionary.Routes.settings
)
NetworkModeConfig()
}
}
networkModeState.value = config
setNetworkMode.async(SetNetworkMode.Params(config)).fold(
@ -68,6 +94,7 @@ class PreferencesViewModel(
setNetworkMode.async(params).fold(
onSuccess = {
networkModeState.value = config
sendAnalyticsUploadConfigFileEvent(analytics)
Timber.d("Successfully update network mode with config:$config")
},
onFailure = { Timber.e(it, "Failed to set network mode") }
@ -106,7 +133,8 @@ class PreferencesViewModel(
class Factory(
private val copyFileToCacheDirectory: CopyFileToCacheDirectory,
private val getNetworkMode: GetNetworkMode,
private val setNetworkMode: SetNetworkMode
private val setNetworkMode: SetNetworkMode,
private val analytics: Analytics
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(
@ -114,7 +142,8 @@ class PreferencesViewModel(
): T = PreferencesViewModel(
copyFileToCache = copyFileToCacheDirectory,
getNetworkMode = getNetworkMode,
setNetworkMode = setNetworkMode
setNetworkMode = setNetworkMode,
analytics = analytics
) as T
}
}