mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
Instrument missing screen metrics (#5764)
* Instrument missing screen metrics - Done
This commit is contained in:
parent
962f2260bb
commit
9ebd8a4802
56 changed files with 269 additions and 246 deletions
|
@ -32,6 +32,7 @@ import AnalyticsEvents
|
|||
case searchPeople
|
||||
case searchFiles
|
||||
case room
|
||||
case roomPreview
|
||||
case roomDetails
|
||||
case roomMembers
|
||||
case user
|
||||
|
@ -47,11 +48,16 @@ import AnalyticsEvents
|
|||
case settingsSecurity
|
||||
case settingsDefaultNotifications
|
||||
case settingsMentionsAndKeywords
|
||||
case settingsNotifications
|
||||
case deactivateAccount
|
||||
case group
|
||||
case myGroups
|
||||
case inviteFriends
|
||||
case threadList
|
||||
case spaceMenu
|
||||
case spaceMembers
|
||||
case spaceExploreRooms
|
||||
case dialpad
|
||||
|
||||
/// The screen name reported to the AnalyticsEvent.
|
||||
var screenName: AnalyticsEvent.MobileScreen.ScreenName {
|
||||
|
@ -90,6 +96,8 @@ import AnalyticsEvents
|
|||
return .RoomMembers
|
||||
case .user:
|
||||
return .User
|
||||
case .roomPreview:
|
||||
return .RoomPreview
|
||||
case .roomSearch:
|
||||
return .RoomSearch
|
||||
case .roomUploads:
|
||||
|
@ -114,6 +122,8 @@ import AnalyticsEvents
|
|||
return .SettingsDefaultNotifications
|
||||
case .settingsMentionsAndKeywords:
|
||||
return .SettingsMentionsAndKeywords
|
||||
case .settingsNotifications:
|
||||
return .SettingsNotifications
|
||||
case .deactivateAccount:
|
||||
return .DeactivateAccount
|
||||
case .group:
|
||||
|
@ -124,6 +134,14 @@ import AnalyticsEvents
|
|||
return .InviteFriends
|
||||
case .threadList:
|
||||
return .ThreadList
|
||||
case .spaceMenu:
|
||||
return .SpaceMenu
|
||||
case .spaceMembers:
|
||||
return .SpaceMembers
|
||||
case .spaceExploreRooms:
|
||||
return .SpaceExploreRooms
|
||||
case .dialpad:
|
||||
return .Dialpad
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
49
Riot/Modules/Analytics/AnalyticsScreenTracker.swift
Normal file
49
Riot/Modules/Analytics/AnalyticsScreenTracker.swift
Normal file
|
@ -0,0 +1,49 @@
|
|||
//
|
||||
// Copyright 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.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
/// An object to report the screen's display to the `Analytics` object.
|
||||
@objcMembers class AnalyticsScreenTracker: NSObject {
|
||||
|
||||
// MARK: - Properties
|
||||
|
||||
/// The screen being tracked.
|
||||
private let screen: AnalyticsScreen
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
/// Create a new screen tracker for the specified screen.
|
||||
/// - Parameter screen: The screen that should be reported.
|
||||
init(screen: AnalyticsScreen) {
|
||||
self.screen = screen
|
||||
super.init()
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
/// Send screen event without duration
|
||||
func trackScreen() {
|
||||
Analytics.shared.trackScreen(screen)
|
||||
}
|
||||
|
||||
// MARK: static method
|
||||
|
||||
static func trackScreen(_ screen: AnalyticsScreen) {
|
||||
Analytics.shared.trackScreen(screen)
|
||||
}
|
||||
|
||||
}
|
|
@ -158,6 +158,12 @@ class DialpadViewController: UIViewController {
|
|||
}
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
|
||||
AnalyticsScreenTracker.trackScreen(.dialpad)
|
||||
}
|
||||
|
||||
override var preferredStatusBarStyle: UIStatusBarStyle {
|
||||
return self.theme.statusBarStyle
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#import "MatrixKit.h"
|
||||
|
||||
@class RootTabEmptyView;
|
||||
@class AnalyticsScreenTimer;
|
||||
@class AnalyticsScreenTracker;
|
||||
@class UserIndicatorPresenterWrapper;
|
||||
|
||||
/**
|
||||
|
@ -95,7 +95,7 @@ FOUNDATION_EXPORT NSString *const RecentsViewControllerDataReadyNotification;
|
|||
/**
|
||||
The screen timer used for analytics if they've been enabled. The default value is nil.
|
||||
*/
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
/**
|
||||
Presenter for displaying app-wide user indicators. If not set, the view controller will use legacy activity indicators
|
||||
|
|
|
@ -264,6 +264,8 @@ NSString *const RecentsViewControllerDataReadyNotification = @"RecentsViewContro
|
|||
- (void)viewWillAppear:(BOOL)animated
|
||||
{
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
|
||||
// Reset back user interactions
|
||||
self.userInteractionEnabled = YES;
|
||||
|
@ -334,14 +336,6 @@ NSString *const RecentsViewControllerDataReadyNotification = @"RecentsViewContro
|
|||
// the selected room (if any) is highlighted.
|
||||
[self refreshCurrentSelectedCell:YES];
|
||||
}
|
||||
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
- (void)viewDidLayoutSubviews
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
__weak id kThemeServiceDidChangeThemeNotificationObserver;
|
||||
}
|
||||
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -77,7 +77,7 @@
|
|||
// Set itself as delegate by default.
|
||||
self.delegate = self;
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenMyGroups];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenMyGroups];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
|
@ -207,6 +207,8 @@
|
|||
{
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
|
||||
// Deselect the current selected row, it will be restored on viewDidAppear (if any)
|
||||
NSIndexPath *indexPath = [self.groupsTableView indexPathForSelectedRow];
|
||||
if (indexPath)
|
||||
|
@ -257,14 +259,6 @@
|
|||
// the selected group (if any) is highlighted.
|
||||
[self refreshCurrentSelectedCell:YES];
|
||||
}
|
||||
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
#pragma mark - Override MXKGroupListViewController
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
|
||||
@property (nonatomic, readonly) DTHTMLAttributedStringBuilderWillFlushCallback longDescriptionSanitizationCallback;
|
||||
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -98,7 +98,7 @@
|
|||
[element sanitizeWith:allowedHTMLTags bodyFont:self->_groupLongDescription.font imageHandler:[self groupLongDescriptionImageHandler]];
|
||||
};
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenGroup];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenGroup];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
|
@ -209,6 +209,8 @@
|
|||
{
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
|
||||
// Release the potential pushed view controller
|
||||
[self releasePushedViewController];
|
||||
|
||||
|
@ -260,18 +262,6 @@
|
|||
[self cancelRegistrationOnGroupChangeNotifications];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
- (void)viewDidLayoutSubviews
|
||||
{
|
||||
[super viewDidLayoutSubviews];
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#import "ContactTableViewCell.h"
|
||||
|
||||
@class ContactsTableViewController;
|
||||
@class AnalyticsScreenTimer;
|
||||
@class AnalyticsScreenTracker;
|
||||
|
||||
/**
|
||||
`ContactsTableViewController` delegate.
|
||||
|
@ -123,7 +123,7 @@
|
|||
/**
|
||||
The screen timer used for analytics if they've been enabled. The default value is nil.
|
||||
*/
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -179,12 +179,7 @@
|
|||
|
||||
// Show the contacts access footer if necessary.
|
||||
[self updateFooterViewVisibility];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
[self.screenTimer start];
|
||||
[self.screenTracker trackScreen];
|
||||
}
|
||||
|
||||
- (void)viewDidLayoutSubviews
|
||||
|
@ -211,12 +206,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
/**
|
||||
|
|
|
@ -55,7 +55,7 @@ final class EnterNewRoomDetailsViewController: UIViewController {
|
|||
item.isEnabled = false
|
||||
return item
|
||||
}()
|
||||
private var screenTimer = AnalyticsScreenTimer(screen: .createRoom)
|
||||
private var screenTracker = AnalyticsScreenTracker(screen: .createRoom)
|
||||
|
||||
private enum RowType {
|
||||
case `default`
|
||||
|
@ -216,11 +216,7 @@ final class EnterNewRoomDetailsViewController: UIViewController {
|
|||
super.viewWillAppear(animated)
|
||||
|
||||
self.keyboardAvoider?.startAvoiding()
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
screenTimer.start()
|
||||
screenTracker.trackScreen()
|
||||
}
|
||||
|
||||
override func viewDidDisappear(_ animated: Bool) {
|
||||
|
@ -228,7 +224,6 @@ final class EnterNewRoomDetailsViewController: UIViewController {
|
|||
|
||||
self.keyboardAvoider?.stopAvoiding()
|
||||
|
||||
screenTimer.stop()
|
||||
}
|
||||
|
||||
override var preferredStatusBarStyle: UIStatusBarStyle {
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
|
||||
self.enableDragging = YES;
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenFavourites];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenFavourites];
|
||||
self.tableViewPaginationThrottler = [[MXThrottler alloc] initWithMinimumDelay:0.1];
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
#import "MatrixKit.h"
|
||||
|
||||
@class AnalyticsScreenTimer;
|
||||
@class AnalyticsScreenTracker;
|
||||
|
||||
/**
|
||||
`HomeFilesSearchViewController` displays the files search in user's rooms under a `HomeViewController` segment.
|
||||
|
@ -32,6 +32,6 @@
|
|||
/**
|
||||
The screen timer used for analytics if they've been enabled. The default value is nil.
|
||||
*/
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
|
|
@ -111,6 +111,8 @@
|
|||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshSearchResult:) name:kMXSessionDidLeaveRoomNotification object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshSearchResult:) name:kMXSessionNewRoomNotification object:nil];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
|
@ -121,18 +123,6 @@
|
|||
[[NSNotificationCenter defaultCenter] removeObserver:self name:kMXSessionNewRoomNotification object:nil];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
- (void)refreshSearchResult:(NSNotification *)notif
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
#import "MatrixKit.h"
|
||||
|
||||
@class AnalyticsScreenTimer;
|
||||
@class AnalyticsScreenTracker;
|
||||
|
||||
/**
|
||||
`HomeMessagesSearchViewController` displays messages search in user's rooms under a `HomeViewController` segment.
|
||||
|
@ -32,6 +32,6 @@
|
|||
/**
|
||||
The screen timer used for analytics if they've been enabled. The default value is nil.
|
||||
*/
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
|
|
@ -118,6 +118,8 @@
|
|||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshSearchResult:) name:kMXSessionDidLeaveRoomNotification object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshSearchResult:) name:kMXSessionNewRoomNotification object:nil];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
|
@ -128,18 +130,6 @@
|
|||
[[NSNotificationCenter defaultCenter] removeObserver:self name:kMXSessionNewRoomNotification object:nil];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
- (void)refreshSearchResult:(NSNotification *)notif
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
id kThemeServiceDidChangeThemeNotificationObserver;
|
||||
}
|
||||
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -49,7 +49,7 @@
|
|||
self.enableBarTintColorStatusChange = NO;
|
||||
self.rageShakeManager = [RageShakeManager sharedManager];
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenRoomDirectory];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenRoomDirectory];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
|
@ -119,6 +119,7 @@
|
|||
}];
|
||||
|
||||
[self.tableView reloadData];
|
||||
[self.screenTracker trackScreen];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
|
@ -136,8 +137,6 @@
|
|||
// the selected room (if any) is highlighted.
|
||||
[self refreshCurrentSelectedCell:YES];
|
||||
}
|
||||
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
|
@ -151,12 +150,6 @@
|
|||
[super viewWillDisappear:animated];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
- (void)displayWitDataSource:(PublicRoomsDirectoryDataSource *)dataSource2
|
||||
{
|
||||
// Let the data source provide cells
|
||||
|
|
|
@ -79,13 +79,13 @@
|
|||
|
||||
[titles addObject:[VectorL10n searchRooms]];
|
||||
recentsViewController = [RecentsViewController recentListViewController];
|
||||
recentsViewController.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenSearchRooms];
|
||||
recentsViewController.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenSearchRooms];
|
||||
recentsViewController.enableSearchBar = NO;
|
||||
[viewControllers addObject:recentsViewController];
|
||||
|
||||
[titles addObject:[VectorL10n searchMessages]];
|
||||
messagesSearchViewController = [HomeMessagesSearchViewController searchViewController];
|
||||
messagesSearchViewController.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenSearchMessages];
|
||||
messagesSearchViewController.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenSearchMessages];
|
||||
[viewControllers addObject:messagesSearchViewController];
|
||||
|
||||
// Add search People tab
|
||||
|
@ -93,13 +93,13 @@
|
|||
peopleSearchViewController = [ContactsTableViewController contactsTableViewController];
|
||||
peopleSearchViewController.contactsTableViewControllerDelegate = self;
|
||||
peopleSearchViewController.disableFindYourContactsFooter = YES;
|
||||
peopleSearchViewController.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenSearchPeople];
|
||||
peopleSearchViewController.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenSearchPeople];
|
||||
[viewControllers addObject:peopleSearchViewController];
|
||||
|
||||
// add Files tab
|
||||
[titles addObject:[VectorL10n searchFiles]];
|
||||
filesSearchViewController = [HomeFilesSearchViewController searchViewController];
|
||||
filesSearchViewController.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenSearchFiles];
|
||||
filesSearchViewController.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenSearchFiles];
|
||||
[viewControllers addObject:filesSearchViewController];
|
||||
|
||||
[self initWithTitles:titles viewControllers:viewControllers defaultSelected:0];
|
||||
|
|
|
@ -70,7 +70,7 @@
|
|||
selectedRoomId = nil;
|
||||
selectedCollectionViewContentOffset = -1;
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenHome];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenHome];
|
||||
self.collectionViewPaginationThrottler = [[MXThrottler alloc] initWithMinimumDelay:0.1];
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ class HomeViewControllerWithBannerWrapperViewController: UIViewController, MXKVi
|
|||
stackView.addArrangedSubview(homeViewController.view)
|
||||
homeViewController.didMove(toParent: self)
|
||||
}
|
||||
|
||||
|
||||
// MARK: - BannerPresentationProtocol
|
||||
|
||||
func presentBannerView(_ bannerView: UIView, animated: Bool) {
|
||||
|
|
|
@ -90,6 +90,10 @@
|
|||
*/
|
||||
@property (nonatomic) MXIdentityService *identityService;
|
||||
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@property (nonatomic) BOOL isViewVisible;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MXKAuthenticationViewController
|
||||
|
@ -187,6 +191,9 @@
|
|||
[super viewWillAppear:animated];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onTextFieldChange:) name:UITextFieldTextDidChangeNotification object:nil];
|
||||
|
||||
self.isViewVisible = YES;
|
||||
[self.screenTracker trackScreen];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
|
@ -206,6 +213,13 @@
|
|||
[[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:nil];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
|
||||
self.isViewVisible = NO;
|
||||
}
|
||||
|
||||
#pragma mark - Override MXKViewController
|
||||
|
||||
- (void)onKeyboardShowAnimationComplete
|
||||
|
@ -312,6 +326,8 @@
|
|||
|
||||
// Update supported authentication flow and associated information (defined in authentication session)
|
||||
[self refreshAuthenticationSession];
|
||||
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenLogin];
|
||||
}
|
||||
else if (authType == MXKAuthenticationTypeRegister)
|
||||
{
|
||||
|
@ -324,6 +340,8 @@
|
|||
|
||||
// Update supported authentication flow and associated information (defined in authentication session)
|
||||
[self refreshAuthenticationSession];
|
||||
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenRegister];
|
||||
}
|
||||
else if (authType == MXKAuthenticationTypeForgotPassword)
|
||||
{
|
||||
|
@ -344,8 +362,15 @@
|
|||
|
||||
[_authSwitchButton setTitle:[VectorL10n back] forState:UIControlStateNormal];
|
||||
[_authSwitchButton setTitle:[VectorL10n back] forState:UIControlStateHighlighted];
|
||||
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenForgotPassword];
|
||||
}
|
||||
|
||||
if (self.isViewVisible)
|
||||
{
|
||||
[self.screenTracker trackScreen];
|
||||
}
|
||||
|
||||
[self checkIdentityServer];
|
||||
}
|
||||
|
||||
|
|
|
@ -74,6 +74,6 @@ final class InviteFriendsPresenter: NSObject {
|
|||
|
||||
self.presentingViewController?.present(viewController, animated: animated, completion: nil)
|
||||
|
||||
Analytics.shared.trackScreen(.inviteFriends, duration: nil)
|
||||
AnalyticsScreenTracker.trackScreen(.inviteFriends)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
|
||||
directRoomsSectionNumber = 0;
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenPeople];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenPeople];
|
||||
self.tableViewPaginationThrottler = [[MXThrottler alloc] initWithMinimumDelay:0.1];
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ limitations under the License.
|
|||
|
||||
#import "MatrixKit.h"
|
||||
|
||||
@class AnalyticsScreenTimer;
|
||||
@class AnalyticsScreenTracker;
|
||||
|
||||
/**
|
||||
This view controller displays the attachments of a room. Only one matrix session is handled by this view controller.
|
||||
|
@ -28,6 +28,6 @@ limitations under the License.
|
|||
/**
|
||||
The screen timer used for analytics if they've been enabled. The default value is nil.
|
||||
*/
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
|
|
@ -102,6 +102,13 @@
|
|||
[self userInterfaceThemeDidChange];
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated
|
||||
{
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
|
@ -110,14 +117,6 @@
|
|||
[UIView setAnimationsEnabled:NO];
|
||||
[self roomInputToolbarView:self.inputToolbarView heightDidChanged:0 completion:nil];
|
||||
[UIView setAnimationsEnabled:YES];
|
||||
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
- (void)userInterfaceThemeDidChange
|
||||
|
|
|
@ -104,7 +104,7 @@
|
|||
|
||||
@property(nonatomic, strong) UserVerificationCoordinatorBridgePresenter *userVerificationCoordinatorBridgePresenter;
|
||||
|
||||
@property(nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property(nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -142,7 +142,7 @@
|
|||
// Keep visible the status bar by default.
|
||||
isStatusBarHidden = NO;
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenUser];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenUser];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
|
@ -242,6 +242,8 @@
|
|||
- (void)viewWillAppear:(BOOL)animated
|
||||
{
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
|
||||
[self userInterfaceThemeDidChange];
|
||||
|
||||
|
@ -265,18 +267,6 @@
|
|||
self.bottomImageView.hidden = YES;
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
|
||||
{
|
||||
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
/**
|
||||
The screen timer used for analytics if they've been enabled. The default value is nil.
|
||||
*/
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
/**
|
||||
Returns the `UINib` object initialized for a `RoomParticipantsViewController`.
|
||||
|
|
|
@ -251,6 +251,8 @@
|
|||
|
||||
// Refresh display
|
||||
[self refreshTableView];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
|
@ -268,8 +270,6 @@
|
|||
[contactsPickerViewController destroy];
|
||||
contactsPickerViewController = nil;
|
||||
}
|
||||
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
|
@ -286,12 +286,6 @@
|
|||
[self searchBarCancelButtonClicked:_searchBarView];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
- (void)withdrawViewControllerAnimated:(BOOL)animated completion:(void (^)(void))completion
|
||||
{
|
||||
// Check whether the current view controller is displayed inside a segmented view controller in order to withdraw the right item
|
||||
|
|
|
@ -39,11 +39,11 @@ final class RoomInfoCoordinator: NSObject, RoomInfoCoordinatorType {
|
|||
participants.enableMention = true
|
||||
participants.mxRoom = self.room
|
||||
participants.delegate = self
|
||||
participants.screenTimer = AnalyticsScreenTimer(screen: .roomMembers)
|
||||
participants.screenTracker = AnalyticsScreenTracker(screen: .roomMembers)
|
||||
|
||||
let files = RoomFilesViewController()
|
||||
files.finalizeInit()
|
||||
files.screenTimer = AnalyticsScreenTimer(screen: .roomUploads)
|
||||
files.screenTracker = AnalyticsScreenTracker(screen: .roomUploads)
|
||||
MXKRoomDataSource.load(withRoomId: self.room.roomId, andMatrixSession: self.session) { (dataSource) in
|
||||
guard let dataSource = dataSource as? MXKRoomDataSource else { return }
|
||||
dataSource.filterMessagesWithURL = true
|
||||
|
@ -54,7 +54,7 @@ final class RoomInfoCoordinator: NSObject, RoomInfoCoordinatorType {
|
|||
|
||||
let settings = RoomSettingsViewController()
|
||||
settings.finalizeInit()
|
||||
settings.screenTimer = AnalyticsScreenTimer(screen: .roomSettings)
|
||||
settings.screenTracker = AnalyticsScreenTracker(screen: .roomSettings)
|
||||
settings.initWith(self.session, andRoomId: self.room.roomId)
|
||||
|
||||
if self.room.isDirect {
|
||||
|
|
|
@ -43,7 +43,7 @@ final class RoomInfoListViewController: UIViewController {
|
|||
private var indicatorPresenter: UserIndicatorTypePresenterProtocol!
|
||||
private var loadingIndicator: UserIndicator?
|
||||
private var isRoomDirect: Bool = false
|
||||
private var screenTimer = AnalyticsScreenTimer(screen: .roomDetails)
|
||||
private var screenTracker = AnalyticsScreenTracker(screen: .roomDetails)
|
||||
|
||||
private lazy var closeButton: CloseButton = {
|
||||
let button = CloseButton()
|
||||
|
@ -134,9 +134,9 @@ final class RoomInfoListViewController: UIViewController {
|
|||
return self.theme.statusBarStyle
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
screenTimer.start()
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
screenTracker.trackScreen()
|
||||
}
|
||||
|
||||
override func viewDidLayoutSubviews() {
|
||||
|
@ -147,7 +147,6 @@ final class RoomInfoListViewController: UIViewController {
|
|||
|
||||
override func viewDidDisappear(_ animated: Bool) {
|
||||
super.viewDidDisappear(animated)
|
||||
screenTimer.stop()
|
||||
stopLoading()
|
||||
}
|
||||
|
||||
|
|
|
@ -216,7 +216,6 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
|||
@property (nonatomic, weak) IBOutlet UIView *userSuggestionContainerView;
|
||||
|
||||
@property (nonatomic, readwrite) RoomDisplayConfiguration *displayConfiguration;
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
|
||||
// When layout of the screen changes (e.g. height), we no longer know whether
|
||||
// to autoscroll to the bottom again or not. Instead we need to capture the
|
||||
|
@ -321,8 +320,6 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
|||
|
||||
_voiceMessageController = [[VoiceMessageController alloc] initWithThemeService:ThemeService.shared mediaServiceProvider:VoiceMessageMediaServiceProvider.sharedProvider];
|
||||
self.voiceMessageController.delegate = self;
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenRoom];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
|
@ -577,6 +574,17 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
|||
{
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
// Screen tracking
|
||||
MXRoomSummary *summary = [self.mainSession roomWithRoomId:self.roomDataSource.roomId].summary;
|
||||
if (!summary || !summary.isJoined)
|
||||
{
|
||||
[AnalyticsScreenTracker trackScreen: AnalyticsScreenRoomPreview];
|
||||
}
|
||||
else
|
||||
{
|
||||
[AnalyticsScreenTracker trackScreen: AnalyticsScreenRoom];
|
||||
}
|
||||
|
||||
isAppeared = YES;
|
||||
[self checkReadMarkerVisibility];
|
||||
|
||||
|
@ -621,9 +629,6 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
|||
hasJitsiCall = NO;
|
||||
[self reloadBubblesTable:YES];
|
||||
}
|
||||
|
||||
// Screen tracking
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
|
@ -659,8 +664,6 @@ const NSTimeInterval kResizeComposerAnimationDuration = .05;
|
|||
hasJitsiCall = YES;
|
||||
[self reloadBubblesTable:YES];
|
||||
}
|
||||
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
- (void)viewWillLayoutSubviews {
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
MXKSearchDataSource *filesSearchDataSource;
|
||||
}
|
||||
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -52,7 +52,7 @@
|
|||
|
||||
// The navigation bar tint color and the rageShake Manager are handled by super (see SegmentedViewController).
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenRoomSearch];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenRoomSearch];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
|
@ -97,6 +97,8 @@
|
|||
{
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
|
||||
// Let's child display the loading not this view controller
|
||||
if (self.activityIndicator)
|
||||
{
|
||||
|
@ -118,8 +120,6 @@
|
|||
// Refresh the search results.
|
||||
// Note: We wait for 'viewDidAppear' call to consider the actual view size during this update.
|
||||
[self updateSearch];
|
||||
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
|
@ -134,12 +134,6 @@
|
|||
[super viewWillDisappear:animated];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
- (UIStatusBarStyle)preferredStatusBarStyle
|
||||
{
|
||||
return ThemeService.shared.theme.statusBarStyle;
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#import "MediaPickerViewController.h"
|
||||
#import "TableViewCellWithCheckBoxes.h"
|
||||
|
||||
@class AnalyticsScreenTimer;
|
||||
@class AnalyticsScreenTracker;
|
||||
|
||||
/**
|
||||
List the settings fields. Used to preselect/edit a field
|
||||
|
@ -57,7 +57,7 @@ typedef enum : NSUInteger {
|
|||
/**
|
||||
The screen timer used for analytics if they've been enabled. The default value is nil.
|
||||
*/
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -309,6 +309,8 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
|
|||
{
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didUpdateRules:) name:kMXNotificationCenterDidUpdateRules object:nil];
|
||||
|
||||
// Observe appDelegateDidTapStatusBarNotificationObserver.
|
||||
|
@ -328,8 +330,6 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
|
|||
{
|
||||
self.selectedRoomSettingsField = _selectedRoomSettingsField;
|
||||
}
|
||||
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
|
@ -347,12 +347,6 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti
|
|||
}
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
// Those methods are called when the viewcontroller is added or removed from a container view controller.
|
||||
- (void)willMoveToParentViewController:(nullable UIViewController *)parent
|
||||
{
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
id kThemeServiceDidChangeThemeNotificationObserver;
|
||||
}
|
||||
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -53,7 +53,7 @@
|
|||
self.enableBarTintColorStatusChange = NO;
|
||||
self.rageShakeManager = [RageShakeManager sharedManager];
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenSwitchDirectory];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenSwitchDirectory];
|
||||
}
|
||||
|
||||
- (void)destroy
|
||||
|
@ -158,12 +158,7 @@
|
|||
}];
|
||||
|
||||
[dataSource loadData];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
[self.screenTimer start];
|
||||
[self.screenTracker trackScreen];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
|
@ -177,12 +172,6 @@
|
|||
[super viewWillDisappear:animated];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
- (void)displayWithDataSource:(MXKDirectoryServersDataSource*)theDataSource
|
||||
onComplete:(void (^)(id<MXKDirectoryServerCellDataStoring> cellData))onComplete;
|
||||
{
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
{
|
||||
[super finalizeInit];
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenRooms];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenRooms];
|
||||
self.tableViewPaginationThrottler = [[MXThrottler alloc] initWithMinimumDelay:0.1];
|
||||
}
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ final class ShowDirectoryViewController: UIViewController {
|
|||
|
||||
private var sections: [ShowDirectorySection] = []
|
||||
|
||||
private let screenTimer = AnalyticsScreenTimer(screen: .roomDirectory)
|
||||
private let screenTracker = AnalyticsScreenTracker(screen: .roomDirectory)
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
|
@ -104,11 +104,7 @@ final class ShowDirectoryViewController: UIViewController {
|
|||
super.viewWillAppear(animated)
|
||||
|
||||
self.keyboardAvoider?.startAvoiding()
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
screenTimer.start()
|
||||
screenTracker.trackScreen()
|
||||
}
|
||||
|
||||
override func viewDidDisappear(_ animated: Bool) {
|
||||
|
@ -116,7 +112,6 @@ final class ShowDirectoryViewController: UIViewController {
|
|||
|
||||
self.keyboardAvoider?.stopAvoiding()
|
||||
|
||||
screenTimer.stop()
|
||||
}
|
||||
|
||||
override var preferredStatusBarStyle: UIStatusBarStyle {
|
||||
|
|
|
@ -47,7 +47,7 @@ static CGFloat const kTextFontSize = 15.0;
|
|||
|
||||
@property (weak, nonatomic) id <NSObject> themeDidChangeNotificationObserver;
|
||||
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -67,7 +67,7 @@ static CGFloat const kTextFontSize = 15.0;
|
|||
- (void)finalizeInit
|
||||
{
|
||||
[super finalizeInit];
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenDeactivateAccount];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenDeactivateAccount];
|
||||
}
|
||||
|
||||
- (void)destroy
|
||||
|
@ -103,12 +103,7 @@ static CGFloat const kTextFontSize = 15.0;
|
|||
[super viewWillAppear:animated];
|
||||
|
||||
[self userInterfaceThemeDidChange];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
[self.screenTimer start];
|
||||
[self.screenTracker trackScreen];
|
||||
}
|
||||
|
||||
- (void)viewDidLayoutSubviews
|
||||
|
@ -118,12 +113,6 @@ static CGFloat const kTextFontSize = 15.0;
|
|||
[self.deactivateAcccountButton.layer setCornerRadius:kButtonCornerRadius];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
- (UIStatusBarStyle)preferredStatusBarStyle
|
||||
{
|
||||
return ThemeService.shared.theme.statusBarStyle;
|
||||
|
|
|
@ -119,7 +119,7 @@ TableViewSectionsDelegate>
|
|||
@property (nonatomic, strong) SetPinCoordinatorBridgePresenter *setPinCoordinatorBridgePresenter;
|
||||
@property (nonatomic, strong) CrossSigningSetupCoordinatorBridgePresenter *crossSigningSetupCoordinatorBridgePresenter;
|
||||
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -145,7 +145,7 @@ TableViewSectionsDelegate>
|
|||
self.enableBarTintColorStatusChange = NO;
|
||||
self.rageShakeManager = [RageShakeManager sharedManager];
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenSettingsSecurity];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenSettingsSecurity];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
|
@ -254,6 +254,8 @@ TableViewSectionsDelegate>
|
|||
{
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
|
||||
// Release the potential pushed view controller
|
||||
[self releasePushedViewController];
|
||||
|
||||
|
@ -269,12 +271,6 @@ TableViewSectionsDelegate>
|
|||
[self loadCrossSigning];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewWillDisappear:animated];
|
||||
|
@ -286,12 +282,6 @@ TableViewSectionsDelegate>
|
|||
}
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
#pragma mark - Internal methods
|
||||
|
||||
- (void)updateSections
|
||||
|
|
|
@ -289,7 +289,7 @@ TableViewSectionsDelegate>
|
|||
@property (nonatomic) BOOL isPreparingIdentityService;
|
||||
@property (nonatomic, strong) ServiceTermsModalCoordinatorBridgePresenter *serviceTermsModalCoordinatorBridgePresenter;
|
||||
|
||||
@property (nonatomic) AnalyticsScreenTimer *screenTimer;
|
||||
@property (nonatomic) AnalyticsScreenTracker *screenTracker;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -324,7 +324,7 @@ TableViewSectionsDelegate>
|
|||
isResetPwdInProgress = NO;
|
||||
is3PIDBindingInProgress = NO;
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenSettings];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenSettings];
|
||||
}
|
||||
|
||||
- (void)updateSections
|
||||
|
@ -797,6 +797,8 @@ TableViewSectionsDelegate>
|
|||
{
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
[self.screenTracker trackScreen];
|
||||
|
||||
// Refresh display
|
||||
[self refreshSettings];
|
||||
|
||||
|
@ -825,8 +827,6 @@ TableViewSectionsDelegate>
|
|||
[self releasePushedViewController];
|
||||
|
||||
[self.settingsDiscoveryTableViewSection reload];
|
||||
|
||||
[self.screenTimer start];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated
|
||||
|
@ -870,12 +870,6 @@ TableViewSectionsDelegate>
|
|||
}
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[super viewDidDisappear:animated];
|
||||
[self.screenTimer stop];
|
||||
}
|
||||
|
||||
#pragma mark - Internal methods
|
||||
|
||||
- (void)pushViewController:(UIViewController*)viewController
|
||||
|
|
|
@ -48,7 +48,7 @@ final class SideMenuViewController: UIViewController {
|
|||
private var keyboardAvoider: KeyboardAvoider?
|
||||
private var errorPresenter: MXKErrorPresentation!
|
||||
private var activityPresenter: ActivityIndicatorPresenter!
|
||||
private var screenTimer = AnalyticsScreenTimer(screen: .sidebar)
|
||||
private var screenTracker = AnalyticsScreenTracker(screen: .sidebar)
|
||||
|
||||
private var sideMenuActionViews: [SideMenuActionView] = []
|
||||
private weak var sideMenuVersionView: SideMenuVersionView?
|
||||
|
@ -85,16 +85,7 @@ final class SideMenuViewController: UIViewController {
|
|||
super.viewWillAppear(animated)
|
||||
|
||||
navigationController?.setNavigationBarHidden(true, animated: animated)
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
screenTimer.start()
|
||||
}
|
||||
|
||||
override func viewDidDisappear(_ animated: Bool) {
|
||||
super.viewDidDisappear(animated)
|
||||
screenTimer.stop()
|
||||
screenTracker.trackScreen()
|
||||
}
|
||||
|
||||
override var preferredStatusBarStyle: UIStatusBarStyle {
|
||||
|
|
|
@ -72,6 +72,12 @@ final class SpaceMemberListViewController: RoomParticipantsViewController {
|
|||
|
||||
self.title = ""
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
|
||||
AnalyticsScreenTracker.trackScreen(.spaceMembers)
|
||||
}
|
||||
|
||||
override var preferredStatusBarStyle: UIStatusBarStyle {
|
||||
return self.theme.statusBarStyle
|
||||
|
|
|
@ -71,6 +71,12 @@ class SpaceMenuViewController: UIViewController {
|
|||
self.viewModel.viewDelegate = self
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
|
||||
AnalyticsScreenTracker.trackScreen(.spaceMenu)
|
||||
}
|
||||
|
||||
override var preferredStatusBarStyle: UIStatusBarStyle {
|
||||
return self.theme.statusBarStyle
|
||||
}
|
||||
|
|
|
@ -96,6 +96,7 @@ final class SpaceExploreRoomViewController: UIViewController {
|
|||
super.viewWillAppear(animated)
|
||||
|
||||
self.keyboardAvoider?.startAvoiding()
|
||||
AnalyticsScreenTracker.trackScreen(.spaceExploreRooms)
|
||||
}
|
||||
|
||||
override func viewDidDisappear(_ animated: Bool) {
|
||||
|
|
|
@ -74,6 +74,12 @@ final class SpaceChildRoomDetailViewController: UIViewController {
|
|||
|
||||
self.viewModel.process(viewAction: .loadData)
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
|
||||
AnalyticsScreenTracker.trackScreen(.roomPreview)
|
||||
}
|
||||
|
||||
override var preferredStatusBarStyle: UIStatusBarStyle {
|
||||
return self.theme.statusBarStyle
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
// Assign itself as delegate
|
||||
self.contactsTableViewControllerDelegate = self;
|
||||
|
||||
self.screenTimer = [[AnalyticsScreenTimer alloc] initWithScreen:AnalyticsScreenStartChat];
|
||||
self.screenTracker = [[AnalyticsScreenTracker alloc] initWithScreen:AnalyticsScreenStartChat];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
|
|
|
@ -63,14 +63,13 @@ final class ThreadListViewController: UIViewController {
|
|||
self.viewModel.viewDelegate = self
|
||||
|
||||
self.viewModel.process(viewAction: .loadData)
|
||||
|
||||
Analytics.shared.trackScreen(.threadList)
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
|
||||
self.keyboardAvoider?.startAvoiding()
|
||||
AnalyticsScreenTracker.trackScreen(.threadList)
|
||||
}
|
||||
|
||||
override func viewDidDisappear(_ animated: Bool) {
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
//
|
||||
// Copyright 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.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
/// `ScreenTrackerViewModifier` is a helper class used to track PostHog screen from SwiftUI screens.
|
||||
struct ScreenTrackerViewModifier: ViewModifier {
|
||||
let screen: AnalyticsScreen
|
||||
|
||||
@ViewBuilder
|
||||
func body(content: Content) -> some View {
|
||||
content
|
||||
.onAppear {
|
||||
#if canImport(MatrixSDK)
|
||||
Analytics.shared.trackScreen(screen)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@available(iOS 14.0, *)
|
||||
extension View {
|
||||
func track(screen: AnalyticsScreen) -> some View {
|
||||
return self.modifier(ScreenTrackerViewModifier(screen: screen))
|
||||
}
|
||||
}
|
|
@ -112,8 +112,11 @@ struct OnboardingSplashScreen: View {
|
|||
.background(theme.colors.background.ignoresSafeArea())
|
||||
.accentColor(theme.colors.accent)
|
||||
.navigationBarHidden(true)
|
||||
.onAppear { startTimer() }
|
||||
.onAppear {
|
||||
startTimer()
|
||||
}
|
||||
.onDisappear { stopTimer() }
|
||||
.track(screen: .welcome)
|
||||
}
|
||||
|
||||
// MARK: - Animation
|
||||
|
|
|
@ -70,6 +70,7 @@ struct RoomNotificationSettings: View {
|
|||
viewModel.process(viewAction: .load)
|
||||
}
|
||||
.accentColor(theme.colors.accent)
|
||||
.track(screen: .roomNotifications)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ struct DefaultNotificationSettings: View {
|
|||
var body: some View {
|
||||
NotificationSettings(viewModel: viewModel)
|
||||
.navigationBarTitle(VectorL10n.settingsDefault)
|
||||
.track(screen: .settingsDefaultNotifications)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ struct MentionsAndKeywordNotificationSettings: View {
|
|||
bottomSection: keywordSection
|
||||
)
|
||||
.navigationTitle(VectorL10n.settingsMentionsAndKeywords)
|
||||
.track(screen: .settingsMentionsAndKeywords)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ struct OtherNotificationSettings: View {
|
|||
var body: some View {
|
||||
NotificationSettings(viewModel: viewModel)
|
||||
.navigationTitle(VectorL10n.settingsOther)
|
||||
.track(screen: .settingsNotifications)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -51,6 +51,7 @@ targets:
|
|||
- path: ../Riot/Categories/UIColor.swift
|
||||
- path: ../Riot/Categories/UISearchBar.swift
|
||||
- path: ../Riot/Assets/en.lproj/Vector.strings
|
||||
- path: ../Riot/Modules/Analytics/AnalyticsScreen.swift
|
||||
- path: ../Riot/Assets/en.lproj/Untranslated.strings
|
||||
buildPhase: resources
|
||||
- path: ../Riot/Assets/Images.xcassets
|
||||
|
|
|
@ -59,6 +59,7 @@ targets:
|
|||
- path: ../Riot/Categories/UIColor.swift
|
||||
- path: ../Riot/Categories/UISearchBar.swift
|
||||
- path: ../Riot/Assets/en.lproj/Vector.strings
|
||||
- path: ../Riot/Modules/Analytics/AnalyticsScreen.swift
|
||||
- path: ../Riot/Assets/en.lproj/Untranslated.strings
|
||||
buildPhase: resources
|
||||
- path: ../Riot/Assets/Images.xcassets
|
||||
|
|
|
@ -50,6 +50,7 @@ targets:
|
|||
PROVISIONING_PROFILE: $(RIOT_PROVISIONING_PROFILE)
|
||||
PROVISIONING_PROFILE_SPECIFIER: $(RIOT_PROVISIONING_PROFILE_SPECIFIER)
|
||||
sources:
|
||||
- path: ../Riot/Modules/Analytics/AnalyticsScreen.swift
|
||||
- path: ../RiotSwiftUI/Modules
|
||||
includes:
|
||||
- "**/Test"
|
||||
|
|
1
changelog.d/5763.change
Normal file
1
changelog.d/5763.change
Normal file
|
@ -0,0 +1 @@
|
|||
Analytics: Instrument missing screen metrics.
|
Loading…
Reference in a new issue