• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.adservices.service.stats;
18 
19 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED;
20 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__ACTION_UNSPECIFIED;
21 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__BLOCK_APP_SELECTED;
22 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__BLOCK_TOPIC_SELECTED;
23 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__CONFIRMATION_PAGE_DISMISSED;
24 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__CONFIRMATION_PAGE_DISPLAYED;
25 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__FLEDGE_OPT_IN_SELECTED;
26 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__FLEDGE_OPT_OUT_SELECTED;
27 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_CONFIRMATION_PAGE_DISMISSED;
28 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_ADDITIONAL_INFO_2_CLICKED;
29 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_ADDITIONAL_INFO_CLICKED;
30 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_DISMISSED;
31 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_GOT_IT_BUTTON_CLICKED;
32 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_MORE_BUTTON_CLICKED;
33 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_OPT_IN;
34 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_OPT_OUT;
35 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_SCROLLED;
36 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_SCROLLED_TO_BOTTOM;
37 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_SETTINGS_BUTTON_CLICKED;
38 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_NOTIFICATION_CONFIRMATION_PAGE_DISPLAYED;
39 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_NOTIFICATION_DISABLED;
40 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_NOTIFICATION_DISPLAYED;
41 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_NOTIFICATION_LANDING_PAGE_DISPLAYED;
42 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_NOTIFICATION_REQUESTED;
43 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_IN_CONFIRMATION_PAGE_GOT_IT_CLICKED;
44 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_IN_CONFIRMATION_PAGE_MORE_INFO_CLICKED;
45 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_IN_CONFIRMATION_PAGE_SETTINGS_CLICKED;
46 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_OUT_CONFIRMATION_PAGE_GOT_IT_CLICKED;
47 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_OUT_CONFIRMATION_PAGE_MORE_INFO_CLICKED;
48 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_OUT_CONFIRMATION_PAGE_SETTINGS_CLICKED;
49 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_ADDITIONAL_INFO_CLICKED;
50 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_DISMISSED;
51 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_DISPLAYED;
52 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_GOT_IT_BUTTON_CLICKED;
53 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_MORE_BUTTON_CLICKED;
54 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_OPT_IN;
55 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_OPT_OUT;
56 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_SCROLLED;
57 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_SCROLLED_TO_BOTTOM;
58 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_SETTINGS_BUTTON_CLICKED;
59 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__MANAGE_APPS_SELECTED;
60 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__MANAGE_MEASUREMENT_SELECTED;
61 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__MANAGE_TOPICS_SELECTED;
62 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__MEASUREMENT_OPT_IN_SELECTED;
63 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__MEASUREMENT_OPT_OUT_SELECTED;
64 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__NOTIFICATION_DISABLED;
65 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__NOTIFICATION_DISPLAYED;
66 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__NOTIFICATION_OPT_IN_SELECTED;
67 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__NOTIFICATION_OPT_OUT_SELECTED;
68 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_IN_CONFIRMATION_PAGE_GOT_IT_CLICKED;
69 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_IN_CONFIRMATION_PAGE_SETTINGS_CLICKED;
70 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_IN_SELECTED;
71 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_CONFIRMATION_PAGE_GOT_IT_CLICKED;
72 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_CONFIRMATION_PAGE_SETTINGS_CLICKED;
73 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_SELECTED;
74 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__PRIVACY_SANDBOX_ENTRY_POINT_CLICKED;
75 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__PRIVACY_SANDBOX_SETTINGS_PAGE_DISPLAYED;
76 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__REQUESTED_NOTIFICATION;
77 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__RESET_APP_SELECTED;
78 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__RESET_MEASUREMENT_SELECTED;
79 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__RESET_TOPIC_SELECTED;
80 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__TOPICS_OPT_IN_SELECTED;
81 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__TOPICS_OPT_OUT_SELECTED;
82 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__UNBLOCK_APP_SELECTED;
83 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__UNBLOCK_TOPIC_SELECTED;
84 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_AD_ID_STATE__AD_ID_DISABLED;
85 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_AD_ID_STATE__AD_ID_ENABLED;
86 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_AD_ID_STATE__STATE_UNSPECIFIED;
87 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__CONSENT_UNSPECIFIED;
88 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__FLEDGE_DEFAULT_OPT_IN;
89 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__FLEDGE_DEFAULT_OPT_OUT;
90 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__MEASUREMENT_DEFAULT_OPT_IN;
91 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__MEASUREMENT_DEFAULT_OPT_OUT;
92 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__PP_API_DEFAULT_OPT_IN;
93 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__PP_API_DEFAULT_OPT_OUT;
94 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__TOPICS_DEFAULT_OPT_IN;
95 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__TOPICS_DEFAULT_OPT_OUT;
96 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__ALREADY_ENROLLED_CHANNEL;
97 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__CONSENT_NOTIFICATION_DEBUG_CHANNEL;
98 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__FIRST_CONSENT_NOTIFICATION_CHANNEL;
99 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__PAS_FIRST_NOTIFICATION_CHANNEL;
100 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__PAS_RENOTIFY_NOTIFICATION_CHANNEL;
101 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__RECONSENT_NOTIFICATION_CHANNEL;
102 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__UNSPECIFIED_CHANNEL;
103 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__UNSUPPORTED_CHANNEL;
104 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__REGION__EU;
105 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__REGION__ROW;
106 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__BETA_UX;
107 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__GA_UX;
108 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__GA_UX_WITH_PAS;
109 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__UNSPECIFIED_UX;
110 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__UNSUPPORTED_UX;
111 import static com.android.adservices.service.ui.constants.DebugMessages.PRIVACY_SANDBOX_UI_REQUEST_MESSAGE;
112 
113 import android.content.Context;
114 import android.os.Build;
115 
116 import androidx.annotation.RequiresApi;
117 
118 import com.android.adservices.LogUtil;
119 import com.android.adservices.service.FlagsFactory;
120 import com.android.adservices.service.consent.AdServicesApiType;
121 import com.android.adservices.service.consent.ConsentManager;
122 import com.android.adservices.service.consent.DeviceRegionProvider;
123 import com.android.adservices.service.ui.data.UxStatesManager;
124 import com.android.adservices.service.ui.enrollment.collection.BetaUxEnrollmentChannelCollection;
125 import com.android.adservices.service.ui.enrollment.collection.GaUxEnrollmentChannelCollection;
126 import com.android.adservices.service.ui.enrollment.collection.PrivacySandboxEnrollmentChannelCollection;
127 import com.android.adservices.service.ui.enrollment.collection.U18UxEnrollmentChannelCollection;
128 import com.android.adservices.shared.common.ApplicationContextSingleton;
129 import com.android.internal.annotations.VisibleForTesting;
130 
131 /** Logger for UiStats. */
132 @RequiresApi(Build.VERSION_CODES.S)
133 public final class UiStatsLogger {
134     private static AdServicesLoggerImpl sLogger = AdServicesLoggerImpl.getInstance();
135 
136     /** Logs that a notification was displayed. */
logNotificationDisplayed()137     public static void logNotificationDisplayed() {
138         UIStats uiStats = getBaseUiStats();
139 
140         uiStats.setAction(
141                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
142                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_NOTIFICATION_DISPLAYED
143                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__NOTIFICATION_DISPLAYED);
144 
145         getAdServicesLogger().logUIStats(uiStats);
146     }
147 
148     /** Logs that the more button on the landing page was displayed. */
logLandingPageMoreButtonClicked()149     public static void logLandingPageMoreButtonClicked() {
150         UIStats uiStats = getBaseUiStats();
151 
152         uiStats.setAction(
153                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
154                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_MORE_BUTTON_CLICKED
155                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_MORE_BUTTON_CLICKED);
156 
157         getAdServicesLogger().logUIStats(uiStats);
158     }
159 
160     /** Logs that the additional info dropdown on the landing page was displayed. */
logLandingPageAdditionalInfoClicked()161     public static void logLandingPageAdditionalInfoClicked() {
162         UIStats uiStats = getBaseUiStats();
163 
164         uiStats.setAction(
165                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
166                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_ADDITIONAL_INFO_CLICKED
167                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_ADDITIONAL_INFO_CLICKED);
168 
169         getAdServicesLogger().logUIStats(uiStats);
170     }
171 
172     /** Logs that the user scrolled the landing page. */
logLandingPageScrolled()173     public static void logLandingPageScrolled() {
174         UIStats uiStats = getBaseUiStats();
175 
176         uiStats.setAction(
177                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
178                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_SCROLLED
179                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_SCROLLED);
180 
181         getAdServicesLogger().logUIStats(uiStats);
182     }
183 
184     /** Logs that the user scrolled to the bottom of the landing page. */
logLandingPageScrolledToBottom()185     public static void logLandingPageScrolledToBottom() {
186         UIStats uiStats = getBaseUiStats();
187 
188         uiStats.setAction(
189                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
190                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_SCROLLED_TO_BOTTOM
191                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_SCROLLED_TO_BOTTOM);
192 
193         getAdServicesLogger().logUIStats(uiStats);
194     }
195 
196     /** Logs that the user clicked the setting button on the landing page. */
logLandingPageSettingsButtonClicked()197     public static void logLandingPageSettingsButtonClicked() {
198         UIStats uiStats = getBaseUiStats();
199 
200         uiStats.setAction(
201                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
202                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_SETTINGS_BUTTON_CLICKED
203                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_SETTINGS_BUTTON_CLICKED);
204 
205         getAdServicesLogger().logUIStats(uiStats);
206     }
207 
208     /** Logs that the user dismissed the landing page. */
logLandingPageDismissed()209     public static void logLandingPageDismissed() {
210         UIStats uiStats = getBaseUiStats();
211 
212         uiStats.setAction(
213                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
214                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_DISMISSED
215                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_DISMISSED);
216 
217         getAdServicesLogger().logUIStats(uiStats);
218     }
219 
220     /** Logs that the user clicked the got it button on the landing page. */
logLandingPageGotItButtonClicked()221     public static void logLandingPageGotItButtonClicked() {
222         UIStats uiStats = getBaseUiStats();
223 
224         uiStats.setAction(
225                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
226                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_GOT_IT_BUTTON_CLICKED
227                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_GOT_IT_BUTTON_CLICKED);
228 
229         getAdServicesLogger().logUIStats(uiStats);
230     }
231 
232     /** Logs that the user opt-in from the landing page. */
logLandingPageOptIn()233     public static void logLandingPageOptIn() {
234         UIStats uiStats = getBaseUiStats();
235 
236         uiStats.setAction(
237                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
238                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_OPT_IN
239                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_OPT_IN);
240 
241         getAdServicesLogger().logUIStats(uiStats);
242     }
243 
244     /** Logs that the user opt-out from the landing page. */
logLandingPageOptOut()245     public static void logLandingPageOptOut() {
246         UIStats uiStats = getBaseUiStats();
247 
248         uiStats.setAction(
249                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
250                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_OPT_OUT
251                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_OPT_OUT);
252 
253         getAdServicesLogger().logUIStats(uiStats);
254     }
255 
256     /** Logs that the user clicked settings on the opt-in confirmation page. */
logOptInConfirmationPageSettingsClicked()257     public static void logOptInConfirmationPageSettingsClicked() {
258         UIStats uiStats = getBaseUiStats();
259 
260         uiStats.setAction(
261                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
262                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_IN_CONFIRMATION_PAGE_SETTINGS_CLICKED
263                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_IN_CONFIRMATION_PAGE_SETTINGS_CLICKED);
264 
265         getAdServicesLogger().logUIStats(uiStats);
266     }
267 
268     /** Logs that the user clicked settings on the opt-out confirmation page. */
logOptOutConfirmationPageSettingsClicked()269     public static void logOptOutConfirmationPageSettingsClicked() {
270         UIStats uiStats = getBaseUiStats();
271 
272         uiStats.setAction(
273                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
274                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_OUT_CONFIRMATION_PAGE_SETTINGS_CLICKED
275                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_CONFIRMATION_PAGE_SETTINGS_CLICKED);
276 
277         getAdServicesLogger().logUIStats(uiStats);
278     }
279 
280     /** Logs that the user clicked got it on the opt-in confirmation page. */
logOptInConfirmationPageGotItClicked()281     public static void logOptInConfirmationPageGotItClicked() {
282         UIStats uiStats = getBaseUiStats();
283 
284         uiStats.setAction(
285                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
286                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_IN_CONFIRMATION_PAGE_GOT_IT_CLICKED
287                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_IN_CONFIRMATION_PAGE_GOT_IT_CLICKED);
288 
289         getAdServicesLogger().logUIStats(uiStats);
290     }
291 
292     /** Logs that the user clicked got it on the opt-out confirmation page. */
logOptOutConfirmationPageGotItClicked()293     public static void logOptOutConfirmationPageGotItClicked() {
294         UIStats uiStats = getBaseUiStats();
295 
296         uiStats.setAction(
297                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
298                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_OUT_CONFIRMATION_PAGE_GOT_IT_CLICKED
299                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_CONFIRMATION_PAGE_GOT_IT_CLICKED);
300 
301         getAdServicesLogger().logUIStats(uiStats);
302     }
303 
304     /** GA only. Logs that the user clicked more info on the opt-in confirmation page. */
logOptInConfirmationPageMoreInfoClicked()305     public static void logOptInConfirmationPageMoreInfoClicked() {
306         UIStats uiStats = getBaseUiStats();
307 
308         uiStats.setAction(
309                 AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_IN_CONFIRMATION_PAGE_MORE_INFO_CLICKED);
310 
311         getAdServicesLogger().logUIStats(uiStats);
312     }
313 
314     /** GA only. Logs that the user clicked more info on the opt-out confirmation page. */
logOptOutConfirmationPageMoreInfoClicked()315     public static void logOptOutConfirmationPageMoreInfoClicked() {
316         UIStats uiStats = getBaseUiStats();
317 
318         uiStats.setAction(
319                 AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_OPT_OUT_CONFIRMATION_PAGE_MORE_INFO_CLICKED);
320 
321         getAdServicesLogger().logUIStats(uiStats);
322     }
323 
324     /** Logs that the user dismissed the confirmation page. */
logConfirmationPageDismissed()325     public static void logConfirmationPageDismissed() {
326         UIStats uiStats = getBaseUiStats();
327 
328         uiStats.setAction(
329                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
330                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_CONFIRMATION_PAGE_DISMISSED
331                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__CONFIRMATION_PAGE_DISMISSED);
332 
333         getAdServicesLogger().logUIStats(uiStats);
334     }
335 
336     /** Logs that a notification was requested. */
logRequestedNotification()337     public static void logRequestedNotification() {
338         UIStats uiStats = getBaseUiStats();
339 
340         uiStats.setUx(getUx(true));
341         uiStats.setAction(
342                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
343                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_NOTIFICATION_REQUESTED
344                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__REQUESTED_NOTIFICATION);
345 
346         getAdServicesLogger().logUIStats(uiStats);
347     }
348 
349     /** Logs that notifications are disabled on a device. */
logNotificationDisabled()350     public static void logNotificationDisabled() {
351         UIStats uiStats = getBaseUiStats();
352 
353         uiStats.setUx(getUx(true));
354         uiStats.setAction(
355                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
356                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_NOTIFICATION_DISABLED
357                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__NOTIFICATION_DISABLED);
358 
359         getAdServicesLogger().logUIStats(uiStats);
360     }
361 
362     /** Logs that the landing page was shown to a user. */
logLandingPageDisplayed()363     public static void logLandingPageDisplayed() {
364         UIStats uiStats = getBaseUiStats();
365 
366         uiStats.setAction(
367                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
368                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_NOTIFICATION_LANDING_PAGE_DISPLAYED
369                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__LANDING_PAGE_DISPLAYED);
370 
371         getAdServicesLogger().logUIStats(uiStats);
372     }
373 
374     /** Logs that the confirmation page was shown to a user. */
logConfirmationPageDisplayed()375     public static void logConfirmationPageDisplayed() {
376         UIStats uiStats = getBaseUiStats();
377 
378         uiStats.setAction(
379                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
380                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_NOTIFICATION_CONFIRMATION_PAGE_DISPLAYED
381                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__CONFIRMATION_PAGE_DISPLAYED);
382 
383         getAdServicesLogger().logUIStats(uiStats);
384     }
385 
386     /** Logs user opt-in action for PP API. */
logOptInSelected()387     public static void logOptInSelected() {
388         UIStats uiStats = getBaseUiStats();
389 
390         uiStats.setAction(
391                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
392                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__NOTIFICATION_OPT_IN_SELECTED
393                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_IN_SELECTED);
394 
395         getAdServicesLogger().logUIStats(uiStats);
396     }
397 
398     /** Logs user opt-out action for PP API. */
logOptOutSelected()399     public static void logOptOutSelected() {
400         UIStats uiStats = getBaseUiStats();
401 
402         uiStats.setAction(
403                 FlagsFactory.getFlags().getGaUxFeatureEnabled()
404                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__NOTIFICATION_OPT_OUT_SELECTED
405                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_SELECTED);
406 
407         getAdServicesLogger().logUIStats(uiStats);
408     }
409 
410     /** Logs user opt-in action given an ApiType. */
logOptInSelected(AdServicesApiType apiType)411     public static void logOptInSelected(AdServicesApiType apiType) {
412         UIStats uiStats = getBaseUiStats(apiType);
413 
414         uiStats.setAction(getPerApiConsentAction(apiType, /* isOptIn */ true));
415 
416         getAdServicesLogger().logUIStats(uiStats);
417     }
418 
419     /** Logs user opt-out action given an ApiType. */
logOptOutSelected(AdServicesApiType apiType)420     public static void logOptOutSelected(AdServicesApiType apiType) {
421         UIStats uiStats = getBaseUiStats(apiType);
422 
423         uiStats.setAction(getPerApiConsentAction(apiType, /* isOptIn */ false));
424 
425         getAdServicesLogger().logUIStats(uiStats);
426     }
427 
428     /** Logs that a user has opened the settings page. */
logSettingsPageDisplayed()429     public static void logSettingsPageDisplayed() {
430         UIStats uiStats = getBaseUiStats();
431 
432         uiStats.setAction(
433                 AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__PRIVACY_SANDBOX_SETTINGS_PAGE_DISPLAYED);
434 
435         getAdServicesLogger().logUIStats(uiStats);
436     }
437 
438     /** Logs that a user has clicked manage topics button. */
logManageTopicsSelected()439     public static void logManageTopicsSelected() {
440         UIStats uiStats = getBaseUiStats();
441 
442         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__MANAGE_TOPICS_SELECTED);
443 
444         getAdServicesLogger().logUIStats(uiStats);
445     }
446 
447     /** Logs that a user has clicked manage apps button. */
logManageAppsSelected()448     public static void logManageAppsSelected() {
449         UIStats uiStats = getBaseUiStats();
450 
451         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__MANAGE_APPS_SELECTED);
452 
453         getAdServicesLogger().logUIStats(uiStats);
454     }
455 
456     /** Logs that a user has clicked reset topics button. */
logResetTopicSelected()457     public static void logResetTopicSelected() {
458         UIStats uiStats = getBaseUiStats();
459 
460         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__RESET_TOPIC_SELECTED);
461 
462         getAdServicesLogger().logUIStats(uiStats);
463     }
464 
465     /** Logs that a user has clicked reset apps button. */
logResetAppSelected()466     public static void logResetAppSelected() {
467         UIStats uiStats = getBaseUiStats();
468 
469         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__RESET_APP_SELECTED);
470 
471         getAdServicesLogger().logUIStats(uiStats);
472     }
473 
474     /** Logs that a user has clicked block topic button. */
logBlockTopicSelected()475     public static void logBlockTopicSelected() {
476         UIStats uiStats = getBaseUiStats();
477 
478         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__BLOCK_TOPIC_SELECTED);
479 
480         getAdServicesLogger().logUIStats(uiStats);
481     }
482 
483     /** Logs that a user has clicked unblock topic button. */
logUnblockTopicSelected()484     public static void logUnblockTopicSelected() {
485         UIStats uiStats = getBaseUiStats();
486 
487         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__UNBLOCK_TOPIC_SELECTED);
488 
489         getAdServicesLogger().logUIStats(uiStats);
490     }
491 
492     /** Logs that a user has clicked block app button. */
logBlockAppSelected()493     public static void logBlockAppSelected() {
494         UIStats uiStats = getBaseUiStats();
495 
496         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__BLOCK_APP_SELECTED);
497 
498         getAdServicesLogger().logUIStats(uiStats);
499     }
500 
501     /** Logs that a user has clicked unblock app button. */
logUnblockAppSelected()502     public static void logUnblockAppSelected() {
503         UIStats uiStats = getBaseUiStats();
504 
505         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__UNBLOCK_APP_SELECTED);
506 
507         getAdServicesLogger().logUIStats(uiStats);
508     }
509 
510     /** Logs that a user has clicked manage measurement button. */
logManageMeasurementSelected()511     public static void logManageMeasurementSelected() {
512         UIStats uiStats = getBaseUiStats();
513 
514         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__MANAGE_MEASUREMENT_SELECTED);
515 
516         getAdServicesLogger().logUIStats(uiStats);
517     }
518 
519     /** Logs that a user has clicked reset measurement button. */
logResetMeasurementSelected()520     public static void logResetMeasurementSelected() {
521         UIStats uiStats = getBaseUiStats();
522 
523         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__RESET_MEASUREMENT_SELECTED);
524 
525         getAdServicesLogger().logUIStats(uiStats);
526     }
527 
528     /** Logs that the user has clicked the privacy sandbox entry point in the settings page. */
logEntryPointClicked()529     public static void logEntryPointClicked() {
530         UIStats uiStats = getBaseUiStats();
531 
532         uiStats.setAction(
533                 AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__PRIVACY_SANDBOX_ENTRY_POINT_CLICKED);
534 
535         getAdServicesLogger().logUIStats(uiStats);
536 
537         LogUtil.d(PRIVACY_SANDBOX_UI_REQUEST_MESSAGE);
538     }
539 
540     /** Logs that the second additional info button on the landing page was clicked. */
logLandingPageSecondAdditionalInfoClicked()541     public static void logLandingPageSecondAdditionalInfoClicked() {
542         UIStats uiStats = getBaseUiStats();
543 
544         uiStats.setAction(
545                 AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__GA_UX_LANDING_PAGE_ADDITIONAL_INFO_2_CLICKED);
546 
547         getAdServicesLogger().logUIStats(uiStats);
548     }
549 
550     @VisibleForTesting
getAdServicesLogger()551     public static AdServicesLogger getAdServicesLogger() {
552         return sLogger;
553     }
554     /** Logs that the user enter an unspecified ux flow. */
logRequestedNotificationIneligible()555     public static void logRequestedNotificationIneligible() {
556         UIStats uiStats = getBaseUiStats();
557 
558         /* Reuse beta's notification here, so that this track won't affect GA metrics */
559         uiStats.setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__REQUESTED_NOTIFICATION);
560         uiStats.setUx(AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__UNSUPPORTED_UX);
561         sLogger.logUIStats(uiStats);
562 
563         LogUtil.d(PRIVACY_SANDBOX_UI_REQUEST_MESSAGE);
564     }
565 
getRegion()566     private static int getRegion() {
567         Context context = getApplicationContext();
568         return DeviceRegionProvider.isEuDevice(context)
569                 ? AD_SERVICES_SETTINGS_USAGE_REPORTED__REGION__EU
570                 : AD_SERVICES_SETTINGS_USAGE_REPORTED__REGION__ROW;
571     }
572 
getDefaultConsent()573     private static int getDefaultConsent() {
574         Boolean defaultConsent = ConsentManager.getInstance().getDefaultConsent();
575         // edge case where the user opens the settings pages before receiving consent notification.
576         if (defaultConsent == null) {
577             return AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__CONSENT_UNSPECIFIED;
578         } else {
579             return defaultConsent
580                     ? AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__PP_API_DEFAULT_OPT_IN
581                     : AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__PP_API_DEFAULT_OPT_OUT;
582         }
583     }
584 
getDefaultAdIdState()585     private static int getDefaultAdIdState() {
586         Boolean defaultAdIdState = ConsentManager.getInstance().getDefaultAdIdState();
587         // edge case where the user opens the settings pages before receiving consent notification.
588         if (defaultAdIdState == null) {
589             return AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_AD_ID_STATE__STATE_UNSPECIFIED;
590         } else {
591             return defaultAdIdState
592                     ? AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_AD_ID_STATE__AD_ID_ENABLED
593                     : AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_AD_ID_STATE__AD_ID_DISABLED;
594         }
595     }
596 
getDefaultConsent(AdServicesApiType apiType)597     private static int getDefaultConsent(AdServicesApiType apiType) {
598         switch (apiType) {
599             case TOPICS:
600                 Boolean topicsDefaultConsent =
601                         ConsentManager.getInstance().getTopicsDefaultConsent();
602                 // edge case where the user checks topic consent before receiving consent
603                 // notification.
604                 if (topicsDefaultConsent == null) {
605                     return AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_AD_ID_STATE__STATE_UNSPECIFIED;
606                 } else {
607                     return topicsDefaultConsent
608                             ? AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__TOPICS_DEFAULT_OPT_IN
609                             : AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__TOPICS_DEFAULT_OPT_OUT;
610                 }
611             case FLEDGE:
612                 Boolean fledgeDefaultConsent =
613                         ConsentManager.getInstance().getFledgeDefaultConsent();
614                 // edge case where the user checks FLEDGE consent before receiving consent
615                 // notification.
616                 if (fledgeDefaultConsent == null) {
617                     return AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_AD_ID_STATE__STATE_UNSPECIFIED;
618                 } else {
619                     return fledgeDefaultConsent
620                             ? AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__FLEDGE_DEFAULT_OPT_IN
621                             : AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__FLEDGE_DEFAULT_OPT_OUT;
622                 }
623             case MEASUREMENTS:
624                 Boolean measurementDefaultConsent =
625                         ConsentManager.getInstance().getMeasurementDefaultConsent();
626                 // edge case where the user checks measurement consent before receiving consent
627                 // notification.
628                 if (measurementDefaultConsent == null) {
629                     return AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_AD_ID_STATE__STATE_UNSPECIFIED;
630                 } else {
631                     return measurementDefaultConsent
632                             ? AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__MEASUREMENT_DEFAULT_OPT_IN
633                             : AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__MEASUREMENT_DEFAULT_OPT_OUT;
634                 }
635             default:
636                 return AD_SERVICES_SETTINGS_USAGE_REPORTED__DEFAULT_CONSENT__CONSENT_UNSPECIFIED;
637         }
638     }
639 
getPerApiConsentAction(AdServicesApiType apiType, boolean isOptIn)640     private static int getPerApiConsentAction(AdServicesApiType apiType, boolean isOptIn) {
641         switch (apiType) {
642             case TOPICS:
643                 return isOptIn
644                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__TOPICS_OPT_IN_SELECTED
645                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__TOPICS_OPT_OUT_SELECTED;
646             case FLEDGE:
647                 return isOptIn
648                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__FLEDGE_OPT_IN_SELECTED
649                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__FLEDGE_OPT_OUT_SELECTED;
650             case MEASUREMENTS:
651                 return isOptIn
652                         ? AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__MEASUREMENT_OPT_IN_SELECTED
653                         : AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__MEASUREMENT_OPT_OUT_SELECTED;
654             default:
655                 return AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__ACTION_UNSPECIFIED;
656         }
657     }
658 
getUx(boolean beforeNotificationShown)659     private static int getUx(boolean beforeNotificationShown) {
660         switch (UxStatesManager.getInstance().getUx()) {
661             case U18_UX:
662                 return AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__UNSPECIFIED_UX;
663             case GA_UX:
664                 if (UxStatesManager.getInstance().pasUxIsActive(beforeNotificationShown)) {
665                     // UI views should be updated only once notification is sent (ROW).
666                     return AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__GA_UX_WITH_PAS;
667                 }
668                 return AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__GA_UX;
669             case BETA_UX:
670                 return AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__BETA_UX;
671             default:
672                 return AD_SERVICES_SETTINGS_USAGE_REPORTED__UX__UNSUPPORTED_UX;
673         }
674     }
675 
getEnrollmentChannel()676     private static int getEnrollmentChannel() {
677         PrivacySandboxEnrollmentChannelCollection enrollmentChannel =
678                 UxStatesManager.getInstance().getEnrollmentChannel();
679         if (enrollmentChannel == GaUxEnrollmentChannelCollection.FIRST_CONSENT_NOTIFICATION_CHANNEL
680                 || enrollmentChannel
681                         == BetaUxEnrollmentChannelCollection.FIRST_CONSENT_NOTIFICATION_CHANNEL
682                 || enrollmentChannel
683                         == U18UxEnrollmentChannelCollection.FIRST_CONSENT_NOTIFICATION_CHANNEL) {
684             return AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__FIRST_CONSENT_NOTIFICATION_CHANNEL;
685         } else if (enrollmentChannel
686                 == GaUxEnrollmentChannelCollection.PAS_FIRST_CONSENT_NOTIFICATION_CHANNEL) {
687             return AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__PAS_FIRST_NOTIFICATION_CHANNEL;
688         } else if (enrollmentChannel
689                         == GaUxEnrollmentChannelCollection.CONSENT_NOTIFICATION_DEBUG_CHANNEL
690                 || enrollmentChannel
691                         == BetaUxEnrollmentChannelCollection.CONSENT_NOTIFICATION_DEBUG_CHANNEL
692                 || enrollmentChannel
693                         == U18UxEnrollmentChannelCollection.CONSENT_NOTIFICATION_DEBUG_CHANNEL) {
694             return AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__CONSENT_NOTIFICATION_DEBUG_CHANNEL;
695         } else if (enrollmentChannel == GaUxEnrollmentChannelCollection.ALREADY_ENROLLED_CHANNEL
696                 || enrollmentChannel == BetaUxEnrollmentChannelCollection.ALREADY_ENROLLED_CHANNEL
697                 || enrollmentChannel == U18UxEnrollmentChannelCollection.ALREADY_ENROLLED_CHANNEL) {
698             return AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__ALREADY_ENROLLED_CHANNEL;
699         } else if (enrollmentChannel
700                 == GaUxEnrollmentChannelCollection.RECONSENT_NOTIFICATION_CHANNEL) {
701             return AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__RECONSENT_NOTIFICATION_CHANNEL;
702         } else if (enrollmentChannel
703                 == GaUxEnrollmentChannelCollection.PAS_RECONSENT_NOTIFICATION_CHANNEL) {
704             return AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__PAS_RENOTIFY_NOTIFICATION_CHANNEL;
705         } else if (enrollmentChannel == GaUxEnrollmentChannelCollection.GA_GRADUATION_CHANNEL) {
706             return AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__UNSPECIFIED_CHANNEL;
707         } else if (enrollmentChannel == U18UxEnrollmentChannelCollection.U18_DETENTION_CHANNEL) {
708             return AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__UNSPECIFIED_CHANNEL;
709         }
710         return AD_SERVICES_SETTINGS_USAGE_REPORTED__ENROLLMENT_CHANNEL__UNSUPPORTED_CHANNEL;
711     }
712 
getBaseUiStats()713     private static UIStats getBaseUiStats() {
714         return new UIStats.Builder()
715                 .setCode(AD_SERVICES_SETTINGS_USAGE_REPORTED)
716                 .setRegion(getRegion())
717                 .setDefaultConsent(getDefaultConsent())
718                 .setDefaultAdIdState(getDefaultAdIdState())
719                 .setUx(getUx(/* beforeNotificationShown */ false))
720                 .setEnrollmentChannel(getEnrollmentChannel())
721                 .build();
722     }
723 
getBaseUiStats(AdServicesApiType apiType)724     private static UIStats getBaseUiStats(AdServicesApiType apiType) {
725         return new UIStats.Builder()
726                 .setCode(AD_SERVICES_SETTINGS_USAGE_REPORTED)
727                 .setRegion(getRegion())
728                 .setDefaultConsent(getDefaultConsent(apiType))
729                 .setDefaultAdIdState(getDefaultAdIdState())
730                 .setUx(getUx(/* beforeNotificationShown */ false))
731                 .setEnrollmentChannel(getEnrollmentChannel())
732                 .build();
733     }
734 
getApplicationContext()735     private static Context getApplicationContext() {
736         return ApplicationContextSingleton.get();
737     }
738 
UiStatsLogger()739     private UiStatsLogger() {
740         throw new UnsupportedOperationException();
741     }
742 }
743