Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(396)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchFieldTrial.java

Issue 1379183003: [ContextualSearch] Adds long press promo for Contextual Search. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing David's comments and tweaking policy Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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.text.TextUtils; 7 import android.text.TextUtils;
8 8
9 import org.chromium.base.CommandLine; 9 import org.chromium.base.CommandLine;
10 import org.chromium.base.SysUtils; 10 import org.chromium.base.SysUtils;
11 import org.chromium.chrome.browser.ChromeSwitches; 11 import org.chromium.chrome.browser.ChromeSwitches;
12 import org.chromium.chrome.browser.ChromeVersionInfo; 12 import org.chromium.chrome.browser.ChromeVersionInfo;
13 import org.chromium.components.variations.VariationsAssociatedData; 13 import org.chromium.components.variations.VariationsAssociatedData;
14 14
15 import java.text.ParseException;
16 import java.text.SimpleDateFormat;
15 import java.util.Arrays; 17 import java.util.Arrays;
18 import java.util.Date;
16 import java.util.Locale; 19 import java.util.Locale;
17 20
18 /** 21 /**
19 * Provides Field Trial support for the Contextual Search application within Chr ome for Android. 22 * Provides Field Trial support for the Contextual Search application within Chr ome for Android.
20 */ 23 */
21 public class ContextualSearchFieldTrial { 24 public class ContextualSearchFieldTrial {
22 private static final String FIELD_TRIAL_NAME = "ContextualSearch"; 25 private static final String FIELD_TRIAL_NAME = "ContextualSearch";
23 private static final String ENABLED_PARAM = "enabled"; 26 private static final String ENABLED_PARAM = "enabled";
24 private static final String ENABLED_VALUE = "true"; 27 private static final String ENABLED_VALUE = "true";
25 28
26 private static final String DISABLE_FOR_CJK = "disable_for_cjk"; 29 private static final String DISABLE_FOR_CJK = "disable_for_cjk";
27 private static final String DISABLE_FOR_CHINESE = "disable_for_chinese"; 30 private static final String DISABLE_FOR_CHINESE = "disable_for_chinese";
28 private static final String DISABLE_FOR_JAPANESE = "disable_for_japanese"; 31 private static final String DISABLE_FOR_JAPANESE = "disable_for_japanese";
29 private static final String DISABLE_FOR_KOREAN = "disable_for_korean"; 32 private static final String DISABLE_FOR_KOREAN = "disable_for_korean";
30 33
31 // TODO(pedrosimonetti): Confirm if we can delete promo_on_longpress_only no w. 34 // TODO(pedrosimonetti): Confirm if we can delete promo_on_longpress_only no w.
32 private static final String PROMO_ON_LONGPRESS_ONLY = "promo_on_longpress_on ly"; 35 private static final String PROMO_ON_LONGPRESS_ONLY = "promo_on_longpress_on ly";
33 static final String PROMO_ON_LIMITED_TAPS = "promo_on_limited_taps"; 36 static final String PROMO_ON_LIMITED_TAPS = "promo_on_limited_taps";
34 static final String TAP_TRIGGERED_PROMO_LIMIT = "tap_triggered_promo_limit"; 37 static final String TAP_TRIGGERED_PROMO_LIMIT = "tap_triggered_promo_limit";
35 static final String TAP_RESOLVE_LIMIT_FOR_DECIDED = "tap_resolve_limit_for_d ecided"; 38 static final String TAP_RESOLVE_LIMIT_FOR_DECIDED = "tap_resolve_limit_for_d ecided";
36 static final String TAP_PREFETCH_LIMIT_FOR_DECIDED = "tap_prefetch_limit_for _decided"; 39 static final String TAP_PREFETCH_LIMIT_FOR_DECIDED = "tap_prefetch_limit_for _decided";
37 static final String TAP_RESOLVE_LIMIT_FOR_UNDECIDED = "tap_resolve_limit_for _undecided"; 40 static final String TAP_RESOLVE_LIMIT_FOR_UNDECIDED = "tap_resolve_limit_for _undecided";
38 static final String TAP_PREFETCH_LIMIT_FOR_UNDECIDED = "tap_prefetch_limit_f or_undecided"; 41 static final String TAP_PREFETCH_LIMIT_FOR_UNDECIDED = "tap_prefetch_limit_f or_undecided";
39 42
43 static final String PEEK_PROMO_ENABLED = "peek_promo_enabled";
44 static final String PEEK_PROMO_MAX_SHOW_COUNT = "peek_promo_max_show_count";
45 static final String PEEK_PROMO_EXPIRATION_DATE = "peek_promo_expiration_date ";
46 private static final String PEEK_PROMO_EXPIRATION_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
47 static final int PEEK_PROMO_DEFAULT_MAX_SHOW_COUNT = 10;
48
40 private static final String CHINESE_LANGUAGE_CODE = "zh"; 49 private static final String CHINESE_LANGUAGE_CODE = "zh";
41 private static final String JAPANESE_LANGUAGE_CODE = "ja"; 50 private static final String JAPANESE_LANGUAGE_CODE = "ja";
42 private static final String KOREAN_LANGUAGE_CODE = "ko"; 51 private static final String KOREAN_LANGUAGE_CODE = "ko";
43 private static final String[] CJK_LANGUAGE_CODES = {CHINESE_LANGUAGE_CODE, 52 private static final String[] CJK_LANGUAGE_CODES = {CHINESE_LANGUAGE_CODE,
44 JAPANESE_LANGUAGE_CODE, KOREAN_LANGUAGE_CODE}; 53 JAPANESE_LANGUAGE_CODE, KOREAN_LANGUAGE_CODE};
45 54
46 // The default navigation-detection-delay in milliseconds. 55 // The default navigation-detection-delay in milliseconds.
47 private static final int DEFAULT_TAP_NAVIGATION_DETECTION_DELAY = 16; 56 private static final int DEFAULT_TAP_NAVIGATION_DETECTION_DELAY = 16;
48 private static final String NAVIGATION_DETECTION_DELAY = "tap_navigation_det ection_delay"; 57 private static final String NAVIGATION_DETECTION_DELAY = "tap_navigation_det ection_delay";
49 58
50 private static final int UNLIMITED_TAPS = -1; 59 private static final int UNLIMITED_TAPS = -1;
51 private static final int DEFAULT_TAP_RESOLVE_LIMIT_FOR_DECIDED = UNLIMITED_T APS; 60 private static final int DEFAULT_TAP_RESOLVE_LIMIT_FOR_DECIDED = UNLIMITED_T APS;
52 private static final int DEFAULT_TAP_PREFETCH_LIMIT_FOR_DECIDED = UNLIMITED_ TAPS; 61 private static final int DEFAULT_TAP_PREFETCH_LIMIT_FOR_DECIDED = UNLIMITED_ TAPS;
53 private static final int DEFAULT_TAP_RESOLVE_LIMIT_FOR_UNDECIDED = 100; 62 private static final int DEFAULT_TAP_RESOLVE_LIMIT_FOR_UNDECIDED = 100;
54 private static final int DEFAULT_TAP_PREFETCH_LIMIT_FOR_UNDECIDED = 10; 63 private static final int DEFAULT_TAP_PREFETCH_LIMIT_FOR_UNDECIDED = 10;
55 64
56 // Cached value to avoid repeated and redundant JNI operations. 65 // Cached value to avoid repeated and redundant JNI operations.
57 private static Boolean sEnabled; 66 private static Boolean sEnabled;
58 67
68 private static Boolean sIsPeekPromoEnabled;
69 private static int sPeekPromoMaxCount;
70 private static Date sPeekPromoExpirationDate;
71 private static boolean sPeekPromoExpirationDateCached;
72
59 /** 73 /**
60 * Don't instantiate. 74 * Don't instantiate.
61 */ 75 */
62 private ContextualSearchFieldTrial() {} 76 private ContextualSearchFieldTrial() {}
63 77
64 /** 78 /**
65 * Checks the current Variations parameters associated with the active group as well as the 79 * Checks the current Variations parameters associated with the active group as well as the
66 * Chrome preference to determine if the service is enabled. 80 * Chrome preference to determine if the service is enabled.
67 * @return Whether Contextual Search is enabled or not. 81 * @return Whether Contextual Search is enabled or not.
68 */ 82 */
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 234
221 /** 235 /**
222 * @return The limit on the number of prefetches to issue for undecided user s, or the default 236 * @return The limit on the number of prefetches to issue for undecided user s, or the default
223 * if no value is present. 237 * if no value is present.
224 */ 238 */
225 static int getTapPrefetchLimitForUndecided() { 239 static int getTapPrefetchLimitForUndecided() {
226 return getIntParamValueOrDefault(TAP_PREFETCH_LIMIT_FOR_UNDECIDED, 240 return getIntParamValueOrDefault(TAP_PREFETCH_LIMIT_FOR_UNDECIDED,
227 DEFAULT_TAP_PREFETCH_LIMIT_FOR_UNDECIDED); 241 DEFAULT_TAP_PREFETCH_LIMIT_FOR_UNDECIDED);
228 } 242 }
229 243
244 /**
245 * @return Whether the Peek Promo is enabled.
246 */
247 static boolean isPeekPromoEnabled() {
248 if (sIsPeekPromoEnabled != null) return sIsPeekPromoEnabled;
249
250 sIsPeekPromoEnabled = getBooleanParam(PEEK_PROMO_ENABLED);
251 return sIsPeekPromoEnabled;
252 }
253
254 /**
255 * @return The maximum number of times the Peek Promo should be displayed.
256 */
257 static int getPeekPromoMaxShowCount() {
258 if (sPeekPromoMaxCount > 0) return sPeekPromoMaxCount;
259
260 sPeekPromoMaxCount = getIntParamValueOrDefault(
261 PEEK_PROMO_MAX_SHOW_COUNT,
262 PEEK_PROMO_DEFAULT_MAX_SHOW_COUNT);
263
264 return sPeekPromoMaxCount;
265 }
266
267 /**
268 * @return The expiration date of the Peek Promo, using the format
269 */
270 static Date getPeekPromoExpirationDate() {
271 if (sPeekPromoExpirationDateCached) return sPeekPromoExpirationDate;
272
273 Date expirationDate = null;
274
275 String expirationDateString = getStringParam(PEEK_PROMO_EXPIRATION_DATE) ;
276 if (expirationDateString != null) {
277 SimpleDateFormat format =
278 new SimpleDateFormat(PEEK_PROMO_EXPIRATION_DATE_FORMAT, Loca le.US);
279 try {
280 expirationDate = format.parse(expirationDateString);
281 } catch (ParseException e) {
282 e.printStackTrace();
283 }
284 }
285
286 sPeekPromoExpirationDateCached = true;
287 sPeekPromoExpirationDate = expirationDate;
288 return sPeekPromoExpirationDate;
289 }
290
230 // ------------------------------------------------------------------------- ------------------- 291 // ------------------------------------------------------------------------- -------------------
231 // Helpers. 292 // Helpers.
232 // ------------------------------------------------------------------------- ------------------- 293 // ------------------------------------------------------------------------- -------------------
233 294
234 /** 295 /**
235 * Gets a boolean Finch parameter, assuming the <paramName>="true" format. Also checks for a 296 * Gets a boolean Finch parameter, assuming the <paramName>="true" format. Also checks for a
236 * command-line switch with the same name, for easy local testing. 297 * command-line switch with the same name, for easy local testing.
237 * @param paramName The name of the Finch parameter (or command-line switch) to get a value for. 298 * @param paramName The name of the Finch parameter (or command-line switch) to get a value for.
238 * @return Whether the Finch param is defined with a value "true", if there' s a command-line 299 * @return Whether the Finch param is defined with a value "true", if there' s a command-line
239 * flag present with any value. 300 * flag present with any value.
(...skipping 21 matching lines...) Expand all
261 if (!TextUtils.isEmpty(value)) { 322 if (!TextUtils.isEmpty(value)) {
262 try { 323 try {
263 return Integer.parseInt(value); 324 return Integer.parseInt(value);
264 } catch (NumberFormatException e) { 325 } catch (NumberFormatException e) {
265 return defaultValue; 326 return defaultValue;
266 } 327 }
267 } 328 }
268 329
269 return defaultValue; 330 return defaultValue;
270 } 331 }
332
333 /**
334 * Returns a string value for a Finch parameter. Also checks for a command-l ine switch.
335 * @param paramName The name of the Finch parameter (or command-line switch) to get a value for.
336 * @return The command-line value, if present, or the finch parameter value.
337 */
338 private static String getStringParam(String paramName) {
339 if (CommandLine.getInstance().hasSwitch(paramName)) {
340 return CommandLine.getInstance().getSwitchValue(paramName);
341 }
342 return VariationsAssociatedData.getVariationParamValue(FIELD_TRIAL_NAME, paramName);
343 }
271 } 344 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698