Newer
Older
Kevin Whitaker
committed
package com.eyecreate.miceandmystics.miceandmystics.adapters;
Kevin Whitaker
committed
import android.content.Context;
Kevin Whitaker
committed
import android.support.v7.widget.RecyclerView;
Kevin Whitaker
committed
import android.view.LayoutInflater;
Kevin Whitaker
committed
import android.view.ViewGroup;
Kevin Whitaker
committed
import android.widget.Toast;
Kevin Whitaker
committed
import com.eyecreate.miceandmystics.miceandmystics.MiceAndMysticsApplication;
import com.eyecreate.miceandmystics.miceandmystics.R;
import com.eyecreate.miceandmystics.miceandmystics.model.*;
import com.eyecreate.miceandmystics.miceandmystics.model.Character;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.CharacterNames;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.CharacterType;
import com.eyecreate.miceandmystics.miceandmystics.viewholders.CampaignDetailsViewHolder;
import com.eyecreate.miceandmystics.miceandmystics.viewholders.CampaignHeaderViewHolder;
import java.util.UUID;
public class CampaignDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
LayoutInflater inflater;
Campaign currentCampaign;
public CampaignDetailsAdapter(Campaign currentCampaign) {
this.currentCampaign = currentCampaign;
}
Kevin Whitaker
committed
@Override
Kevin Whitaker
committed
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(inflater == null) inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(viewType==R.id.campaignDetailMainHeader) {
return new CampaignHeaderViewHolder(inflater.inflate(R.layout.item_campaign_header,parent,false));
} else {
return new CampaignDetailsViewHolder(inflater.inflate(R.layout.item_campaign_details,parent,false),this);
}
Kevin Whitaker
committed
}
@Override
Kevin Whitaker
committed
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof CampaignHeaderViewHolder) {
((CampaignHeaderViewHolder)holder).bindModel(currentCampaign);
} else {
((CampaignDetailsViewHolder)holder).bindModel(currentCampaign.getCurrentCharacters().get(position-1)); //Here's that one again making the position value related to characters again.
}
}
Kevin Whitaker
committed
Kevin Whitaker
committed
public void fullRefresh() {
notifyDataSetChanged();
}
Kevin Whitaker
committed
private boolean areThereDuplicates(Campaign campaign, CharacterNames character) {
for(Character chr:campaign.getCurrentCharacters()) {
if(chr.getCharacterName().equals(character.name())){
return true;
}
}
return false;
}
Kevin Whitaker
committed
public void addCharacter(CharacterNames name, Player player) {
Kevin Whitaker
committed
if(!areThereDuplicates(currentCampaign,name)) {
MiceAndMysticsApplication.getRealmInstance().beginTransaction();
Character character = MiceAndMysticsApplication.getRealmInstance().createObject(Character.class);
character.setUuid(UUID.randomUUID().toString());
character.setCharacterName(name.name());
character.setControllingPlayer(player);
currentCampaign.getCurrentCharacters().add(character);
MiceAndMysticsApplication.getRealmInstance().commitTransaction();
fullRefresh();
} else {
Toast.makeText(inflater.getContext(),"Can not have two of same character in game.",Toast.LENGTH_LONG).show();
}
Kevin Whitaker
committed
}
public void removeCharacter(Character character) {
Kevin Whitaker
committed
removeCharacterFromDB(character);
fullRefresh();
}
public static void removeCharacterFromDB(Character character) {
removeItemsAndAbilities(character);
Kevin Whitaker
committed
MiceAndMysticsApplication.getRealmInstance().beginTransaction();
character.removeFromRealm();
MiceAndMysticsApplication.getRealmInstance().commitTransaction();
Kevin Whitaker
committed
}
private static void removeItemsAndAbilities(Character character) {
MiceAndMysticsApplication.getRealmInstance().beginTransaction();
for(Ability ability:character.getAbilities()) {
ability.removeFromRealm();
}
for(BackpackItem item:character.getStoredItems()) {
item.removeFromRealm();
}
MiceAndMysticsApplication.getRealmInstance().commitTransaction();
Kevin Whitaker
committed
}
@Override
public int getItemViewType(int position) {
if(position == 0) {
return R.id.campaignDetailMainHeader;
} else {
return R.id.campaignDetailItem;
}
Kevin Whitaker
committed
}
@Override
public int getItemCount() {
Kevin Whitaker
committed
return currentCampaign.getCurrentCharacters().size()+1; //The plus one if for header. May expand this for other kinds of details.