From f1ea1e153a8eaff59b8b6342e5e6416f831b8dd3 Mon Sep 17 00:00:00 2001 From: "o.bolovintseva" Date: Wed, 28 Nov 2018 12:13:37 +0300 Subject: [PATCH] [ios] ugc routes statistics --- iphone/Maps/Bookmarks/BookmarksVC.mm | 6 +++ .../BMCView/BMCViewController.swift | 10 +++++ .../CategorySettingsViewController.swift | 19 ++++++++++ .../BookmarksSharingViewController.swift | 37 +++++++++++++++---- .../Sharing/EditOnWebViewController.swift | 6 ++- .../Common/Statistics/StatisticsStrings.h | 27 ++++++++++++++ 6 files changed, 96 insertions(+), 9 deletions(-) diff --git a/iphone/Maps/Bookmarks/BookmarksVC.mm b/iphone/Maps/Bookmarks/BookmarksVC.mm index 4ad3facc5a..bea0874b8e 100644 --- a/iphone/Maps/Bookmarks/BookmarksVC.mm +++ b/iphone/Maps/Bookmarks/BookmarksVC.mm @@ -453,6 +453,7 @@ CGFloat const kPinDiameter = 18.0f; handler:^(UIAlertAction * _Nonnull action) { [self viewOnMap]; + [Statistics logEvent:kStatBookmarksListItemMoreClick withParameters:@{kStatOption : kStatViewOnMap}]; }]]; [actionSheet addAction:[UIAlertAction actionWithTitle:L(@"list_settings").capitalizedString @@ -460,6 +461,7 @@ CGFloat const kPinDiameter = 18.0f; handler:^(UIAlertAction * _Nonnull action) { [self openCategorySettings]; + [Statistics logEvent:kStatBookmarksListItemMoreClick withParameters:@{kStatOption : kStatSettings}]; }]]; [actionSheet addAction:[UIAlertAction actionWithTitle:L(@"export_file").capitalizedString @@ -467,6 +469,7 @@ CGFloat const kPinDiameter = 18.0f; handler:^(UIAlertAction * _Nonnull action) { [self exportFile]; + [Statistics logEvent:kStatBookmarksListItemMoreClick withParameters:@{kStatOption : kStatSendAsFile}]; }]]; auto deleteAction = [UIAlertAction actionWithTitle:L(@"delete_list").capitalizedString @@ -475,6 +478,7 @@ CGFloat const kPinDiameter = 18.0f; { [[MWMBookmarksManager sharedManager] deleteCategory:self->m_categoryId]; [self.delegate bookmarksVCdidDeleteCategory:self]; + [Statistics logEvent:kStatBookmarksListItemMoreClick withParameters:@{kStatOption : kStatDelete}]; }]; deleteAction.enabled = [[MWMBookmarksManager sharedManager] groupsIdList].count > 1; [actionSheet addAction:deleteAction]; @@ -484,11 +488,13 @@ CGFloat const kPinDiameter = 18.0f; handler:nil]]; [self presentViewController:actionSheet animated:YES completion:nil]; + [Statistics logEvent:kStatBookmarksListItemSettings withParameters:@{kStatOption : kStatMore}]; } - (IBAction)onSharingOptions:(UIBarButtonItem *)sender { [self shareCategory]; + [Statistics logEvent:kStatBookmarksListItemSettings withParameters:@{kStatOption : kStatSharingOptions}]; } - (IBAction)onViewOnMap:(UIBarButtonItem *)sender diff --git a/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift b/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift index 4b5eca9e9f..ee0d28660a 100644 --- a/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift +++ b/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift @@ -122,24 +122,34 @@ final class BMCViewController: MWMViewController { let settings = L("list_settings").capitalized actionSheet.addAction(UIAlertAction(title: settings, style: .default, handler: { _ in self.openCategorySettings(category: category) + Statistics.logEvent(kStatBookmarksListSettingsClick, + withParameters: [kStatOption : kStatListSettings]) })) let showHide = L(category.isVisible ? "hide_from_map" : "zoom_to_country").capitalized actionSheet.addAction(UIAlertAction(title: showHide, style: .default, handler: { _ in self.visibilityAction(category: category) + Statistics.logEvent(kStatBookmarksListSettingsClick, + withParameters: [kStatOption : kStatMakeInvisibleOnMap]) })) let exportFile = L("export_file").capitalized actionSheet.addAction(UIAlertAction(title: exportFile, style: .default, handler: { _ in self.shareCategoryFile(category: category, anchor: anchor) + Statistics.logEvent(kStatBookmarksListSettingsClick, + withParameters: [kStatOption : kStatSendAsFile]) })) let share = L("sharing_options").capitalized let shareAction = UIAlertAction(title: share, style: .default, handler: { _ in self.shareCategory(category: category, anchor: anchor) + Statistics.logEvent(kStatBookmarksListSettingsClick, + withParameters: [kStatOption : kStatSharingOptions]) }) shareAction.isEnabled = MWMBookmarksManager.shared().isCategoryNotEmpty(category.identifier) actionSheet.addAction(shareAction) let delete = L("delete_list").capitalized let deleteAction = UIAlertAction(title: delete, style: .destructive, handler: { [viewModel] _ in viewModel!.deleteCategory(category: category) + Statistics.logEvent(kStatBookmarksListSettingsClick, + withParameters: [kStatOption : kStatDeleteGroup]) }) deleteAction.isEnabled = (viewModel.numberOfRows(section: .categories) > 1) actionSheet.addAction(deleteAction) diff --git a/iphone/Maps/Bookmarks/Categories/Category settings/CategorySettingsViewController.swift b/iphone/Maps/Bookmarks/Categories/Category settings/CategorySettingsViewController.swift index fc1ee2223c..0ad4dd59c0 100644 --- a/iphone/Maps/Bookmarks/Categories/Category settings/CategorySettingsViewController.swift +++ b/iphone/Maps/Bookmarks/Categories/Category settings/CategorySettingsViewController.swift @@ -11,6 +11,7 @@ class CategorySettingsViewController: MWMTableViewController { @objc var categoryId = MWMFrameworkHelper.invalidCategoryId() @objc var maxCategoryNameLength: UInt = 60 @objc var minCategoryNameLength: UInt = 0 + private var changesMade = false var manager: MWMBookmarksManager { return MWMBookmarksManager.shared() @@ -38,6 +39,13 @@ class CategorySettingsViewController: MWMTableViewController { navigationItem.rightBarButtonItem = saveButton } + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + if isMovingFromParentViewController && !changesMade { + Statistics.logEvent(kStatBookmarkSettingsCancel) + } + } + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { switch section { case 0: @@ -69,12 +77,16 @@ class CategorySettingsViewController: MWMTableViewController { manager.deleteCategory(categoryId) delegate?.categorySettingsController(self, didDelete: categoryId) + Statistics.logEvent(kStatBookmarkSettingsClick, + withParameters: [kStatOption : kStatDelete]) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let destinationVC = segue.destination as? BookmarksSharingViewController { destinationVC.categoryId = categoryId destinationVC.delegate = self + Statistics.logEvent(kStatBookmarkSettingsClick, + withParameters: [kStatOption : kStatSharingOptions]) } } @@ -88,7 +100,9 @@ class CategorySettingsViewController: MWMTableViewController { manager.setCategory(categoryId, name: newName) manager.setCategory(categoryId, description: descriptionTextView.text) + changesMade = true delegate?.categorySettingsController(self, didEndEditing: categoryId) + Statistics.logEvent(kStatBookmarkSettingsConfirm) } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { @@ -120,6 +134,11 @@ extension CategorySettingsViewController: UITextViewDelegate { } } } + + func textViewDidBeginEditing(_ textView: UITextView) { + Statistics.logEvent(kStatBookmarkSettingsClick, + withParameters: [kStatOption : kStatAddDescription]) + } } extension CategorySettingsViewController: UITextFieldDelegate { diff --git a/iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingViewController.swift b/iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingViewController.swift index 3a0ff8ba85..527c516a3f 100644 --- a/iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingViewController.swift +++ b/iphone/Maps/Bookmarks/Categories/Sharing/BookmarksSharingViewController.swift @@ -142,6 +142,7 @@ final class BookmarksSharingViewController: MWMTableViewController { } func startUploadAndPublishFlow() { + Statistics.logEvent(kStatSharingOptionsClick, withParameters: [kStatItem : kStatPublic]) performAfterValidation { [weak self] in if let self = self { self.performSegue(withIdentifier: self.kPropertiesSegueIdentifier, sender: self) @@ -168,6 +169,9 @@ final class BookmarksSharingViewController: MWMTableViewController { } else { self.uploadAndPublishCell.cellState = .completed self.categoryUrl = url + Statistics.logEvent(kStatSharingOptionsUploadSuccess, withParameters: + [kStatTracks : self.manager.getCategoryTracksCount(self.categoryId), + kStatPoints : self.manager.getCategoryMarksCount(self.categoryId)]) self.tableView.beginUpdates() self.tableView.deleteSections(IndexSet(arrayLiteral: self.privateSectionIndex), with: .fade) @@ -180,6 +184,7 @@ final class BookmarksSharingViewController: MWMTableViewController { } func uploadAndGetDirectLink() { + Statistics.logEvent(kStatSharingOptionsClick, withParameters: [kStatItem : kStatPrivate]) performAfterValidation { [weak self] in guard let s = self, s.categoryId != MWMFrameworkHelper.invalidCategoryId() else { assert(false, "categoryId must be valid") @@ -198,6 +203,9 @@ final class BookmarksSharingViewController: MWMTableViewController { s.getDirectLinkCell.cellState = .completed s.categoryUrl = url s.delegate?.didShareCategory() + Statistics.logEvent(kStatSharingOptionsUploadSuccess, withParameters: + [kStatTracks : s.manager.getCategoryTracksCount(s.categoryId), + kStatPoints : s.manager.getCategoryMarksCount(s.categoryId)]) } }) } @@ -208,9 +216,12 @@ final class BookmarksSharingViewController: MWMTableViewController { signup(anchor: view, onComplete: { success in if success { action() + } else { + Statistics.logEvent(kStatSharingOptionsError, withParameters: [kStatError : 1]) } }) } else { + Statistics.logEvent(kStatSharingOptionsError, withParameters: [kStatError : 0]) MWMAlertViewController.activeAlert().presentDefaultAlert(withTitle: L("common_check_internet_connection_dialog_title"), message: L("common_check_internet_connection_dialog"), rightButtonTitle: L("try_again"), @@ -230,19 +241,22 @@ final class BookmarksSharingViewController: MWMTableViewController { switch (status) { case .networkError: - fallthrough - case .serverError: - fallthrough - case .authError: + Statistics.logEvent(kStatSharingOptionsUploadError, withParameters: [kStatError : 1]) + self.showUploadError() + case .serverError: + Statistics.logEvent(kStatSharingOptionsUploadError, withParameters: [kStatError : 2]) + self.showUploadError() + case .authError: + Statistics.logEvent(kStatSharingOptionsUploadError, withParameters: [kStatError : 3]) self.showUploadError() - break case .malformedData: + Statistics.logEvent(kStatSharingOptionsUploadError, withParameters: [kStatError : 4]) self.showMalformedDataError() - break case .accessError: + Statistics.logEvent(kStatSharingOptionsUploadError, withParameters: [kStatError : 5]) self.showAccessError() - break case .invalidCall: + Statistics.logEvent(kStatSharingOptionsUploadError, withParameters: [kStatError : 6]) assert(false, "sharing is not available for paid bookmarks") } } @@ -268,6 +282,7 @@ final class BookmarksSharingViewController: MWMTableViewController { vc.delegate = self } } else if segue.identifier == kEditOnWebSegueIdentifier { + Statistics.logEvent(kStatSharingOptionsClick, withParameters: [kStatItem : kStatEditOnWeb]) if let vc = segue.destination as? EditOnWebViewController { vc.delegate = self vc.guideUrl = categoryUrl @@ -286,8 +301,14 @@ extension BookmarksSharingViewController: UITextViewDelegate { extension BookmarksSharingViewController: UploadActionCellDelegate { func cellDidPressShareButton(_ cell: UploadActionCell) { + Statistics.logEvent(kStatSharingOptionsClick, withParameters: [kStatItem : kStatCopyLink]) let message = L("share_bookmarks_email_body") - let shareController = MWMActivityViewController.share(for: categoryUrl, message: message) + let shareController = MWMActivityViewController.share(for: categoryUrl, message: message) { + _, success, _, _ in + if success { + Statistics.logEvent(kStatSharingLinkSuccess, withParameters: [kStatFrom : kStatSharingOptions]) + } + } shareController?.present(inParentViewController: self, anchorView: nil) } } diff --git a/iphone/Maps/Bookmarks/Categories/Sharing/EditOnWebViewController.swift b/iphone/Maps/Bookmarks/Categories/Sharing/EditOnWebViewController.swift index afd3739048..db2e6de127 100644 --- a/iphone/Maps/Bookmarks/Categories/Sharing/EditOnWebViewController.swift +++ b/iphone/Maps/Bookmarks/Categories/Sharing/EditOnWebViewController.swift @@ -24,9 +24,13 @@ final class EditOnWebViewController: MWMViewController { return } + Statistics.logEvent(kStatEditOnWebClick, withParameters: [kStatItem : kStatCopyLink]) let message = L("share_bookmarks_email_body") let shareController = MWMActivityViewController.share(for: guide, message: message) { - [weak self] _, _, _, _ in + [weak self] _, success, _, _ in + if success { + Statistics.logEvent(kStatSharingLinkSuccess, withParameters: [kStatFrom : kStatEditOnWeb]) + } if let self = self { self.delegate?.editOnWebViewControllerDidFinish(self) } diff --git a/iphone/Maps/Common/Statistics/StatisticsStrings.h b/iphone/Maps/Common/Statistics/StatisticsStrings.h index dab3eabcc4..e4292bf19d 100644 --- a/iphone/Maps/Common/Statistics/StatisticsStrings.h +++ b/iphone/Maps/Common/Statistics/StatisticsStrings.h @@ -16,6 +16,7 @@ static NSString * const kStatActionSheet = @"Action sheet"; static NSString * const kStatAd = @"Ad"; static NSString * const kStatAdTitle = @"Ad title"; static NSString * const kStatAdd = @"add"; +static NSString * const kStatAddDescription = @"add_description"; static NSString * const kStatAddPlace = @"add_place"; static NSString * const kStatAfterSave = @"after_save"; static NSString * const kStatAlert = @"Alert"; @@ -38,6 +39,9 @@ static NSString * const kStatBattery = @"battery"; static NSString * const kStatBicycle = @"Bicycle"; static NSString * const kStatBooking = @"Booking.com"; static NSString * const kStatBookmarkCreated = @"Bookmark. Bookmark created"; +static NSString * const kStatBookmarkSettingsCancel = @"Bookmarks_Bookmark_Settings_cancel"; +static NSString * const kStatBookmarkSettingsConfirm = @"Bookmarks_Bookmark_Settings_confirm"; +static NSString * const kStatBookmarkSettingsClick = @"Bookmarks_Bookmark_Settings_click"; static NSString * const kStatBookmarks = @"bookmarks"; static NSString * const kStatBookmarksAuthRequestError = @"Bookmarks_SyncProposal_error"; static NSString * const kStatBookmarksRestoreProposalCancel = @"Bookmarks_RestoreProposal_cancel"; @@ -50,6 +54,9 @@ static NSString * const kStatBookmarksSyncProposalApproved = @"Bookmarks_SyncPro static NSString * const kStatBookmarksSyncProposalShown = @"Bookmarks_SyncProposal_shown"; static NSString * const kStatBookmarksSyncStarted = @"Bookmarks_sync_started"; static NSString * const kStatBookmarksSyncSuccess = @"Bookmarks_sync_success"; +static NSString * const kStatBookmarksListItemSettings = @"Bookmarks_BookmarksListItem_settings"; +static NSString * const kStatBookmarksListItemMoreClick = @"Bookmarks_BookmarksListItem_More_click"; +static NSString * const kStatBookmarksListSettingsClick = @"Bookmarks_BookmarksList_settings_click"; static NSString * const kStatBuildRoute = @"Build route"; static NSString * const kStatButton = @"button"; static NSString * const kStatCallPhoneNumber = @"Call phone number"; @@ -77,6 +84,7 @@ static NSString * const kStatClose = @"Close"; static NSString * const kStatCollapse = @"Collapse"; static NSString * const kStatCompass = @"Compass"; static NSString * const kStatConnection = @"connection"; +static NSString * const kStatCopyLink = @"copy_link"; static NSString * const kStatCopyright = @"Copyright"; static NSString * const kStatCount = @"Count"; static NSString * const kStatCountry = @"Country"; @@ -86,6 +94,7 @@ static NSString * const kStatDelete = @"delete"; static NSString * const kStatDeleteAll = @"delete all"; static NSString * const kStatDeleteAllWithChanges = @"delete_all_with_changes"; static NSString * const kStatDeleteWithChanges = @"delete_with_changes"; +static NSString * const kStatDeleteGroup = @"delete_group"; static NSString * const kStatDestination = @"Destination"; static NSString * const kStatDeviceInfo = @"Device info"; static NSString * const kStatDeviceType = @"Device type"; @@ -118,6 +127,8 @@ static NSString * const kStatDownloaderOnStartScreenSelectLater = @"Downloader_O static NSString * const kStatDownloaderOnStartScreenShow = @"Downloader_OnStartScreen_show"; static NSString * const kStatEatAndDrink = @"Eat and drink"; static NSString * const kStatEdit = @"Edit"; +static NSString * const kStatEditOnWeb = @"edit_on_web"; +static NSString * const kStatEditOnWebClick = @"Bookmarks_EditOnWeb_click"; static NSString * const kStatEditTime = @"Edit time"; static NSString * const kStatEditorAddCancel = @"Editor_Add_cancel"; static NSString * const kStatEditorAddClick = @"Editor_Add_click"; @@ -183,10 +194,12 @@ static NSString * const kStatKML = @"KML"; static NSString * const kStatKilometers = @"Kilometers"; static NSString * const kStatLandscape = @"Landscape"; static NSString * const kStatLanguage = @"Language"; +static NSString * const kStatListSettings = @"list_settings"; static NSString * const kStatLocals = @"Locals"; static NSString * const kStatLocalsProvider = @"Locals.Maps.Me"; static NSString * const kStatLocation = @"Location"; static NSString * const kStatLogout = @"Logout"; +static NSString * const kStatMakeInvisibleOnMap = @"make_invisible_on_map"; static NSString * const kStatMap = @"map"; static NSString * const kStatMapDataSize = @"map_data_size"; static NSString * const kStatMapSearch = @"Map search"; @@ -201,6 +214,7 @@ static NSString * const kStatMobile = @"mobile"; static NSString * const kStatMobileInternet = @"Mobile Internet"; static NSString * const kStatMode = @"mode"; static NSString * const kStatMopub = @"Mopub"; +static NSString * const kStatMore = @"More"; static NSString * const kStatMoreApps = @"More apps"; static NSString * const kStatMotel = @"motel"; static NSString * const kStatMyPosition = @"My position"; @@ -230,6 +244,7 @@ static NSString * const kStatOpen = @"Open"; static NSString * const kStatOpenActionSheet = @"Open action sheet"; static NSString * const kStatOpenSite = @"Open site"; static NSString * const kStatOpentable = @"OpenTable"; +static NSString * const kStatOption = @"option"; static NSString * const kStatOrientation = @"Orientation"; static NSString * const kStatOther = @"Other"; static NSString * const kStatOut = @"Out"; @@ -261,14 +276,17 @@ static NSString * const kStatPlacepageSponsoredOpen = @"Placepage_SponsoredGalle static NSString * const kStatPlacepageSponsoredShow = @"Placepage_SponsoredGallery_shown"; static NSString * const kStatPlacepageTaxiShow = @"Placepage_Taxi_show"; static NSString * const kStatPointToPoint = @"point_to_point"; +static NSString * const kStatPoints = @"points"; static NSString * const kStatPortrait = @"Portrait"; static NSString * const kStatPosition = @"position"; static NSString * const kStatPriceCategory = @"price_category"; +static NSString * const kStatPrivate = @"private"; static NSString * const kStatProblem = @"Problem"; static NSString * const kStatProduct = @"product"; static NSString * const kStatProfile = @"Profile"; static NSString * const kStatProgress = @"Progress"; static NSString * const kStatProvider = @"Provider"; +static NSString * const kStatPublic = @"public"; static NSString * const kStatPublicTransport = @"Public Transport"; static NSString * const kStatPurchase = @"purchase"; static NSString * const kStatPushReceived = @"Push received"; @@ -331,12 +349,19 @@ static NSString * const kStatSearchSponsoredShow = @"Search_SponsoredCategory_sh static NSString * const kStatSelectMap = @"Select map"; static NSString * const kStatSelectResult = @"Select result"; static NSString * const kStatSelectTab = @"Select tab"; +static NSString * const kStatSendAsFile = @"send_as_file"; static NSString * const kStatSendEmail = @"Send email"; static NSString * const kStatSettings = @"settings"; static NSString * const kStatSettingsBookmarksSyncToggle = @"Settings_BookmarksSync_toggle"; static NSString * const kStatSettingsOpenSection = @"Settings open section"; static NSString * const kStatShare = @"Share"; static NSString * const kStatShareMyLocation = @"share_my_location"; +static NSString * const kStatSharingLinkSuccess = @"Bookmarks_SharingLink_success"; +static NSString * const kStatSharingOptions = @"sharing_options"; +static NSString * const kStatSharingOptionsError = @"Bookmarks_SharingOptions_error"; +static NSString * const kStatSharingOptionsClick = @"Bookmarks_SharingOptions_click"; +static NSString * const kStatSharingOptionsUploadError = @"Bookmarks_SharingOptions_upload_error"; +static NSString * const kStatSharingOptionsUploadSuccess = @"Bookmarks_SharingOptions_upload_success"; static NSString * const kStatShowBig2SmallMWM = @"Big mwms to small mwms dialog appearing counter"; static NSString * const kStatShowOnMap = @"Show on map"; static NSString * const kStatSignup = @"Signup"; @@ -368,6 +393,7 @@ static NSString * const kStatToggleVisibility = @"Toggle visibility"; static NSString * const kStatToggleZoomButtonsVisibility = @"Toggle zoom buttons visibility"; static NSString * const kStatToolbarClick = @"Toolbar_click"; static NSString * const kStatToolbarMenuClick = @"Toolbar_Menu_click"; +static NSString * const kStatTracks = @"tracks"; static NSString * const kStatTraffic = @"Traffic"; static NSString * const kStatType = @"type"; static NSString * const kStatUGCReviewAuthDeclined = @"UGC_Auth_declined"; @@ -390,6 +416,7 @@ static NSString * const kStatValue = @"Value"; static NSString * const kStatVehicle = @"Vehicle"; static NSString * const kStatVendor = @"vendor"; static NSString * const kStatViator = @"Viator.com"; +static NSString * const kStatViewOnMap = @"view_on_map"; static NSString * const kStatVisible = @"Visible"; static NSString * const kStatWhatsNew = @"What's New"; static NSString * const kStatWifi = @"wifi";