| 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.content.Context; | 7 import android.content.Context; |
| 8 | 8 |
| 9 import org.chromium.base.VisibleForTesting; | 9 import org.chromium.base.VisibleForTesting; |
| 10 import org.chromium.chrome.browser.ChromeVersionInfo; | 10 import org.chromium.chrome.browser.ChromeVersionInfo; |
| 11 import org.chromium.chrome.browser.contextualsearch.ContextualSearchSelectionCon
troller.SelectionType; | 11 import org.chromium.chrome.browser.contextualsearch.ContextualSearchSelectionCon
troller.SelectionType; |
| 12 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; | 12 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; |
| 13 import org.chromium.chrome.browser.preferences.NetworkPredictionOptions; | 13 import org.chromium.chrome.browser.preferences.NetworkPredictionOptions; |
| 14 import org.chromium.chrome.browser.preferences.PrefServiceBridge; | 14 import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
| 15 import org.chromium.content.browser.ContentViewCore; | 15 import org.chromium.content.browser.ContentViewCore; |
| 16 | 16 |
| 17 import java.net.URL; | 17 import java.net.URL; |
| 18 import java.util.regex.Pattern; | 18 import java.util.regex.Pattern; |
| 19 | 19 |
| 20 import javax.annotation.Nullable; | 20 import javax.annotation.Nullable; |
| 21 | 21 |
| 22 | 22 |
| 23 /** | 23 /** |
| 24 * Handles policy decisions for the {@code ContextualSearchManager}. | 24 * Handles policy decisions for the {@code ContextualSearchManager}. |
| 25 */ | 25 */ |
| 26 class ContextualSearchPolicy { | 26 class ContextualSearchPolicy { |
| 27 private static final Pattern CONTAINS_WHITESPACE_PATTERN = Pattern.compile("
\\s"); | 27 private static final Pattern CONTAINS_WHITESPACE_PATTERN = Pattern.compile("
\\s"); |
| 28 private static final int REMAINING_NOT_APPLICABLE = -1; | 28 private static final int REMAINING_NOT_APPLICABLE = -1; |
| 29 private static final int ONE_DAY_IN_MILLIS = 24 * 60 * 60 * 1000; |
| 29 | 30 |
| 30 private static ContextualSearchPolicy sInstance; | 31 private static ContextualSearchPolicy sInstance; |
| 31 | 32 |
| 32 private final ChromePreferenceManager mPreferenceManager; | 33 private final ChromePreferenceManager mPreferenceManager; |
| 33 | 34 |
| 34 // Members used only for testing purposes. | 35 // Members used only for testing purposes. |
| 35 private boolean mDidOverrideDecidedStateForTesting; | 36 private boolean mDidOverrideDecidedStateForTesting; |
| 36 private boolean mDecidedStateForTesting; | 37 private boolean mDecidedStateForTesting; |
| 37 private boolean mDidResetCounters; | 38 private boolean mDidResetCounters; |
| 38 | 39 |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 * TODO(donnd): Update this API to definitively determine if it's OK to send
the URL, | 263 * TODO(donnd): Update this API to definitively determine if it's OK to send
the URL, |
| 263 * by merging the checks in the native contextual_search_delegate here. | 264 * by merging the checks in the native contextual_search_delegate here. |
| 264 * @return {@code true} if the URL may be sent for policy reasons. | 265 * @return {@code true} if the URL may be sent for policy reasons. |
| 265 * Note that a return value of {@code true} may still require additi
onal checks | 266 * Note that a return value of {@code true} may still require additi
onal checks |
| 266 * to see if all privacy-related conditions are met to send the base
page URL. | 267 * to see if all privacy-related conditions are met to send the base
page URL. |
| 267 */ | 268 */ |
| 268 boolean maySendBasePageUrl() { | 269 boolean maySendBasePageUrl() { |
| 269 return !isUserUndecided(); | 270 return !isUserUndecided(); |
| 270 } | 271 } |
| 271 | 272 |
| 273 /** |
| 274 * The search provider icon is animated every time on long press if the user
has never opened |
| 275 * the panel before and once a day on tap. |
| 276 * |
| 277 * @param selectionType The type of selection made by the user. |
| 278 * @return Whether the search provider icon should be animated. |
| 279 */ |
| 280 boolean shouldAnimateSearchProviderIcon(SelectionType selectionType) { |
| 281 if (selectionType == SelectionType.TAP) { |
| 282 long currentTimeMillis = System.currentTimeMillis(); |
| 283 long lastAnimatedTimeMillis = |
| 284 mPreferenceManager.getContextualSearchLastAnimationTime(); |
| 285 if (Math.abs(currentTimeMillis - lastAnimatedTimeMillis) > ONE_DAY_I
N_MILLIS) { |
| 286 mPreferenceManager.setContextualSearchLastAnimationTime(currentT
imeMillis); |
| 287 return true; |
| 288 } else { |
| 289 return false; |
| 290 } |
| 291 } else if (selectionType == SelectionType.LONG_PRESS) { |
| 292 return DisableablePromoTapCounter.getInstance(mPreferenceManager).is
Enabled(); |
| 293 } |
| 294 |
| 295 return false; |
| 296 } |
| 297 |
| 272 // -------------------------------------------------------------------------
------------------- | 298 // -------------------------------------------------------------------------
------------------- |
| 273 // Testing support. | 299 // Testing support. |
| 274 // -------------------------------------------------------------------------
------------------- | 300 // -------------------------------------------------------------------------
------------------- |
| 275 | 301 |
| 276 /** | 302 /** |
| 277 * Resets all policy counters. | 303 * Resets all policy counters. |
| 278 */ | 304 */ |
| 279 @VisibleForTesting | 305 @VisibleForTesting |
| 280 void resetCounters() { | 306 void resetCounters() { |
| 281 updateCountersForOpen(); | 307 updateCountersForOpen(); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 | 410 |
| 385 /** | 411 /** |
| 386 * @return The limit of the number of taps to resolve using search term reso
lution. | 412 * @return The limit of the number of taps to resolve using search term reso
lution. |
| 387 */ | 413 */ |
| 388 private int getTapResolveLimit() { | 414 private int getTapResolveLimit() { |
| 389 return isUserUndecided() | 415 return isUserUndecided() |
| 390 ? ContextualSearchFieldTrial.getTapResolveLimitForUndecided() | 416 ? ContextualSearchFieldTrial.getTapResolveLimitForUndecided() |
| 391 : ContextualSearchFieldTrial.getTapResolveLimitForDecided(); | 417 : ContextualSearchFieldTrial.getTapResolveLimitForDecided(); |
| 392 } | 418 } |
| 393 } | 419 } |
| OLD | NEW |