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

DROID-2606 Analytics | ChangeObjectType event, update route param (#1983)

This commit is contained in:
Konstantin Ivanov 2025-01-14 10:01:55 +01:00 committed by GitHub
parent c3d5273b54
commit 424c99562d
Signed by: github
GPG key ID: B5690EEEBB952194
6 changed files with 66 additions and 26 deletions

View file

@ -311,6 +311,7 @@ object EventsDictionary {
const val sharingExtension = "SharingExtension"
const val gallery = "Gallery"
const val notification = "Notification"
const val featuredRelations = "FeaturedRelations"
}
object Type {

View file

@ -1132,7 +1132,8 @@ open class EditorFragment : NavigationFragment<FragmentEditorBinding>(R.layout.f
hideKeyboard()
val dialog = ObjectTypeUpdateFragment.new(
excludedTypeKeys = command.excludedTypes,
space = space
space = space,
fromFeatured = command.fromFeatured
)
dialog.show(childFragmentManager, null)
}
@ -2232,8 +2233,8 @@ open class EditorFragment : NavigationFragment<FragmentEditorBinding>(R.layout.f
vm.proceedToCreateObjectAndAddToTextAsLink(name)
}
override fun onUpdateObjectType(objType: ObjectWrapper.Type) {
vm.onObjectTypeChanged(objType = objType)
override fun onUpdateObjectType(objType: ObjectWrapper.Type, fromFeatured: Boolean) {
vm.onObjectTypeChanged(objType = objType, fromFeatured = fromFeatured)
}
override fun onSelectObjectType(objType: ObjectWrapper.Type) {

View file

@ -145,9 +145,14 @@ class ObjectTypeSelectionFragment : SelectObjectTypeBaseFragment() {
*/
class ObjectTypeUpdateFragment : SelectObjectTypeBaseFragment() {
private val fromFeatured get() = argOrNull<Boolean>(OPEN_FROM_FEATURED_ARG) == true
override fun proceedWithSelectedType(objType: ObjectWrapper.Type) {
withParentSafe<ObjectTypeUpdateListener> {
onUpdateObjectType(objType = objType)
onUpdateObjectType(
objType = objType,
fromFeatured = fromFeatured
)
}
}
@ -156,10 +161,13 @@ class ObjectTypeUpdateFragment : SelectObjectTypeBaseFragment() {
}
companion object {
fun new(space: Id, excludedTypeKeys: List<Key>) = ObjectTypeUpdateFragment().apply {
const val OPEN_FROM_FEATURED_ARG = "arg.object_type_choose_open_from"
fun new(space: Id, excludedTypeKeys: List<Key>, fromFeatured: Boolean = false) = ObjectTypeUpdateFragment().apply {
arguments = bundleOf(
SPACE_ID_KEY to space,
EXCLUDED_TYPE_KEYS_ARG_KEY to excludedTypeKeys
EXCLUDED_TYPE_KEYS_ARG_KEY to excludedTypeKeys,
OPEN_FROM_FEATURED_ARG to fromFeatured
)
}
}

View file

@ -8,7 +8,7 @@ interface ObjectTypeSelectionListener {
}
interface ObjectTypeUpdateListener {
fun onUpdateObjectType(objType: ObjectWrapper.Type)
fun onUpdateObjectType(objType: ObjectWrapper.Type, fromFeatured: Boolean = false)
}
interface WidgetObjectTypeListener {

View file

@ -4191,7 +4191,7 @@ class EditorViewModel(
return
}
val exclude = listOf(ObjectTypeUniqueKeys.SET, ObjectTypeUniqueKeys.COLLECTION)
proceedWithOpeningSelectingObjectTypeScreen(exclude = exclude)
proceedWithOpeningSelectingObjectTypeScreen(exclude = exclude, fromFeatured = true)
} else {
sendToast("Your object is locked. To change its type, simply unlock it.")
}
@ -4631,7 +4631,7 @@ class EditorViewModel(
is TypesWidgetItem.Type -> {
val objType = _objectTypes.firstOrNull { item.item.id == it.id }
if (objType != null) {
onObjectTypeChanged(objType)
onObjectTypeChanged(objType, false)
} else {
Timber.e("Error while getting object type from objectTypes list")
}
@ -4650,25 +4650,26 @@ class EditorViewModel(
}
fun onObjectTypeChanged(
objType: ObjectWrapper.Type
objType: ObjectWrapper.Type,
fromFeatured: Boolean
) {
Timber.d("onObjectTypeChanged, item:[$objType]")
viewModelScope.launch {
when (objType.uniqueKey) {
ObjectTypeIds.SET -> {
proceedWithConvertingToSet()
proceedWithConvertingToSet(fromFeatured)
}
ObjectTypeIds.COLLECTION -> {
proceedWithConvertingToCollection()
proceedWithConvertingToCollection(fromFeatured)
}
else -> {
proceedWithObjectTypeChangeAndApplyTemplate(objType)
proceedWithObjectTypeChangeAndApplyTemplate(objType, fromFeatured)
}
}
}
}
private suspend fun proceedWithConvertingToSet() {
private suspend fun proceedWithConvertingToSet(fromFeature: Boolean) {
val startTime = System.currentTimeMillis()
objectToSet.async(
ConvertObjectToSet.Params(
@ -4683,19 +4684,24 @@ class EditorViewModel(
space = vmParams.space,
isPopUpToDashboard = true
)
val route = if (fromFeature) {
EventsDictionary.Routes.featuredRelations
} else {
EventsDictionary.Routes.navigation
}
viewModelScope.sendAnalyticsObjectTypeSelectOrChangeEvent(
analytics = analytics,
startTime = startTime,
sourceObject = SET_MARKETPLACE_ID,
containsFlagType = true,
route = EventsDictionary.Routes.navigation,
route = route,
spaceParams = provideParams(vmParams.space.id)
)
}
)
}
private suspend fun proceedWithConvertingToCollection() {
private suspend fun proceedWithConvertingToCollection(fromFeature: Boolean) {
val startTime = System.currentTimeMillis()
objectToCollection.async(
ConvertObjectToCollection.Params(ctx = context)
@ -4707,12 +4713,17 @@ class EditorViewModel(
space = vmParams.space,
isPopUpToDashboard = true
)
val route = if (fromFeature) {
EventsDictionary.Routes.featuredRelations
} else {
EventsDictionary.Routes.navigation
}
viewModelScope.sendAnalyticsObjectTypeSelectOrChangeEvent(
analytics = analytics,
startTime = startTime,
sourceObject = COLLECTION_MARKETPLACE_ID,
containsFlagType = true,
route = EventsDictionary.Routes.navigation
route = route
)
}
)
@ -6372,7 +6383,7 @@ class EditorViewModel(
private fun onTypesWidgetSearchClicked() {
Timber.d("onObjectTypesWidgetSearchClicked, ")
proceedWithOpeningSelectingObjectTypeScreen()
proceedWithOpeningSelectingObjectTypeScreen(fromFeatured = false)
}
private fun proceedWithGettingObjectTypesForTypesWidget() {
@ -6413,7 +6424,10 @@ class EditorViewModel(
}
}
private fun proceedWithOpeningSelectingObjectTypeScreen(exclude: List<Id> = emptyList()) {
private fun proceedWithOpeningSelectingObjectTypeScreen(
exclude: List<Id> = emptyList(),
fromFeatured: Boolean
) {
val list = buildList {
val types = orchestrator.stores.details.current().details[context]?.type ?: emptyList()
if (types.isNotEmpty()) {
@ -6424,7 +6438,8 @@ class EditorViewModel(
}
}
val command = Command.OpenObjectSelectTypeScreen(
excludedTypes = list
excludedTypes = list,
fromFeatured = fromFeatured
)
dispatch(command)
}
@ -6433,7 +6448,11 @@ class EditorViewModel(
setTypesWidgetVisibility(false)
}
private fun proceedWithObjectTypeChange(objType: ObjectWrapper.Type, onSuccess: (() -> Unit)? = null) {
private fun proceedWithObjectTypeChange(
objType: ObjectWrapper.Type,
fromFeature: Boolean,
onSuccess: (() -> Unit)? = null
) {
val startTime = System.currentTimeMillis()
val internalFlags = getInternalFlagsFromDetails()
val containsTypeFlag = internalFlags.contains(InternalFlags.ShouldSelectType)
@ -6444,16 +6463,26 @@ class EditorViewModel(
objectTypeKey = objType.uniqueKey
)
).fold(
onFailure = { Timber.e(it, "Error while updating object type: [${objType.uniqueKey}]") },
onFailure = {
Timber.e(
it,
"Error while updating object type: [${objType.uniqueKey}]"
)
},
onSuccess = { response ->
Timber.d("proceedWithObjectTypeChange success, key:[${objType.uniqueKey}]")
val route = if (fromFeature) {
EventsDictionary.Routes.featuredRelations
} else {
EventsDictionary.Routes.navigation
}
dispatcher.send(response)
sendAnalyticsObjectTypeSelectOrChangeEvent(
analytics = analytics,
startTime = startTime,
sourceObject = objType.sourceObject,
containsFlagType = containsTypeFlag,
route = EventsDictionary.Routes.navigation
route = route
)
onSuccess?.invoke()
}
@ -6461,8 +6490,8 @@ class EditorViewModel(
}
}
private fun proceedWithObjectTypeChangeAndApplyTemplate(objType: ObjectWrapper.Type) {
proceedWithObjectTypeChange(objType) {
private fun proceedWithObjectTypeChangeAndApplyTemplate(objType: ObjectWrapper.Type, fromFeatured: Boolean) {
proceedWithObjectTypeChange(objType, fromFeatured) {
val internalFlags = getInternalFlagsFromDetails()
if (internalFlags.contains(InternalFlags.ShouldSelectTemplate)) {
onProceedWithApplyingTemplateByObjectId(

View file

@ -133,7 +133,8 @@ sealed class Command {
object AddMentionWidgetTriggerToFocusedBlock : Command()
data class OpenObjectSelectTypeScreen(
val excludedTypes: List<Key>
val excludedTypes: List<Key>,
val fromFeatured: Boolean
) : Command()
data class OpenMoveToScreen(