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

Commit 68d94523 authored by Richard Ledley's avatar Richard Ledley
Browse files

Initial implementation of generateLinks

Test: Included, and ag/3141575

Change-Id: Ia91aa130e95ff347c55981b68b8d975bc8131a73
parent a7d81598
Loading
Loading
Loading
Loading
+31 −0
Original line number Diff line number Diff line
@@ -48969,6 +48969,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;
@@ -48979,6 +48980,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
@@ -52708,6 +52708,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;
@@ -52718,6 +52719,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
@@ -49606,6 +49606,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;
@@ -49616,6 +49617,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