package de.tum.in.tumcampusapp.cards;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RemoteViews;
import android.widget.TextView;
import com.google.gson.Gson;
import java.util.List;
import de.tum.in.tumcampusapp.R;
import de.tum.in.tumcampusapp.activities.ChatActivity;
import de.tum.in.tumcampusapp.auxiliary.Const;
import de.tum.in.tumcampusapp.cards.generic.Card;
import de.tum.in.tumcampusapp.cards.generic.NotificationAwareCard;
import de.tum.in.tumcampusapp.managers.ChatMessageManager;
import de.tum.in.tumcampusapp.models.tumcabe.ChatMessage;
import de.tum.in.tumcampusapp.models.tumcabe.ChatRoom;
import static de.tum.in.tumcampusapp.managers.CardManager.CARD_CHAT;
/**
* Card that shows the cafeteria menu
*/
public class ChatMessagesCard extends NotificationAwareCard {
private List<ChatMessage> mUnread;
private ChatMessageManager manager;
private String mRoomName;
private int mRoomId;
private String mRoomIdString;
public ChatMessagesCard(Context context) {
super(CARD_CHAT, context, "card_chat");
}
public static Card.CardViewHolder inflateViewHolder(ViewGroup parent) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);
return new Card.CardViewHolder(view);
}
@Override
public String getTitle() {
return mRoomName;
}
@Override
public void updateViewHolder(RecyclerView.ViewHolder viewHolder) {
mCard = viewHolder.itemView;
CardViewHolder cardsViewHolder = (CardViewHolder) viewHolder;
List<View> addedViews = cardsViewHolder.getAddedViews();
mLinearLayout = (LinearLayout) mCard.findViewById(R.id.card_view);
mTitleView = (TextView) mCard.findViewById(R.id.card_title);
mTitleView.setText(mRoomName);
//Remove additional views
for (View view : addedViews) {
mLinearLayout.removeView(view);
}
// Show cafeteria menu
for (ChatMessage message : mUnread) {
addedViews.add(addTextView(message.getMember().getDisplayName() + ": " + message.getText()));
}
}
/**
* Sets the information needed to build the card
*
* @param roomName Name of the chat room
* @param roomId Id of the chat room
*/
public void setChatRoom(String roomName, int roomId, String roomIdString) {
mRoomName = roomName;
mRoomName = mRoomName.replaceAll("[A-Z, 0-9(LV\\.Nr)=]+$", "");
mRoomName = mRoomName.replaceAll("\\([A-Z]+[0-9]+\\)", "");
mRoomName = mRoomName.replaceAll("\\[[A-Z]+[0-9]+\\]", "");
mRoomName = mRoomName.trim();
manager = new ChatMessageManager(mContext, roomId);
mUnread = manager.getLastUnread();
mRoomIdString = roomIdString;
mRoomId = roomId;
}
@Override
public Intent getIntent() {
Bundle bundle = new Bundle();
final Intent intent = new Intent(mContext, ChatActivity.class);
ChatRoom currentChatRoom = new ChatRoom(mRoomIdString);
currentChatRoom.setId(mRoomId);
intent.putExtra(Const.CURRENT_CHAT_ROOM, new Gson().toJson(currentChatRoom));
intent.putExtras(bundle);
return intent;
}
@Override
public int getId() {
return mRoomId;
}
@Override
protected void discard(Editor editor) {
manager.markAsRead();
}
@Override
protected boolean shouldShowNotification(SharedPreferences prefs) {
return false;
}
@Override
public RemoteViews getRemoteViews(Context context) {
final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.cards_widget_card);
remoteViews.setTextViewText(R.id.widgetCardTextView, this.getTitle());
remoteViews.setImageViewResource(R.id.widgetCardImageView, R.drawable.ic_comment);
return remoteViews;
}
}