Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java |
| index 867f56f1888fb831258f4726a1a69a8c97382ca3..724dd340688ae0da2e698c7f22f298c054df850d 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/PhysicalWebUma.java |
| @@ -53,6 +53,18 @@ public class PhysicalWebUma { |
| private static final String TOTAL_URLS_REFRESH_COUNTS = |
| "PhysicalWeb.TotalUrls.OnRefresh"; |
| private static final String ACTIVITY_REFERRALS = "PhysicalWeb.ActivityReferral"; |
| + private static final String CHROME_START_STATES = "PhysicalWeb.State.ChromeStart"; |
| + private static final String LAUNCH_FROM_PREFERENCES_STATES = |
| + "PhysicalWeb.State.LaunchFromPreferences"; |
| + private static final String LAUNCH_FROM_DIAGNOSTICS_STATES = |
| + "PhysicalWeb.State.LaunchFromDiagnostics"; |
| + private static final String LOCATION_SERVICES = "LocationServices"; |
| + private static final String LOCATION_PERMISSION = "LocationPermission"; |
| + private static final String BLUETOOTH = "Bluetooth"; |
| + private static final String DATA_CONNECTION = "DataConnection"; |
| + private static final String PREFERENCE = "PREFERENCE"; |
|
newt (away)
2016/04/08 18:00:11
Why all caps (unlike all the others)? Would this
cco3
2016/04/08 18:54:54
Done.
|
| + private static final int BOOLEAN_BOUNDARY = 2; |
| + private static final int TRISTATE_BOUNDARY = 3; |
| private static boolean sUploadAllowed = false; |
| /** |
| @@ -173,30 +185,63 @@ public class PhysicalWebUma { |
| * histograms.xml. |
| */ |
| public static void onActivityReferral(Context context, int referer) { |
| - if (sUploadAllowed) { |
| - RecordHistogram.recordEnumeratedHistogram( |
| - ACTIVITY_REFERRALS, referer, ListUrlsActivity.REFERER_BOUNDARY); |
| - } else { |
| - storeValue(context, ACTIVITY_REFERRALS, referer); |
| - } |
| - long delay; |
| + handleEnum(context, ACTIVITY_REFERRALS, referer, ListUrlsActivity.REFERER_BOUNDARY); |
| switch (referer) { |
| case ListUrlsActivity.NOTIFICATION_REFERER: |
| - delay = UrlManager.getInstance(context).getTimeSinceNotificationUpdate(); |
| - handleTime(context, STANDARD_NOTIFICATION_PRESS_DELAYS, delay, |
| + handleTime(context, STANDARD_NOTIFICATION_PRESS_DELAYS, |
| + UrlManager.getInstance(context).getTimeSinceNotificationUpdate(), |
| TimeUnit.MILLISECONDS); |
| break; |
| case ListUrlsActivity.OPTIN_REFERER: |
| - delay = UrlManager.getInstance(context).getTimeSinceNotificationUpdate(); |
| - handleTime(context, OPT_IN_NOTIFICATION_PRESS_DELAYS, delay, |
| + handleTime(context, OPT_IN_NOTIFICATION_PRESS_DELAYS, |
| + UrlManager.getInstance(context).getTimeSinceNotificationUpdate(), |
| TimeUnit.MILLISECONDS); |
| break; |
| + case ListUrlsActivity.PREFERENCE_REFERER: |
| + recordPhysicalWebState(context, LAUNCH_FROM_PREFERENCES_STATES); |
| + break; |
| + case ListUrlsActivity.DIAGNOSTICS_REFERER: |
| + recordPhysicalWebState(context, LAUNCH_FROM_DIAGNOSTICS_STATES); |
| + break; |
| default: |
| break; |
| } |
| } |
| /** |
| + * Records the Physical Web state on Chrome startup. |
| + */ |
| + public static void onChromeStart(Context context) { |
| + recordPhysicalWebState(context, CHROME_START_STATES); |
| + } |
| + |
| + /** |
| + * Calculate a Physical Web state. |
| + * The Physical Web state includes: |
| + * - The location provider |
| + * - The location permission |
| + * - The bluetooth status |
| + * - The data connection status |
| + * - The Physical Web preference status |
| + */ |
| + public static void recordPhysicalWebState(Context context, String prefix) { |
| + String newPrefix = prefix + "."; |
| + handleEnum(context, newPrefix + LOCATION_SERVICES, |
| + Utils.isLocationServicesEnabled(context) ? 1 : 0, BOOLEAN_BOUNDARY); |
| + handleEnum(context, newPrefix + LOCATION_PERMISSION, |
| + Utils.isLocationPermissionGranted(context) ? 1 : 0, BOOLEAN_BOUNDARY); |
| + handleEnum(context, newPrefix + BLUETOOTH, |
| + Utils.getBluetoothEnabledStatus(context), TRISTATE_BOUNDARY); |
| + handleEnum(context, newPrefix + DATA_CONNECTION, |
| + Utils.isDataConnectionActive(context) ? 1 : 0, BOOLEAN_BOUNDARY); |
| + int preferenceState = 2; |
| + if (!PhysicalWeb.isOnboarding(context)) { |
| + preferenceState = PhysicalWeb.isPhysicalWebPreferenceEnabled(context) ? 1 : 0; |
| + } |
| + handleEnum(context, newPrefix + PREFERENCE, preferenceState, TRISTATE_BOUNDARY); |
| + } |
| + |
| + /** |
| * Uploads metrics that we have deferred for uploading. |
| * Additionally, this method will cause future stat records not to be deferred and instead |
| * uploaded immediately. |
| @@ -256,6 +301,14 @@ public class PhysicalWebUma { |
| } |
| } |
| + private static void handleEnum(Context context, String key, int value, int boundary) { |
| + if (sUploadAllowed) { |
| + RecordHistogram.recordEnumeratedHistogram(key, value, boundary); |
| + } else { |
| + storeValue(context, key, value); |
| + } |
| + } |
| + |
| private static class UmaUploader implements Runnable { |
| SharedPreferences mPrefs; |
| @@ -282,6 +335,23 @@ public class PhysicalWebUma { |
| uploadCounts(TOTAL_URLS_INITIAL_COUNTS); |
| uploadCounts(TOTAL_URLS_REFRESH_COUNTS); |
| uploadEnums(ACTIVITY_REFERRALS, ListUrlsActivity.REFERER_BOUNDARY); |
| + uploadEnums(CHROME_START_STATES + "." + LOCATION_SERVICES, BOOLEAN_BOUNDARY); |
| + uploadEnums(CHROME_START_STATES + "." + LOCATION_PERMISSION, BOOLEAN_BOUNDARY); |
| + uploadEnums(CHROME_START_STATES + "." + BLUETOOTH, TRISTATE_BOUNDARY); |
| + uploadEnums(CHROME_START_STATES + "." + DATA_CONNECTION, BOOLEAN_BOUNDARY); |
| + uploadEnums(CHROME_START_STATES + "." + PREFERENCE, TRISTATE_BOUNDARY); |
| + uploadEnums(LAUNCH_FROM_PREFERENCES_STATES + "." + LOCATION_SERVICES, BOOLEAN_BOUNDARY); |
| + uploadEnums(LAUNCH_FROM_PREFERENCES_STATES + "." + LOCATION_PERMISSION, |
| + BOOLEAN_BOUNDARY); |
| + uploadEnums(LAUNCH_FROM_PREFERENCES_STATES + "." + BLUETOOTH, TRISTATE_BOUNDARY); |
| + uploadEnums(LAUNCH_FROM_PREFERENCES_STATES + "." + DATA_CONNECTION, BOOLEAN_BOUNDARY); |
| + uploadEnums(LAUNCH_FROM_PREFERENCES_STATES + "." + PREFERENCE, TRISTATE_BOUNDARY); |
| + uploadEnums(LAUNCH_FROM_DIAGNOSTICS_STATES + "." + LOCATION_SERVICES, BOOLEAN_BOUNDARY); |
| + uploadEnums(LAUNCH_FROM_DIAGNOSTICS_STATES + "." + LOCATION_PERMISSION, |
| + BOOLEAN_BOUNDARY); |
| + uploadEnums(LAUNCH_FROM_DIAGNOSTICS_STATES + "." + BLUETOOTH, TRISTATE_BOUNDARY); |
| + uploadEnums(LAUNCH_FROM_DIAGNOSTICS_STATES + "." + DATA_CONNECTION, BOOLEAN_BOUNDARY); |
| + uploadEnums(LAUNCH_FROM_DIAGNOSTICS_STATES + "." + PREFERENCE, TRISTATE_BOUNDARY); |
| removePref(HAS_DEFERRED_METRICS_KEY); |
| } |