ADD week 5
This commit is contained in:
		| @@ -0,0 +1,133 @@ | ||||
| package androidx.emoji2.text; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.content.pm.PackageManager; | ||||
| import android.content.pm.ProviderInfo; | ||||
| import android.content.pm.ResolveInfo; | ||||
| import android.content.pm.Signature; | ||||
| import android.os.Build; | ||||
| import android.util.Log; | ||||
| import androidx.core.provider.FontRequest; | ||||
| import androidx.core.util.Preconditions; | ||||
| import androidx.emoji2.text.EmojiCompat; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.Iterator; | ||||
| import java.util.List; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public final class DefaultEmojiCompatConfig { | ||||
|     private DefaultEmojiCompatConfig() { | ||||
|     } | ||||
|  | ||||
|     public static FontRequestEmojiCompatConfig create(Context context) { | ||||
|         return (FontRequestEmojiCompatConfig) new DefaultEmojiCompatConfigFactory(null).create(context); | ||||
|     } | ||||
|  | ||||
|     public static class DefaultEmojiCompatConfigFactory { | ||||
|         private static final String DEFAULT_EMOJI_QUERY = "emojicompat-emoji-font"; | ||||
|         private static final String INTENT_LOAD_EMOJI_FONT = "androidx.content.action.LOAD_EMOJI_FONT"; | ||||
|         private static final String TAG = "emoji2.text.DefaultEmojiConfig"; | ||||
|         private final DefaultEmojiCompatConfigHelper mHelper; | ||||
|  | ||||
|         public DefaultEmojiCompatConfigFactory(DefaultEmojiCompatConfigHelper defaultEmojiCompatConfigHelper) { | ||||
|             this.mHelper = defaultEmojiCompatConfigHelper == null ? getHelperForApi() : defaultEmojiCompatConfigHelper; | ||||
|         } | ||||
|  | ||||
|         public EmojiCompat.Config create(Context context) { | ||||
|             return configOrNull(context, queryForDefaultFontRequest(context)); | ||||
|         } | ||||
|  | ||||
|         private EmojiCompat.Config configOrNull(Context context, FontRequest fontRequest) { | ||||
|             if (fontRequest == null) { | ||||
|                 return null; | ||||
|             } | ||||
|             return new FontRequestEmojiCompatConfig(context, fontRequest); | ||||
|         } | ||||
|  | ||||
|         FontRequest queryForDefaultFontRequest(Context context) { | ||||
|             PackageManager packageManager = context.getPackageManager(); | ||||
|             Preconditions.checkNotNull(packageManager, "Package manager required to locate emoji font provider"); | ||||
|             ProviderInfo queryDefaultInstalledContentProvider = queryDefaultInstalledContentProvider(packageManager); | ||||
|             if (queryDefaultInstalledContentProvider == null) { | ||||
|                 return null; | ||||
|             } | ||||
|             try { | ||||
|                 return generateFontRequestFrom(queryDefaultInstalledContentProvider, packageManager); | ||||
|             } catch (PackageManager.NameNotFoundException e) { | ||||
|                 Log.wtf(TAG, e); | ||||
|                 return null; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private ProviderInfo queryDefaultInstalledContentProvider(PackageManager packageManager) { | ||||
|             Iterator<ResolveInfo> it = this.mHelper.queryIntentContentProviders(packageManager, new Intent(INTENT_LOAD_EMOJI_FONT), 0).iterator(); | ||||
|             while (it.hasNext()) { | ||||
|                 ProviderInfo providerInfo = this.mHelper.getProviderInfo(it.next()); | ||||
|                 if (hasFlagSystem(providerInfo)) { | ||||
|                     return providerInfo; | ||||
|                 } | ||||
|             } | ||||
|             return null; | ||||
|         } | ||||
|  | ||||
|         private boolean hasFlagSystem(ProviderInfo providerInfo) { | ||||
|             return (providerInfo == null || providerInfo.applicationInfo == null || (providerInfo.applicationInfo.flags & 1) != 1) ? false : true; | ||||
|         } | ||||
|  | ||||
|         private FontRequest generateFontRequestFrom(ProviderInfo providerInfo, PackageManager packageManager) throws PackageManager.NameNotFoundException { | ||||
|             String str = providerInfo.authority; | ||||
|             String str2 = providerInfo.packageName; | ||||
|             return new FontRequest(str, str2, DEFAULT_EMOJI_QUERY, convertToByteArray(this.mHelper.getSigningSignatures(packageManager, str2))); | ||||
|         } | ||||
|  | ||||
|         private List<List<byte[]>> convertToByteArray(Signature[] signatureArr) { | ||||
|             ArrayList arrayList = new ArrayList(); | ||||
|             for (Signature signature : signatureArr) { | ||||
|                 arrayList.add(signature.toByteArray()); | ||||
|             } | ||||
|             return Collections.singletonList(arrayList); | ||||
|         } | ||||
|  | ||||
|         private static DefaultEmojiCompatConfigHelper getHelperForApi() { | ||||
|             if (Build.VERSION.SDK_INT >= 28) { | ||||
|                 return new DefaultEmojiCompatConfigHelper_API28(); | ||||
|             } | ||||
|             return new DefaultEmojiCompatConfigHelper_API19(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static class DefaultEmojiCompatConfigHelper { | ||||
|         public Signature[] getSigningSignatures(PackageManager packageManager, String str) throws PackageManager.NameNotFoundException { | ||||
|             return packageManager.getPackageInfo(str, 64).signatures; | ||||
|         } | ||||
|  | ||||
|         public List<ResolveInfo> queryIntentContentProviders(PackageManager packageManager, Intent intent, int i) { | ||||
|             return Collections.emptyList(); | ||||
|         } | ||||
|  | ||||
|         public ProviderInfo getProviderInfo(ResolveInfo resolveInfo) { | ||||
|             throw new IllegalStateException("Unable to get provider info prior to API 19"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static class DefaultEmojiCompatConfigHelper_API19 extends DefaultEmojiCompatConfigHelper { | ||||
|         @Override // androidx.emoji2.text.DefaultEmojiCompatConfig.DefaultEmojiCompatConfigHelper | ||||
|         public List<ResolveInfo> queryIntentContentProviders(PackageManager packageManager, Intent intent, int i) { | ||||
|             return packageManager.queryIntentContentProviders(intent, i); | ||||
|         } | ||||
|  | ||||
|         @Override // androidx.emoji2.text.DefaultEmojiCompatConfig.DefaultEmojiCompatConfigHelper | ||||
|         public ProviderInfo getProviderInfo(ResolveInfo resolveInfo) { | ||||
|             return resolveInfo.providerInfo; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static class DefaultEmojiCompatConfigHelper_API28 extends DefaultEmojiCompatConfigHelper_API19 { | ||||
|         @Override // androidx.emoji2.text.DefaultEmojiCompatConfig.DefaultEmojiCompatConfigHelper | ||||
|         public Signature[] getSigningSignatures(PackageManager packageManager, String str) throws PackageManager.NameNotFoundException { | ||||
|             return packageManager.getPackageInfo(str, 64).signatures; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user