| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.contextualsearch; | 5 package org.chromium.chrome.browser.contextualsearch; |
| 6 | 6 |
| 7 import android.util.Pair; | 7 import android.util.Pair; |
| 8 | 8 |
| 9 import org.chromium.base.metrics.RecordHistogram; | 9 import org.chromium.base.metrics.RecordHistogram; |
| 10 import org.chromium.base.metrics.RecordUserAction; | 10 import org.chromium.base.metrics.RecordUserAction; |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 // Constants used to log UMA "enum" histograms with details about whether se
arch results | 164 // Constants used to log UMA "enum" histograms with details about whether se
arch results |
| 165 // were seen, and what the original triggering gesture was. | 165 // were seen, and what the original triggering gesture was. |
| 166 private static final int PROMO_ENABLED_FROM_TAP = 0; | 166 private static final int PROMO_ENABLED_FROM_TAP = 0; |
| 167 private static final int PROMO_DISABLED_FROM_TAP = 1; | 167 private static final int PROMO_DISABLED_FROM_TAP = 1; |
| 168 private static final int PROMO_UNDECIDED_FROM_TAP = 2; | 168 private static final int PROMO_UNDECIDED_FROM_TAP = 2; |
| 169 private static final int PROMO_ENABLED_FROM_LONG_PRESS = 3; | 169 private static final int PROMO_ENABLED_FROM_LONG_PRESS = 3; |
| 170 private static final int PROMO_DISABLED_FROM_LONG_PRESS = 4; | 170 private static final int PROMO_DISABLED_FROM_LONG_PRESS = 4; |
| 171 private static final int PROMO_UNDECIDED_FROM_LONG_PRESS = 5; | 171 private static final int PROMO_UNDECIDED_FROM_LONG_PRESS = 5; |
| 172 private static final int PROMO_BY_GESTURE_BOUNDARY = 6; | 172 private static final int PROMO_BY_GESTURE_BOUNDARY = 6; |
| 173 | 173 |
| 174 // Constants used to log UMA "enum" histograms with summary counts for SERP
loading times. | |
| 175 private static final int PREFETCHED_PARIALLY_LOADED = 0; | |
| 176 private static final int PREFETCHED_FULLY_LOADED = 1; | |
| 177 private static final int NOT_PREFETCHED = 2; | |
| 178 private static final int PREFETCH_BOUNDARY = 3; | |
| 179 | |
| 180 // Constants used to log UMA "enum" histograms for HTTP / HTTPS. | 174 // Constants used to log UMA "enum" histograms for HTTP / HTTPS. |
| 181 private static final int PROTOCOL_IS_HTTP = 0; | 175 private static final int PROTOCOL_IS_HTTP = 0; |
| 182 private static final int PROTOCOL_NOT_HTTP = 1; | 176 private static final int PROTOCOL_NOT_HTTP = 1; |
| 183 private static final int PROTOCOL_BOUNDARY = 2; | 177 private static final int PROTOCOL_BOUNDARY = 2; |
| 184 | 178 |
| 185 // Constants used to log UMA "enum" histograms for single / multi-word. | 179 // Constants used to log UMA "enum" histograms for single / multi-word. |
| 186 private static final int RESOLVED_SINGLE_WORD = 0; | 180 private static final int RESOLVED_SINGLE_WORD = 0; |
| 187 private static final int RESOLVED_MULTI_WORD = 1; | 181 private static final int RESOLVED_MULTI_WORD = 1; |
| 188 private static final int RESOLVED_BOUNDARY = 2; | 182 private static final int RESOLVED_BOUNDARY = 2; |
| 189 | 183 |
| 190 // Constants used to log UMA "enum" histograms for partially / fully loaded. | |
| 191 private static final int PARTIALLY_LOADED = 0; | |
| 192 private static final int FULLY_LOADED = 1; | |
| 193 private static final int LOADED_BOUNDARY = 2; | |
| 194 | |
| 195 // Constants used to log UMA "enum" histograms for triggering the Translate
Onebox. | 184 // Constants used to log UMA "enum" histograms for triggering the Translate
Onebox. |
| 196 private static final int DID_FORCE_TRANSLATE = 0; | 185 private static final int DID_FORCE_TRANSLATE = 0; |
| 197 private static final int WOULD_FORCE_TRANSLATE = 1; | 186 private static final int WOULD_FORCE_TRANSLATE = 1; |
| 198 private static final int FORCE_TRANSLATE_BOUNDARY = 2; | 187 private static final int FORCE_TRANSLATE_BOUNDARY = 2; |
| 199 | 188 |
| 200 // Constants used to log UMA "enum" histograms with details about whether th
e search | |
| 201 // provider sprite icon was animated, whether search results were seen and t
he triggering | |
| 202 // gesture. All new values should be inserted right before ICON_SPRITE_BOUND
ARY. | |
| 203 private static final int ICON_SPRITE_ANIMATED_RESULTS_SEEN_FROM_TAP = 0; | |
| 204 private static final int ICON_SPRITE_ANIMATED_RESULTS_NOT_SEEN_FROM_TAP = 1; | |
| 205 private static final int ICON_SPRITE_NOT_ANIMATED_RESULTS_SEEN_FROM_TAP = 2; | |
| 206 private static final int ICON_SPRITE_NOT_ANIMATED_RESULTS_NOT_SEEN_FROM_TAP
= 3; | |
| 207 private static final int ICON_SPRITE_ANIMATED_RESULTS_SEEN_FROM_LONG_PRESS =
4; | |
| 208 private static final int ICON_SPRITE_ANIMATED_RESULTS_NOT_SEEN_FROM_LONG_PRE
SS = 5; | |
| 209 private static final int ICON_SPRITE_NOT_ANIMATED_RESULTS_SEEN_FROM_LONG_PRE
SS = 6; | |
| 210 private static final int ICON_SPRITE_NOT_ANIMATED_RESULTS_NOT_SEEN_FROM_LONG
_PRESS = 7; | |
| 211 private static final int ICON_SPRITE_BOUNDARY = 8; | |
| 212 | |
| 213 // Constants used to log UMA "enum" histograms for Quick Answers. | 189 // Constants used to log UMA "enum" histograms for Quick Answers. |
| 214 private static final int QUICK_ANSWER_ACTIVATED_WAS_AN_ANSWER_SEEN = 0; | 190 private static final int QUICK_ANSWER_ACTIVATED_WAS_AN_ANSWER_SEEN = 0; |
| 215 private static final int QUICK_ANSWER_ACTIVATED_WAS_AN_ANSWER_NOT_SEEN = 1; | 191 private static final int QUICK_ANSWER_ACTIVATED_WAS_AN_ANSWER_NOT_SEEN = 1; |
| 216 private static final int QUICK_ANSWER_ACTIVATED_NOT_AN_ANSWER_SEEN = 2; | 192 private static final int QUICK_ANSWER_ACTIVATED_NOT_AN_ANSWER_SEEN = 2; |
| 217 private static final int QUICK_ANSWER_ACTIVATED_NOT_AN_ANSWER_NOT_SEEN = 3; | 193 private static final int QUICK_ANSWER_ACTIVATED_NOT_AN_ANSWER_NOT_SEEN = 3; |
| 218 private static final int QUICK_ANSWER_NOT_ACTIVATED_SEEN = 4; | 194 private static final int QUICK_ANSWER_NOT_ACTIVATED_SEEN = 4; |
| 219 private static final int QUICK_ANSWER_NOT_ACTIVATED_NOT_SEEN = 5; | 195 private static final int QUICK_ANSWER_NOT_ACTIVATED_NOT_SEEN = 5; |
| 220 private static final int QUICK_ANSWER_SEEN_BOUNDARY = 6; | 196 private static final int QUICK_ANSWER_SEEN_BOUNDARY = 6; |
| 221 | 197 |
| 222 // Constants for "Bar Overlap" with triggering gesture, and whether the resu
lts were seen. | 198 // Constants for "Bar Overlap" with triggering gesture, and whether the resu
lts were seen. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 StateChangeKey other = (StateChangeKey) obj; | 237 StateChangeKey other = (StateChangeKey) obj; |
| 262 return mState.equals(other.mState) && mReason.equals(other.mReason); | 238 return mState.equals(other.mState) && mReason.equals(other.mReason); |
| 263 } | 239 } |
| 264 | 240 |
| 265 @Override | 241 @Override |
| 266 public int hashCode() { | 242 public int hashCode() { |
| 267 return mHashCode; | 243 return mHashCode; |
| 268 } | 244 } |
| 269 } | 245 } |
| 270 | 246 |
| 271 static class IconSpriteAnimationKey { | |
| 272 final boolean mWasIconSpriteAnimated; | |
| 273 final boolean mWasPanelSeen; | |
| 274 final boolean mWasTap; | |
| 275 final int mHashCode; | |
| 276 | |
| 277 IconSpriteAnimationKey(boolean wasIconSpriteAnimated, boolean wasPanelSe
en, | |
| 278 boolean wasTap) { | |
| 279 mWasIconSpriteAnimated = wasIconSpriteAnimated; | |
| 280 mWasPanelSeen = wasPanelSeen; | |
| 281 mWasTap = wasTap; | |
| 282 | |
| 283 // HashCode logic generated by Eclipse. | |
| 284 final int prime = 31; | |
| 285 int result = 1; | |
| 286 result = prime * result + (mWasIconSpriteAnimated ? 1231 : 1237); | |
| 287 result = prime * result + (mWasPanelSeen ? 1231 : 1237); | |
| 288 result = prime * result + (mWasTap ? 1231 : 1237); | |
| 289 mHashCode = result; | |
| 290 } | |
| 291 | |
| 292 @Override | |
| 293 public boolean equals(Object obj) { | |
| 294 if (!(obj instanceof IconSpriteAnimationKey)) { | |
| 295 return false; | |
| 296 } | |
| 297 if (obj == this) { | |
| 298 return true; | |
| 299 } | |
| 300 IconSpriteAnimationKey other = (IconSpriteAnimationKey) obj; | |
| 301 return other.mWasIconSpriteAnimated == mWasIconSpriteAnimated | |
| 302 && other.mWasPanelSeen == mWasPanelSeen | |
| 303 && other.mWasTap == mWasTap; | |
| 304 } | |
| 305 | |
| 306 @Override | |
| 307 public int hashCode() { | |
| 308 return mHashCode; | |
| 309 } | |
| 310 } | |
| 311 | |
| 312 // TODO(donnd): switch from using Maps to some method that does not require
creation of a key. | 247 // TODO(donnd): switch from using Maps to some method that does not require
creation of a key. |
| 313 | 248 |
| 314 // Entry code map: first entry into CLOSED. | 249 // Entry code map: first entry into CLOSED. |
| 315 private static final Map<StateChangeKey, Integer> ENTER_CLOSED_STATE_CHANGE_
CODES; | 250 private static final Map<StateChangeKey, Integer> ENTER_CLOSED_STATE_CHANGE_
CODES; |
| 316 static { | 251 static { |
| 317 Map<StateChangeKey, Integer> codes = new HashMap<StateChangeKey, Integer
>(); | 252 Map<StateChangeKey, Integer> codes = new HashMap<StateChangeKey, Integer
>(); |
| 318 codes.put(new StateChangeKey(PanelState.PEEKED, StateChangeReason.BACK_P
RESS), | 253 codes.put(new StateChangeKey(PanelState.PEEKED, StateChangeReason.BACK_P
RESS), |
| 319 ENTER_CLOSED_FROM_PEEKED_BACK_PRESS); | 254 ENTER_CLOSED_FROM_PEEKED_BACK_PRESS); |
| 320 codes.put(new StateChangeKey(PanelState.PEEKED, StateChangeReason.BASE_P
AGE_SCROLL), | 255 codes.put(new StateChangeKey(PanelState.PEEKED, StateChangeReason.BASE_P
AGE_SCROLL), |
| 321 ENTER_CLOSED_FROM_PEEKED_BASE_PAGE_SCROLL); | 256 ENTER_CLOSED_FROM_PEEKED_BASE_PAGE_SCROLL); |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 PROMO_UNDECIDED_FROM_TAP); | 449 PROMO_UNDECIDED_FROM_TAP); |
| 515 codes.put(new Pair<Integer, Boolean>(PREFERENCE_ENABLED, LONG_PRESS), | 450 codes.put(new Pair<Integer, Boolean>(PREFERENCE_ENABLED, LONG_PRESS), |
| 516 PROMO_ENABLED_FROM_LONG_PRESS); | 451 PROMO_ENABLED_FROM_LONG_PRESS); |
| 517 codes.put(new Pair<Integer, Boolean>(PREFERENCE_DISABLED, LONG_PRESS), | 452 codes.put(new Pair<Integer, Boolean>(PREFERENCE_DISABLED, LONG_PRESS), |
| 518 PROMO_DISABLED_FROM_LONG_PRESS); | 453 PROMO_DISABLED_FROM_LONG_PRESS); |
| 519 codes.put(new Pair<Integer, Boolean>(PREFERENCE_UNINITIALIZED, LONG_PRES
S), | 454 codes.put(new Pair<Integer, Boolean>(PREFERENCE_UNINITIALIZED, LONG_PRES
S), |
| 520 PROMO_UNDECIDED_FROM_LONG_PRESS); | 455 PROMO_UNDECIDED_FROM_LONG_PRESS); |
| 521 PROMO_BY_GESTURE_CODES = Collections.unmodifiableMap(codes); | 456 PROMO_BY_GESTURE_CODES = Collections.unmodifiableMap(codes); |
| 522 } | 457 } |
| 523 | 458 |
| 524 // Icon sprite animation code mapped: logged when ending a contextual search
. | |
| 525 private static final Map<IconSpriteAnimationKey, Integer> ICON_SPRITE_ANIMAT
ION_CODES; | |
| 526 static { | |
| 527 Map<IconSpriteAnimationKey, Integer> codes = new HashMap<IconSpriteAnima
tionKey, Integer>(); | |
| 528 codes.put(new IconSpriteAnimationKey(true, true, true), | |
| 529 ICON_SPRITE_ANIMATED_RESULTS_SEEN_FROM_TAP); | |
| 530 codes.put(new IconSpriteAnimationKey(true, false, true), | |
| 531 ICON_SPRITE_ANIMATED_RESULTS_NOT_SEEN_FROM_TAP); | |
| 532 codes.put(new IconSpriteAnimationKey(false, true, true), | |
| 533 ICON_SPRITE_NOT_ANIMATED_RESULTS_SEEN_FROM_TAP); | |
| 534 codes.put(new IconSpriteAnimationKey(false, false, true), | |
| 535 ICON_SPRITE_NOT_ANIMATED_RESULTS_NOT_SEEN_FROM_TAP); | |
| 536 codes.put(new IconSpriteAnimationKey(true, true, false), | |
| 537 ICON_SPRITE_ANIMATED_RESULTS_SEEN_FROM_LONG_PRESS); | |
| 538 codes.put(new IconSpriteAnimationKey(true, false, false), | |
| 539 ICON_SPRITE_ANIMATED_RESULTS_NOT_SEEN_FROM_LONG_PRESS); | |
| 540 codes.put(new IconSpriteAnimationKey(false, true, false), | |
| 541 ICON_SPRITE_NOT_ANIMATED_RESULTS_SEEN_FROM_LONG_PRESS); | |
| 542 codes.put(new IconSpriteAnimationKey(false, false, false), | |
| 543 ICON_SPRITE_NOT_ANIMATED_RESULTS_NOT_SEEN_FROM_LONG_PRESS); | |
| 544 ICON_SPRITE_ANIMATION_CODES = Collections.unmodifiableMap(codes); | |
| 545 } | |
| 546 | |
| 547 /** | 459 /** |
| 548 * Logs the state of the Contextual Search preference. This function should
be called if the | 460 * Logs the state of the Contextual Search preference. This function should
be called if the |
| 549 * Contextual Search feature is active, and will track the different prefere
nce settings | 461 * Contextual Search feature is active, and will track the different prefere
nce settings |
| 550 * (disabled, enabled or uninitialized). Calling more than once is fine. | 462 * (disabled, enabled or uninitialized). Calling more than once is fine. |
| 551 */ | 463 */ |
| 552 public static void logPreferenceState() { | 464 public static void logPreferenceState() { |
| 553 RecordHistogram.recordEnumeratedHistogram("Search.ContextualSearchPrefer
enceState", | 465 RecordHistogram.recordEnumeratedHistogram("Search.ContextualSearchPrefer
enceState", |
| 554 getPreferenceValue(), PREFERENCE_HISTOGRAM_BOUNDARY); | 466 getPreferenceValue(), PREFERENCE_HISTOGRAM_BOUNDARY); |
| 555 } | 467 } |
| 556 | 468 |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 945 : RESULTS_NOT_SEEN_SUPPRESSION_HEURSTIC_NOT_SATISFIED; | 857 : RESULTS_NOT_SEEN_SUPPRESSION_HEURSTIC_NOT_SATISFIED; |
| 946 } | 858 } |
| 947 | 859 |
| 948 RecordHistogram.recordEnumeratedHistogram( | 860 RecordHistogram.recordEnumeratedHistogram( |
| 949 "Search.ContextualSearchTapSuppressionSeen.AnyHeuristicSatisfied
", | 861 "Search.ContextualSearchTapSuppressionSeen.AnyHeuristicSatisfied
", |
| 950 code, | 862 code, |
| 951 RESULTS_SEEN_SUPPRESSION_BOUNDARY); | 863 RESULTS_SEEN_SUPPRESSION_BOUNDARY); |
| 952 } | 864 } |
| 953 | 865 |
| 954 /** | 866 /** |
| 955 * Logs whether search results were seen, whether the search provider icon s
prite was animated | |
| 956 * when the panel first appeared, and the triggering gesture. | |
| 957 * @param wasIconSpriteAnimated Whether the search provider icon sprite was
animated when the | |
| 958 * the panel first appeared. | |
| 959 * @param wasPanelSeen Whether the panel was seen. | |
| 960 * @param wasTap Whether the gesture that originally caused the panel to sho
w was a Tap. | |
| 961 */ | |
| 962 public static void logIconSpriteAnimated(boolean wasIconSpriteAnimated, bool
ean wasPanelSeen, | |
| 963 boolean wasTap) { | |
| 964 RecordHistogram.recordEnumeratedHistogram("Search.ContextualSearchIconSp
riteAnimated", | |
| 965 ICON_SPRITE_ANIMATION_CODES.get(new IconSpriteAnimationKey(wasIc
onSpriteAnimated, | |
| 966 wasPanelSeen, wasTap)), | |
| 967 ICON_SPRITE_BOUNDARY); | |
| 968 } | |
| 969 | |
| 970 /** | |
| 971 * Logs whether a selection is valid. | 867 * Logs whether a selection is valid. |
| 972 * @param isSelectionValid Whether the selection is valid. | 868 * @param isSelectionValid Whether the selection is valid. |
| 973 */ | 869 */ |
| 974 public static void logSelectionIsValid(boolean isSelectionValid) { | 870 public static void logSelectionIsValid(boolean isSelectionValid) { |
| 975 RecordHistogram.recordEnumeratedHistogram("Search.ContextualSearchSelect
ionValid", | 871 RecordHistogram.recordEnumeratedHistogram("Search.ContextualSearchSelect
ionValid", |
| 976 isSelectionValid ? SELECTION_VALID : SELECTION_INVALID, SELECTIO
N_BOUNDARY); | 872 isSelectionValid ? SELECTION_VALID : SELECTION_INVALID, SELECTIO
N_BOUNDARY); |
| 977 } | 873 } |
| 978 | 874 |
| 979 /** | 875 /** |
| 980 * Logs whether a normal priority search request failed. | 876 * Logs whether a normal priority search request failed. |
| (...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1460 return "Event"; | 1356 return "Event"; |
| 1461 case QuickActionCategory.PHONE: | 1357 case QuickActionCategory.PHONE: |
| 1462 return "Phone"; | 1358 return "Phone"; |
| 1463 case QuickActionCategory.WEBSITE: | 1359 case QuickActionCategory.WEBSITE: |
| 1464 return "Website"; | 1360 return "Website"; |
| 1465 default: | 1361 default: |
| 1466 return "None"; | 1362 return "None"; |
| 1467 } | 1363 } |
| 1468 } | 1364 } |
| 1469 } | 1365 } |
| OLD | NEW |