Add dependency on com.github.matrix-org:matrix-analytics-events and remove local plan and management of its import.

This commit is contained in:
Benoit Marty 2024-03-27 10:15:57 +01:00
parent def2a8a833
commit 6e1b346095
29 changed files with 5 additions and 2684 deletions

View File

@ -58,27 +58,3 @@ jobs:
- Update SAS Strings from matrix-doc. - Update SAS Strings from matrix-doc.
branch: sync-sas-strings branch: sync-sas-strings
base: develop base: develop
sync-analytics-plan:
runs-on: ubuntu-latest
# Skip in forks
if: github.repository == 'element-hq/element-android'
# No concurrency required, runs every time on a schedule.
steps:
- uses: actions/checkout@v3
- name: Run analytics import script
run: ./tools/import_analytic_plan.sh
- name: Create Pull Request for analytics plan
uses: peter-evans/create-pull-request@v5
with:
commit-message: Sync analytics plan
title: Sync analytics plan
body: |
### Update analytics plan
Reviewers:
- [ ] Please remove usage of Event or Enum which may have been removed or updated
- [ ] please ensure new Events or new Enums are used to send analytics by pushing new commit(s) to this PR.
*Note*: Change are coming from [this project](https://github.com/matrix-org/matrix-analytics-events)
branch: sync-analytics-plan
base: develop

View File

@ -9,6 +9,7 @@ ext.groups = [
'com.github.hyuwah', 'com.github.hyuwah',
'com.github.jetradarmobile', 'com.github.jetradarmobile',
'com.github.MatrixFrog', 'com.github.MatrixFrog',
'com.github.matrix-org',
'com.github.tapadoo', 'com.github.tapadoo',
'com.github.UnifiedPush', 'com.github.UnifiedPush',
'com.github.yalantis', 'com.github.yalantis',

View File

@ -17,7 +17,7 @@ We ask for the user to give consent before sending any analytics data.
The analytics plan is shared between all Element clients. To add an Event, please open a PR to this project: https://github.com/matrix-org/matrix-analytics-events The analytics plan is shared between all Element clients. To add an Event, please open a PR to this project: https://github.com/matrix-org/matrix-analytics-events
Then, once the PR has been merged, you can run the tool `import_analytic_plan.sh` to import the plan to Element, and then you can use the new Event. Note that this tool is run by Github action once a week. Then, once the PR has been merged, and the library is release, you can update the version of the library in the `build.gradle` file.
## Forks of Element ## Forks of Element

View File

@ -1,18 +0,0 @@
#!/usr/bin/env bash
echo "Deleted existing plan..."
rm vector/src/main/java/im/vector/app/features/analytics/plan/*.*
echo "Cloning analytics project..."
mkdir analytics_tmp
cd analytics_tmp
git clone https://github.com/matrix-org/matrix-analytics-events.git
echo "Copy plan..."
cp matrix-analytics-events/types/kotlin2/* ../vector/src/main/java/im/vector/app/features/analytics/plan/
echo "Cleanup."
cd ..
rm -rf analytics_tmp
echo "Done."

View File

@ -159,6 +159,9 @@ dependencies {
// Debug // Debug
api 'com.facebook.stetho:stetho:1.6.0' api 'com.facebook.stetho:stetho:1.6.0'
// Analytics
api 'com.github.matrix-org:matrix-analytics-events:0.15.0'
api libs.google.phonenumber api libs.google.phonenumber
// FlowBinding // FlowBinding

View File

@ -1,22 +0,0 @@
/*
* 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 im.vector.app.features.analytics.itf
interface VectorAnalyticsEvent {
fun getName(): String
fun getProperties(): Map<String, Any?>?
}

View File

@ -1,22 +0,0 @@
/*
* 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 im.vector.app.features.analytics.itf
interface VectorAnalyticsScreen {
fun getName(): String
fun getProperties(): Map<String, Any>?
}

View File

@ -1,56 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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() }
}
}

View File

@ -1,51 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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() }
}
}

View File

@ -1,51 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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() }
}
}

View File

@ -1,90 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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,
/**
* The type of the message.
*/
val messageType: MessageType,
/**
* Whether this message begins a new thread or not.
*/
val startsThread: Boolean? = null,
) : VectorAnalyticsEvent {
enum class MessageType {
/**
* A pin drop location message.
*/
LocationPin,
/**
* A user current location message.
*/
LocationUser,
/**
* A poll message.
*/
Poll,
/**
* A text message.
*/
Text,
/**
* A voice message.
*/
VoiceMessage,
}
override fun getName() = "Composer"
override fun getProperties(): Map<String, Any>? {
return mutableMapOf<String, Any>().apply {
put("inThread", inThread)
put("isEditing", isEditing)
put("isReply", isReply)
put("messageType", messageType.name)
startsThread?.let { put("startsThread", it) }
}.takeIf { it.isNotEmpty() }
}
}

View File

@ -1,41 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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() }
}
}

