Browse Source
This will allow to import existing class from EA and not break compatibility with existing analytics call.test/jme/compound-poc
Benoit Marty
2 years ago
committed by
Benoit Marty
24 changed files with 2182 additions and 0 deletions
@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
|
||||
/* |
||||
* Copyright (c) 2023 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
plugins { |
||||
id("io.element.android-library") |
||||
} |
||||
|
||||
android { |
||||
namespace = "io.element.android.services.analytics.api" |
||||
} |
||||
|
||||
dependencies { |
||||
// implementation(libs.coroutines.core) |
||||
} |
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
/* |
||||
* Copyright (c) 2023 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api |
||||
|
||||
import io.element.android.services.analytics.api.plan.UserProperties |
||||
|
||||
interface AnalyticsTracker { |
||||
/** |
||||
* Capture an Event. |
||||
*/ |
||||
fun capture(event: VectorAnalyticsEvent) |
||||
|
||||
/** |
||||
* Track a displayed screen. |
||||
*/ |
||||
fun screen(screen: VectorAnalyticsScreen) |
||||
|
||||
/** |
||||
* Update user specific properties. |
||||
*/ |
||||
fun updateUserProperties(userProperties: UserProperties) |
||||
} |
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api |
||||
|
||||
interface VectorAnalyticsEvent { |
||||
fun getName(): String |
||||
fun getProperties(): Map<String, Any?>? |
||||
} |
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api |
||||
|
||||
interface VectorAnalyticsScreen { |
||||
fun getName(): String |
||||
fun getProperties(): Map<String, Any>? |
||||
} |
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when a call has ended. |
||||
*/ |
||||
data class CallEnded( |
||||
/** |
||||
* The duration of the call in milliseconds. |
||||
*/ |
||||
val durationMs: Int, |
||||
/** |
||||
* Whether its a video call or not. |
||||
*/ |
||||
val isVideo: Boolean, |
||||
/** |
||||
* Number of participants in the call. |
||||
*/ |
||||
val numParticipants: Int, |
||||
/** |
||||
* Whether this user placed it. |
||||
*/ |
||||
val placed: Boolean, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
override fun getName() = "CallEnded" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
put("durationMs", durationMs) |
||||
put("isVideo", isVideo) |
||||
put("numParticipants", numParticipants) |
||||
put("placed", placed) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when an error occurred in a call. |
||||
*/ |
||||
data class CallError( |
||||
/** |
||||
* Whether its a video call or not. |
||||
*/ |
||||
val isVideo: Boolean, |
||||
/** |
||||
* Number of participants in the call. |
||||
*/ |
||||
val numParticipants: Int, |
||||
/** |
||||
* Whether this user placed it. |
||||
*/ |
||||
val placed: Boolean, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
override fun getName() = "CallError" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
put("isVideo", isVideo) |
||||
put("numParticipants", numParticipants) |
||||
put("placed", placed) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when a call is started. |
||||
*/ |
||||
data class CallStarted( |
||||
/** |
||||
* Whether its a video call or not. |
||||
*/ |
||||
val isVideo: Boolean, |
||||
/** |
||||
* Number of participants in the call. |
||||
*/ |
||||
val numParticipants: Int, |
||||
/** |
||||
* Whether this user placed it. |
||||
*/ |
||||
val placed: Boolean, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
override fun getName() = "CallStarted" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
put("isVideo", isVideo) |
||||
put("numParticipants", numParticipants) |
||||
put("placed", placed) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,58 @@
@@ -0,0 +1,58 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when the user sends a message via the composer. |
||||
*/ |
||||
data class Composer( |
||||
/** |
||||
* Whether the user was using the composer inside of a thread. |
||||
*/ |
||||
val inThread: Boolean, |
||||
/** |
||||
* Whether the user's composer interaction was editing a previously sent |
||||
* event. |
||||
*/ |
||||
val isEditing: Boolean, |
||||
/** |
||||
* Whether the user's composer interaction was a reply to a previously |
||||
* sent event. |
||||
*/ |
||||
val isReply: Boolean, |
||||
/** |
||||
* Whether this message begins a new thread or not. |
||||
*/ |
||||
val startsThread: Boolean? = null, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
override fun getName() = "Composer" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
put("inThread", inThread) |
||||
put("isEditing", isEditing) |
||||
put("isReply", isReply) |
||||
startsThread?.let { put("startsThread", it) } |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when the user creates a room. |
||||
*/ |
||||
data class CreatedRoom( |
||||
/** |
||||
* Whether the room is a DM. |
||||
*/ |
||||
val isDM: Boolean, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
override fun getName() = "CreatedRoom" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
put("isDM", isDM) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,82 @@
@@ -0,0 +1,82 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when an error occurred. |
||||
*/ |
||||
data class Error( |
||||
/** |
||||
* Context - client defined, can be used for debugging. |
||||
*/ |
||||
val context: String? = null, |
||||
/** |
||||
* Which crypto module is the client currently using. |
||||
*/ |
||||
val cryptoModule: CryptoModule? = null, |
||||
val domain: Domain, |
||||
val name: Name, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
enum class Domain { |
||||
E2EE, |
||||
TO_DEVICE, |
||||
VOIP, |
||||
} |
||||
|
||||
enum class Name { |
||||
OlmIndexError, |
||||
OlmKeysNotSentError, |
||||
OlmUnspecifiedError, |
||||
ToDeviceFailedToDecrypt, |
||||
UnknownError, |
||||
VoipIceFailed, |
||||
VoipIceTimeout, |
||||
VoipInviteTimeout, |
||||
VoipUserHangup, |
||||
VoipUserMediaFailed, |
||||
} |
||||
|
||||
enum class CryptoModule { |
||||
|
||||
/** |
||||
* Native / legacy crypto module specific to each platform. |
||||
*/ |
||||
Native, |
||||
|
||||
/** |
||||
* Shared / cross-platform crypto module written in Rust. |
||||
*/ |
||||
Rust, |
||||
} |
||||
|
||||
override fun getName() = "Error" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
context?.let { put("context", it) } |
||||
cryptoModule?.let { put("cryptoModule", it.name) } |
||||
put("domain", domain.name) |
||||
put("name", name.name) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,468 @@
@@ -0,0 +1,468 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when the user clicks/taps/activates a UI element. |
||||
*/ |
||||
data class Interaction( |
||||
/** |
||||
* The index of the element, if its in a list of elements. |
||||
*/ |
||||
val index: Int? = null, |
||||
/** |
||||
* The manner with which the user activated the UI element. |
||||
*/ |
||||
val interactionType: InteractionType? = null, |
||||
/** |
||||
* The unique name of this element. |
||||
*/ |
||||
val name: Name, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
enum class Name { |
||||
/** |
||||
* User tapped the All filter in the All Chats filter tab. |
||||
*/ |
||||
MobileAllChatsFilterAll, |
||||
|
||||
/** |
||||
* User tapped the Favourites filter in the All Chats filter tab. |
||||
*/ |
||||
MobileAllChatsFilterFavourites, |
||||
|
||||
/** |
||||
* User tapped the People filter in the All Chats filter tab. |
||||
*/ |
||||
MobileAllChatsFilterPeople, |
||||
|
||||
/** |
||||
* User tapped the Unreads filter in the All Chats filter tab. |
||||
*/ |
||||
MobileAllChatsFilterUnreads, |
||||
|
||||
/** |
||||
* User disabled filters from the all chats layout settings. |
||||
*/ |
||||
MobileAllChatsFiltersDisabled, |
||||
|
||||
/** |
||||
* User enabled filters from the all chats layout settings. |
||||
*/ |
||||
MobileAllChatsFiltersEnabled, |
||||
|
||||
/** |
||||
* User disabled recents from the all chats layout settings. |
||||
*/ |
||||
MobileAllChatsRecentsDisabled, |
||||
|
||||
/** |
||||
* User enabled recents from the all chats layout settings. |
||||
*/ |
||||
MobileAllChatsRecentsEnabled, |
||||
|
||||
/** |
||||
* User tapped on Add to Home button on Room Details screen. |
||||
*/ |
||||
MobileRoomAddHome, |
||||
|
||||
/** |
||||
* User tapped on Leave Room button on Room Details screen. |
||||
*/ |
||||
MobileRoomLeave, |
||||
|
||||
/** |
||||
* User tapped on Threads button on Room screen. |
||||
*/ |
||||
MobileRoomThreadListButton, |
||||
|
||||
/** |
||||
* User tapped on a thread summary item on Room screen. |
||||
*/ |
||||
MobileRoomThreadSummaryItem, |
||||
|
||||
/** |
||||
* User validated the creation of a new space. |
||||
*/ |
||||
MobileSpaceCreationValidated, |
||||
|
||||
/** |
||||
* User tapped on the filter button on ThreadList screen. |
||||
*/ |
||||
MobileThreadListFilterItem, |
||||
|
||||
/** |
||||
* User selected a thread on ThreadList screen. |
||||
*/ |
||||
MobileThreadListThreadItem, |
||||
|
||||
/** |
||||
* User tapped the already selected space from the space list. |
||||
*/ |
||||
SpacePanelSelectedSpace, |
||||
|
||||
/** |
||||
* User tapped an unselected space from the space list -> space |
||||
* switching should occur. |
||||
*/ |
||||
SpacePanelSwitchSpace, |
||||
|
||||
/** |
||||
* User tapped an unselected sub space from the space list -> space |
||||
* switching should occur. |
||||
*/ |
||||
SpacePanelSwitchSubSpace, |
||||
|
||||
/** |
||||
* User clicked the create room button in the add existing room to space |
||||
* dialog in Element Web/Desktop. |
||||
*/ |
||||
WebAddExistingToSpaceDialogCreateRoomButton, |
||||
|
||||
/** |
||||
* User clicked the create DM button in the home page of Element |
||||
* Web/Desktop. |
||||
*/ |
||||
WebHomeCreateChatButton, |
||||
|
||||
/** |
||||
* User clicked the create room button in the home page of Element |
||||
* Web/Desktop. |
||||
*/ |
||||
WebHomeCreateRoomButton, |
||||
|
||||
/** |
||||
* User clicked the explore rooms button in the home page of Element |
||||
* Web/Desktop. |
||||
*/ |
||||
WebHomeExploreRoomsButton, |
||||
|
||||
/** |
||||
* User clicked on the mini avatar uploader in the home page of Element |
||||
* Web/Desktop. |
||||
*/ |
||||
WebHomeMiniAvatarUploadButton, |
||||
|
||||
/** |
||||
* User clicked the explore rooms button next to the search field at the |
||||
* top of the left panel in Element Web/Desktop. |
||||
*/ |
||||
WebLeftPanelExploreRoomsButton, |
||||
|
||||
/** |
||||
* User clicked on the avatar uploader in the profile settings of |
||||
* Element Web/Desktop. |
||||
*/ |
||||
WebProfileSettingsAvatarUploadButton, |
||||
|
||||
/** |
||||
* User interacted with pin to sidebar checkboxes in the quick settings |
||||
* menu of Element Web/Desktop. |
||||
*/ |
||||
WebQuickSettingsPinToSidebarCheckbox, |
||||
|
||||
/** |
||||
* User interacted with the theme dropdown in the quick settings menu of |
||||
* Element Web/Desktop. |
||||
*/ |
||||
WebQuickSettingsThemeDropdown, |
||||
|
||||
/** |
||||
* User accessed the room invite flow using the button at the top of the |
||||
* room member list in the right panel of Element Web/Desktop. |
||||
*/ |
||||
WebRightPanelMemberListInviteButton, |
||||
|
||||
/** |
||||
* User accessed room member list using the 'People' button in the right |
||||
* panel room summary card of Element Web/Desktop. |
||||
*/ |
||||
WebRightPanelRoomInfoPeopleButton, |
||||
|
||||
/** |
||||
* User accessed room settings using the 'Settings' button in the right |
||||
* panel room summary card of Element Web/Desktop. |
||||
*/ |
||||
WebRightPanelRoomInfoSettingsButton, |
||||
|
||||
/** |
||||
* User accessed room member list using the back button in the right |
||||
* panel user info card of Element Web/Desktop. |
||||
*/ |
||||
WebRightPanelRoomUserInfoBackButton, |
||||
|
||||
/** |
||||
* User invited someone to room by clicking invite on the right panel |
||||
* user info card in Element Web/Desktop. |
||||
*/ |
||||
WebRightPanelRoomUserInfoInviteButton, |
||||
|
||||
/** |
||||
* User clicked the threads 'show' filter dropdown in the threads panel |
||||
* in Element Web/Desktop. |
||||
*/ |
||||
WebRightPanelThreadPanelFilterDropdown, |
||||
|
||||
/** |
||||
* User clicked the create room button in the room directory of Element |
||||
* Web/Desktop. |
||||
*/ |
||||
WebRoomDirectoryCreateRoomButton, |
||||
|
||||
/** |
||||
* User clicked the Threads button in the top right of a room in Element |
||||
* Web/Desktop. |
||||
*/ |
||||
WebRoomHeaderButtonsThreadsButton, |
||||
|
||||
/** |
||||
* User adjusted their favourites using the context menu on the header |
||||
* of a room in Element Web/Desktop. |
||||
*/ |
||||
WebRoomHeaderContextMenuFavouriteToggle, |
||||
|
||||
/** |
||||
* User accessed the room invite flow using the context menu on the |
||||
* header of a room in Element Web/Desktop. |
||||
*/ |
||||
WebRoomHeaderContextMenuInviteItem, |
||||
|
||||
/** |
||||
* User interacted with leave action in the context menu on the header |
||||
* of a room in Element Web/Desktop. |
||||
*/ |
||||
WebRoomHeaderContextMenuLeaveItem, |
||||
|
||||
/** |
||||
* User accessed their room notification settings via the context menu |
||||
* on the header of a room in Element Web/Desktop. |
||||
*/ |
||||
WebRoomHeaderContextMenuNotificationsItem, |
||||
|
||||
/** |
||||
* User accessed room member list using the context menu on the header |
||||
* of a room in Element Web/Desktop. |
||||
*/ |
||||
WebRoomHeaderContextMenuPeopleItem, |
||||
|
||||
/** |
||||
* User accessed room settings using the context menu on the header of a |
||||
* room in Element Web/Desktop. |
||||
*/ |
||||
WebRoomHeaderContextMenuSettingsItem, |
||||
|
||||
/** |
||||
* User clicked the create DM button in the + context menu of the room |
||||
* list header in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListHeaderPlusMenuCreateChatItem, |
||||
|
||||
/** |
||||
* User clicked the create room button in the + context menu of the room |
||||
* list header in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListHeaderPlusMenuCreateRoomItem, |
||||
|
||||
/** |
||||
* User clicked the explore rooms button in the + context menu of the |
||||
* room list header in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListHeaderPlusMenuExploreRoomsItem, |
||||
|
||||
/** |
||||
* User adjusted their favourites using the context menu on a room tile |
||||
* in the room list in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListRoomTileContextMenuFavouriteToggle, |
||||
|
||||
/** |
||||
* User accessed the room invite flow using the context menu on a room |
||||
* tile in the room list in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListRoomTileContextMenuInviteItem, |
||||
|
||||
/** |
||||
* User interacted with leave action in the context menu on a room tile |
||||
* in the room list in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListRoomTileContextMenuLeaveItem, |
||||
|
||||
/** |
||||
* User accessed room settings using the context menu on a room tile in |
||||
* the room list in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListRoomTileContextMenuSettingsItem, |
||||
|
||||
/** |
||||
* User accessed their room notification settings via the context menu |
||||
* on a room tile in the room list in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListRoomTileNotificationsMenu, |
||||
|
||||
/** |
||||
* User clicked the create DM button in the + context menu of the rooms |
||||
* sublist in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListRoomsSublistPlusMenuCreateChatItem, |
||||
|
||||
/** |
||||
* User clicked the create room button in the + context menu of the |
||||
* rooms sublist in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListRoomsSublistPlusMenuCreateRoomItem, |
||||
|
||||
/** |
||||
* User clicked the explore rooms button in the + context menu of the |
||||
* rooms sublist in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListRoomsSublistPlusMenuExploreRoomsItem, |
||||
|
||||
/** |
||||
* User clicked on the button to return to the user onboarding list in |
||||
* the room list in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListUserOnboardingButton, |
||||
|
||||
/** |
||||
* User clicked on the button to close the user onboarding button in the |
||||
* room list in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListUserOnboardingIgnoreButton, |
||||
|
||||
/** |
||||
* User interacted with leave action in the general tab of the room |
||||
* settings dialog in Element Web/Desktop. |
||||
*/ |
||||
WebRoomSettingsLeaveButton, |
||||
|
||||
/** |
||||
* User interacted with the prompt to create a new room when adjusting |
||||
* security settings in an existing room in Element Web/Desktop. |
||||
*/ |
||||
WebRoomSettingsSecurityTabCreateNewRoomButton, |
||||
|
||||
/** |
||||
* User clicked a thread summary in the timeline of a room in Element |
||||
* Web/Desktop. |
||||
*/ |
||||
WebRoomTimelineThreadSummaryButton, |
||||
|
||||
/** |
||||
* User interacted with the theme radio selector in the Appearance tab |
||||
* of Settings in Element Web/Desktop. |
||||
*/ |
||||
WebSettingsAppearanceTabThemeSelector, |
||||
|
||||
/** |
||||
* User interacted with the pre-built space checkboxes in the Sidebar |
||||
* tab of Settings in Element Web/Desktop. |
||||
*/ |
||||
WebSettingsSidebarTabSpacesCheckbox, |
||||
|
||||
/** |
||||
* User clicked the explore rooms button in the context menu of a space |
||||
* in Element Web/Desktop. |
||||
*/ |
||||
WebSpaceContextMenuExploreRoomsItem, |
||||
|
||||
/** |
||||
* User clicked the home button in the context menu of a space in |
||||
* Element Web/Desktop. |
||||
*/ |
||||
WebSpaceContextMenuHomeItem, |
||||
|
||||
/** |
||||
* User clicked the new room button in the context menu of a space in |
||||
* Element Web/Desktop. |
||||
*/ |
||||
WebSpaceContextMenuNewRoomItem, |
||||
|
||||
/** |
||||
* User clicked the new room button in the context menu on the space |
||||
* home in Element Web/Desktop. |
||||
*/ |
||||
WebSpaceHomeCreateRoomButton, |
||||
|
||||
/** |
||||
* User clicked the back button on a Thread view going back to the |
||||
* Threads Panel of Element Web/Desktop. |
||||
*/ |
||||
WebThreadViewBackButton, |
||||
|
||||
/** |
||||
* User selected a thread in the Threads panel in Element Web/Desktop. |
||||
*/ |
||||
WebThreadsPanelThreadItem, |
||||
|
||||
/** |
||||
* User clicked the theme toggle button in the user menu of Element |
||||
* Web/Desktop. |
||||
*/ |
||||
WebUserMenuThemeToggleButton, |
||||
|
||||
/** |
||||
* User clicked on the send DM CTA in the header of the new user |
||||
* onboarding page in Element Web/Desktop. |
||||
*/ |
||||
WebUserOnboardingHeaderSendDm, |
||||
|
||||
/** |
||||
* User clicked on the action of the download apps task on the new user |
||||
* onboarding page in Element Web/Desktop. |
||||
*/ |
||||
WebUserOnboardingTaskDownloadApps, |
||||
|
||||
/** |
||||
* User clicked on the action of the enable notifications task on the |
||||
* new user onboarding page in Element Web/Desktop. |
||||
*/ |
||||
WebUserOnboardingTaskEnableNotifications, |
||||
|
||||
/** |
||||
* User clicked on the action of the find people task on the new user |
||||
* onboarding page in Element Web/Desktop. |
||||
*/ |
||||
WebUserOnboardingTaskSendDm, |
||||
|
||||
/** |
||||
* User clicked on the action of the your profile task on the new user |
||||
* onboarding page in Element Web/Desktop. |
||||
*/ |
||||
WebUserOnboardingTaskSetupProfile, |
||||
} |
||||
|
||||
enum class InteractionType { |
||||
Keyboard, |
||||
Pointer, |
||||
Touch, |
||||
} |
||||
|
||||
override fun getName() = "Interaction" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
index?.let { put("index", it) } |
||||
interactionType?.let { put("interactionType", it.name) } |
||||
put("name", name.name) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,107 @@
@@ -0,0 +1,107 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when the user joins a room. |
||||
*/ |
||||
data class JoinedRoom( |
||||
/** |
||||
* Whether the room is a DM. |
||||
*/ |
||||
val isDM: Boolean, |
||||
/** |
||||
* Whether the room is a Space. |
||||
*/ |
||||
val isSpace: Boolean, |
||||
/** |
||||
* The size of the room. |
||||
*/ |
||||
val roomSize: RoomSize, |
||||
/** |
||||
* The trigger for a room being joined if known. |
||||
*/ |
||||
val trigger: Trigger? = null, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
enum class Trigger { |
||||
/** |
||||
* Room joined via an invite. |
||||
*/ |
||||
Invite, |
||||
|
||||
/** |
||||
* Room joined via link. |
||||
*/ |
||||
MobilePermalink, |
||||
|
||||
/** |
||||
* Room joined via a push/desktop notification. |
||||
*/ |
||||
Notification, |
||||
|
||||
/** |
||||
* Room joined via the public rooms directory. |
||||
*/ |
||||
RoomDirectory, |
||||
|
||||
/** |
||||
* Room joined via its preview. |
||||
*/ |
||||
RoomPreview, |
||||
|
||||
/** |
||||
* Room joined via the /join slash command. |
||||
*/ |
||||
SlashCommand, |
||||
|
||||
/** |
||||
* Room joined via the space hierarchy view. |
||||
*/ |
||||
SpaceHierarchy, |
||||
|
||||
/** |
||||
* Room joined via a timeline pill or link in another room. |
||||
*/ |
||||
Timeline, |
||||
} |
||||
|
||||
enum class RoomSize { |
||||
ElevenToOneHundred, |
||||
MoreThanAThousand, |
||||
One, |
||||
OneHundredAndOneToAThousand, |
||||
ThreeToTen, |
||||
Two, |
||||
} |
||||
|
||||
override fun getName() = "JoinedRoom" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
put("isDM", isDM) |
||||
put("isSpace", isSpace) |
||||
put("roomSize", roomSize.name) |
||||
trigger?.let { put("trigger", it.name) } |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,327 @@
@@ -0,0 +1,327 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsScreen |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when the user changed screen on Element Android/iOS. |
||||
*/ |
||||
data class MobileScreen( |
||||
/** |
||||
* How long the screen was displayed for in milliseconds. |
||||
*/ |
||||
val durationMs: Int? = null, |
||||
val screenName: ScreenName, |
||||
) : VectorAnalyticsScreen { |
||||
|
||||
enum class ScreenName { |
||||
/** |
||||
* The screen that displays the user's breadcrumbs. |
||||
*/ |
||||
Breadcrumbs, |
||||
|
||||
/** |
||||
* The screen shown to create a new (non-direct) room. |
||||
*/ |
||||
CreateRoom, |
||||
|
||||
/** |
||||
* The screen shown to create a new space. |
||||
*/ |
||||
CreateSpace, |
||||
|
||||
/** |
||||
* The confirmation screen shown before deactivating an account. |
||||
*/ |
||||
DeactivateAccount, |
||||
|
||||
/** |
||||
* The tab on mobile that displays the dialpad. |
||||
*/ |
||||
Dialpad, |
||||
|
||||
/** |
||||
* The Favourites tab on mobile that lists your favourite people/rooms. |
||||
*/ |
||||
Favourites, |
||||
|
||||
/** |
||||
* The form for the forgot password use case. |
||||
*/ |
||||
ForgotPassword, |
||||
|
||||
/** |
||||
* Legacy: The screen that shows information about a specific group. |
||||
*/ |
||||
Group, |
||||
|
||||
/** |
||||
* The Home tab on iOS | possibly the same on Android? |
||||
*/ |
||||
Home, |
||||
|
||||
/** |
||||
* The screen shown to share a link to download the app. |
||||
*/ |
||||
InviteFriends, |
||||
|
||||
/** |
||||
* Room accessed via space bottom sheet list. |
||||
*/ |
||||
Invites, |
||||
|
||||
/** |
||||
* The screen that displays the login flow (when the user already has an |
||||
* account). |
||||
*/ |
||||
Login, |
||||
|
||||
/** |
||||
* Legacy: The screen that shows all groups/communities you have joined. |
||||
*/ |
||||
MyGroups, |
||||
|
||||
/** |
||||
* The People tab on mobile that lists all the DM rooms you have joined. |
||||
*/ |
||||
People, |
||||
|
||||
/** |
||||
* The screen that displays the registration flow (when the user wants |
||||
* to create an account). |
||||
*/ |
||||
Register, |
||||
|
||||
/** |
||||
* The screen that displays the messages and events received in a room. |
||||
*/ |
||||
Room, |
||||
|
||||
/** |
||||
* The room addresses screen shown from the Room Details screen. |
||||
*/ |
||||
RoomAddresses, |
||||
|
||||
/** |
||||
* The screen shown when tapping the name of a room from the Room |
||||
* screen. |
||||
*/ |
||||
RoomDetails, |
||||
|
||||
/** |
||||
* The screen that lists public rooms for you to discover. |
||||
*/ |
||||
RoomDirectory, |
||||
|
||||
/** |
||||
* The screen that lists all the user's rooms and let them filter the |
||||
* rooms. |
||||
*/ |
||||
RoomFilter, |
||||
|
||||
/** |
||||
* The screen that displays the list of members that are part of a room. |
||||
*/ |
||||
RoomMembers, |
||||
|
||||
/** |
||||
* The notifications settings screen shown from the Room Details screen. |
||||
*/ |
||||
RoomNotifications, |
||||
|
||||
/** |
||||
* The roles permissions screen shown from the Room Details screen. |
||||
*/ |
||||
RoomPermissions, |
||||
|
||||
/** |
||||
* Screen that displays room preview if user hasn't joined yet. |
||||
*/ |
||||
RoomPreview, |
||||
|
||||
/** |
||||
* The screen that allows you to search for messages/files in a specific |
||||
* room. |
||||
*/ |
||||
RoomSearch, |
||||
|
||||
/** |
||||
* The settings screen shown from the Room Details screen. |
||||
*/ |
||||
RoomSettings, |
||||
|
||||
/** |
||||
* The screen that allows you to see all of the files sent in a specific |
||||
* room. |
||||
*/ |
||||
RoomUploads, |
||||
|
||||
/** |
||||
* The Rooms tab on mobile that lists all the (non-direct) rooms you've |
||||
* joined. |
||||
*/ |
||||
Rooms, |
||||
|
||||
/** |
||||
* The Files tab shown in the global search screen on Mobile. |
||||
*/ |
||||
SearchFiles, |
||||
|
||||
/** |
||||
* The Messages tab shown in the global search screen on Mobile. |
||||
*/ |
||||
SearchMessages, |
||||
|
||||
/** |
||||
* The People tab shown in the global search screen on Mobile. |
||||
*/ |
||||
SearchPeople, |
||||
|
||||
/** |
||||
* The Rooms tab shown in the global search screen on Mobile. |
||||
*/ |
||||
SearchRooms, |
||||
|
||||
/** |
||||
* The global settings screen shown in the app. |
||||
*/ |
||||
Settings, |
||||
|
||||
/** |
||||
* The advanced settings screen (developer mode, rageshake, push |
||||
* notification rules). |
||||
*/ |
||||
SettingsAdvanced, |
||||
|
||||
/** |
||||
* The settings screen to change the default notification options. |
||||
*/ |
||||
SettingsDefaultNotifications, |
||||
|
||||
/** |
||||
* The settings screen with general profile settings. |
||||
*/ |
||||
SettingsGeneral, |
||||
|
||||
/** |
||||
* The Help and About screen. |
||||
*/ |
||||
SettingsHelp, |
||||
|
||||
/** |
||||
* The settings screen with list of the ignored users. |
||||
*/ |
||||
SettingsIgnoredUsers, |
||||
|
||||
/** |
||||
* The experimental features settings screen. |
||||
*/ |
||||
SettingsLabs, |
||||
|
||||
/** |
||||
* The settings screen with legals information. |
||||
*/ |
||||
SettingsLegals, |
||||
|
||||
/** |
||||
* The settings screen to manage notification mentions and keywords. |
||||
*/ |
||||
SettingsMentionsAndKeywords, |
||||
|
||||
/** |
||||
* The notifications settings screen. |
||||
*/ |
||||
SettingsNotifications, |
||||
|
||||
/** |
||||
* The preferences screen (theme, language, editor preferences, etc. |
||||
*/ |
||||
SettingsPreferences, |
||||
|
||||
/** |
||||
* The global security settings screen. |
||||
*/ |
||||
SettingsSecurity, |
||||
|
||||
/** |
||||
* The calls settings screen. |
||||
*/ |
||||
SettingsVoiceVideo, |
||||
|
||||
/** |
||||
* The sidebar shown on mobile with spaces, settings etc. |
||||
*/ |
||||
Sidebar, |
||||
|
||||
/** |
||||
* Room accessed via space bottom sheet list. |
||||
*/ |
||||
SpaceBottomSheet, |
||||
|
||||
/** |
||||
* Screen that displays the list of rooms and spaces of a space. |
||||
*/ |
||||
SpaceExploreRooms, |
||||
|
||||
/** |
||||
* Screen that displays the list of members of a space. |
||||
*/ |
||||
SpaceMembers, |
||||
|
||||
/** |
||||
* The bottom sheet that list all space options. |
||||
*/ |
||||
SpaceMenu, |
||||
|
||||
/** |
||||
* The screen shown to create a new direct room. |
||||
*/ |
||||
StartChat, |
||||
|
||||
/** |
||||
* The screen shown to select which room directory you'd like to use. |
||||
*/ |
||||
SwitchDirectory, |
||||
|
||||
/** |
||||
* Screen that displays list of threads for a room. |
||||
*/ |
||||
ThreadList, |
||||
|
||||
/** |
||||
* A screen that shows information about a room member. |
||||
*/ |
||||
User, |
||||
|
||||
/** |
||||
* The splash screen. |
||||
*/ |
||||
Welcome, |
||||
} |
||||
|
||||
override fun getName() = screenName.name |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
durationMs?.let { put("durationMs", it) } |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,109 @@
@@ -0,0 +1,109 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered after timing an operation in the app. |
||||
*/ |
||||
data class PerformanceTimer( |
||||
/** |
||||
* Client defined, can be used for debugging. |
||||
*/ |
||||
val context: String? = null, |
||||
/** |
||||
* Client defined, an optional value to indicate how many items were |
||||
* handled during the operation. |
||||
*/ |
||||
val itemCount: Int? = null, |
||||
/** |
||||
* The timer that is being reported. |
||||
*/ |
||||
val name: Name, |
||||
/** |
||||
* The time reported by the timer in milliseconds. |
||||
*/ |
||||
val timeMs: Int, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
enum class Name { |
||||
/** |
||||
* The time spent parsing the response from an initial /sync request. In |
||||
* this case, `itemCount` should contain the number of joined rooms. |
||||
*/ |
||||
InitialSyncParsing, |
||||
|
||||
/** |
||||
* The time spent waiting for a response to an initial /sync request. In |
||||
* this case, `itemCount` should contain the number of joined rooms. |
||||
*/ |
||||
InitialSyncRequest, |
||||
|
||||
/** |
||||
* The time taken to display an event in the timeline that was opened |
||||
* from a notification. |
||||
*/ |
||||
NotificationsOpenEvent, |
||||
|
||||
/** |
||||
* The duration of a regular /sync request when resuming the app. In |
||||
* this case, `itemCount` should contain the number of joined rooms in |
||||
* the response. |
||||
*/ |
||||
StartupIncrementalSync, |
||||
|
||||
/** |
||||
* The duration of an initial /sync request during startup (if the store |
||||
* has been wiped). In this case, `itemCount` should contain the number |
||||
* of joined rooms. |
||||
*/ |
||||
StartupInitialSync, |
||||
|
||||
/** |
||||
* How long the app launch screen is displayed for. |
||||
*/ |
||||
StartupLaunchScreen, |
||||
|
||||
/** |
||||
* The time to preload data in the MXStore on iOS. In this case, |
||||
* `itemCount` should contain the number of rooms in the store. |
||||
*/ |
||||
StartupStorePreload, |
||||
|
||||
/** |
||||
* The time to load all data from the store (including |
||||
* StartupStorePreload time). In this case, `itemCount` should contain |
||||
* the number of rooms loaded into the session |
||||
*/ |
||||
StartupStoreReady, |
||||
} |
||||
|
||||
override fun getName() = "PerformanceTimer" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
context?.let { put("context", it) } |
||||
itemCount?.let { put("itemCount", it) } |
||||
put("name", name.name) |
||||
put("timeMs", timeMs) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when the user changes a permission status. |
||||
*/ |
||||
data class PermissionChanged( |
||||
/** |
||||
* Whether the permission has been granted by the user. |
||||
*/ |
||||
val granted: Boolean, |
||||
/** |
||||
* The name of the permission. |
||||
*/ |
||||
val permission: Permission, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
enum class Permission { |
||||
/** |
||||
* Permissions related to sending notifications have changed. |
||||
*/ |
||||
Notification, |
||||
} |
||||
|
||||
override fun getName() = "PermissionChanged" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
put("granted", granted) |
||||
put("permission", permission.name) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,84 @@
@@ -0,0 +1,84 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered once onboarding has completed, but only if the user registered a |
||||
* new account. |
||||
*/ |
||||
data class Signup( |
||||
/** |
||||
* The type of authentication that was used to sign up. |
||||
*/ |
||||
val authenticationType: AuthenticationType, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
enum class AuthenticationType { |
||||
/** |
||||
* Social login using Apple. |
||||
*/ |
||||
Apple, |
||||
|
||||
/** |
||||
* Social login using Facebook. |
||||
*/ |
||||
Facebook, |
||||
|
||||
/** |
||||
* Social login using GitHub. |
||||
*/ |
||||
GitHub, |
||||
|
||||
/** |
||||
* Social login using GitLab. |
||||
*/ |
||||
GitLab, |
||||
|
||||
/** |
||||
* Social login using Google. |
||||
*/ |
||||
Google, |
||||
|
||||
/** |
||||
* Registration using some other mechanism such as fallback. |
||||
*/ |
||||
Other, |
||||
|
||||
/** |
||||
* Registration with a username and password. |
||||
*/ |
||||
Password, |
||||
|
||||
/** |
||||
* Registration using another SSO provider. |
||||
*/ |
||||
SSO, |
||||
} |
||||
|
||||
override fun getName() = "Signup" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
put("authenticationType", authenticationType.name) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when the user runs a slash command in their composer. |
||||
*/ |
||||
data class SlashCommand( |
||||
/** |
||||
* The name of this command. |
||||
*/ |
||||
val command: Command, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
enum class Command { |
||||
Invite, |
||||
Part, |
||||
} |
||||
|
||||
override fun getName() = "SlashCommand" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
put("command", command.name) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when the user becomes unauthenticated without actually clicking |
||||
* sign out(E.g. Due to expiry of an access token without a way to refresh). |
||||
*/ |
||||
data class UnauthenticatedError( |
||||
/** |
||||
* The error code as defined in matrix spec. The source of this error is |
||||
* from the homeserver. |
||||
*/ |
||||
val errorCode: ErrorCode, |
||||
/** |
||||
* The reason for the error. The source of this error is from the |
||||
* homeserver, the reason can vary and is subject to change so there is |
||||
* no enum of possible values. |
||||
*/ |
||||
val errorReason: String, |
||||
/** |
||||
* Whether the auth mechanism is refresh-token-based. |
||||
*/ |
||||
val refreshTokenAuth: Boolean, |
||||
/** |
||||
* Whether a soft logout or hard logout was triggered. |
||||
*/ |
||||
val softLogout: Boolean, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
enum class ErrorCode { |
||||
M_FORBIDDEN, |
||||
M_UNKNOWN, |
||||
M_UNKNOWN_TOKEN, |
||||
} |
||||
|
||||
override fun getName() = "UnauthenticatedError" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
put("errorCode", errorCode.name) |
||||
put("errorReason", errorReason) |
||||
put("refreshTokenAuth", refreshTokenAuth) |
||||
put("softLogout", softLogout) |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,98 @@
@@ -0,0 +1,98 @@
|
||||
/* |
||||
* Copyright (c) 2023 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* The user properties to apply when identifying. This is not an event |
||||
* definition. These properties must all be device independent. |
||||
*/ |
||||
data class UserProperties( |
||||
/** |
||||
* The active filter in the All Chats screen. |
||||
*/ |
||||
val allChatsActiveFilter: AllChatsActiveFilter? = null, |
||||
/** |
||||
* The selected messaging use case during the onboarding flow. |
||||
*/ |
||||
val ftueUseCaseSelection: FtueUseCaseSelection? = null, |
||||
/** |
||||
* Number of joined rooms the user has favourited. |
||||
*/ |
||||
val numFavouriteRooms: Int? = null, |
||||
/** |
||||
* Number of spaces (and sub-spaces) the user is joined to. |
||||
*/ |
||||
val numSpaces: Int? = null, |
||||
) { |
||||
|
||||
enum class FtueUseCaseSelection { |
||||
/** |
||||
* The third option, Communities. |
||||
*/ |
||||
CommunityMessaging, |
||||
|
||||
/** |
||||
* The first option, Friends and family. |
||||
*/ |
||||
PersonalMessaging, |
||||
|
||||
/** |
||||
* The footer option to skip the question. |
||||
*/ |
||||
Skip, |
||||
|
||||
/** |
||||
* The second option, Teams. |
||||
*/ |
||||
WorkMessaging, |
||||
} |
||||
|
||||
enum class AllChatsActiveFilter { |
||||
|
||||
/** |
||||
* Filters are activated and All is selected. |
||||
*/ |
||||
All, |
||||
|
||||
/** |
||||
* Filters are activated and Favourites is selected. |
||||
*/ |
||||
Favourites, |
||||
|
||||
/** |
||||
* Filters are activated and People is selected. |
||||
*/ |
||||
People, |
||||
|
||||
/** |
||||
* Filters are activated and Unreads is selected. |
||||
*/ |
||||
Unreads, |
||||
} |
||||
|
||||
fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
allChatsActiveFilter?.let { put("allChatsActiveFilter", it.name) } |
||||
ftueUseCaseSelection?.let { put("ftueUseCaseSelection", it.name) } |
||||
numFavouriteRooms?.let { put("numFavouriteRooms", it) } |
||||
numSpaces?.let { put("numSpaces", it) } |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,306 @@
@@ -0,0 +1,306 @@
|
||||
/* |
||||
* Copyright (c) 2021 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.api.plan |
||||
|
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
|
||||
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT |
||||
// https://github.com/matrix-org/matrix-analytics-events/ |
||||
|
||||
/** |
||||
* Triggered when the user changes rooms. |
||||
*/ |
||||
data class ViewRoom( |
||||
/** |
||||
* active space when user navigated to the room. |
||||
*/ |
||||
val activeSpace: ActiveSpace? = null, |
||||
/** |
||||
* Whether the room is a DM. |
||||
*/ |
||||
val isDM: Boolean? = null, |
||||
/** |
||||
* Whether the room is a Space. |
||||
*/ |
||||
val isSpace: Boolean? = null, |
||||
/** |
||||
* The reason for the room change if known. |
||||
*/ |
||||
val trigger: Trigger? = null, |
||||
/** |
||||
* Whether the interaction was performed via the keyboard input. |
||||
*/ |
||||
val viaKeyboard: Boolean? = null, |
||||
) : VectorAnalyticsEvent { |
||||
|
||||
enum class Trigger { |
||||
/** |
||||
* Room accessed due to being just created. |
||||
*/ |
||||
Created, |
||||
|
||||
/** |
||||
* Room switched due to user interacting with a message search result. |
||||
*/ |
||||
MessageSearch, |
||||
|
||||
/** |
||||
* Room switched due to user selecting a user to go to a DM with. |
||||
*/ |
||||
MessageUser, |
||||
|
||||
/** |
||||
* Room accessed via space explore. |
||||
*/ |
||||
MobileExploreRooms, |
||||
|
||||
/** |
||||
* Room switched due to user interacting with a file search result. |
||||
*/ |
||||
MobileFileSearch, |
||||
|
||||
/** |
||||
* Room accessed via interacting with the incall screen. |
||||
*/ |
||||
MobileInCall, |
||||
|
||||
/** |
||||
* Room accessed during external sharing. |
||||
*/ |
||||
MobileLinkShare, |
||||
|
||||
/** |
||||
* Room accessed via link. |
||||
*/ |
||||
MobilePermalink, |
||||
|
||||
/** |
||||
* Room accessed via interacting with direct chat item in the room |
||||
* contact detail screen. |
||||
*/ |
||||
MobileRoomMemberDetail, |
||||
|
||||
/** |
||||
* Room accessed via preview. |
||||
*/ |
||||
MobileRoomPreview, |
||||
|
||||
/** |
||||
* Room switched due to user interacting with a room search result. |
||||
*/ |
||||
MobileRoomSearch, |
||||
|
||||
/** |
||||
* Room accessed via interacting with direct chat item in the search |
||||
* contact detail screen. |
||||
*/ |
||||
MobileSearchContactDetail, |
||||
|
||||
/** |
||||
* Room accessed via space bottom sheet list. |
||||
*/ |
||||
MobileSpaceBottomSheet, |
||||
|
||||
/** |
||||
* Room accessed via interacting with direct chat item in the space |
||||
* contact detail screen. |
||||
*/ |
||||
MobileSpaceMemberDetail, |
||||
|
||||
/** |
||||
* Room accessed via space members list. |
||||
*/ |
||||
MobileSpaceMembers, |
||||
|
||||
/** |
||||
* Space accessed via interacting with the space menu. |
||||
*/ |
||||
MobileSpaceMenu, |
||||
|
||||
/** |
||||
* Space accessed via interacting with a space settings menu item. |
||||
*/ |
||||
MobileSpaceSettings, |
||||
|
||||
/** |
||||
* Room accessed via a push/desktop notification. |
||||
*/ |
||||
Notification, |
||||
|
||||
/** |
||||
* Room accessed via the predecessor link at the top of the upgraded |
||||
* room. |
||||
*/ |
||||
Predecessor, |
||||
|
||||
/** |
||||
* Room accessed via the public rooms directory. |
||||
*/ |
||||
RoomDirectory, |
||||
|
||||
/** |
||||
* Room accessed via the room list. |
||||
*/ |
||||
RoomList, |
||||
|
||||
/** |
||||
* Room accessed via a shortcut. |
||||
*/ |
||||
Shortcut, |
||||
|
||||
/** |
||||
* Room accessed via a slash command in Element Web/Desktop like /goto. |
||||
*/ |
||||
SlashCommand, |
||||
|
||||
/** |
||||
* Room accessed via the space hierarchy view. |
||||
*/ |
||||
SpaceHierarchy, |
||||
|
||||
/** |
||||
* Room accessed via a timeline pill or link in another room. |
||||
*/ |
||||
Timeline, |
||||
|
||||
/** |
||||
* Room accessed via a tombstone at the bottom of a predecessor room. |
||||
*/ |
||||
Tombstone, |
||||
|
||||
/** |
||||
* Room switched due to user interacting with incoming verification |
||||
* request. |
||||
*/ |
||||
VerificationRequest, |
||||
|
||||
/** |
||||
* Room switched due to accepting a call in a different room in Element |
||||
* Web/Desktop. |
||||
*/ |
||||
WebAcceptCall, |
||||
|
||||
/** |
||||
* Room switched due to making a call via the dial pad in Element |
||||
* Web/Desktop. |
||||
*/ |
||||
WebDialPad, |
||||
|
||||
/** |
||||
* Room accessed via interacting with the floating call or Jitsi PIP in |
||||
* Element Web/Desktop. |
||||
*/ |
||||
WebFloatingCallWindow, |
||||
|
||||
/** |
||||
* Room accessed via the shortcut in Element Web/Desktop's forward |
||||
* modal. |
||||
*/ |
||||
WebForwardShortcut, |
||||
|
||||
/** |
||||
* Room accessed via the Element Web/Desktop horizontal breadcrumbs at |
||||
* the top of the room list. |
||||
*/ |
||||
WebHorizontalBreadcrumbs, |
||||
|
||||
/** |
||||
* Room accessed via an Element Web/Desktop keyboard shortcut like go to |
||||
* next room with unread messages. |
||||
*/ |
||||
WebKeyboardShortcut, |
||||
|
||||
/** |
||||
* Room accessed via Element Web/Desktop's notification panel. |
||||
*/ |
||||
WebNotificationPanel, |
||||
|
||||
/** |
||||
* Room accessed via the predecessor link in Settings > Advanced in |
||||
* Element Web/Desktop. |
||||
*/ |
||||
WebPredecessorSettings, |
||||
|
||||
/** |
||||
* Room accessed via clicking on a notifications badge on a room list |
||||
* sublist in Element Web/Desktop. |
||||
*/ |
||||
WebRoomListNotificationBadge, |
||||
|
||||
/** |
||||
* Room switched due to the user changing space in Element Web/Desktop. |
||||
*/ |
||||
WebSpaceContextSwitch, |
||||
|
||||
/** |
||||
* Room accessed via clicking on the notifications badge on the |
||||
* currently selected space in Element Web/Desktop. |
||||
*/ |
||||
WebSpacePanelNotificationBadge, |
||||
|
||||
/** |
||||
* Room accessed via Element Web/Desktop's Unified Search modal. |
||||
*/ |
||||
WebUnifiedSearch, |
||||
|
||||
/** |
||||
* Room accessed via the Element Web/Desktop vertical breadcrumb hover |
||||
* menu. |
||||
*/ |
||||
WebVerticalBreadcrumbs, |
||||
|
||||
/** |
||||
* Room switched due to widget interaction. |
||||
*/ |
||||
Widget, |
||||
} |
||||
|
||||
enum class ActiveSpace { |
||||
|
||||
/** |
||||
* Active space is Home. |
||||
*/ |
||||
Home, |
||||
|
||||
/** |
||||
* Active space is a meta space. |
||||
*/ |
||||
Meta, |
||||
|
||||
/** |
||||
* Active space is a private space. |
||||
*/ |
||||
Private, |
||||
|
||||
/** |
||||
* Active space is a public space. |
||||
*/ |
||||
Public, |
||||
} |
||||
|
||||
override fun getName() = "ViewRoom" |
||||
|
||||
override fun getProperties(): Map<String, Any>? { |
||||
return mutableMapOf<String, Any>().apply { |
||||
activeSpace?.let { put("activeSpace", it.name) } |
||||
isDM?.let { put("isDM", it) } |
||||
isSpace?.let { put("isSpace", it) } |
||||
trigger?.let { put("trigger", it.name) } |
||||
viaKeyboard?.let { put("viaKeyboard", it) } |
||||
}.takeIf { it.isNotEmpty() } |
||||
} |
||||
} |
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
/* |
||||
* Copyright (c) 2023 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
plugins { |
||||
id("io.element.android-library") |
||||
alias(libs.plugins.anvil) |
||||
} |
||||
|
||||
android { |
||||
namespace = "io.element.android.services.analytics.impl" |
||||
} |
||||
|
||||
anvil { |
||||
generateDaggerFactories.set(true) |
||||
} |
||||
|
||||
dependencies { |
||||
implementation(libs.dagger) |
||||
implementation(projects.libraries.di) |
||||
api(projects.services.analytics.api) |
||||
} |
@ -0,0 +1,35 @@
@@ -0,0 +1,35 @@
|
||||
/* |
||||
* Copyright (c) 2023 New Vector Ltd |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0 |
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package io.element.android.services.analytics.noop |
||||
|
||||
import com.squareup.anvil.annotations.ContributesBinding |
||||
import io.element.android.services.analytics.api.AnalyticsTracker |
||||
import io.element.android.services.analytics.api.VectorAnalyticsEvent |
||||
import io.element.android.services.analytics.api.VectorAnalyticsScreen |
||||
import io.element.android.services.analytics.api.plan.UserProperties |
||||
import io.element.android.libraries.di.AppScope |
||||
import javax.inject.Inject |
||||
|
||||
@ContributesBinding(AppScope::class) |
||||
class NoopAnalyticsTracker @Inject constructor() : AnalyticsTracker { |
||||
|
||||
override fun capture(event: VectorAnalyticsEvent) = Unit |
||||
|
||||
override fun screen(screen: VectorAnalyticsScreen) = Unit |
||||
|
||||
override fun updateUserProperties(userProperties: UserProperties) = Unit |
||||
} |
Loading…
Reference in new issue