package com.etiennelawlor.loop.ui;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.StateListDrawable;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.StateSet;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.etiennelawlor.loop.R;
import com.etiennelawlor.loop.network.models.response.Pictures;
import com.etiennelawlor.loop.network.models.response.Size;
import com.etiennelawlor.loop.network.models.response.User;
import com.etiennelawlor.loop.utilities.DisplayUtility;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Transformation;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by etiennelawlor on 7/8/16.
*/
public class AvatarView extends FrameLayout {
// region Constants
// endregion
// region Member Variables
private Transformation roundedTransformation;
private float radius;
// endregion
// region Views
@BindView(R.id.initials_tv)
TextView textView;
@BindView(R.id.photo_iv)
ImageView imageView;
// endregion
// region Interfaces
public interface UserInitials {
String getInitials();
}
// endregion
// region Constructors
public AvatarView(Context context) {
super(context);
init(context, null);
}
public AvatarView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public AvatarView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
// endregion
// region Helper Methods
private void init(Context context, AttributeSet attrs) {
if (!isInEditMode()) {
LayoutInflater.from(getContext()).inflate(R.layout.avatar_view, this, true);
ButterKnife.bind(this);
if(attrs != null){
TypedArray a = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.AvatarView, 0, 0);
try {
radius = a.getDimension(R.styleable.AvatarView_av_radius, 0);
} finally {
a.recycle();
}
}
roundedTransformation = new RoundedTransformationBuilder()
.cornerRadius(radius)
// .borderWidthDp(1f)
// .borderColor(ContextCompat.getColor(getContext(), R.color.grey_400))
.oval(false)
.build();
// resize ImageView
ViewGroup.LayoutParams imageViewLayoutParams = imageView.getLayoutParams();
imageViewLayoutParams.width = (int)(radius*2);
imageViewLayoutParams.height = (int)(radius*2);
imageView.setLayoutParams(imageViewLayoutParams);
// resize TextView
ViewGroup.LayoutParams textViewLayoutParams = textView.getLayoutParams();
textViewLayoutParams.width = (int)(radius*2);
textViewLayoutParams.height = (int)(radius*2);
textView.setLayoutParams(textViewLayoutParams);
// resize TextView's fontSize
int fontSize = (16*(int)radius*2)/ DisplayUtility.dp2px(getContext(), 40);
textView.setTextSize(fontSize);
}
}
public void bind(@Nullable User user) {
if (user == null) {
return;
}
String avatarUrl = user.getAvatarUrl();
if (!TextUtils.isEmpty(avatarUrl)) {
Picasso.with(getContext())
.load(avatarUrl)
.transform(roundedTransformation)
.resize((int)radius*2, (int)radius*2)
.centerCrop()
.into(imageView);
} else {
nullify();
}
// textView.setText(user.getInitials());
String firstInital = "";
String name = user.getName();
if(!TextUtils.isEmpty(name))
firstInital = String.valueOf(name.charAt(0)).toUpperCase().trim();
textView.setText(firstInital);
// Set up background
StateListDrawable stateListDrawable = new StateListDrawable();
GradientDrawable defaultDrawable = (GradientDrawable) ContextCompat.getDrawable(getContext(), R.drawable.default_avatar_bg);
defaultDrawable.setColor(DisplayUtility.getDefaultAvatarBackgroundColor(user, getContext()));
if(isClickable()){
GradientDrawable pressedDrawable = (GradientDrawable) ContextCompat.getDrawable(getContext(), R.drawable.pressed_avatar_bg);
pressedDrawable.setColor(DisplayUtility.getPressedAvatarBackgroundColor(user, getContext()));
stateListDrawable.addState(new int[] { android.R.attr.state_pressed }, pressedDrawable);
}
stateListDrawable.addState(StateSet.WILD_CARD, defaultDrawable);
textView.setBackground(stateListDrawable);
}
public void nullify() {
imageView.setImageDrawable(null);
textView.setText("");
}
// endregion
}