ADD week 5
This commit is contained in:
137
02-Easy5/E5/sources/androidx/emoji2/text/MetadataRepo.java
Normal file
137
02-Easy5/E5/sources/androidx/emoji2/text/MetadataRepo.java
Normal file
@@ -0,0 +1,137 @@
|
||||
package androidx.emoji2.text;
|
||||
|
||||
import android.content.res.AssetManager;
|
||||
import android.graphics.Typeface;
|
||||
import android.util.SparseArray;
|
||||
import androidx.core.os.TraceCompat;
|
||||
import androidx.core.util.Preconditions;
|
||||
import androidx.emoji2.text.flatbuffer.MetadataList;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public final class MetadataRepo {
|
||||
private static final int DEFAULT_ROOT_SIZE = 1024;
|
||||
private static final String S_TRACE_CREATE_REPO = "EmojiCompat.MetadataRepo.create";
|
||||
private final char[] mEmojiCharArray;
|
||||
private final MetadataList mMetadataList;
|
||||
private final Node mRootNode = new Node(1024);
|
||||
private final Typeface mTypeface;
|
||||
|
||||
public char[] getEmojiCharArray() {
|
||||
return this.mEmojiCharArray;
|
||||
}
|
||||
|
||||
public MetadataList getMetadataList() {
|
||||
return this.mMetadataList;
|
||||
}
|
||||
|
||||
Node getRootNode() {
|
||||
return this.mRootNode;
|
||||
}
|
||||
|
||||
Typeface getTypeface() {
|
||||
return this.mTypeface;
|
||||
}
|
||||
|
||||
private MetadataRepo(Typeface typeface, MetadataList metadataList) {
|
||||
this.mTypeface = typeface;
|
||||
this.mMetadataList = metadataList;
|
||||
this.mEmojiCharArray = new char[metadataList.listLength() * 2];
|
||||
constructIndex(metadataList);
|
||||
}
|
||||
|
||||
public static MetadataRepo create(Typeface typeface) {
|
||||
try {
|
||||
TraceCompat.beginSection(S_TRACE_CREATE_REPO);
|
||||
return new MetadataRepo(typeface, new MetadataList());
|
||||
} finally {
|
||||
TraceCompat.endSection();
|
||||
}
|
||||
}
|
||||
|
||||
public static MetadataRepo create(Typeface typeface, InputStream inputStream) throws IOException {
|
||||
try {
|
||||
TraceCompat.beginSection(S_TRACE_CREATE_REPO);
|
||||
return new MetadataRepo(typeface, MetadataListReader.read(inputStream));
|
||||
} finally {
|
||||
TraceCompat.endSection();
|
||||
}
|
||||
}
|
||||
|
||||
public static MetadataRepo create(Typeface typeface, ByteBuffer byteBuffer) throws IOException {
|
||||
try {
|
||||
TraceCompat.beginSection(S_TRACE_CREATE_REPO);
|
||||
return new MetadataRepo(typeface, MetadataListReader.read(byteBuffer));
|
||||
} finally {
|
||||
TraceCompat.endSection();
|
||||
}
|
||||
}
|
||||
|
||||
public static MetadataRepo create(AssetManager assetManager, String str) throws IOException {
|
||||
try {
|
||||
TraceCompat.beginSection(S_TRACE_CREATE_REPO);
|
||||
return new MetadataRepo(Typeface.createFromAsset(assetManager, str), MetadataListReader.read(assetManager, str));
|
||||
} finally {
|
||||
TraceCompat.endSection();
|
||||
}
|
||||
}
|
||||
|
||||
private void constructIndex(MetadataList metadataList) {
|
||||
int listLength = metadataList.listLength();
|
||||
for (int i = 0; i < listLength; i++) {
|
||||
EmojiMetadata emojiMetadata = new EmojiMetadata(this, i);
|
||||
Character.toChars(emojiMetadata.getId(), this.mEmojiCharArray, i * 2);
|
||||
put(emojiMetadata);
|
||||
}
|
||||
}
|
||||
|
||||
int getMetadataVersion() {
|
||||
return this.mMetadataList.version();
|
||||
}
|
||||
|
||||
void put(EmojiMetadata emojiMetadata) {
|
||||
Preconditions.checkNotNull(emojiMetadata, "emoji metadata cannot be null");
|
||||
Preconditions.checkArgument(emojiMetadata.getCodepointsLength() > 0, "invalid metadata codepoint length");
|
||||
this.mRootNode.put(emojiMetadata, 0, emojiMetadata.getCodepointsLength() - 1);
|
||||
}
|
||||
|
||||
static class Node {
|
||||
private final SparseArray<Node> mChildren;
|
||||
private EmojiMetadata mData;
|
||||
|
||||
final EmojiMetadata getData() {
|
||||
return this.mData;
|
||||
}
|
||||
|
||||
private Node() {
|
||||
this(1);
|
||||
}
|
||||
|
||||
Node(int i) {
|
||||
this.mChildren = new SparseArray<>(i);
|
||||
}
|
||||
|
||||
Node get(int i) {
|
||||
SparseArray<Node> sparseArray = this.mChildren;
|
||||
if (sparseArray == null) {
|
||||
return null;
|
||||
}
|
||||
return sparseArray.get(i);
|
||||
}
|
||||
|
||||
void put(EmojiMetadata emojiMetadata, int i, int i2) {
|
||||
Node node = get(emojiMetadata.getCodepointAt(i));
|
||||
if (node == null) {
|
||||
node = new Node();
|
||||
this.mChildren.put(emojiMetadata.getCodepointAt(i), node);
|
||||
}
|
||||
if (i2 > i) {
|
||||
node.put(emojiMetadata, i + 1, i2);
|
||||
} else {
|
||||
node.mData = emojiMetadata;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user