View File

@ -1,183 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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,
/**
* DEPRECATED: Which crypto module is the client currently using.
*/
val cryptoModule: CryptoModule? = null,
/**
* Which crypto backend is the client currently using.
*/
val cryptoSDK: CryptoSDK? = null,
val domain: Domain,
/**
* An heuristic based on event origin_server_ts and the current device
* creation time (origin_server_ts - device_ts). This would be used to
* get the source of the event scroll-back/live/initialSync.
*/
val eventLocalAgeMillis: Int? = null,
/**
* true if userDomain != senderDomain.
*/
val isFederated: Boolean? = null,
/**
* true if the current user is using matrix.org.
*/
val isMatrixDotOrg: Boolean? = null,
val name: Name,
/**
* UTDs can be permanent or temporary. If temporary, this field will
* contain the time it took to decrypt the message in milliseconds. If
* permanent should be -1.
*/
val timeToDecryptMillis: Int? = null,
/**
* true if the current user trusts their own identity (verified session)
* at time of decryption.
*/
val userTrustsOwnIdentity: Boolean? = null,
/**
* true if that unable to decrypt error was visible to the user.
*/
val wasVisibleToUser: Boolean? = null,
) : VectorAnalyticsEvent {
enum class Domain {
E2EE,
TO_DEVICE,
VOIP,
}
enum class Name {
/**
* E2EE domain error. Decryption failed for a message sent before the
* device logged in, and key backup is not enabled.
*/
HistoricalMessage,
/**
* E2EE domain error. The room key is known but is ratcheted (index >
* 0).
*/
OlmIndexError,
/**
* E2EE domain error. Generic unknown inbound group session error.
*/
OlmKeysNotSentError,
/**
* E2EE domain error. Any other decryption error (missing field, format
* errors...).
*/
OlmUnspecifiedError,
/**
* TO_DEVICE domain error. The to-device message failed to decrypt.
*/
ToDeviceFailedToDecrypt,
/**
* E2EE domain error. Decryption failed due to unknown error.
*/
UnknownError,
/**
* VOIP domain error. ICE negotiation failed.
*/
VoipIceFailed,
/**
* VOIP domain error. ICE negotiation timed out.
*/
VoipIceTimeout,
/**
* VOIP domain error. The call invite timed out.
*/
VoipInviteTimeout,
/**
* VOIP domain error. The user hung up the call.
*/
VoipUserHangup,
/**
* VOIP domain error. The user's media failed to start.
*/
VoipUserMediaFailed,
}
enum class CryptoSDK {
/**
* Legacy crypto backend specific to each platform.
*/
Legacy,
/**
* Cross-platform crypto backend written in Rust.
*/
Rust,
}
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) }
cryptoSDK?.let { put("cryptoSDK", it.name) }
put("domain", domain.name)
eventLocalAgeMillis?.let { put("eventLocalAgeMillis", it) }
isFederated?.let { put("isFederated", it) }
isMatrixDotOrg?.let { put("isMatrixDotOrg", it) }
put("name", name.name)
timeToDecryptMillis?.let { put("timeToDecryptMillis", it) }
userTrustsOwnIdentity?.let { put("userTrustsOwnIdentity", it) }
wasVisibleToUser?.let { put("wasVisibleToUser", it) }
}.takeIf { it.isNotEmpty() }
}
}

View File

