blob: ed69513b7f696f07af427ca7f023cb78f2d93bae [file] [log] [blame]
Abodunrinwa Toki0e6b43e2017-09-19 23:18:40 +01001/*
2 * Copyright (C) 2017 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
17package android.view.textclassifier;
18
Joanne Chungc44f5292019-12-02 21:18:43 +080019import android.annotation.Nullable;
20import android.provider.DeviceConfig;
21
22import com.android.internal.annotations.VisibleForTesting;
Tony Makf93e9e52018-07-16 14:46:29 +020023import com.android.internal.util.IndentingPrintWriter;
24
Jan Althaus0aacdb62018-02-19 11:44:37 +010025import java.util.Arrays;
Joanne Chungc44f5292019-12-02 21:18:43 +080026import java.util.Collections;
Jan Althaus0aacdb62018-02-19 11:44:37 +010027import java.util.List;
Jan Althaus0aacdb62018-02-19 11:44:37 +010028
Abodunrinwa Toki0e6b43e2017-09-19 23:18:40 +010029/**
30 * TextClassifier specific settings.
Joanne Chungc44f5292019-12-02 21:18:43 +080031 *
32 * <p>Currently, this class does not guarantee co-diverted flags are updated atomically.
33 *
Abodunrinwa Toki0634af32019-04-04 13:10:59 +010034 * <pre>
35 * adb shell cmd device_config put textclassifier system_textclassifier_enabled true
36 * </pre>
37 *
Joanne Chungc44f5292019-12-02 21:18:43 +080038 * @see android.provider.DeviceConfig#NAMESPACE_TEXTCLASSIFIER
Abodunrinwa Toki0e6b43e2017-09-19 23:18:40 +010039 * @hide
40 */
Abodunrinwa Toki0634af32019-04-04 13:10:59 +010041// TODO: Rename to TextClassifierSettings.
Abodunrinwa Tokidb8fc312018-02-26 21:37:51 +000042public final class TextClassificationConstants {
Joanne Chungc44f5292019-12-02 21:18:43 +080043 private static final String DELIMITER = ":";
Tony Mak72e17972019-03-16 10:28:42 +000044
Tony Makfc374572019-03-05 14:46:24 +000045 /**
46 * Whether the smart linkify feature is enabled.
47 */
48 private static final String SMART_LINKIFY_ENABLED = "smart_linkify_enabled";
49 /**
50 * Whether SystemTextClassifier is enabled.
51 */
Joanne Chungc44f5292019-12-02 21:18:43 +080052 static final String SYSTEM_TEXT_CLASSIFIER_ENABLED = "system_textclassifier_enabled";
Tony Makfc374572019-03-05 14:46:24 +000053 /**
54 * Whether TextClassifierImpl is enabled.
55 */
Joanne Chungc44f5292019-12-02 21:18:43 +080056 @VisibleForTesting
57 static final String LOCAL_TEXT_CLASSIFIER_ENABLED = "local_textclassifier_enabled";
Tony Makfc374572019-03-05 14:46:24 +000058 /**
59 * Enable smart selection without a visible UI changes.
60 */
61 private static final String MODEL_DARK_LAUNCH_ENABLED = "model_dark_launch_enabled";
62
63 /**
64 * Whether the smart selection feature is enabled.
65 */
66 private static final String SMART_SELECTION_ENABLED = "smart_selection_enabled";
67 /**
68 * Whether the smart text share feature is enabled.
69 */
70 private static final String SMART_TEXT_SHARE_ENABLED = "smart_text_share_enabled";
71 /**
72 * Whether animation for smart selection is enabled.
73 */
Abodunrinwa Tokidb8fc312018-02-26 21:37:51 +000074 private static final String SMART_SELECT_ANIMATION_ENABLED =
75 "smart_select_animation_enabled";
Tony Makfc374572019-03-05 14:46:24 +000076 /**
77 * Max length of text that suggestSelection can accept.
78 */
Joanne Chungc44f5292019-12-02 21:18:43 +080079 @VisibleForTesting
80 static final String SUGGEST_SELECTION_MAX_RANGE_LENGTH =
Jan Althaus108aad32018-01-30 15:26:55 +010081 "suggest_selection_max_range_length";
Tony Makfc374572019-03-05 14:46:24 +000082 /**
83 * Max length of text that classifyText can accept.
84 */
85 private static final String CLASSIFY_TEXT_MAX_RANGE_LENGTH = "classify_text_max_range_length";
86 /**
87 * Max length of text that generateLinks can accept.
88 */
89 private static final String GENERATE_LINKS_MAX_TEXT_LENGTH = "generate_links_max_text_length";
90 /**
91 * Sampling rate for generateLinks logging.
92 */
Jan Althaus31efdc32018-02-19 22:23:13 +010093 private static final String GENERATE_LINKS_LOG_SAMPLE_RATE =
94 "generate_links_log_sample_rate";
Tony Makfc374572019-03-05 14:46:24 +000095 /**
96 * A colon(:) separated string that specifies the default entities types for
97 * generateLinks when hint is not given.
98 */
Joanne Chungc44f5292019-12-02 21:18:43 +080099 @VisibleForTesting
100 static final String ENTITY_LIST_DEFAULT = "entity_list_default";
Tony Makfc374572019-03-05 14:46:24 +0000101 /**
102 * A colon(:) separated string that specifies the default entities types for
103 * generateLinks when the text is in a not editable UI widget.
104 */
105 private static final String ENTITY_LIST_NOT_EDITABLE = "entity_list_not_editable";
106 /**
107 * A colon(:) separated string that specifies the default entities types for
108 * generateLinks when the text is in an editable UI widget.
109 */
110 private static final String ENTITY_LIST_EDITABLE = "entity_list_editable";
111 /**
112 * A colon(:) separated string that specifies the default action types for
113 * suggestConversationActions when the suggestions are used in an app.
114 */
Tony Makadbebcc2018-10-30 18:59:06 +0000115 private static final String IN_APP_CONVERSATION_ACTION_TYPES_DEFAULT =
116 "in_app_conversation_action_types_default";
Tony Makfc374572019-03-05 14:46:24 +0000117 /**
118 * A colon(:) separated string that specifies the default action types for
119 * suggestConversationActions when the suggestions are used in a notification.
120 */
Tony Makadbebcc2018-10-30 18:59:06 +0000121 private static final String NOTIFICATION_CONVERSATION_ACTION_TYPES_DEFAULT =
122 "notification_conversation_action_types_default";
Tony Makfc374572019-03-05 14:46:24 +0000123 /**
Tony Mak159f0282019-03-01 14:03:25 +0000124 * Threshold to accept a suggested language from LangID model.
Tony Makfc374572019-03-05 14:46:24 +0000125 */
Joanne Chungc44f5292019-12-02 21:18:43 +0800126 @VisibleForTesting
127 static final String LANG_ID_THRESHOLD_OVERRIDE = "lang_id_threshold_override";
Tony Makfc374572019-03-05 14:46:24 +0000128 /**
129 * Whether to enable {@link android.view.textclassifier.TemplateIntentFactory}.
130 */
Tony Makfc039c32019-01-17 19:32:08 +0000131 private static final String TEMPLATE_INTENT_FACTORY_ENABLED = "template_intent_factory_enabled";
Tony Mak159f0282019-03-01 14:03:25 +0000132 /**
133 * Whether to enable "translate" action in classifyText.
134 */
135 private static final String TRANSLATE_IN_CLASSIFICATION_ENABLED =
136 "translate_in_classification_enabled";
137 /**
138 * Whether to detect the languages of the text in request by using langId for the native
139 * model.
140 */
141 private static final String DETECT_LANGUAGES_FROM_TEXT_ENABLED =
142 "detect_languages_from_text_enabled";
Tony Mak72e17972019-03-16 10:28:42 +0000143 /**
144 * A colon(:) separated string that specifies the configuration to use when including
145 * surrounding context text in language detection queries.
146 * <p>
147 * Format= minimumTextSize<int>:penalizeRatio<float>:textScoreRatio<float>
148 * <p>
149 * e.g. 20:1.0:0.4
150 * <p>
151 * Accept all text lengths with minimumTextSize=0
152 * <p>
153 * Reject all text less than minimumTextSize with penalizeRatio=0
154 * @see {@code TextClassifierImpl#detectLanguages(String, int, int)} for reference.
155 */
Joanne Chungc44f5292019-12-02 21:18:43 +0800156 @VisibleForTesting
157 static final String LANG_ID_CONTEXT_SETTINGS = "lang_id_context_settings";
Tony Mak159f0282019-03-01 14:03:25 +0000158
Joanne Chungb50ab4b2019-10-14 16:40:57 +0800159 /**
160 * The TextClassifierService which would like to use. Example of setting the package:
161 * <pre>
162 * adb shell cmd device_config put textclassifier textclassifier_service_package_override \
163 * com.android.textclassifier
164 * </pre>
Joanne Chungb50ab4b2019-10-14 16:40:57 +0800165 */
Joanne Chungc44f5292019-12-02 21:18:43 +0800166 @VisibleForTesting
167 static final String TEXT_CLASSIFIER_SERVICE_PACKAGE_OVERRIDE =
Joanne Chungb50ab4b2019-10-14 16:40:57 +0800168 "textclassifier_service_package_override";
169
170 private static final String DEFAULT_TEXT_CLASSIFIER_SERVICE_PACKAGE_OVERRIDE = null;
Abodunrinwa Tokic7073a42018-02-28 23:02:13 +0000171 private static final boolean LOCAL_TEXT_CLASSIFIER_ENABLED_DEFAULT = true;
172 private static final boolean SYSTEM_TEXT_CLASSIFIER_ENABLED_DEFAULT = true;
Abodunrinwa Tokidb8fc312018-02-26 21:37:51 +0000173 private static final boolean MODEL_DARK_LAUNCH_ENABLED_DEFAULT = false;
174 private static final boolean SMART_SELECTION_ENABLED_DEFAULT = true;
175 private static final boolean SMART_TEXT_SHARE_ENABLED_DEFAULT = true;
Richard Ledley9cfa6062018-01-15 13:13:29 +0000176 private static final boolean SMART_LINKIFY_ENABLED_DEFAULT = true;
Abodunrinwa Tokidb8fc312018-02-26 21:37:51 +0000177 private static final boolean SMART_SELECT_ANIMATION_ENABLED_DEFAULT = true;
Jan Althaus108aad32018-01-30 15:26:55 +0100178 private static final int SUGGEST_SELECTION_MAX_RANGE_LENGTH_DEFAULT = 10 * 1000;
179 private static final int CLASSIFY_TEXT_MAX_RANGE_LENGTH_DEFAULT = 10 * 1000;
180 private static final int GENERATE_LINKS_MAX_TEXT_LENGTH_DEFAULT = 100 * 1000;
Jan Althaus31efdc32018-02-19 22:23:13 +0100181 private static final int GENERATE_LINKS_LOG_SAMPLE_RATE_DEFAULT = 100;
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100182 private static final List<String> ENTITY_LIST_DEFAULT_VALUE = Arrays.asList(
183 TextClassifier.TYPE_ADDRESS,
184 TextClassifier.TYPE_EMAIL,
185 TextClassifier.TYPE_PHONE,
186 TextClassifier.TYPE_URL,
187 TextClassifier.TYPE_DATE,
188 TextClassifier.TYPE_DATE_TIME,
189 TextClassifier.TYPE_FLIGHT_NUMBER);
190 private static final List<String> CONVERSATION_ACTIONS_TYPES_DEFAULT_VALUES = Arrays.asList(
191 ConversationAction.TYPE_TEXT_REPLY,
192 ConversationAction.TYPE_CREATE_REMINDER,
193 ConversationAction.TYPE_CALL_PHONE,
194 ConversationAction.TYPE_OPEN_URL,
195 ConversationAction.TYPE_SEND_EMAIL,
196 ConversationAction.TYPE_SEND_SMS,
197 ConversationAction.TYPE_TRACK_FLIGHT,
198 ConversationAction.TYPE_VIEW_CALENDAR,
199 ConversationAction.TYPE_VIEW_MAP,
200 ConversationAction.TYPE_ADD_CONTACT,
201 ConversationAction.TYPE_COPY);
Abodunrinwa Tokia77dba62019-01-25 19:27:11 +0000202 /**
203 * < 0 : Not set. Use value from LangId model.
204 * 0 - 1: Override value in LangId model.
Tony Mak159f0282019-03-01 14:03:25 +0000205 *
Abodunrinwa Tokia77dba62019-01-25 19:27:11 +0000206 * @see EntityConfidence
207 */
208 private static final float LANG_ID_THRESHOLD_OVERRIDE_DEFAULT = -1f;
Tony Makfc039c32019-01-17 19:32:08 +0000209 private static final boolean TEMPLATE_INTENT_FACTORY_ENABLED_DEFAULT = true;
Tony Mak159f0282019-03-01 14:03:25 +0000210 private static final boolean TRANSLATE_IN_CLASSIFICATION_ENABLED_DEFAULT = true;
211 private static final boolean DETECT_LANGUAGES_FROM_TEXT_ENABLED_DEFAULT = true;
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100212 private static final float[] LANG_ID_CONTEXT_SETTINGS_DEFAULT = new float[] {20f, 1.0f, 0.4f};
Abodunrinwa Toki0e6b43e2017-09-19 23:18:40 +0100213
Joanne Chungc44f5292019-12-02 21:18:43 +0800214 @Nullable
215 public String getTextClassifierServicePackageOverride() {
216 return DeviceConfig.getString(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
Joanne Chungb50ab4b2019-10-14 16:40:57 +0800217 TEXT_CLASSIFIER_SERVICE_PACKAGE_OVERRIDE,
218 DEFAULT_TEXT_CLASSIFIER_SERVICE_PACKAGE_OVERRIDE);
219 }
220
Abodunrinwa Tokic7073a42018-02-28 23:02:13 +0000221 public boolean isLocalTextClassifierEnabled() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800222 return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
223 LOCAL_TEXT_CLASSIFIER_ENABLED, LOCAL_TEXT_CLASSIFIER_ENABLED_DEFAULT);
Abodunrinwa Tokic7073a42018-02-28 23:02:13 +0000224 }
225
226 public boolean isSystemTextClassifierEnabled() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800227 return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100228 SYSTEM_TEXT_CLASSIFIER_ENABLED,
229 SYSTEM_TEXT_CLASSIFIER_ENABLED_DEFAULT);
Abodunrinwa Tokic7073a42018-02-28 23:02:13 +0000230 }
231
Abodunrinwa Tokidb8fc312018-02-26 21:37:51 +0000232 public boolean isModelDarkLaunchEnabled() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800233 return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
234 MODEL_DARK_LAUNCH_ENABLED, MODEL_DARK_LAUNCH_ENABLED_DEFAULT);
Abodunrinwa Toki0e6b43e2017-09-19 23:18:40 +0100235 }
236
Abodunrinwa Tokidb8fc312018-02-26 21:37:51 +0000237 public boolean isSmartSelectionEnabled() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800238 return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
239 SMART_SELECTION_ENABLED, SMART_SELECTION_ENABLED_DEFAULT);
Abodunrinwa Tokidb8fc312018-02-26 21:37:51 +0000240 }
241
242 public boolean isSmartTextShareEnabled() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800243 return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
244 SMART_TEXT_SHARE_ENABLED, SMART_TEXT_SHARE_ENABLED_DEFAULT);
Abodunrinwa Toki0e6b43e2017-09-19 23:18:40 +0100245 }
Richard Ledley9cfa6062018-01-15 13:13:29 +0000246
247 public boolean isSmartLinkifyEnabled() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800248 return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TEXTCLASSIFIER, SMART_LINKIFY_ENABLED,
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100249 SMART_LINKIFY_ENABLED_DEFAULT);
Richard Ledley9cfa6062018-01-15 13:13:29 +0000250 }
Jan Althaus108aad32018-01-30 15:26:55 +0100251
Abodunrinwa Tokidb8fc312018-02-26 21:37:51 +0000252 public boolean isSmartSelectionAnimationEnabled() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800253 return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
254 SMART_SELECT_ANIMATION_ENABLED, SMART_SELECT_ANIMATION_ENABLED_DEFAULT);
Abodunrinwa Tokidb8fc312018-02-26 21:37:51 +0000255 }
256
Jan Althaus108aad32018-01-30 15:26:55 +0100257 public int getSuggestSelectionMaxRangeLength() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800258 return DeviceConfig.getInt(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
259 SUGGEST_SELECTION_MAX_RANGE_LENGTH, SUGGEST_SELECTION_MAX_RANGE_LENGTH_DEFAULT);
Jan Althaus108aad32018-01-30 15:26:55 +0100260 }
261
262 public int getClassifyTextMaxRangeLength() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800263 return DeviceConfig.getInt(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
264 CLASSIFY_TEXT_MAX_RANGE_LENGTH, CLASSIFY_TEXT_MAX_RANGE_LENGTH_DEFAULT);
Jan Althaus108aad32018-01-30 15:26:55 +0100265 }
266
267 public int getGenerateLinksMaxTextLength() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800268 return DeviceConfig.getInt(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
269 GENERATE_LINKS_MAX_TEXT_LENGTH, GENERATE_LINKS_MAX_TEXT_LENGTH_DEFAULT);
Jan Althaus108aad32018-01-30 15:26:55 +0100270 }
Jan Althaus31efdc32018-02-19 22:23:13 +0100271
272 public int getGenerateLinksLogSampleRate() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800273 return DeviceConfig.getInt(DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
274 GENERATE_LINKS_LOG_SAMPLE_RATE, GENERATE_LINKS_LOG_SAMPLE_RATE_DEFAULT);
Jan Althaus31efdc32018-02-19 22:23:13 +0100275 }
Jan Althaus0aacdb62018-02-19 11:44:37 +0100276
277 public List<String> getEntityListDefault() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800278 return getDeviceConfigStringList(ENTITY_LIST_DEFAULT, ENTITY_LIST_DEFAULT_VALUE);
Jan Althaus0aacdb62018-02-19 11:44:37 +0100279 }
280
281 public List<String> getEntityListNotEditable() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800282 return getDeviceConfigStringList(ENTITY_LIST_NOT_EDITABLE, ENTITY_LIST_DEFAULT_VALUE);
Jan Althaus0aacdb62018-02-19 11:44:37 +0100283 }
284
285 public List<String> getEntityListEditable() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800286 return getDeviceConfigStringList(ENTITY_LIST_EDITABLE, ENTITY_LIST_DEFAULT_VALUE);
Jan Althaus0aacdb62018-02-19 11:44:37 +0100287 }
288
Tony Makadbebcc2018-10-30 18:59:06 +0000289 public List<String> getInAppConversationActionTypes() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800290 return getDeviceConfigStringList(
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100291 IN_APP_CONVERSATION_ACTION_TYPES_DEFAULT,
292 CONVERSATION_ACTIONS_TYPES_DEFAULT_VALUES);
Tony Makadbebcc2018-10-30 18:59:06 +0000293 }
294
295 public List<String> getNotificationConversationActionTypes() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800296 return getDeviceConfigStringList(
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100297 NOTIFICATION_CONVERSATION_ACTION_TYPES_DEFAULT,
298 CONVERSATION_ACTIONS_TYPES_DEFAULT_VALUES);
Tony Makadbebcc2018-10-30 18:59:06 +0000299 }
300
Abodunrinwa Tokia77dba62019-01-25 19:27:11 +0000301 public float getLangIdThresholdOverride() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800302 return DeviceConfig.getFloat(
303 DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100304 LANG_ID_THRESHOLD_OVERRIDE,
305 LANG_ID_THRESHOLD_OVERRIDE_DEFAULT);
Abodunrinwa Tokia77dba62019-01-25 19:27:11 +0000306 }
307
Tony Makfc039c32019-01-17 19:32:08 +0000308 public boolean isTemplateIntentFactoryEnabled() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800309 return DeviceConfig.getBoolean(
310 DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100311 TEMPLATE_INTENT_FACTORY_ENABLED,
312 TEMPLATE_INTENT_FACTORY_ENABLED_DEFAULT);
Tony Makfc039c32019-01-17 19:32:08 +0000313 }
314
Tony Mak159f0282019-03-01 14:03:25 +0000315 public boolean isTranslateInClassificationEnabled() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800316 return DeviceConfig.getBoolean(
317 DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100318 TRANSLATE_IN_CLASSIFICATION_ENABLED,
319 TRANSLATE_IN_CLASSIFICATION_ENABLED_DEFAULT);
Tony Mak159f0282019-03-01 14:03:25 +0000320 }
321
322 public boolean isDetectLanguagesFromTextEnabled() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800323 return DeviceConfig.getBoolean(
324 DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100325 DETECT_LANGUAGES_FROM_TEXT_ENABLED,
326 DETECT_LANGUAGES_FROM_TEXT_ENABLED_DEFAULT);
Tony Mak159f0282019-03-01 14:03:25 +0000327 }
328
Tony Mak72e17972019-03-16 10:28:42 +0000329 public float[] getLangIdContextSettings() {
Joanne Chungc44f5292019-12-02 21:18:43 +0800330 return getDeviceConfigFloatArray(
331 LANG_ID_CONTEXT_SETTINGS, LANG_ID_CONTEXT_SETTINGS_DEFAULT);
Tony Mak72e17972019-03-16 10:28:42 +0000332 }
333
Tony Makf93e9e52018-07-16 14:46:29 +0200334 void dump(IndentingPrintWriter pw) {
335 pw.println("TextClassificationConstants:");
336 pw.increaseIndent();
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100337 pw.printPair("classify_text_max_range_length", getClassifyTextMaxRangeLength())
338 .println();
Joanne Chungc44f5292019-12-02 21:18:43 +0800339 pw.printPair("detect_languages_from_text_enabled", isDetectLanguagesFromTextEnabled())
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100340 .println();
341 pw.printPair("entity_list_default", getEntityListDefault())
342 .println();
343 pw.printPair("entity_list_editable", getEntityListEditable())
344 .println();
345 pw.printPair("entity_list_not_editable", getEntityListNotEditable())
346 .println();
347 pw.printPair("generate_links_log_sample_rate", getGenerateLinksLogSampleRate())
348 .println();
349 pw.printPair("generate_links_max_text_length", getGenerateLinksMaxTextLength())
350 .println();
351 pw.printPair("in_app_conversation_action_types_default", getInAppConversationActionTypes())
352 .println();
353 pw.printPair("lang_id_context_settings", Arrays.toString(getLangIdContextSettings()))
354 .println();
355 pw.printPair("lang_id_threshold_override", getLangIdThresholdOverride())
356 .println();
357 pw.printPair("local_textclassifier_enabled", isLocalTextClassifierEnabled())
358 .println();
359 pw.printPair("model_dark_launch_enabled", isModelDarkLaunchEnabled())
360 .println();
361 pw.printPair("notification_conversation_action_types_default",
362 getNotificationConversationActionTypes()).println();
363 pw.printPair("smart_linkify_enabled", isSmartLinkifyEnabled())
364 .println();
365 pw.printPair("smart_select_animation_enabled", isSmartSelectionAnimationEnabled())
366 .println();
367 pw.printPair("smart_selection_enabled", isSmartSelectionEnabled())
368 .println();
369 pw.printPair("smart_text_share_enabled", isSmartTextShareEnabled())
370 .println();
371 pw.printPair("suggest_selection_max_range_length", getSuggestSelectionMaxRangeLength())
372 .println();
373 pw.printPair("system_textclassifier_enabled", isSystemTextClassifierEnabled())
374 .println();
375 pw.printPair("template_intent_factory_enabled", isTemplateIntentFactoryEnabled())
376 .println();
377 pw.printPair("translate_in_classification_enabled", isTranslateInClassificationEnabled())
378 .println();
Joanne Chungc44f5292019-12-02 21:18:43 +0800379 pw.printPair("textclassifier_service_package_override",
380 getTextClassifierServicePackageOverride()).println();
Tony Makf93e9e52018-07-16 14:46:29 +0200381 pw.decreaseIndent();
Tony Makf93e9e52018-07-16 14:46:29 +0200382 }
Joanne Chungc44f5292019-12-02 21:18:43 +0800383
384 private static List<String> getDeviceConfigStringList(String key, List<String> defaultValue) {
385 return parse(
386 DeviceConfig.getString(DeviceConfig.NAMESPACE_TEXTCLASSIFIER, key, null),
387 defaultValue);
388 }
389
390 private static float[] getDeviceConfigFloatArray(String key, float[] defaultValue) {
391 return parse(
392 DeviceConfig.getString(DeviceConfig.NAMESPACE_TEXTCLASSIFIER, key, null),
393 defaultValue);
394 }
395
396 private static List<String> parse(@Nullable String listStr, List<String> defaultValue) {
397 if (listStr != null) {
398 return Collections.unmodifiableList(Arrays.asList(listStr.split(DELIMITER)));
399 }
400 return defaultValue;
401 }
402
403 private static float[] parse(@Nullable String arrayStr, float[] defaultValue) {
404 if (arrayStr != null) {
405 final String[] split = arrayStr.split(DELIMITER);
406 if (split.length != defaultValue.length) {
407 return defaultValue;
408 }
409 final float[] result = new float[split.length];
410 for (int i = 0; i < split.length; i++) {
411 try {
412 result[i] = Float.parseFloat(split[i]);
413 } catch (NumberFormatException e) {
414 return defaultValue;
415 }
416 }
417 return result;
418 } else {
419 return defaultValue;
420 }
421 }
Abodunrinwa Toki0634af32019-04-04 13:10:59 +0100422}