From 88a65f9c2a0170fb281e6fb7005e831559319286 Mon Sep 17 00:00:00 2001 From: Aleksey Belousov Date: Mon, 25 May 2020 19:16:04 +0300 Subject: [PATCH] [iOS] Stats for guides on map https://jira.mail.ru/browse/MAPSME-13626 --- .../DownloadedBookmarksViewController.swift | 2 + .../BMCView/BMCViewController.swift | 2 + .../Common/Statistics/StatisticsStrings.h | 18 +++- .../Menu/Cells/BottomMenuLayersCell.swift | 94 ++++--------------- .../GuidesGalleryInteractor.swift | 3 + .../GuidesGalleryPresenter.swift | 21 ++++- 6 files changed, 61 insertions(+), 79 deletions(-) diff --git a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift index b90e6854cf..d05a2c05c7 100644 --- a/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift +++ b/iphone/Maps/Bookmarks/Catalog/DownloadedBookmarksViewController.swift @@ -73,6 +73,8 @@ class DownloadedBookmarksViewController: MWMViewController { if let categoriesHeader = tableView.headerView(forSection: 0) as? BMCCategoriesHeader { categoriesHeader.isShowAll = dataSource.allCategoriesHidden } + Statistics.logEvent(kStatBookmarkVisibilityChange, withParameters: [kStatFrom : kStatBookmarkList, + kStatAction : visible ? kStatShow : kStatHide]) } private func deleteCategory(at index: Int) { diff --git a/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift b/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift index 016b29bc06..91839f5322 100644 --- a/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift +++ b/iphone/Maps/Bookmarks/Categories/BMCView/BMCViewController.swift @@ -120,6 +120,8 @@ final class BMCViewController: MWMViewController { if let categoriesHeader = tableView.headerView(forSection: viewModel.sectionIndex(section: .categories)) as? BMCCategoriesHeader { categoriesHeader.isShowAll = viewModel.areAllCategoriesHidden() } + Statistics.logEvent(kStatBookmarkVisibilityChange, withParameters: [kStatFrom : kStatBookmarkList, + kStatAction : visible ? kStatShow : kStatHide]) } private func editCategory(at index: Int, anchor: UIView) { diff --git a/iphone/Maps/Common/Statistics/StatisticsStrings.h b/iphone/Maps/Common/Statistics/StatisticsStrings.h index 2e06d4d689..c774e6837e 100644 --- a/iphone/Maps/Common/Statistics/StatisticsStrings.h +++ b/iphone/Maps/Common/Statistics/StatisticsStrings.h @@ -56,6 +56,7 @@ 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 kStatBookmarkVisibilityChange = @"Bookmarks_Visibility_change"; static NSString * const kStatBookmarks = @"bookmarks"; static NSString * const kStatBookmarksAuthRequestError = @"Bookmarks_SyncProposal_error"; static NSString * const kStatBookmarksRestoreProposalCancel = @"Bookmarks_RestoreProposal_cancel"; @@ -78,6 +79,7 @@ static NSString * const kStatSortByDistance = @"Distance"; static NSString * const kStatSortByType = @"Type"; static NSString * const kStatBookmarksSearch = @"Bookmarks_Search"; static NSString * const kStatBookmarksSearchResultSelected = @"Bookmarks_Search_result_selected"; +static NSString * const kStatBookmarkList = @"bookmark_list"; static NSString * const kStatBookmarksList = @"BookmarksList"; static NSString * const kStatBuildRoute = @"Build route"; static NSString * const kStatButton = @"button"; @@ -140,7 +142,7 @@ 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 kStatDestination = @"destination"; static NSString * const kStatDeviceInfo = @"Device info"; static NSString * const kStatDeviceType = @"Device type"; static NSString * const kStatDiscovery = @"discovery"; @@ -219,6 +221,7 @@ static NSString * const kStatGo = @"Go"; static NSString * const kStatGoogle = @"Google"; static NSString * const kStatGotIt = @"Got_it"; static NSString * const kStatGuestHouse = @"guestHouse"; +static NSString * const kStatGuides = @"guides"; static NSString * const kStatGuidesBookmarkSelect = @"Bookmarks_BookmarksList_Bookmark_select"; static NSString * const kStatGuidesShown = @"Bookmarks_Downloaded_Guides_list"; static NSString * const kStatGuidesOpen = @"Bookmarks_Downloaded_Guide_open"; @@ -228,6 +231,7 @@ static NSString * const kStatGuidesSubscription = @"OnboardingGuidesSubscription static NSString * const kStatGuidesTrackSelect = @"Bookmarks_BookmarksList_Track_select"; static NSString * const kStatHasAuthorization = @"has_auth"; static NSString * const kStatHelp = @"Help"; +static NSString * const kStatHide = @"hide"; static NSString * const kStatHidden = @"Hidden"; static NSString * const kStatHistory = @"History"; static NSString * const kStatHoliday = @"Holiday"; @@ -251,6 +255,7 @@ static NSString * const kStatInvalidCall = @"invalid_call"; static NSString * const kStatIsAuthenticated = @"is_authenticated"; static NSString * const kStatIsAuto = @"is_auto"; static NSString * const kStatIsOnline = @"is_online"; +static NSString * const kStatIsolines = @"isolines"; static NSString * const kStatIsPanActivated = @"is_pan_activated"; static NSString * const kStatIsSuccess = @"is_success"; static NSString * const kStatIsZoomIn = @"is_zoom_in"; @@ -259,6 +264,7 @@ static NSString * const kStatKML = @"KML"; static NSString * const kStatKilometers = @"Kilometers"; static NSString * const kStatLandscape = @"Landscape"; static NSString * const kStatLanguage = @"Language"; +static NSString * const kStatLayersClick = @"Map_Layers_click"; static NSString * const kStatLat = @"lat"; static NSString * const kStatLon = @"lon"; static NSString * const kStatLead = @"lead"; @@ -269,6 +275,7 @@ 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 kStatMapGallery = @"map_gallery"; static NSString * const kStatMapSponsoredButtonShow = @"Map_SponsoredButton_show"; static NSString * const kStatMapSponsoredButtonClick = @"Map_SponsoredButton_click"; static NSString * const kStatMapDataSize = @"map_data_size"; @@ -284,8 +291,10 @@ static NSString * const kStatMapsmeInAppSuggestionShown = @"MapsMe_InAppSuggesti static NSString * const kStatMaxim = @"Maxim"; static NSString * const kStatTinkoffAirlines = @"Tinkoff_AllAirlines"; static NSString * const kStatTinkoffInsurance = @"Tinkoff_Insurance"; +static NSString * const kStatTurnOn = @"turn_on"; static NSString * const kStatMts = @"MTS"; -static NSString * const kStatSkyeng= @"Skyeng"; +static NSString * const kStatSkyeng = @"Skyeng"; +static NSString * const kStatSubway = @"subway"; static NSString * const kStatMenu = @"menu"; static NSString * const kStatMethod = @"method"; static NSString * const kStatMiles = @"Miles"; @@ -380,6 +389,7 @@ static NSString * const kStatPlacepageSponsoredError = @"Placepage_SponsoredGall static NSString * const kStatPlacepageSponsoredItemSelected = @"Placepage_SponsoredGallery_ProductItem_selected"; static NSString * const kStatPlacepageSponsoredLogoSelected = @"Placepage_SponsoredGallery_LogoItem_selected"; static NSString * const kStatPlacepageSponsoredMoreSelected = @"Placepage_SponsoredGallery_MoreItem_selected"; +static NSString * const kStatPlacepageSponsoredUserItemShown = @"Placepage_SponsoredGallery_UsersItem_shown"; static NSString * const kStatPlacepageSponsoredOpen = @"Placepage_SponsoredGalleryPage_opened"; static NSString * const kStatPlacepageSponsoredShow = @"Placepage_SponsoredGallery_shown"; static NSString * const kStatPlacepageTaxiShow = @"Placepage_Taxi_show"; @@ -393,7 +403,7 @@ 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 kStatProvider = @"provider"; static NSString * const kStatPublic = @"public"; static NSString * const kStatPublicTransport = @"Public Transport"; static NSString * const kStatPurchase = @"purchase"; @@ -477,6 +487,7 @@ static NSString * const kStatSharingOptionsError = @"Bookmarks_SharingOptions_er 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 kStatShow = @"show"; static NSString * const kStatShowBig2SmallMWM = @"Big mwms to small mwms dialog appearing counter"; static NSString * const kStatShowOnMap = @"Show on map"; static NSString * const kStatSide = @"side"; @@ -554,6 +565,7 @@ static NSString * const kStatWikipedia = @"wikipedia"; static NSString * const kStatYandex = @"Yandex"; static NSString * const kStatYes = @"Yes"; static NSString * const kStatZoom = @"Zoom"; +static NSString * const kStatId = @"id"; static NSString * const kStatiPad = @"iPad"; static NSString * const kStatiPhone = @"iPhone"; diff --git a/iphone/Maps/UI/BottomMenu/Menu/Cells/BottomMenuLayersCell.swift b/iphone/Maps/UI/BottomMenu/Menu/Cells/BottomMenuLayersCell.swift index 11d1557206..7d7483cf35 100644 --- a/iphone/Maps/UI/BottomMenu/Menu/Cells/BottomMenuLayersCell.swift +++ b/iphone/Maps/UI/BottomMenu/Menu/Cells/BottomMenuLayersCell.swift @@ -67,105 +67,51 @@ class BottomMenuLayersCell: UITableViewCell { } @IBAction func onGuidesButtonPressed(_ sender: Any) { - MapOverlayManager.setGuidesEnabled(!MapOverlayManager.guidesEnabled()) + let enable = !MapOverlayManager.guidesEnabled() + MapOverlayManager.setGuidesEnabled(enable) + Statistics.logEvent(kStatLayersClick, withParameters: [kStatName : kStatGuides, + kStatFrom : kStatMenu, + kStatTurnOn : enable]) } @IBAction func onTrafficButton(_ sender: UIButton) { - MapOverlayManager.setTrafficEnabled(!MapOverlayManager.trafficEnabled()) + let enable = !MapOverlayManager.trafficEnabled() + MapOverlayManager.setTrafficEnabled(enable) + Statistics.logEvent(kStatLayersClick, withParameters: [kStatName : kStatTraffic, + kStatFrom : kStatMenu, + kStatTurnOn : enable]) } @IBAction func onSubwayButton(_ sender: UIButton) { - MapOverlayManager.setTransitEnabled(!MapOverlayManager.transitEnabled()) + let enable = !MapOverlayManager.transitEnabled() + MapOverlayManager.setTransitEnabled(enable) + Statistics.logEvent(kStatLayersClick, withParameters: [kStatName : kStatSubway, + kStatFrom : kStatMenu, + kStatTurnOn : enable]) } @IBAction func onIsoLinesButton(_ sender: UIButton) { - MapOverlayManager.setIsoLinesEnabled(!MapOverlayManager.isoLinesEnabled()) + let enable = !MapOverlayManager.isoLinesEnabled() + MapOverlayManager.setIsoLinesEnabled(enable) + Statistics.logEvent(kStatLayersClick, withParameters: [kStatName : kStatIsolines, + kStatFrom : kStatMenu, + kStatTurnOn : enable]) } } extension BottomMenuLayersCell: MapOverlayManagerObserver { func onGuidesStateUpdated() { updateGuidesButton() - let status: String? - switch MapOverlayManager.guidesState() { - case .enabled: - status = "success" - case .noData: - status = "unavailable" - case .networkError: - status = "error" - case .disabled: - status = nil - @unknown default: - fatalError() - } - - if let status = status { - Statistics.logEvent("Map_Layers_activate", withParameters: ["name" : "guides", - "status" : status]) - } } func onTrafficStateUpdated() { updateTrafficButton() - let status: String? - switch MapOverlayManager.trafficState() { - case .enabled: - status = "success" - case .noData: - status = "unavailable" - case .networkError: - status = "error" - case .disabled, .waitingData, .outdated, .expiredData, .expiredApp: - status = nil - @unknown default: - fatalError() - } - - if let status = status { - Statistics.logEvent("Map_Layers_activate", withParameters: ["name" : "traffic", - "status" : status]) - } } func onTransitStateUpdated() { updateSubwayButton() - let status: String? - switch MapOverlayManager.transitState() { - case .enabled: - status = "success" - case .noData: - status = "unavailable" - case .disabled: - status = nil - @unknown default: - fatalError() - } - - if let status = status { - Statistics.logEvent("Map_Layers_activate", withParameters: ["name" : "subway", - "status" : status]) - } } func onIsoLinesStateUpdated() { updateIsoLinesButton() - let status: String? - switch MapOverlayManager.isolinesState() { - case .enabled: - status = "success" - case .expiredData: - status = "error" - case .noData: - status = "unavailable" - case .disabled: - status = nil - @unknown default: - fatalError() - } - - if let status = status { - Statistics.logEvent("Map_Layers_activate", withParameters: ["name" : "isolines", - "status" : status]) - } } } diff --git a/iphone/Maps/UI/PlacePage/Components/GuidesGallery/GuidesGalleryInteractor.swift b/iphone/Maps/UI/PlacePage/Components/GuidesGallery/GuidesGalleryInteractor.swift index e2269de4eb..fcfc2409c4 100644 --- a/iphone/Maps/UI/PlacePage/Components/GuidesGallery/GuidesGalleryInteractor.swift +++ b/iphone/Maps/UI/PlacePage/Components/GuidesGallery/GuidesGalleryInteractor.swift @@ -26,6 +26,9 @@ extension GuidesGalleryInteractor: IGuidesGalleryInteractor { let groupId = MWMBookmarksManager.shared().getGroupId(item.guideId) let visible = MWMBookmarksManager.shared().isCategoryVisible(groupId) MWMBookmarksManager.shared().setCategory(groupId, isVisible: !visible) + Statistics.logEvent(kStatBookmarkVisibilityChange, withParameters: [kStatFrom : kStatMapGallery, + kStatAction : visible ? kStatHide : kStatShow, + kStatServerId : item.guideId]) } func isGalleryItemVisible(_ item: GuidesGalleryItem) -> Bool { diff --git a/iphone/Maps/UI/PlacePage/Components/GuidesGallery/GuidesGalleryPresenter.swift b/iphone/Maps/UI/PlacePage/Components/GuidesGallery/GuidesGalleryPresenter.swift index dc2937a73f..07109f95d2 100644 --- a/iphone/Maps/UI/PlacePage/Components/GuidesGallery/GuidesGalleryPresenter.swift +++ b/iphone/Maps/UI/PlacePage/Components/GuidesGallery/GuidesGalleryPresenter.swift @@ -65,26 +65,43 @@ extension GuidesGalleryPresenter: IGuidesGalleryPresenter { } view.setGalleryItems(galleryItems.map({ makeViewModel($0) })) + let activeGuideId = self.interactor.activeItemId() guard let activeIndex = galleryItems.firstIndex(where: { - $0.guideId == interactor.activeItemId() + $0.guideId == activeGuideId }) else { return } view.setActiveItem(activeIndex, animated: false) + + Statistics.logEvent(kStatPlacepageSponsoredShow, withParameters: [kStatProvider : kStatMapsmeGuides, + kStatPlacement : kStatMap, + kStatState : kStatOnline, + kStatCount : galleryItems.count]) } func selectItemAtIndex(_ index: Int) { let galleryItem = galleryItems[index] guard let url = URL(string: galleryItem.url) else { return } router.openCatalogUrl(url) + Statistics.logEvent(kStatPlacepageSponsoredItemSelected, withParameters: [kStatProvider : kStatMapsmeGuides, + kStatPlacement : kStatMap, + kStatItem : index, + kStatDestination : kStatCatalogue]) } func scrollToItemAtIndex(_ index: Int) { let galleryItem = galleryItems[index] interactor.setActiveItem(galleryItem) + Statistics.logEvent(kStatPlacepageSponsoredUserItemShown, + withParameters: [kStatProvider : kStatMapsmeGuides, + kStatPlacement : kStatMap, + kStatState : kStatOnline, + kStatItem : index, + kStatId : galleryItem.guideId], + with: .realtime) } func toggleVisibilityAtIndex(_ index: Int) { let galleryItem = galleryItems[index] - interactor.toggleItemVisibility(galleryItem) + interactor.toggleItemVisibility(galleryItem) let model = makeViewModel(galleryItem) view.updateItem(model, at: index) }