@ -1,509 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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 switched the favourite toggle on Room Details screen.
*/
MobileRoomFavouriteToggle,
/**
* User tapped on Leave Room button on Room Details screen.
*/
MobileRoomLeave,
/**
* User adjusted their favourite rooms using the context menu on a room
* in the room list.
*/
MobileRoomListRoomContextMenuFavouriteToggle,
/**
* User adjusted their unread rooms using the context menu on a room in
* the room list.
*/
MobileRoomListRoomContextMenuUnreadToggle,
/**
* 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 marked a message as read using the context menu on a room tile
* in the room list in Element Web/Desktop.
*/
WebRoomListRoomTileContextMenuMarkRead,
/**
* User marked a room as unread using the context menu on a room tile in
* the room list in Element Web/Desktop.
*/
WebRoomListRoomTileContextMenuMarkUnread,
/**
* 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 clicked on the Threads Activity Centre button of Element
* Web/Desktop.
*/
WebThreadsActivityCentreButton,
/**
* User clicked on a room in the Threads Activity Centre of Element
* Web/Desktop.
*/
WebThreadsActivityCentreRoomItem,
/**
* 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() }
}
}

View File

@ -1,107 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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() }
}
}

View File

@ -1,353 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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 poll.
*/
CreatePollView,
/**
* 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 screen shown to edit a poll.
*/
EditPollView,
/**
* 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 shown to share location.
*/
LocationSend,
/**
* The screen shown to view a shared location.
*/
LocationView,
/**
* 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 screen containing tests to help user to fix issues around
* notifications.
*/
NotificationTroubleshoot,
/**
* 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() }
}
}

View File

@ -1,41 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.VectorAnalyticsEvent
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT
// https://github.com/matrix-org/matrix-analytics-events/
/**
* Triggered when the user runs the troubleshoot notification test suite.
*/
data class NotificationTroubleshoot(
/**
* Whether one or more tests are in error.
*/
val hasError: Boolean,
) : VectorAnalyticsEvent {
override fun getName() = "NotificationTroubleshoot"
override fun getProperties(): Map<String, Any>? {
return mutableMapOf<String, Any>().apply {
put("hasError", hasError)
}.takeIf { it.isNotEmpty() }
}
}

View File

@ -1,109 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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() }
}
}

View File

@ -1,53 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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() }
}
}

View File

@ -1,63 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.VectorAnalyticsEvent
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT
// https://github.com/matrix-org/matrix-analytics-events/
/**
* Triggered when a poll is created or edited.
*/
data class PollCreation(
/**
* Whether this poll has been created or edited.
*/
val action: Action,
/**
* Whether this poll is undisclosed.
*/
val isUndisclosed: Boolean,
/**
* Number of answers in the poll.
*/
val numberOfAnswers: Int,
) : VectorAnalyticsEvent {
enum class Action {
/**
* Newly created poll.
*/
Create,
/**
* Edit of an existing poll.
*/
Edit,
}
override fun getName() = "PollCreation"
override fun getProperties(): Map<String, Any>? {
return mutableMapOf<String, Any>().apply {
put("action", action.name)
put("isUndisclosed", isUndisclosed)
put("numberOfAnswers", numberOfAnswers)
}.takeIf { it.isNotEmpty() }
}
}

View File

@ -1,43 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.VectorAnalyticsEvent
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT
// https://github.com/matrix-org/matrix-analytics-events/
/**
* Triggered when a poll has been ended.
*/
data class PollEnd(
/**
* Do not use this. Remove this property when the kotlin type generator
* can properly generate types without properties other than the event
* name.
*/
val doNotUse: Boolean? = null,
) : VectorAnalyticsEvent {
override fun getName() = "PollEnd"
override fun getProperties(): Map<String, Any>? {
return mutableMapOf<String, Any>().apply {
doNotUse?.let { put("doNotUse", it) }
}.takeIf { it.isNotEmpty() }
}
}

View File

