- Added realracing3-community.apk (71.57 MB) - Removed 32-bit support (armeabi-v7a) - Only includes arm64-v8a libraries - Decompiled source code included - Added README-community.md with analysis
171 lines
7.1 KiB
Java
171 lines
7.1 KiB
Java
package androidx.emoji2.text;
|
|
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.pm.ApplicationInfo;
|
|
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.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RequiresApi;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.annotation.VisibleForTesting;
|
|
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() {
|
|
}
|
|
|
|
@Nullable
|
|
public static FontRequestEmojiCompatConfig create(@NonNull Context context) {
|
|
return (FontRequestEmojiCompatConfig) new DefaultEmojiCompatConfigFactory(null).create(context);
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY})
|
|
public static class DefaultEmojiCompatConfigFactory {
|
|
|
|
@NonNull
|
|
private static final String DEFAULT_EMOJI_QUERY = "emojicompat-emoji-font";
|
|
|
|
@NonNull
|
|
private static final String INTENT_LOAD_EMOJI_FONT = "androidx.content.action.LOAD_EMOJI_FONT";
|
|
|
|
@NonNull
|
|
private static final String TAG = "emoji2.text.DefaultEmojiConfig";
|
|
private final DefaultEmojiCompatConfigHelper mHelper;
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY})
|
|
public DefaultEmojiCompatConfigFactory(@Nullable DefaultEmojiCompatConfigHelper defaultEmojiCompatConfigHelper) {
|
|
this.mHelper = defaultEmojiCompatConfigHelper == null ? getHelperForApi() : defaultEmojiCompatConfigHelper;
|
|
}
|
|
|
|
@Nullable
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY})
|
|
public EmojiCompat.Config create(@NonNull Context context) {
|
|
return configOrNull(context, queryForDefaultFontRequest(context));
|
|
}
|
|
|
|
@Nullable
|
|
private EmojiCompat.Config configOrNull(@NonNull Context context, @Nullable FontRequest fontRequest) {
|
|
if (fontRequest == null) {
|
|
return null;
|
|
}
|
|
return new FontRequestEmojiCompatConfig(context, fontRequest);
|
|
}
|
|
|
|
@Nullable
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY})
|
|
@VisibleForTesting
|
|
public FontRequest queryForDefaultFontRequest(@NonNull 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;
|
|
}
|
|
}
|
|
|
|
@Nullable
|
|
private ProviderInfo queryDefaultInstalledContentProvider(@NonNull 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(@Nullable ProviderInfo providerInfo) {
|
|
ApplicationInfo applicationInfo;
|
|
return (providerInfo == null || (applicationInfo = providerInfo.applicationInfo) == null || (applicationInfo.flags & 1) != 1) ? false : true;
|
|
}
|
|
|
|
@NonNull
|
|
private FontRequest generateFontRequestFrom(@NonNull ProviderInfo providerInfo, @NonNull 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)));
|
|
}
|
|
|
|
@NonNull
|
|
private List<List<byte[]>> convertToByteArray(@NonNull Signature[] signatureArr) {
|
|
ArrayList arrayList = new ArrayList();
|
|
for (Signature signature : signatureArr) {
|
|
arrayList.add(signature.toByteArray());
|
|
}
|
|
return Collections.singletonList(arrayList);
|
|
}
|
|
|
|
@NonNull
|
|
private static DefaultEmojiCompatConfigHelper getHelperForApi() {
|
|
if (Build.VERSION.SDK_INT >= 28) {
|
|
return new DefaultEmojiCompatConfigHelper_API28();
|
|
}
|
|
return new DefaultEmojiCompatConfigHelper_API19();
|
|
}
|
|
}
|
|
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY})
|
|
public static class DefaultEmojiCompatConfigHelper {
|
|
@NonNull
|
|
public Signature[] getSigningSignatures(@NonNull PackageManager packageManager, @NonNull String str) throws PackageManager.NameNotFoundException {
|
|
return packageManager.getPackageInfo(str, 64).signatures;
|
|
}
|
|
|
|
@NonNull
|
|
public List<ResolveInfo> queryIntentContentProviders(@NonNull PackageManager packageManager, @NonNull Intent intent, int i) {
|
|
return Collections.emptyList();
|
|
}
|
|
|
|
@Nullable
|
|
public ProviderInfo getProviderInfo(@NonNull ResolveInfo resolveInfo) {
|
|
throw new IllegalStateException("Unable to get provider info prior to API 19");
|
|
}
|
|
}
|
|
|
|
@RequiresApi(19)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY})
|
|
public static class DefaultEmojiCompatConfigHelper_API19 extends DefaultEmojiCompatConfigHelper {
|
|
@Override // androidx.emoji2.text.DefaultEmojiCompatConfig.DefaultEmojiCompatConfigHelper
|
|
@NonNull
|
|
public List<ResolveInfo> queryIntentContentProviders(@NonNull PackageManager packageManager, @NonNull Intent intent, int i) {
|
|
return packageManager.queryIntentContentProviders(intent, i);
|
|
}
|
|
|
|
@Override // androidx.emoji2.text.DefaultEmojiCompatConfig.DefaultEmojiCompatConfigHelper
|
|
@Nullable
|
|
public ProviderInfo getProviderInfo(@NonNull ResolveInfo resolveInfo) {
|
|
return resolveInfo.providerInfo;
|
|
}
|
|
}
|
|
|
|
@RequiresApi(28)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY})
|
|
public static class DefaultEmojiCompatConfigHelper_API28 extends DefaultEmojiCompatConfigHelper_API19 {
|
|
@Override // androidx.emoji2.text.DefaultEmojiCompatConfig.DefaultEmojiCompatConfigHelper
|
|
@NonNull
|
|
public Signature[] getSigningSignatures(@NonNull PackageManager packageManager, @NonNull String str) throws PackageManager.NameNotFoundException {
|
|
return packageManager.getPackageInfo(str, 64).signatures;
|
|
}
|
|
}
|
|
}
|