diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-02-22 16:08:51 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-02-22 16:08:51 +0000 |
| commit | 02e2518f5bb3c58095317ed0ba653f2a677eb42c (patch) | |
| tree | 6105d0ae0f04a2da30ee75cdaf386befb6d7fd29 /core/java/android | |
| parent | d2195767e9673aa510fd97d90a6297efa872528c (diff) | |
| parent | 0aacdb665cc42a64b5ecdfe1011bb3f19fea6d58 (diff) | |
Merge "Make default entity lists flag configurable"
Diffstat (limited to 'core/java/android')
3 files changed, 80 insertions, 14 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 47bffc42f9bf..68490ed24ac0 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -10471,7 +10471,8 @@ public final class Settings { /** * TextClassifier specific settings. - * This is encoded as a key=value list, separated by commas. Ex: + * This is encoded as a key=value list, separated by commas. String[] types like + * entity_list_default use ":" as delimiter for values. Ex: * * <pre> * smart_selection_dark_launch (boolean) @@ -10480,6 +10481,9 @@ public final class Settings { * classify_text_max_range_length (int) * generate_links_max_text_length (int) * generate_links_log_sample_rate (int) + * entity_list_default (String[]) + * entity_list_not_editable (String[]) + * entity_list_editable (String[]) * </pre> * * <p> diff --git a/core/java/android/view/textclassifier/TextClassifierConstants.java b/core/java/android/view/textclassifier/TextClassifierConstants.java index 69f16a4b5174..397473be9d4b 100644 --- a/core/java/android/view/textclassifier/TextClassifierConstants.java +++ b/core/java/android/view/textclassifier/TextClassifierConstants.java @@ -20,6 +20,11 @@ import android.annotation.Nullable; import android.util.KeyValueListParser; import android.util.Slog; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.StringJoiner; + /** * TextClassifier specific settings. * This is encoded as a key=value list, separated by commas. Ex: @@ -27,6 +32,12 @@ import android.util.Slog; * <pre> * smart_selection_dark_launch (boolean) * smart_selection_enabled_for_edit_text (boolean) + * suggest_selection_max_range_length (int) + * classify_text_max_range_length (int) + * generate_links_max_text_length (int) + * entity_list_default (String[]) + * entity_list_not_editable (String[]) + * entity_list_editable (String[]) * </pre> * * <p> @@ -34,7 +45,9 @@ import android.util.Slog; * see also android.provider.Settings.Global.TEXT_CLASSIFIER_CONSTANTS * * Example of setting the values for testing. - * adb shell settings put global text_classifier_constants smart_selection_dark_launch=true,smart_selection_enabled_for_edit_text=true + * adb shell settings put global text_classifier_constants \ + * smart_selection_dark_launch=true,smart_selection_enabled_for_edit_text=true,\ + * entity_list_default=phone:address * @hide */ public final class TextClassifierConstants { @@ -55,6 +68,12 @@ public final class TextClassifierConstants { "generate_links_max_text_length"; private static final String GENERATE_LINKS_LOG_SAMPLE_RATE = "generate_links_log_sample_rate"; + private static final String ENTITY_LIST_DEFAULT = + "entity_list_default"; + private static final String ENTITY_LIST_NOT_EDITABLE = + "entity_list_not_editable"; + private static final String ENTITY_LIST_EDITABLE = + "entity_list_editable"; private static final boolean SMART_SELECTION_DARK_LAUNCH_DEFAULT = false; private static final boolean SMART_SELECTION_ENABLED_FOR_EDIT_TEXT_DEFAULT = true; @@ -63,6 +82,15 @@ public final class TextClassifierConstants { private static final int CLASSIFY_TEXT_MAX_RANGE_LENGTH_DEFAULT = 10 * 1000; private static final int GENERATE_LINKS_MAX_TEXT_LENGTH_DEFAULT = 100 * 1000; private static final int GENERATE_LINKS_LOG_SAMPLE_RATE_DEFAULT = 100; + private static final String ENTITY_LIST_DELIMITER = ":"; + private static final String ENTITY_LIST_DEFAULT_VALUE = new StringJoiner(ENTITY_LIST_DELIMITER) + .add(TextClassifier.TYPE_ADDRESS) + .add(TextClassifier.TYPE_EMAIL) + .add(TextClassifier.TYPE_PHONE) + .add(TextClassifier.TYPE_URL) + .add(TextClassifier.TYPE_DATE) + .add(TextClassifier.TYPE_DATE_TIME) + .add(TextClassifier.TYPE_FLIGHT_NUMBER).toString(); /** Default settings. */ static final TextClassifierConstants DEFAULT = new TextClassifierConstants(); @@ -74,6 +102,9 @@ public final class TextClassifierConstants { private final int mClassifyTextMaxRangeLength; private final int mGenerateLinksMaxTextLength; private final int mGenerateLinksLogSampleRate; + private final List<String> mEntityListDefault; + private final List<String> mEntityListNotEditable; + private final List<String> mEntityListEditable; private TextClassifierConstants() { mDarkLaunch = SMART_SELECTION_DARK_LAUNCH_DEFAULT; @@ -83,6 +114,9 @@ public final class TextClassifierConstants { mClassifyTextMaxRangeLength = CLASSIFY_TEXT_MAX_RANGE_LENGTH_DEFAULT; mGenerateLinksMaxTextLength = GENERATE_LINKS_MAX_TEXT_LENGTH_DEFAULT; mGenerateLinksLogSampleRate = GENERATE_LINKS_LOG_SAMPLE_RATE_DEFAULT; + mEntityListDefault = parseEntityList(ENTITY_LIST_DEFAULT_VALUE); + mEntityListNotEditable = mEntityListDefault; + mEntityListEditable = mEntityListDefault; } private TextClassifierConstants(@Nullable String settings) { @@ -114,9 +148,19 @@ public final class TextClassifierConstants { mGenerateLinksLogSampleRate = parser.getInt( GENERATE_LINKS_LOG_SAMPLE_RATE, GENERATE_LINKS_LOG_SAMPLE_RATE_DEFAULT); + mEntityListDefault = parseEntityList(parser.getString( + ENTITY_LIST_DEFAULT, + ENTITY_LIST_DEFAULT_VALUE)); + mEntityListNotEditable = parseEntityList(parser.getString( + ENTITY_LIST_NOT_EDITABLE, + ENTITY_LIST_DEFAULT_VALUE)); + mEntityListEditable = parseEntityList(parser.getString( + ENTITY_LIST_EDITABLE, + ENTITY_LIST_DEFAULT_VALUE)); } - static TextClassifierConstants loadFromString(String settings) { + /** Load from a settings string. */ + public static TextClassifierConstants loadFromString(String settings) { return new TextClassifierConstants(settings); } @@ -147,4 +191,20 @@ public final class TextClassifierConstants { public int getGenerateLinksLogSampleRate() { return mGenerateLinksLogSampleRate; } + + public List<String> getEntityListDefault() { + return mEntityListDefault; + } + + public List<String> getEntityListNotEditable() { + return mEntityListNotEditable; + } + + public List<String> getEntityListEditable() { + return mEntityListEditable; + } + + private static List<String> parseEntityList(String listStr) { + return Collections.unmodifiableList(Arrays.asList(listStr.split(ENTITY_LIST_DELIMITER))); + } } diff --git a/core/java/android/view/textclassifier/TextClassifierImpl.java b/core/java/android/view/textclassifier/TextClassifierImpl.java index 90619c491cff..5b7095b2f44f 100644 --- a/core/java/android/view/textclassifier/TextClassifierImpl.java +++ b/core/java/android/view/textclassifier/TextClassifierImpl.java @@ -79,15 +79,6 @@ public final class TextClassifierImpl implements TextClassifier { private static final String MODEL_FILE_REGEX = "textclassifier\\.(.*)\\.model"; private static final String UPDATED_MODEL_FILE_PATH = "/data/misc/textclassifier/textclassifier.model"; - private static final List<String> ENTITY_TYPES_ALL = - Collections.unmodifiableList(Arrays.asList( - TextClassifier.TYPE_ADDRESS, - TextClassifier.TYPE_EMAIL, - TextClassifier.TYPE_PHONE, - TextClassifier.TYPE_URL, - TextClassifier.TYPE_DATE, - TextClassifier.TYPE_DATE_TIME, - TextClassifier.TYPE_FLIGHT_NUMBER)); private final Context mContext; private final TextClassifier mFallback; @@ -235,7 +226,7 @@ public final class TextClassifierImpl implements TextClassifier { options != null && options.getEntityConfig() != null ? options.getEntityConfig().resolveEntityListModifications( getEntitiesForHints(options.getEntityConfig().getHints())) - : ENTITY_TYPES_ALL; + : getSettings().getEntityListDefault(); final TextClassifierImplNative nativeImpl = getNative(defaultLocales); final TextClassifierImplNative.AnnotatedSpan[] annotations = @@ -281,7 +272,18 @@ public final class TextClassifierImpl implements TextClassifier { } private Collection<String> getEntitiesForHints(Collection<String> hints) { - return ENTITY_TYPES_ALL; + final boolean editable = hints.contains(HINT_TEXT_IS_EDITABLE); + final boolean notEditable = hints.contains(HINT_TEXT_IS_NOT_EDITABLE); + + // Use the default if there is no hint, or conflicting ones. + final boolean useDefault = editable == notEditable; + if (useDefault) { + return getSettings().getEntityListDefault(); + } else if (editable) { + return getSettings().getEntityListEditable(); + } else { // notEditable + return getSettings().getEntityListNotEditable(); + } } @Override |
