package im.actor.sdk.controllers.contacts.view; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.FrameLayout; import android.widget.TextView; import im.actor.runtime.android.view.BindedViewHolder; import im.actor.sdk.ActorSDK; import im.actor.sdk.R; import im.actor.sdk.util.Screen; import im.actor.sdk.view.avatar.AvatarView; import im.actor.sdk.util.Fonts; import im.actor.sdk.view.adapters.OnItemClickedListener; import im.actor.sdk.view.SearchHighlight; import im.actor.core.entity.Contact; /** * Created by ex3ndr on 15.03.15. */ public class ContactHolder extends BindedViewHolder { private AvatarView avatar; private TextView title; private TextView fastTitle; private CheckBox isSelected; private FrameLayout cont; private boolean isSelectable; private OnItemClickedListener<Contact> onItemClickedListener; private final View separator; public ContactHolder(FrameLayout fl, boolean isSelectable, Context context, OnItemClickedListener<Contact> onItemClickedListener) { super(fl); this.onItemClickedListener = onItemClickedListener; this.isSelectable = isSelectable; int padding = Screen.dp(16); fl.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, Screen.dp(64))); cont = new FrameLayout(context); cont.setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor()); FrameLayout background = new FrameLayout(context); background.setBackgroundResource(R.drawable.selector_fill); cont.addView(background, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); { FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); layoutParams.leftMargin = Screen.dp(40); fl.addView(cont, layoutParams); } View fastBg = new View(context); fastBg.setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor()); { FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(Screen.dp(40), ViewGroup.LayoutParams.MATCH_PARENT); fl.addView(fastBg, layoutParams); } avatar = new AvatarView(context); avatar.init(Screen.dp(52), 22); { FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(Screen.dp(52), Screen.dp(52)); layoutParams.leftMargin = Screen.dp(6); layoutParams.topMargin = Screen.dp(6); layoutParams.bottomMargin = Screen.dp(6); layoutParams.gravity = Gravity.CENTER_VERTICAL | Gravity.LEFT; cont.addView(avatar, layoutParams); } fastTitle = new TextView(context); fastTitle.setTextColor(ActorSDK.sharedActor().style.getContactFastTitleColor()); fastTitle.setTextSize(18); fastTitle.setGravity(Gravity.CENTER); fastTitle.setTypeface(Fonts.medium()); { FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(Screen.dp(40), ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.leftMargin = Screen.dp(6); layoutParams.gravity = Gravity.CENTER_VERTICAL; fl.addView(fastTitle, layoutParams); } title = new TextView(context); title.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryColor()); title.setPadding(Screen.dp(72), 0, (isSelectable ? Screen.dp(64) : 0) + Screen.dp(8), 0); title.setTextSize(16); title.setSingleLine(true); title.setEllipsize(TextUtils.TruncateAt.END); title.setTypeface(Fonts.regular()); { FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.gravity = Gravity.CENTER_VERTICAL; layoutParams.topMargin = padding; layoutParams.bottomMargin = padding; cont.addView(title, layoutParams); } if (isSelectable) { isSelected = new CheckBox(context); isSelected.setClickable(false); isSelected.setFocusable(false); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.gravity = Gravity.CENTER_VERTICAL | Gravity.RIGHT; layoutParams.rightMargin = padding; cont.addView(isSelected, layoutParams); } separator = new View(context); separator.setBackgroundColor(ActorSDK.sharedActor().style.getContactDividerColor()); { FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, context.getResources().getDimensionPixelSize(R.dimen.div_size)); layoutParams.gravity = Gravity.BOTTOM; layoutParams.leftMargin = Screen.dp(72); cont.addView(separator, layoutParams); } } public void bind(final Contact data, String shortName, String query, boolean selected, boolean isLast) { if (shortName == null) { fastTitle.setVisibility(View.GONE); } else { fastTitle.setVisibility(View.VISIBLE); fastTitle.setText(shortName); } avatar.bind(data); if (query.length() > 0) { title.setText(SearchHighlight.highlightQuery(data.getName(), query, 0xff0277bd)); } else { title.setText(data.getName()); } if (isSelectable) { isSelected.setChecked(selected); } cont.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onItemClickedListener.onClicked(data); } }); cont.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { return onItemClickedListener.onLongClicked(data); } }); if (isLast) { separator.setVisibility(View.GONE); } else { separator.setVisibility(View.VISIBLE); } } public void unbind() { avatar.unbind(); } }