Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7c0abe19 authored by Richard Ledley's avatar Richard Ledley Committed by Android (Google) Code Review
Browse files

Merge "Initial implementation of generateLinks"

parents e67f22bb 68d94523
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -48973,6 +48973,7 @@ package android.view.textclassifier {
  public abstract interface TextClassifier {
    method public default android.view.textclassifier.TextClassification classifyText(java.lang.CharSequence, int, int, android.view.textclassifier.TextClassification.Options);
    method public default android.view.textclassifier.TextClassification classifyText(java.lang.CharSequence, int, int, android.os.LocaleList);
    method public default android.view.textclassifier.TextLinks generateLinks(java.lang.CharSequence, android.view.textclassifier.TextLinks.Options);
    method public default android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.view.textclassifier.TextSelection.Options);
    method public default android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.os.LocaleList);
    field public static final android.view.textclassifier.TextClassifier NO_OP;
@@ -48983,6 +48984,36 @@ package android.view.textclassifier {
    field public static final java.lang.String TYPE_URL = "url";
  }
  public final class TextLinks {
    method public boolean apply(android.text.SpannableString, java.util.function.Function<android.view.textclassifier.TextLinks.TextLink, android.text.style.ClickableSpan>);
    method public java.util.Collection<android.view.textclassifier.TextLinks.TextLink> getLinks();
  }
  public static final class TextLinks.Builder {
    ctor public TextLinks.Builder(java.lang.String);
    method public android.view.textclassifier.TextLinks.Builder addLink(android.view.textclassifier.TextLinks.TextLink);
    method public android.view.textclassifier.TextLinks build();
  }
  public static final class TextLinks.Options {
    method public android.os.LocaleList getDefaultLocales();
  }
  public static final class TextLinks.Options.Builder {
    ctor public TextLinks.Options.Builder();
    method public android.view.textclassifier.TextLinks.Options build();
    method public android.view.textclassifier.TextLinks.Options.Builder setLocaleList(android.os.LocaleList);
  }
  public static final class TextLinks.TextLink {
    ctor public TextLinks.TextLink(java.lang.String, int, int, java.util.Map<java.lang.String, java.lang.Float>);
    method public float getConfidenceScore(java.lang.String);
    method public int getEnd();
    method public java.lang.String getEntity(int);
    method public int getEntityCount();
    method public int getStart();
  }
  public final class TextSelection {
    method public float getConfidenceScore(java.lang.String);
    method public java.lang.String getEntity(int);
+31 −0
Original line number Diff line number Diff line
@@ -52712,6 +52712,7 @@ package android.view.textclassifier {
  public abstract interface TextClassifier {
    method public default android.view.textclassifier.TextClassification classifyText(java.lang.CharSequence, int, int, android.view.textclassifier.TextClassification.Options);
    method public default android.view.textclassifier.TextClassification classifyText(java.lang.CharSequence, int, int, android.os.LocaleList);
    method public default android.view.textclassifier.TextLinks generateLinks(java.lang.CharSequence, android.view.textclassifier.TextLinks.Options);
    method public default android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.view.textclassifier.TextSelection.Options);
    method public default android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.os.LocaleList);
    field public static final android.view.textclassifier.TextClassifier NO_OP;
@@ -52722,6 +52723,36 @@ package android.view.textclassifier {
    field public static final java.lang.String TYPE_URL = "url";
  }
  public final class TextLinks {
    method public boolean apply(android.text.SpannableString, java.util.function.Function<android.view.textclassifier.TextLinks.TextLink, android.text.style.ClickableSpan>);
    method public java.util.Collection<android.view.textclassifier.TextLinks.TextLink> getLinks();
  }
  public static final class TextLinks.Builder {
    ctor public TextLinks.Builder(java.lang.String);
    method public android.view.textclassifier.TextLinks.Builder addLink(android.view.textclassifier.TextLinks.TextLink);
    method public android.view.textclassifier.TextLinks build();
  }
  public static final class TextLinks.Options {
    method public android.os.LocaleList getDefaultLocales();
  }
  public static final class TextLinks.Options.Builder {
    ctor public TextLinks.Options.Builder();
    method public android.view.textclassifier.TextLinks.Options build();
    method public android.view.textclassifier.TextLinks.Options.Builder setLocaleList(android.os.LocaleList);
  }
  public static final class TextLinks.TextLink {
    ctor public TextLinks.TextLink(java.lang.String, int, int, java.util.Map<java.lang.String, java.lang.Float>);
    method public float getConfidenceScore(java.lang.String);
    method public int getEnd();
    method public java.lang.String getEntity(int);
    method public int getEntityCount();
    method public int getStart();
  }
  public final class TextSelection {
    method public float getConfidenceScore(java.lang.String);
    method public java.lang.String getEntity(int);
+31 −0
Original line number Diff line number Diff line
@@ -49610,6 +49610,7 @@ package android.view.textclassifier {
  public abstract interface TextClassifier {
    method public default android.view.textclassifier.TextClassification classifyText(java.lang.CharSequence, int, int, android.view.textclassifier.TextClassification.Options);
    method public default android.view.textclassifier.TextClassification classifyText(java.lang.CharSequence, int, int, android.os.LocaleList);
    method public default android.view.textclassifier.TextLinks generateLinks(java.lang.CharSequence, android.view.textclassifier.TextLinks.Options);
    method public default android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.view.textclassifier.TextSelection.Options);
    method public default android.view.textclassifier.TextSelection suggestSelection(java.lang.CharSequence, int, int, android.os.LocaleList);
    field public static final android.view.textclassifier.TextClassifier NO_OP;
@@ -49620,6 +49621,36 @@ package android.view.textclassifier {
    field public static final java.lang.String TYPE_URL = "url";
  }
  public final class TextLinks {
    method public boolean apply(android.text.SpannableString, java.util.function.Function<android.view.textclassifier.TextLinks.TextLink, android.text.style.ClickableSpan>);
    method public java.util.Collection<android.view.textclassifier.TextLinks.TextLink> getLinks();
  }
  public static final class TextLinks.Builder {
    ctor public TextLinks.Builder(java.lang.String);
    method public android.view.textclassifier.TextLinks.Builder addLink(android.view.textclassifier.TextLinks.TextLink);
    method public android.view.textclassifier.TextLinks build();
  }
  public static final class TextLinks.Options {
    method public android.os.LocaleList getDefaultLocales();
  }
  public static final class TextLinks.Options.Builder {
    ctor public TextLinks.Options.Builder();
    method public android.view.textclassifier.TextLinks.Options build();
    method public android.view.textclassifier.TextLinks.Options.Builder setLocaleList(android.os.LocaleList);
  }
  public static final class TextLinks.TextLink {
    ctor public TextLinks.TextLink(java.lang.String, int, int, java.util.Map<java.lang.String, java.lang.Float>);
    method public float getConfidenceScore(java.lang.String);
    method public int getEnd();
    method public java.lang.String getEntity(int);
    method public int getEntityCount();
    method public int getStart();
  }
  public final class TextSelection {
    method public float getConfidenceScore(java.lang.String);
    method public java.lang.String getEntity(int);
+15 −0
Original line number Diff line number Diff line
@@ -153,6 +153,21 @@ public interface TextClassifier {
        return LinksInfo.NO_OP;
    }

    /**
     * Returns a {@link TextLinks} that may be applied to the text to annotate it with links
     * information.
     *
     * @param text the text to generate annotations for
     * @param options configuration for link generation. If null, defaults will be used.
     *
     * @throws IllegalArgumentException if text is null
     */
    @WorkerThread
    default TextLinks generateLinks(
            @NonNull CharSequence text, @Nullable TextLinks.Options options) {
        return new TextLinks.Builder(text.toString()).build();
    }

    /**
     * Logs a TextClassifier event.
     *
+28 −2
Original line number Diff line number Diff line
@@ -208,6 +208,32 @@ final class TextClassifierImpl implements TextClassifier {
        return TextClassifier.NO_OP.getLinks(text, linkMask, defaultLocales);
    }

    @Override
    public TextLinks generateLinks(
            @NonNull CharSequence text, @Nullable TextLinks.Options options) {
        Preconditions.checkNotNull(text);
        final String textString = text.toString();
        final TextLinks.Builder builder = new TextLinks.Builder(textString);
        try {
            LocaleList defaultLocales = options != null ? options.getDefaultLocales() : null;
            final SmartSelection smartSelection = getSmartSelection(defaultLocales);
            final SmartSelection.AnnotatedSpan[] annotations = smartSelection.annotate(textString);
            for (SmartSelection.AnnotatedSpan span : annotations) {
                final Map<String, Float> entityScores = new HashMap<>();
                final SmartSelection.ClassificationResult[] results = span.getClassification();
                for (int i = 0; i < results.length; i++) {
                    entityScores.put(results[i].mCollection, results[i].mScore);
                }
                builder.addLink(new TextLinks.TextLink(
                        textString, span.getStartIndex(), span.getEndIndex(), entityScores));
            }
        } catch (Throwable t) {
            // Avoid throwing from this method. Log the error.
            Log.e(LOG_TAG, "Error getting links info.", t);
        }
        return builder.build();
    }

    @Override
    public void logEvent(String source, String event) {
        if (LOG_TAG.equals(source)) {
Loading