diff options
| author | 2018-01-18 22:51:34 +0000 | |
|---|---|---|
| committer | 2018-01-18 22:51:34 +0000 | |
| commit | 265fc005c71f117e58a421a4cb804f10b2e12fc7 (patch) | |
| tree | 358d9ef7b3b36d0ef915c839bedcd6807b2b2f55 | |
| parent | c5cc226f9e15ffb37c508c141f7a254209ddbd20 (diff) | |
| parent | 6fb52a5fca3d6030509aff08c22b6ffcd9fc1baf (diff) | |
Merge "Use LinkedHashMap on CharSequenceTransformation to keep order of insertions."
| -rw-r--r-- | core/java/android/service/autofill/CharSequenceTransformation.java | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/core/java/android/service/autofill/CharSequenceTransformation.java b/core/java/android/service/autofill/CharSequenceTransformation.java index 2413e97ba837..f52ac8505289 100644 --- a/core/java/android/service/autofill/CharSequenceTransformation.java +++ b/core/java/android/service/autofill/CharSequenceTransformation.java @@ -22,7 +22,6 @@ import android.annotation.NonNull; import android.annotation.TestApi; import android.os.Parcel; import android.os.Parcelable; -import android.util.ArrayMap; import android.util.Log; import android.util.Pair; import android.view.autofill.AutofillId; @@ -31,6 +30,8 @@ import android.widget.TextView; import com.android.internal.util.Preconditions; +import java.util.LinkedHashMap; +import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -62,7 +63,9 @@ import java.util.regex.Pattern; public final class CharSequenceTransformation extends InternalTransformation implements Transformation, Parcelable { private static final String TAG = "CharSequenceTransformation"; - @NonNull private final ArrayMap<AutofillId, Pair<Pattern, String>> mFields; + + // Must use LinkedHashMap to preserve insertion order. + @NonNull private final LinkedHashMap<AutofillId, Pair<Pattern, String>> mFields; private CharSequenceTransformation(Builder builder) { mFields = builder.mFields; @@ -76,9 +79,9 @@ public final class CharSequenceTransformation extends InternalTransformation imp final StringBuilder converted = new StringBuilder(); final int size = mFields.size(); if (sDebug) Log.d(TAG, size + " multiple fields on id " + childViewId); - for (int i = 0; i < size; i++) { - final AutofillId id = mFields.keyAt(i); - final Pair<Pattern, String> field = mFields.valueAt(i); + for (Entry<AutofillId, Pair<Pattern, String>> entry : mFields.entrySet()) { + final AutofillId id = entry.getKey(); + final Pair<Pattern, String> field = entry.getValue(); final String value = finder.findByAutofillId(id); if (value == null) { Log.w(TAG, "No value for id " + id); @@ -107,8 +110,10 @@ public final class CharSequenceTransformation extends InternalTransformation imp * Builder for {@link CharSequenceTransformation} objects. */ public static class Builder { - @NonNull private final ArrayMap<AutofillId, Pair<Pattern, String>> mFields = - new ArrayMap<>(); + + // Must use LinkedHashMap to preserve insertion order. + @NonNull private final LinkedHashMap<AutofillId, Pair<Pattern, String>> mFields = + new LinkedHashMap<>(); private boolean mDestroyed; /** @@ -186,12 +191,15 @@ public final class CharSequenceTransformation extends InternalTransformation imp final Pattern[] regexs = new Pattern[size]; final String[] substs = new String[size]; Pair<Pattern, String> pair; - for (int i = 0; i < size; i++) { - ids[i] = mFields.keyAt(i); - pair = mFields.valueAt(i); + int i = 0; + for (Entry<AutofillId, Pair<Pattern, String>> entry : mFields.entrySet()) { + ids[i] = entry.getKey(); + pair = entry.getValue(); regexs[i] = pair.first; substs[i] = pair.second; + i++; } + parcel.writeParcelableArray(ids, flags); parcel.writeSerializable(regexs); parcel.writeStringArray(substs); |