From 17fdde66d94155fc62a034fa6658995bef6fd6e5 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Tue, 22 Mar 2016 13:02:25 -0700 Subject: Initial import --- Xamarin.Forms.Platform.Android/ResourceManager.cs | 71 +++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Xamarin.Forms.Platform.Android/ResourceManager.cs (limited to 'Xamarin.Forms.Platform.Android/ResourceManager.cs') diff --git a/Xamarin.Forms.Platform.Android/ResourceManager.cs b/Xamarin.Forms.Platform.Android/ResourceManager.cs new file mode 100644 index 00000000..4c150a05 --- /dev/null +++ b/Xamarin.Forms.Platform.Android/ResourceManager.cs @@ -0,0 +1,71 @@ +using System; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using Android.Content.Res; +using Android.Graphics; +using Android.Graphics.Drawables; +using Path = System.IO.Path; + +namespace Xamarin.Forms.Platform.Android +{ + public static class ResourceManager + { + public static Type DrawableClass { get; set; } + + public static Type ResourceClass { get; set; } + + public static Bitmap GetBitmap(this Resources resource, string name) + { + return BitmapFactory.DecodeResource(resource, IdFromTitle(name, DrawableClass)); + } + + public static Task GetBitmapAsync(this Resources resource, string name) + { + return BitmapFactory.DecodeResourceAsync(resource, IdFromTitle(name, DrawableClass)); + } + + public static Drawable GetDrawable(this Resources resource, string name) + { + int id = IdFromTitle(name, DrawableClass); + if (id == 0) + { + Log.Warning("Could not load image named: {0}", name); + return null; + } + return resource.GetDrawable(id); + } + + public static int GetDrawableByName(string name) + { + return IdFromTitle(name, DrawableClass); + } + + public static int GetResourceByName(string name) + { + return IdFromTitle(name, ResourceClass); + } + + public static void Init(Assembly masterAssembly) + { + DrawableClass = masterAssembly.GetTypes().FirstOrDefault(x => x.Name == "Drawable"); + ResourceClass = masterAssembly.GetTypes().FirstOrDefault(x => x.Name == "Id"); + } + + internal static int IdFromTitle(string title, Type type) + { + string name = Path.GetFileNameWithoutExtension(title); + int id = GetId(type, name); + return id; // Resources.System.GetDrawable (Resource.Drawable.dashboard); + } + + static int GetId(Type type, string propertyName) + { + FieldInfo[] props = type.GetFields(); + FieldInfo prop = props.Select(p => p).FirstOrDefault(p => p.Name == propertyName); + if (prop != null) + return (int)prop.GetValue(type); + return 0; + } + } +} \ No newline at end of file -- cgit v1.2.3