mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 16:10:20 +00:00
Track when the user starts a room call and when they enable formatting options on the message composer
This commit is contained in:
committed by
Stefan Ceriu
parent
8c62c52f45
commit
c3571f4f4e
@@ -7383,7 +7383,7 @@
|
|||||||
repositoryURL = "https://github.com/matrix-org/matrix-analytics-events";
|
repositoryURL = "https://github.com/matrix-org/matrix-analytics-events";
|
||||||
requirement = {
|
requirement = {
|
||||||
kind = upToNextMinorVersion;
|
kind = upToNextMinorVersion;
|
||||||
minimumVersion = 0.21.0;
|
minimumVersion = 0.23.1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
C13F55E4518415CB4C278E73 /* XCRemoteSwiftPackageReference "DTCoreText" */ = {
|
C13F55E4518415CB4C278E73 /* XCRemoteSwiftPackageReference "DTCoreText" */ = {
|
||||||
|
|||||||
@@ -121,8 +121,8 @@
|
|||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "https://github.com/matrix-org/matrix-analytics-events",
|
"location" : "https://github.com/matrix-org/matrix-analytics-events",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "f10d044b9eaf35871bbb61cdfdb8f93a04e429e0",
|
"revision" : "de0cac487e5e7f607ee17045882204c91585461f",
|
||||||
"version" : "0.21.0"
|
"version" : "0.23.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -559,6 +559,8 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
.store(in: &cancellables)
|
.store(in: &cancellables)
|
||||||
|
|
||||||
navigationSplitCoordinator.setSheetCoordinator(callScreenCoordinator, animated: true)
|
navigationSplitCoordinator.setSheetCoordinator(callScreenCoordinator, animated: true)
|
||||||
|
|
||||||
|
analytics.track(screen: .RoomCall)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func presentCallScreen(roomID: String) async {
|
private func presentCallScreen(roomID: String) async {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ final class ComposerToolbarViewModel: ComposerToolbarViewModelType, ComposerTool
|
|||||||
private let wysiwygViewModel: WysiwygComposerViewModel
|
private let wysiwygViewModel: WysiwygComposerViewModel
|
||||||
private let completionSuggestionService: CompletionSuggestionServiceProtocol
|
private let completionSuggestionService: CompletionSuggestionServiceProtocol
|
||||||
private let appSettings: AppSettings
|
private let appSettings: AppSettings
|
||||||
|
private let analyticsService: AnalyticsService
|
||||||
|
|
||||||
private let mentionBuilder: MentionBuilderProtocol
|
private let mentionBuilder: MentionBuilderProtocol
|
||||||
private let attributedStringBuilder: AttributedStringBuilderProtocol
|
private let attributedStringBuilder: AttributedStringBuilderProtocol
|
||||||
@@ -47,10 +48,16 @@ final class ComposerToolbarViewModel: ComposerToolbarViewModelType, ComposerTool
|
|||||||
|
|
||||||
private var currentLinkData: WysiwygLinkData?
|
private var currentLinkData: WysiwygLinkData?
|
||||||
|
|
||||||
init(wysiwygViewModel: WysiwygComposerViewModel, completionSuggestionService: CompletionSuggestionServiceProtocol, mediaProvider: MediaProviderProtocol, appSettings: AppSettings, mentionDisplayHelper: MentionDisplayHelper) {
|
init(wysiwygViewModel: WysiwygComposerViewModel,
|
||||||
|
completionSuggestionService: CompletionSuggestionServiceProtocol,
|
||||||
|
mediaProvider: MediaProviderProtocol,
|
||||||
|
appSettings: AppSettings,
|
||||||
|
mentionDisplayHelper: MentionDisplayHelper,
|
||||||
|
analyticsService: AnalyticsService) {
|
||||||
self.wysiwygViewModel = wysiwygViewModel
|
self.wysiwygViewModel = wysiwygViewModel
|
||||||
self.completionSuggestionService = completionSuggestionService
|
self.completionSuggestionService = completionSuggestionService
|
||||||
self.appSettings = appSettings
|
self.appSettings = appSettings
|
||||||
|
self.analyticsService = analyticsService
|
||||||
|
|
||||||
mentionBuilder = MentionBuilder()
|
mentionBuilder = MentionBuilder()
|
||||||
attributedStringBuilder = AttributedStringBuilder(cacheKey: "Composer", mentionBuilder: mentionBuilder)
|
attributedStringBuilder = AttributedStringBuilder(cacheKey: "Composer", mentionBuilder: mentionBuilder)
|
||||||
@@ -157,6 +164,8 @@ final class ComposerToolbarViewModel: ComposerToolbarViewModelType, ComposerTool
|
|||||||
case .enableTextFormatting:
|
case .enableTextFormatting:
|
||||||
state.bindings.composerFormattingEnabled = true
|
state.bindings.composerFormattingEnabled = true
|
||||||
state.bindings.composerFocused = true
|
state.bindings.composerFocused = true
|
||||||
|
|
||||||
|
analyticsService.trackInteraction(name: .MobileRoomComposerFormattingEnabled)
|
||||||
case .composerAction(let action):
|
case .composerAction(let action):
|
||||||
if action == .link {
|
if action == .link {
|
||||||
createLinkAlert()
|
createLinkAlert()
|
||||||
|
|||||||
@@ -292,7 +292,8 @@ struct ComposerToolbar_Previews: PreviewProvider, TestablePreview {
|
|||||||
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init(suggestions: suggestions)),
|
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init(suggestions: suggestions)),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
appSettings: ServiceLocator.shared.settings,
|
appSettings: ServiceLocator.shared.settings,
|
||||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock)
|
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||||
|
analyticsService: ServiceLocator.shared.analytics)
|
||||||
static let suggestions: [SuggestionItem] = [.user(item: MentionSuggestionItem(id: "@user_mention_1:matrix.org", displayName: "User 1", avatarURL: nil, range: .init())),
|
static let suggestions: [SuggestionItem] = [.user(item: MentionSuggestionItem(id: "@user_mention_1:matrix.org", displayName: "User 1", avatarURL: nil, range: .init())),
|
||||||
.user(item: MentionSuggestionItem(id: "@user_mention_2:matrix.org", displayName: "User 2", avatarURL: URL.documentsDirectory, range: .init()))]
|
.user(item: MentionSuggestionItem(id: "@user_mention_2:matrix.org", displayName: "User 2", avatarURL: URL.documentsDirectory, range: .init()))]
|
||||||
|
|
||||||
@@ -328,7 +329,8 @@ extension ComposerToolbar {
|
|||||||
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
|
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
appSettings: ServiceLocator.shared.settings,
|
appSettings: ServiceLocator.shared.settings,
|
||||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock)
|
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||||
|
analyticsService: ServiceLocator.shared.analytics)
|
||||||
model.state.composerEmpty = focused
|
model.state.composerEmpty = focused
|
||||||
return model
|
return model
|
||||||
}
|
}
|
||||||
@@ -344,7 +346,8 @@ extension ComposerToolbar {
|
|||||||
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
|
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
appSettings: ServiceLocator.shared.settings,
|
appSettings: ServiceLocator.shared.settings,
|
||||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock)
|
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||||
|
analyticsService: ServiceLocator.shared.analytics)
|
||||||
model.state.composerEmpty = focused
|
model.state.composerEmpty = focused
|
||||||
return model
|
return model
|
||||||
}
|
}
|
||||||
@@ -360,7 +363,8 @@ extension ComposerToolbar {
|
|||||||
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
|
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
appSettings: ServiceLocator.shared.settings,
|
appSettings: ServiceLocator.shared.settings,
|
||||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock)
|
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||||
|
analyticsService: ServiceLocator.shared.analytics)
|
||||||
model.state.composerMode = .recordVoiceMessage(state: AudioRecorderState())
|
model.state.composerMode = .recordVoiceMessage(state: AudioRecorderState())
|
||||||
return model
|
return model
|
||||||
}
|
}
|
||||||
@@ -377,7 +381,8 @@ extension ComposerToolbar {
|
|||||||
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
|
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
appSettings: ServiceLocator.shared.settings,
|
appSettings: ServiceLocator.shared.settings,
|
||||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock)
|
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||||
|
analyticsService: ServiceLocator.shared.analytics)
|
||||||
model.state.composerMode = .previewVoiceMessage(state: AudioPlayerState(id: .recorderPreview, duration: 10.0), waveform: .data(waveformData), isUploading: uploading)
|
model.state.composerMode = .previewVoiceMessage(state: AudioPlayerState(id: .recorderPreview, duration: 10.0), waveform: .data(waveformData), isUploading: uploading)
|
||||||
return model
|
return model
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ struct RoomAttachmentPicker_Previews: PreviewProvider, TestablePreview {
|
|||||||
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
|
completionSuggestionService: CompletionSuggestionServiceMock(configuration: .init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
appSettings: ServiceLocator.shared.settings,
|
appSettings: ServiceLocator.shared.settings,
|
||||||
mentionDisplayHelper: ComposerMentionDisplayHelper.mock)
|
mentionDisplayHelper: ComposerMentionDisplayHelper.mock,
|
||||||
|
analyticsService: ServiceLocator.shared.analytics)
|
||||||
|
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
RoomAttachmentPicker(context: viewModel.context)
|
RoomAttachmentPicker(context: viewModel.context)
|
||||||
|
|||||||
@@ -79,7 +79,8 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
|
|||||||
completionSuggestionService: parameters.completionSuggestionService,
|
completionSuggestionService: parameters.completionSuggestionService,
|
||||||
mediaProvider: parameters.mediaProvider,
|
mediaProvider: parameters.mediaProvider,
|
||||||
appSettings: parameters.appSettings,
|
appSettings: parameters.appSettings,
|
||||||
mentionDisplayHelper: ComposerMentionDisplayHelper(roomContext: viewModel.context))
|
mentionDisplayHelper: ComposerMentionDisplayHelper(roomContext: viewModel.context),
|
||||||
|
analyticsService: ServiceLocator.shared.analytics)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Public
|
// MARK: - Public
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
|
|||||||
displayReadReceipts(for: itemID)
|
displayReadReceipts(for: itemID)
|
||||||
case .displayCall:
|
case .displayCall:
|
||||||
actionsSubject.send(.displayCallScreen)
|
actionsSubject.send(.displayCallScreen)
|
||||||
|
analyticsService.trackInteraction(name: .MobileRoomCallButton)
|
||||||
case .handlePasteOrDrop(let provider):
|
case .handlePasteOrDrop(let provider):
|
||||||
roomScreenInteractionHandler.handlePasteOrDrop(provider)
|
roomScreenInteractionHandler.handlePasteOrDrop(provider)
|
||||||
case .handlePollAction(let pollAction):
|
case .handlePollAction(let pollAction):
|
||||||
|
|||||||
+1
-1
@@ -57,7 +57,7 @@ packages:
|
|||||||
# path: ../compound-ios
|
# path: ../compound-ios
|
||||||
AnalyticsEvents:
|
AnalyticsEvents:
|
||||||
url: https://github.com/matrix-org/matrix-analytics-events
|
url: https://github.com/matrix-org/matrix-analytics-events
|
||||||
minorVersion: 0.21.0
|
minorVersion: 0.23.1
|
||||||
# path: ../matrix-analytics-events
|
# path: ../matrix-analytics-events
|
||||||
Emojibase:
|
Emojibase:
|
||||||
url: https://github.com/matrix-org/emojibase-bindings
|
url: https://github.com/matrix-org/emojibase-bindings
|
||||||
|
|||||||
Reference in New Issue
Block a user