diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-01-12 15:50:09 -0800 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2014-01-12 15:50:09 -0800 |
commit | 92aa5b36bba57e4927f146d49c9f124a37b7b5f9 (patch) | |
tree | 865d3962e54225fc4f13e0d19852ddc061e7e05f /libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java | |
parent | 536c4db48f12287eaf1875e2d208c0ad07e31ee6 (diff) | |
parent | e3bcf64d9e63e293c51db921572a9b87533d26ad (diff) | |
download | open-keychain-92aa5b36bba57e4927f146d49c9f124a37b7b5f9.tar.gz open-keychain-92aa5b36bba57e4927f146d49c9f124a37b7b5f9.tar.bz2 open-keychain-92aa5b36bba57e4927f146d49c9f124a37b7b5f9.zip |
Merge pull request #179 from dschuermann/key-details
Key details
Diffstat (limited to 'libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java')
-rw-r--r-- | libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java b/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java new file mode 100644 index 000000000..a4e1ba1bc --- /dev/null +++ b/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java @@ -0,0 +1,209 @@ +package com.beardedhen.androidbootstrap; + +import java.util.HashMap; +import java.util.Map; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Typeface; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +public class BootstrapThumbnail extends FrameLayout +{ + private static final int DEFAULT_WIDTH = 150; //width of thumbnail when no width is given + private static final int DEFAULT_HEIGHT = 150;//height of thumbnail when no height is given + private static final int DEFAULT_MAX_PADDING = 8; //8dp is max padding size when padding isn't specified by user + private static final int DEFAULT_MIN_PADDING = 4; //4dp + private static final String DEFAULT_TYPE = "rounded"; + + private static Map<String, ThumbnailTypes> bThumbnailTypeMap; + private static Typeface font; + private ViewGroup container; + private LinearLayout placeholder; + private TextView dimensionsLabel; + private boolean roundedCorners = true; + + static{ + bThumbnailTypeMap = new HashMap<String, ThumbnailTypes>(); + + bThumbnailTypeMap.put("rounded", ThumbnailTypes.ROUNDED);//default is rounded if user doesn't specify to use square + bThumbnailTypeMap.put("square", ThumbnailTypes.SQUARE); + } + + public BootstrapThumbnail(Context context, AttributeSet attrs, int defStyle) + { + super(context, attrs, defStyle); + initialise(attrs); + } + + public BootstrapThumbnail(Context context, AttributeSet attrs) + { + super(context, attrs); + initialise(attrs); + } + + public BootstrapThumbnail(Context context) + { + super(context); + initialise(null); + } + + public void setImage(int drawable) + { + this.placeholder.setBackgroundResource(drawable); + invalidate(); + requestLayout(); + } + + //set up the bootstrap types + private enum ThumbnailTypes + { + ROUNDED(R.drawable.bthumbnail_container_rounded, R.drawable.bthumbnail_placeholder_default), + SQUARE(R.drawable.bthumbnail_container_square, R.drawable.bthumbnail_placeholder_default); + + private int containerDrawable; + private int placeholderDrawable; + + ThumbnailTypes(int containerDrawable, int placeholderDrawable) + { + this.containerDrawable = containerDrawable; + this.placeholderDrawable = placeholderDrawable; + } + } + + private void initialise( AttributeSet attrs ) + { + LayoutInflater inflator = (LayoutInflater)getContext().getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + + readFont(getContext()); + + TypedArray a = getContext().obtainStyledAttributes(attrs, + R.styleable.BootstrapThumbnail); + + //defaults + ThumbnailTypes type = null; + String thumbnailType = DEFAULT_TYPE; + String text = ""; + int imageDrawable = 0; + float scale = getResources().getDisplayMetrics().density; //for padding + int width = DEFAULT_WIDTH; + int height = DEFAULT_HEIGHT; + int padding = 0; + int paddingDP = 0; + + //attribute values + if(a.getString(R.styleable.BootstrapThumbnail_bt_width) != null) { + width = (int) a.getDimension(R.styleable.BootstrapThumbnail_bt_width, 0); + Log.v("width", Integer.toString(width)); + } + + if(a.getString(R.styleable.BootstrapThumbnail_bt_height) != null) { + height = (int) a.getDimension(R.styleable.BootstrapThumbnail_bt_height, 0); + } + + if(a.getString(R.styleable.BootstrapThumbnail_bt_inside_padding) != null) { + paddingDP = (int) a.getDimension(R.styleable.BootstrapThumbnail_bt_inside_padding, 0); + } + else{ + padding = (int) (((Math.sqrt(width * height)) / 100) * 2); + if(padding > DEFAULT_MAX_PADDING) + padding = DEFAULT_MAX_PADDING; + if(padding < DEFAULT_MIN_PADDING) + padding = DEFAULT_MIN_PADDING; + + paddingDP = (int) (padding * scale + 0.5f);//container padding in DP + } + + if(a.getString(R.styleable.BootstrapThumbnail_bt_roundedCorners) != null){ + roundedCorners = a.getBoolean(R.styleable.BootstrapThumbnail_bt_roundedCorners, false) ; + } + + if(a.getString(R.styleable.BootstrapThumbnail_bt_image) != null){ + imageDrawable = a.getResourceId(R.styleable.BootstrapThumbnail_bt_image, 0); + } + + a.recycle(); + + text = (int)(width/scale) + "x" + (int)(height/scale); + View v = inflator.inflate(R.layout.bootstrap_thumbnail, null, false); + + //get layout items + container = (ViewGroup) v.findViewById(R.id.container); + placeholder = (LinearLayout) v.findViewById(R.id.placeholder); + dimensionsLabel = (TextView) v.findViewById(R.id.dimensionsLabel); + + Log.v("size", "width:" + width + " height:" + height); + + + type = bThumbnailTypeMap.get(thumbnailType); + + //get the correct background type + if(roundedCorners == true) + { + type = bThumbnailTypeMap.get("rounded"); + } else { + type = bThumbnailTypeMap.get("square"); + } + + //apply the background type + container.setBackgroundResource(type.containerDrawable); + + //if no image is provided by user + if(imageDrawable == 0){ + //set default grey placeholder background + placeholder.setBackgroundResource(type.placeholderDrawable); + + //set the text + if(text.length() > 0){ + dimensionsLabel.setText(text); + dimensionsLabel.setVisibility(View.VISIBLE); + } + } + else{ + //set background to user's provided image + placeholder.setBackgroundResource(imageDrawable); + + //remove textview dimensions + dimensionsLabel.setVisibility(View.GONE); + } + + //placeholder padding + int paddingP = (int) (((Math.sqrt(width * height)) / 100) * 4); + + //convert to DP + int paddingDPP = (int) (paddingP * scale + 0.5f);//placeholder padding in DP + + container.setPadding(paddingDP, paddingDP, paddingDP, paddingDP); + placeholder.setPadding(paddingDPP, paddingDPP, paddingDPP, paddingDPP); + + placeholder.setLayoutParams(new LinearLayout.LayoutParams(width,height)); + + //set the font awesome icon typeface + dimensionsLabel.setTypeface(font); + + this.setClickable(true); + + addView(v); + } + + //static class to read in font + private static void readFont(Context context) + { + if(font == null){ + try { + font = Typeface.createFromAsset(context.getAssets(), "fontawesome-webfont.ttf"); + } catch (Exception e) { + Log.e("BootstrapButton", "Could not get typeface because " + e.getMessage()); + font = Typeface.DEFAULT; + } + } + + } +} |