Files
SteamTools/System.Common.ClientLib.Droid/Application/UI/EmojiCompatLibraryConfig.cs
T
2021-02-20 16:45:44 +08:00

66 lines
2.1 KiB
C#

using Android.Content;
using AndroidX.Emoji.Text;
using JObject = Java.Lang.Object;
using JThread = Java.Lang.Thread;
using Runnable = Java.Lang.IRunnable;
using Throwable = Java.Lang.Throwable;
namespace System.Application.UI
{
internal sealed class EmojiCompatLibraryConfig : EmojiCompat.Config
{
public EmojiCompatLibraryConfig(Context context, string assetName) : base(new AssetMetadataLoader(context, assetName))
{
}
class AssetMetadataLoader : JObject, EmojiCompat.IMetadataRepoLoader
{
readonly Context mContext;
readonly string assetName;
public AssetMetadataLoader(Context context, string assetName)
{
mContext = context;
this.assetName = assetName;
}
public void Load(EmojiCompat.MetadataRepoLoaderCallback loaderCallback)
{
var runnable = new InitRunnable(mContext, loaderCallback, assetName);
var thread = new JThread(runnable)
{
Daemon = false
};
thread.Start();
}
}
class InitRunnable : JObject, Runnable
{
readonly string FONT_NAME;
readonly EmojiCompat.MetadataRepoLoaderCallback loaderCallback;
readonly Context context;
public InitRunnable(Context context, EmojiCompat.MetadataRepoLoaderCallback loaderCallback, string FONT_NAME)
{
this.context = context;
this.loaderCallback = loaderCallback;
this.FONT_NAME = FONT_NAME;
}
public void Run()
{
try
{
var assetManager = context.Assets;
var resourceIndex = MetadataRepo.Create(assetManager, FONT_NAME);
loaderCallback.OnLoaded(resourceIndex);
}
catch (Throwable t)
{
loaderCallback.OnFailed(t);
}
}
}
}
}