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

Commit 1f31d9a8 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Making TextClassifier helper objects parcelable"

parents 2bb44413 0d9fbb9b
Loading
Loading
Loading
Loading
+26 −9
Original line number Diff line number Diff line
@@ -49261,14 +49261,13 @@ package android.view.textclassifier {
    method public android.graphics.drawable.Drawable getSecondaryIcon(int);
    method public android.content.Intent getSecondaryIntent(int);
    method public java.lang.CharSequence getSecondaryLabel(int);
    method public android.view.View.OnClickListener getSecondaryOnClickListener(int);
    method public java.lang.String getSignature();
    method public java.lang.String getText();
  }
  public static final class TextClassification.Builder {
    ctor public TextClassification.Builder();
    method public android.view.textclassifier.TextClassification.Builder addSecondaryAction(android.content.Intent, java.lang.String, android.graphics.drawable.Drawable, android.view.View.OnClickListener);
    method public android.view.textclassifier.TextClassification.Builder addSecondaryAction(android.content.Intent, java.lang.String, android.graphics.drawable.Drawable);
    method public android.view.textclassifier.TextClassification build();
    method public android.view.textclassifier.TextClassification.Builder clearSecondaryActions();
    method public android.view.textclassifier.TextClassification.Builder setEntityType(java.lang.String, float);
@@ -49276,15 +49275,18 @@ package android.view.textclassifier {
    method public android.view.textclassifier.TextClassification.Builder setIntent(android.content.Intent);
    method public android.view.textclassifier.TextClassification.Builder setLabel(java.lang.String);
    method public android.view.textclassifier.TextClassification.Builder setOnClickListener(android.view.View.OnClickListener);
    method public android.view.textclassifier.TextClassification.Builder setPrimaryAction(android.content.Intent, java.lang.String, android.graphics.drawable.Drawable, android.view.View.OnClickListener);
    method public android.view.textclassifier.TextClassification.Builder setPrimaryAction(android.content.Intent, java.lang.String, android.graphics.drawable.Drawable);
    method public android.view.textclassifier.TextClassification.Builder setSignature(java.lang.String);
    method public android.view.textclassifier.TextClassification.Builder setText(java.lang.String);
  }
  public static final class TextClassification.Options {
  public static final class TextClassification.Options implements android.os.Parcelable {
    ctor public TextClassification.Options();
    method public int describeContents();
    method public android.os.LocaleList getDefaultLocales();
    method public android.view.textclassifier.TextClassification.Options setDefaultLocales(android.os.LocaleList);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassification.Options> CREATOR;
  }
  public final class TextClassificationManager {
@@ -49314,16 +49316,22 @@ package android.view.textclassifier {
    field public static final java.lang.String TYPE_URL = "url";
  }
  public static final class TextClassifier.EntityConfig {
  public static final class TextClassifier.EntityConfig implements android.os.Parcelable {
    ctor public TextClassifier.EntityConfig(int);
    method public int describeContents();
    method public android.view.textclassifier.TextClassifier.EntityConfig excludeEntities(java.lang.String...);
    method public java.util.List<java.lang.String> getEntities(android.view.textclassifier.TextClassifier);
    method public android.view.textclassifier.TextClassifier.EntityConfig includeEntities(java.lang.String...);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifier.EntityConfig> CREATOR;
  }
  public final class TextLinks {
  public final class TextLinks implements android.os.Parcelable {
    method public boolean apply(android.text.SpannableString, java.util.function.Function<android.view.textclassifier.TextLinks.TextLink, android.text.style.ClickableSpan>);
    method public int describeContents();
    method public java.util.Collection<android.view.textclassifier.TextLinks.TextLink> getLinks();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks> CREATOR;
  }
  public static final class TextLinks.Builder {
@@ -49332,21 +49340,27 @@ package android.view.textclassifier {
    method public android.view.textclassifier.TextLinks build();
  }
  public static final class TextLinks.Options {
  public static final class TextLinks.Options implements android.os.Parcelable {
    ctor public TextLinks.Options();
    method public int describeContents();
    method public android.os.LocaleList getDefaultLocales();
    method public android.view.textclassifier.TextClassifier.EntityConfig getEntityConfig();
    method public android.view.textclassifier.TextLinks.Options setDefaultLocales(android.os.LocaleList);
    method public android.view.textclassifier.TextLinks.Options setEntityConfig(android.view.textclassifier.TextClassifier.EntityConfig);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks.Options> CREATOR;
  }
  public static final class TextLinks.TextLink {
  public static final class TextLinks.TextLink implements android.os.Parcelable {
    ctor public TextLinks.TextLink(java.lang.String, int, int, java.util.Map<java.lang.String, java.lang.Float>);
    method public int describeContents();
    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();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks.TextLink> CREATOR;
  }
  public final class TextSelection {
@@ -49365,10 +49379,13 @@ package android.view.textclassifier {
    method public android.view.textclassifier.TextSelection.Builder setSignature(java.lang.String);
  }
  public static final class TextSelection.Options {
  public static final class TextSelection.Options implements android.os.Parcelable {
    ctor public TextSelection.Options();
    method public int describeContents();
    method public android.os.LocaleList getDefaultLocales();
    method public android.view.textclassifier.TextSelection.Options setDefaultLocales(android.os.LocaleList);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.view.textclassifier.TextSelection.Options> CREATOR;
  }
}
+58 −18
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package android.view.textclassifier;

import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.ArrayMap;

import com.android.internal.util.Preconditions;
@@ -30,17 +32,16 @@ import java.util.Map;
/**
 * Helper object for setting and getting entity scores for classified text.
 *
 * @param <T> the entity type.
 * @hide
 */
final class EntityConfidence<T> {
final class EntityConfidence implements Parcelable {

    private final ArrayMap<T, Float> mEntityConfidence = new ArrayMap<>();
    private final ArrayList<T> mSortedEntities = new ArrayList<>();
    private final ArrayMap<String, Float> mEntityConfidence = new ArrayMap<>();
    private final ArrayList<String> mSortedEntities = new ArrayList<>();

    EntityConfidence() {}

    EntityConfidence(@NonNull EntityConfidence<T> source) {
    EntityConfidence(@NonNull EntityConfidence source) {
        Preconditions.checkNotNull(source);
        mEntityConfidence.putAll(source.mEntityConfidence);
        mSortedEntities.addAll(source.mSortedEntities);
@@ -54,24 +55,16 @@ final class EntityConfidence<T> {
     * @param source a map from entity to a confidence value in the range 0 (low confidence) to
     *               1 (high confidence).
     */
    EntityConfidence(@NonNull Map<T, Float> source) {
    EntityConfidence(@NonNull Map<String, Float> source) {
        Preconditions.checkNotNull(source);

        // Prune non-existent entities and clamp to 1.
        mEntityConfidence.ensureCapacity(source.size());
        for (Map.Entry<T, Float> it : source.entrySet()) {
        for (Map.Entry<String, Float> it : source.entrySet()) {
            if (it.getValue() <= 0) continue;
            mEntityConfidence.put(it.getKey(), Math.min(1, it.getValue()));
        }

        // Create a list of entities sorted by decreasing confidence for getEntities().
        mSortedEntities.ensureCapacity(mEntityConfidence.size());
        mSortedEntities.addAll(mEntityConfidence.keySet());
        mSortedEntities.sort((e1, e2) -> {
            float score1 = mEntityConfidence.get(e1);
            float score2 = mEntityConfidence.get(e2);
            return Float.compare(score2, score1);
        });
        resetSortedEntitiesFromMap();
    }

    /**
@@ -79,7 +72,7 @@ final class EntityConfidence<T> {
     * high confidence to low confidence.
     */
    @NonNull
    public List<T> getEntities() {
    public List<String> getEntities() {
        return Collections.unmodifiableList(mSortedEntities);
    }

@@ -89,7 +82,7 @@ final class EntityConfidence<T> {
     * classified text.
     */
    @FloatRange(from = 0.0, to = 1.0)
    public float getConfidenceScore(T entity) {
    public float getConfidenceScore(String entity) {
        if (mEntityConfidence.containsKey(entity)) {
            return mEntityConfidence.get(entity);
        }
@@ -100,4 +93,51 @@ final class EntityConfidence<T> {
    public String toString() {
        return mEntityConfidence.toString();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(mEntityConfidence.size());
        for (Map.Entry<String, Float> entry : mEntityConfidence.entrySet()) {
            dest.writeString(entry.getKey());
            dest.writeFloat(entry.getValue());
        }
    }

    public static final Parcelable.Creator<EntityConfidence> CREATOR =
            new Parcelable.Creator<EntityConfidence>() {
                @Override
                public EntityConfidence createFromParcel(Parcel in) {
                    return new EntityConfidence(in);
                }

                @Override
                public EntityConfidence[] newArray(int size) {
                    return new EntityConfidence[size];
                }
            };

    private EntityConfidence(Parcel in) {
        final int numEntities = in.readInt();
        mEntityConfidence.ensureCapacity(numEntities);
        for (int i = 0; i < numEntities; ++i) {
            mEntityConfidence.put(in.readString(), in.readFloat());
        }
        resetSortedEntitiesFromMap();
    }

    private void resetSortedEntitiesFromMap() {
        mSortedEntities.clear();
        mSortedEntities.ensureCapacity(mEntityConfidence.size());
        mSortedEntities.addAll(mEntityConfidence.keySet());
        mSortedEntities.sort((e1, e2) -> {
            float score1 = mEntityConfidence.get(e1);
            float score2 = mEntityConfidence.get(e2);
            return Float.compare(score2, score1);
        });
    }
}
+209 −69

File changed.

Preview size limit exceeded, changes collapsed.

+34 −1
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.annotation.Nullable;
import android.annotation.StringDef;
import android.annotation.WorkerThread;
import android.os.LocaleList;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.ArraySet;

import com.android.internal.util.Preconditions;
@@ -305,7 +307,7 @@ public interface TextClassifier {
     *
     * Configs are initially based on a predefined preset, and can be modified from there.
     */
    final class EntityConfig {
    final class EntityConfig implements Parcelable {
        private final @TextClassifier.EntityPreset int mEntityPreset;
        private final Collection<String> mExcludedEntityTypes;
        private final Collection<String> mIncludedEntityTypes;
@@ -355,6 +357,37 @@ public interface TextClassifier {
            }
            return Collections.unmodifiableList(entities);
        }

        @Override
        public int describeContents() {
            return 0;
        }

        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(mEntityPreset);
            dest.writeStringList(new ArrayList<>(mExcludedEntityTypes));
            dest.writeStringList(new ArrayList<>(mIncludedEntityTypes));
        }

        public static final Parcelable.Creator<EntityConfig> CREATOR =
                new Parcelable.Creator<EntityConfig>() {
                    @Override
                    public EntityConfig createFromParcel(Parcel in) {
                        return new EntityConfig(in);
                    }

                    @Override
                    public EntityConfig[] newArray(int size) {
                        return new EntityConfig[size];
                    }
                };

        private EntityConfig(Parcel in) {
            mEntityPreset = in.readInt();
            mExcludedEntityTypes = new ArraySet<>(in.createStringArrayList());
            mIncludedEntityTypes = new ArraySet<>(in.createStringArrayList());
        }
    }

    /**
+2 −5
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import android.provider.ContactsContract;
import android.provider.Settings;
import android.text.util.Linkify;
import android.util.Patterns;
import android.view.View.OnClickListener;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.logging.MetricsLogger;
@@ -457,12 +456,10 @@ final class TextClassifierImpl implements TextClassifier {
                    }
                }
                final String labelString = (label != null) ? label.toString() : null;
                final OnClickListener onClickListener =
                        TextClassification.createStartActivityOnClickListener(mContext, intent);
                if (i == 0) {
                    builder.setPrimaryAction(intent, labelString, icon, onClickListener);
                    builder.setPrimaryAction(intent, labelString, icon);
                } else {
                    builder.addSecondaryAction(intent, labelString, icon, onClickListener);
                    builder.addSecondaryAction(intent, labelString, icon);
                }
            }
        }
Loading