package com.moez.QKSMS.ui.conversationlist;
import android.content.SharedPreferences;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.moez.QKSMS.R;
import com.moez.QKSMS.common.ConversationPrefsHelper;
import com.moez.QKSMS.common.FontManager;
import com.moez.QKSMS.common.LiveViewManager;
import com.moez.QKSMS.common.QKPreferences;
import com.moez.QKSMS.common.emoji.EmojiRegistry;
import com.moez.QKSMS.common.utils.DateFormatter;
import com.moez.QKSMS.data.Contact;
import com.moez.QKSMS.data.Conversation;
import com.moez.QKSMS.enums.QKPreference;
import com.moez.QKSMS.ui.ThemeManager;
import com.moez.QKSMS.ui.base.QKActivity;
import com.moez.QKSMS.ui.base.RecyclerCursorAdapter;
import com.moez.QKSMS.ui.settings.SettingsFragment;
public class ConversationListAdapter extends RecyclerCursorAdapter<ConversationListViewHolder, Conversation> {
private final SharedPreferences mPrefs;
public ConversationListAdapter(QKActivity context) {
super(context);
mPrefs = mContext.getPrefs();
}
protected Conversation getItem(int position) {
mCursor.moveToPosition(position);
return Conversation.from(mContext, mCursor);
}
@Override
public ConversationListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View view = inflater.inflate(R.layout.list_item_conversation, null);
ConversationListViewHolder holder = new ConversationListViewHolder(mContext, view);
holder.mutedView.setImageResource(R.drawable.ic_notifications_muted);
holder.unreadView.setImageResource(R.drawable.ic_unread_indicator);
holder.errorIndicator.setImageResource(R.drawable.ic_error);
LiveViewManager.registerView(QKPreference.THEME, this, key -> {
holder.mutedView.setColorFilter(ThemeManager.getColor());
holder.unreadView.setColorFilter(ThemeManager.getColor());
holder.errorIndicator.setColorFilter(ThemeManager.getColor());
});
LiveViewManager.registerView(QKPreference.BACKGROUND, this, key -> {
holder.root.setBackgroundDrawable(ThemeManager.getRippleBackground());
});
return holder;
}
@Override
public void onBindViewHolder(ConversationListViewHolder holder, int position) {
final Conversation conversation = getItem(position);
holder.mData = conversation;
holder.mContext = mContext;
holder.mClickListener = mItemClickListener;
holder.root.setOnClickListener(holder);
holder.root.setOnLongClickListener(holder);
holder.mutedView.setVisibility(new ConversationPrefsHelper(mContext, conversation.getThreadId())
.getNotificationsEnabled() ? View.GONE : View.VISIBLE);
holder.errorIndicator.setVisibility(conversation.hasError() ? View.VISIBLE : View.GONE);
final boolean hasUnreadMessages = conversation.hasUnreadMessages();
if (hasUnreadMessages) {
holder.unreadView.setVisibility(View.VISIBLE);
holder.snippetView.setTextColor(ThemeManager.getTextOnBackgroundPrimary());
holder.dateView.setTextColor(ThemeManager.getColor());
holder.fromView.setType(FontManager.TEXT_TYPE_PRIMARY_BOLD);
holder.snippetView.setMaxLines(5);
} else {
holder.unreadView.setVisibility(View.GONE);
holder.snippetView.setTextColor(ThemeManager.getTextOnBackgroundSecondary());
holder.dateView.setTextColor(ThemeManager.getTextOnBackgroundSecondary());
holder.fromView.setType(FontManager.TEXT_TYPE_PRIMARY);
holder.snippetView.setMaxLines(1);
}
LiveViewManager.registerView(QKPreference.THEME, this, key -> {
holder.dateView.setTextColor(hasUnreadMessages ? ThemeManager.getColor() : ThemeManager.getTextOnBackgroundSecondary());
});
if (isInMultiSelectMode()) {
holder.mSelected.setVisibility(View.VISIBLE);
if (isSelected(conversation.getThreadId())) {
holder.mSelected.setImageResource(R.drawable.ic_selected);
holder.mSelected.setColorFilter(ThemeManager.getColor());
holder.mSelected.setAlpha(1f);
} else {
holder.mSelected.setImageResource(R.drawable.ic_unselected);
holder.mSelected.setColorFilter(ThemeManager.getTextOnBackgroundSecondary());
holder.mSelected.setAlpha(0.5f);
}
} else {
holder.mSelected.setVisibility(View.GONE);
}
LiveViewManager.registerView(QKPreference.HIDE_AVATAR_CONVERSATIONS, this, key -> {
holder.mAvatarView.setVisibility(QKPreferences.getBoolean(QKPreference.HIDE_AVATAR_CONVERSATIONS) ? View.GONE : View.VISIBLE);
});
// Date
holder.dateView.setText(DateFormatter.getConversationTimestamp(mContext, conversation.getDate()));
// Subject
String emojiSnippet = conversation.getSnippet();
if (mPrefs.getBoolean(SettingsFragment.AUTO_EMOJI, false)) {
emojiSnippet = EmojiRegistry.parseEmojis(emojiSnippet);
}
holder.snippetView.setText(emojiSnippet);
Contact.addListener(holder);
// Update the avatar and name
holder.onUpdate(conversation.getRecipients().size() == 1 ? conversation.getRecipients().get(0) : null);
}
}