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