@ -1,43 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.VectorAnalyticsEvent
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT
// https://github.com/matrix-org/matrix-analytics-events/
/**
* Triggered when a poll vote has been cast.
*/
data class PollVote(
/**
* Do not use this. Remove this property when the kotlin type generator
* can properly generate types without properties other than the event
* name.
*/
val doNotUse: Boolean? = null,
) : VectorAnalyticsEvent {
override fun getName() = "PollVote"
override fun getProperties(): Map<String, Any>? {
return mutableMapOf<String, Any>().apply {
doNotUse?.let { put("doNotUse", it) }
}.takeIf { it.isNotEmpty() }
}
}

View File

@ -1,137 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.VectorAnalyticsEvent
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT
// https://github.com/matrix-org/matrix-analytics-events/
/**
* Triggered when a moderation action is performed within a room.
*/
data class RoomModeration(
/**
* The action that was performed.
*/
val action: Action,
/**
* When the action sets a particular power level, this is the suggested
* role for that the power level.
*/
val role: Role? = null,
) : VectorAnalyticsEvent {
enum class Action {
/**
* Banned a room member.
*/
BanMember,
/**
* Changed a room member's power level.
*/
ChangeMemberRole,
/**
* Changed the power level required to ban room members.
*/
ChangePermissionsBanMembers,
/**
* Changed the power level required to invite users to the room.
*/
ChangePermissionsInviteUsers,
/**
* Changed the power level required to kick room members.
*/
ChangePermissionsKickMembers,
/**
* Changed the power level required to redact messages in the room.
*/
ChangePermissionsRedactMessages,
/**
* Changed the power level required to set the room's avatar.
*/
ChangePermissionsRoomAvatar,
/**
* Changed the power level required to set the room's name.
*/
ChangePermissionsRoomName,
/**
* Changed the power level required to set the room's topic.
*/
ChangePermissionsRoomTopic,
/**
* Changed the power level required to send messages in the room.
*/
ChangePermissionsSendMessages,
/**
* Kicked a room member.
*/
KickMember,
/**
* Reset all of the room permissions back to their default values.
*/
ResetPermissions,
/**
* Unbanned a room member.
*/
UnbanMember,
}
enum class Role {
/**
* A power level of 100.
*/
Administrator,
/**
* A power level of 50.
*/
Moderator,
/**
* Any other power level.
*/
Other,
/**
* A power level of 0.
*/
User,
}
override fun getName() = "RoomModeration"
override fun getProperties(): Map<String, Any>? {
return mutableMapOf<String, Any>().apply {
put("action", action.name)
role?.let { put("role", it.name) }
}.takeIf { it.isNotEmpty() }
}
}

View File

@ -1,84 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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() }
}
}

View File

@ -1,46 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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() }
}
}

View File

@ -1,61 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
// GENERATED FILE, DO NOT EDIT. FOR MORE INFORMATION VISIT
// https://github.com/matrix-org/matrix-analytics-events/
/**
* Super Properties are properties associated with events that are sent with
* every capture call, be it a $pageview, an autocaptured button click, or
* anything else.
*/
data class SuperProperties(
/**
* Used by web to identify the platform (Web Platform/Electron Platform).
*/
val appPlatform: String? = null,
/**
* Which crypto backend is the client currently using.
*/
val cryptoSDK: CryptoSDK? = null,
/**
* Version of the crypto backend.
*/
val cryptoSDKVersion: String? = null,
) {
enum class CryptoSDK {
/**
* Legacy crypto backend specific to each platform.
*/
Legacy,
/**
* Cross-platform crypto backend written in Rust.
*/
Rust,
}
fun getProperties(): Map<String, Any>? {
return mutableMapOf<String, Any>().apply {
appPlatform?.let { put("appPlatform", it) }
cryptoSDK?.let { put("cryptoSDK", it.name) }
cryptoSDKVersion?.let { put("cryptoSDKVersion", it) }
}.takeIf { it.isNotEmpty() }
}
}

View File

@ -1,66 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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() }
}
}

View File

@ -1,98 +0,0 @@
/*
* 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 im.vector.app.features.analytics.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() }
}
}

View File

@ -1,312 +0,0 @@
/*
* 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 im.vector.app.features.analytics.plan
import im.vector.app.features.analytics.itf.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 interacting with the Threads Activity Centre in
* Element Web/Desktop.
*/
WebThreadsActivityCentre,
/**
* 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() }
}
}