package com.jasonette.seed.Component; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.v4.graphics.drawable.DrawableCompat; import android.support.v4.graphics.drawable.RoundedBitmapDrawable; import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory; import android.util.Log; import android.view.View; import android.widget.ImageView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.model.GlideUrl; import com.bumptech.glide.load.model.LazyHeaders; import com.bumptech.glide.request.target.BitmapImageViewTarget; import com.jasonette.seed.Helper.JasonHelper; import org.json.JSONObject; import java.net.URI; import java.util.Iterator; public class JasonImageComponent { public static View build(View view, final JSONObject component, final JSONObject parent, final Context context) { if(view == null){ try { ImageView imageview; imageview = new ImageView(context); imageview.setAdjustViewBounds(true); return imageview; } catch (Exception e) { Log.d("Error", e.toString()); return new View(context); } } else { JasonComponent.build(view, component, parent, context); int width = 0; int height = 0; float corner_radius = 0; try { String type; final JSONObject style = JasonHelper.style(component, context); type = component.getString("type"); // Constructing URL GlideUrl url; LazyHeaders.Builder builder = new LazyHeaders.Builder(); // Add session if included SharedPreferences pref = context.getSharedPreferences("session", 0); JSONObject session = null; URI uri_for_session = new URI(component.getString("url").toLowerCase()); String session_domain = uri_for_session.getHost(); if(pref.contains(session_domain)){ String str = pref.getString(session_domain, null); session = new JSONObject(str); } // Attach Header from Session if(session != null && session.has("header")) { Iterator<?> keys = session.getJSONObject("header").keys(); while (keys.hasNext()) { String key = (String) keys.next(); String val = session.getJSONObject("header").getString(key); builder.addHeader(key, val); } } if(component.has("header")){ Iterator<?> keys = component.getJSONObject("header").keys(); while (keys.hasNext()) { String key = (String) keys.next(); String val = component.getJSONObject("header").getString(key); builder.addHeader(key, val); } } url = new GlideUrl(component.getString("url"), builder.build()); if (style.has("corner_radius")) { corner_radius = JasonHelper.pixels(context, style.getString("corner_radius"), "horizontal"); } if (corner_radius == 0) { try { if (component.getString("url").matches("\\.gif")) { Glide .with(context) .load(url) .asGif() .into((ImageView)view); } else { if(style.has("color")){ Glide .with(context) .load(url) .asBitmap() .fitCenter() .into(new BitmapImageViewTarget((ImageView)view) { @Override protected void setResource(Bitmap res) { BitmapDrawable d = new BitmapDrawable(context.getResources(), res); try { Drawable wrapper = DrawableCompat.wrap(d); DrawableCompat.setTint(wrapper, JasonHelper.parse_color(style.getString("color"))); view.setImageDrawable(wrapper); } catch (Exception e) { Log.d("Error", e.toString()); view.setImageDrawable(d); } } }); } else { Glide .with(context) .load(url) .into((ImageView)view); } } } catch (Exception e) { Log.d("Error", e.toString()); } } else { final float corner_radius_float = (float)corner_radius; if (component.getString("url").length() > 0) { try { Glide .with(context) .load(url) .asBitmap() .fitCenter() .into(new BitmapImageViewTarget((ImageView)view) { @Override protected void setResource(Bitmap res) { RoundedBitmapDrawable bitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(), res); bitmapDrawable.setCornerRadius(corner_radius_float); view.setImageDrawable(bitmapDrawable); } }); } catch (Exception e) { Log.d("Error", e.toString()); } } } JasonComponent.addListener(view, context); view.requestLayout(); return view; } catch (Exception e){ Log.d("Error", e.toString()); } return new View(context); } } }