From ee801a9b7d0288c10a3c3514f48b9237acb96690 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 12 Nov 2025 10:40:41 +1300 Subject: [PATCH 1/2] Add analytics events --- .../Classes/Utility/Analytics/WPAnalyticsEvent.swift | 9 +++++++++ .../SiteMedia/Views/MediaStorageDetailsView.swift | 12 ++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift index 77ef8acc5bd7..80ded9bdb9b4 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift +++ b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift @@ -21,6 +21,9 @@ import WordPressShared // Media case siteMediaShareTapped + case mediaStorageDetailsViewed + case mediaStorageDetailsActionTapped + case mediaStorageDetailsPurchaseCompleted // Settings and Prepublishing Nudges case editorPostPublishTap @@ -720,6 +723,12 @@ import WordPressShared // Media case .siteMediaShareTapped: return "site_media_shared_tapped" + case .mediaStorageDetailsViewed: + return "media_storage_details_viewed" + case .mediaStorageDetailsActionTapped: + return "media_storage_details_action_tapped" + case .mediaStorageDetailsPurchaseCompleted: + return "media_storage_details_purchase_completed" // Editor case .editorPostPublishTap: return "editor_post_publish_tapped" diff --git a/WordPress/Classes/ViewRelated/Media/SiteMedia/Views/MediaStorageDetailsView.swift b/WordPress/Classes/ViewRelated/Media/SiteMedia/Views/MediaStorageDetailsView.swift index 669ca6f1fbdc..a8c010098831 100644 --- a/WordPress/Classes/ViewRelated/Media/SiteMedia/Views/MediaStorageDetailsView.swift +++ b/WordPress/Classes/ViewRelated/Media/SiteMedia/Views/MediaStorageDetailsView.swift @@ -4,6 +4,7 @@ import SVProgressHUD import WordPressAPI import WordPressCore import WordPressData +import WordPressShared struct MediaStorageDetailsView: View { @State private var purchase: WebPurchase? @@ -54,6 +55,7 @@ struct MediaStorageDetailsView: View { } .sheet(item: $purchase) { purchase in WebPurchaseView(url: purchase.url, customTitle: purchase.title) { _ in + WPAnalytics.track(.mediaStorageDetailsPurchaseCompleted, properties: ["type": purchase.purchaseType]) SVProgressHUD.showSuccess(withStatus: purchase.successMessage) self.purchase = nil @@ -67,6 +69,7 @@ struct MediaStorageDetailsView: View { } } .task { + WPAnalytics.track(.mediaStorageDetailsViewed) await viewModel.refresh() } } @@ -77,10 +80,12 @@ struct MediaStorageDetailsView: View { switch action.kind { case .buyStorage: ActionSection(action: action) { + WPAnalytics.track(.mediaStorageDetailsActionTapped, properties: ["action": "storage"]) self.purchase = .storage(blog: viewModel.blog) } case .upgradePlan: ActionSection(action: action) { + WPAnalytics.track(.mediaStorageDetailsActionTapped, properties: ["action": "upgrade-plan"]) self.purchase = .upgradePlan(blog: viewModel.blog) } } @@ -158,6 +163,7 @@ private struct WebPurchase: Identifiable { var url: URL var title: String var successMessage: String + var purchaseType: String var id: URL { url @@ -169,7 +175,8 @@ private struct WebPurchase: Identifiable { .appending(path: blog.primaryDomainAddress) .appending(queryItems: [.init(name: "product", value: "storage")]), title: Strings.buyStorageTitle, - successMessage: Strings.storageUpgradeSuccessMessage + successMessage: Strings.storageUpgradeSuccessMessage, + purchaseType: "storage" ) } @@ -177,7 +184,8 @@ private struct WebPurchase: Identifiable { WebPurchase( url: URL(string: "https://wordpress.com/plans/yearly/")!.appending(path: blog.primaryDomainAddress), title: Strings.upgradePlanTitle, - successMessage: Strings.planUpgradeSuccessMessage + successMessage: Strings.planUpgradeSuccessMessage, + purchaseType: "upgrade-plan" ) } } From 2ef81101ce36df690c86238d0b261c9c6de86a51 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Wed, 12 Nov 2025 10:40:55 +1300 Subject: [PATCH 2/2] Remove feature flag --- .../Utility/BuildInformation/FeatureFlag.swift | 4 ---- .../SiteMediaAddMediaMenuController.swift | 18 ++++++------------ 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift b/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift index 80bb1f1046d5..b7d261baabdf 100644 --- a/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift +++ b/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift @@ -24,7 +24,6 @@ public enum FeatureFlag: Int, CaseIterable { case readerGutenbergCommentComposer case pluginManagementOverhaul case newStats - case mediaQuotaView case intelligence case newSupport case nativeBlockInserter @@ -80,8 +79,6 @@ public enum FeatureFlag: Int, CaseIterable { return false case .newStats: return false - case .mediaQuotaView: - return false case .intelligence: let languageCode = Locale.current.language.languageCode?.identifier return (languageCode ?? "en").hasPrefix("en") @@ -130,7 +127,6 @@ extension FeatureFlag { case .pluginManagementOverhaul: "Plugin Management Overhaul" case .readerGutenbergCommentComposer: "Gutenberg Comment Composer" case .newStats: "New Stats" - case .mediaQuotaView: "Media Quota" case .intelligence: "Intelligence" case .newSupport: "New Support" case .nativeBlockInserter: "Native Block Inserter" diff --git a/WordPress/Classes/ViewRelated/Media/SiteMedia/Controllers/SiteMediaAddMediaMenuController.swift b/WordPress/Classes/ViewRelated/Media/SiteMedia/Controllers/SiteMediaAddMediaMenuController.swift index 726566a0b7d8..361f876defe0 100644 --- a/WordPress/Classes/ViewRelated/Media/SiteMedia/Controllers/SiteMediaAddMediaMenuController.swift +++ b/WordPress/Classes/ViewRelated/Media/SiteMedia/Controllers/SiteMediaAddMediaMenuController.swift @@ -35,18 +35,12 @@ final class SiteMediaAddMediaMenuController: NSObject, PHPickerViewControllerDel UIMenu(options: [.displayInline], children: freeMediaActions) ] } - if let quotaUsageDescription = blog.quotaUsageDescription { - if FeatureFlag.mediaQuotaView.enabled { - children += [ - UIAction(title: Strings.viewUsage, subtitle: blog.quotaUsageShortDescription, image: UIImage(systemName: "opticaldiscdrive"), handler: { _ in - self.showQuotaView(from: viewController) - }) - ] - } else { - children += [ - UIAction(subtitle: quotaUsageDescription, handler: { _ in }) - ] - } + if blog.isHostedAtWPcom, blog.isQuotaAvailable { + children += [ + UIAction(title: Strings.viewUsage, subtitle: blog.quotaUsageShortDescription, image: UIImage(systemName: "opticaldiscdrive"), handler: { _ in + self.showQuotaView(from: viewController) + }) + ] } return UIMenu(options: [.displayInline], children: children) }