Implement last character details screen. Also, rip out built-in dialog support for a library that makes consistent material look across platforms.

This commit is contained in:
Kevin Whitaker
2015-04-21 23:52:47 -04:00
parent 91615dbdf8
commit 1de320b71f
26 changed files with 511 additions and 36 deletions

22
.idea/misc.xml generated
View File

@@ -6,13 +6,6 @@
<component name="FrameworkDetectionExcludesConfiguration"> <component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" /> <file type="web" url="file://$PROJECT_DIR$" />
</component> </component>
<component name="MavenImportPreferences">
<option name="generalSettings">
<MavenGeneralSettings>
<option name="mavenHome" value="Bundled (Maven 3)" />
</MavenGeneralSettings>
</option>
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false"> <component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" /> <OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" /> <OptionsSetting value="true" id="Remove" />
@@ -29,19 +22,4 @@
<component name="ProjectType"> <component name="ProjectType">
<option name="id" value="Android" /> <option name="id" value="Android" />
</component> </component>
<component name="masterDetails">
<states>
<state key="ProjectJDKs.UI">
<settings>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
</states>
</component>
</project> </project>

View File

@@ -85,13 +85,16 @@
</content> </content>
<orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" /> <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="alertdialogpro-core-0.2.2" level="project" />
<orderEntry type="library" exported="" name="support-v4-22.0.0" level="project" /> <orderEntry type="library" exported="" name="support-v4-22.0.0" level="project" />
<orderEntry type="library" exported="" name="android-holo-graph-0.1.0" level="project" /> <orderEntry type="library" exported="" name="android-holo-graph-0.1.0" level="project" />
<orderEntry type="library" exported="" name="calligraphy-2.0.2" level="project" /> <orderEntry type="library" exported="" name="calligraphy-2.0.2" level="project" />
<orderEntry type="library" exported="" name="realm-android-0.80.1" level="project" /> <orderEntry type="library" exported="" name="realm-android-0.80.1" level="project" />
<orderEntry type="library" exported="" name="support-annotations-22.0.0" level="project" /> <orderEntry type="library" exported="" name="support-annotations-22.0.0" level="project" />
<orderEntry type="library" exported="" name="alertdialogpro-theme-material-0.2.2" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-22.0.0" level="project" /> <orderEntry type="library" exported="" name="appcompat-v7-22.0.0" level="project" />
<orderEntry type="library" exported="" name="cardview-v7-21.0.3" level="project" /> <orderEntry type="library" exported="" name="cardview-v7-21.0.3" level="project" />
<orderEntry type="library" exported="" name="library-2.4.0" level="project" />
<orderEntry type="library" exported="" name="recyclerview-v7-21.0.3" level="project" /> <orderEntry type="library" exported="" name="recyclerview-v7-21.0.3" level="project" />
</component> </component>
</module> </module>

View File

@@ -44,4 +44,5 @@ dependencies {
compile 'com.android.support:recyclerview-v7:21.0.+' compile 'com.android.support:recyclerview-v7:21.0.+'
compile 'com.android.support:cardview-v7:21.0.+' compile 'com.android.support:cardview-v7:21.0.+'
compile 'org.quanqi:android-holo-graph:0.1.0' compile 'org.quanqi:android-holo-graph:0.1.0'
compile 'com.github.fengdai:alertdialogpro-theme-material:0.2.2'
} }

View File

@@ -26,8 +26,9 @@
android:value="com.eyecreate.miceandmystics.miceandmystics.CampaignActivity" /> android:value="com.eyecreate.miceandmystics.miceandmystics.CampaignActivity" />
</activity> </activity>
<activity <activity
android:name=".PlayerManagerActivity"> android:name=".PlayerManagerActivity"/>
</activity> <activity
android:name=".CharacterDetailsActivity"/>
</application> </application>
</manifest> </manifest>

View File

@@ -3,7 +3,6 @@ package com.eyecreate.miceandmystics.miceandmystics;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.graphics.Typeface;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.view.*; import android.view.*;
@@ -11,6 +10,7 @@ import android.widget.ArrayAdapter;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.Toast; import android.widget.Toast;
import com.alertdialogpro.AlertDialogPro;
import com.eyecreate.miceandmystics.miceandmystics.adapters.CampaignAdapter; import com.eyecreate.miceandmystics.miceandmystics.adapters.CampaignAdapter;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.CampaignType; import com.eyecreate.miceandmystics.miceandmystics.model.Enums.CampaignType;
@@ -56,7 +56,7 @@ public class CampaignActivity extends RecyclerViewActivity {
final Spinner typeSpinner = ((Spinner)dialogView.findViewById(R.id.campaign_type)); final Spinner typeSpinner = ((Spinner)dialogView.findViewById(R.id.campaign_type));
typeSpinner.setAdapter(new ArrayAdapter<CampaignType>(this, R.layout.simple_spinner_item, CampaignType.values())); typeSpinner.setAdapter(new ArrayAdapter<CampaignType>(this, R.layout.simple_spinner_item, CampaignType.values()));
typeSpinner.setSelection(0); typeSpinner.setSelection(0);
AlertDialog addDialog = new AlertDialog.Builder(this,R.style.dialogTheme) AlertDialog addDialog = new AlertDialogPro.Builder(this,R.style.dialogTheme)
.setMessage("Please give your new campaign a unique name:") .setMessage("Please give your new campaign a unique name:")
.setView(dialogView) .setView(dialogView)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() { .setPositiveButton("Ok", new DialogInterface.OnClickListener() {

View File

@@ -12,6 +12,7 @@ import android.widget.ArrayAdapter;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.Toast; import android.widget.Toast;
import com.alertdialogpro.AlertDialogPro;
import com.eyecreate.miceandmystics.miceandmystics.adapters.CampaignDetailsAdapter; import com.eyecreate.miceandmystics.miceandmystics.adapters.CampaignDetailsAdapter;
import com.eyecreate.miceandmystics.miceandmystics.model.Achievement; import com.eyecreate.miceandmystics.miceandmystics.model.Achievement;
import com.eyecreate.miceandmystics.miceandmystics.model.Campaign; import com.eyecreate.miceandmystics.miceandmystics.model.Campaign;
@@ -80,7 +81,7 @@ public class CampaignDetailsActivity extends RecyclerViewActivity {
LayoutInflater inflator = (LayoutInflater)(new ContextThemeWrapper(ctx, R.style.dialogTheme)).getSystemService(Context.LAYOUT_INFLATER_SERVICE); LayoutInflater inflator = (LayoutInflater)(new ContextThemeWrapper(ctx, R.style.dialogTheme)).getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View dialogView = inflator.inflate(R.layout.dialog_new_player, null, false); final View dialogView = inflator.inflate(R.layout.dialog_new_player, null, false);
final EditText playerEdit = ((EditText)dialogView.findViewById(R.id.player_name)); final EditText playerEdit = ((EditText)dialogView.findViewById(R.id.player_name));
AlertDialog addDialog = new AlertDialog.Builder(ctx,R.style.dialogTheme) AlertDialog addDialog = new AlertDialogPro.Builder(ctx,R.style.dialogTheme)
.setMessage("Please name the new player:") .setMessage("Please name the new player:")
.setView(dialogView) .setView(dialogView)
.setPositiveButton("Create", new DialogInterface.OnClickListener() { .setPositiveButton("Create", new DialogInterface.OnClickListener() {
@@ -116,7 +117,7 @@ public class CampaignDetailsActivity extends RecyclerViewActivity {
final Spinner achievementSpinner = ((Spinner)dialogView.findViewById(R.id.achievement_name)); final Spinner achievementSpinner = ((Spinner)dialogView.findViewById(R.id.achievement_name));
achievementSpinner.setAdapter(new ArrayAdapter<com.eyecreate.miceandmystics.miceandmystics.model.Enums.Achievement>(this, R.layout.simple_spinner_item, com.eyecreate.miceandmystics.miceandmystics.model.Enums.Achievement.values())); achievementSpinner.setAdapter(new ArrayAdapter<com.eyecreate.miceandmystics.miceandmystics.model.Enums.Achievement>(this, R.layout.simple_spinner_item, com.eyecreate.miceandmystics.miceandmystics.model.Enums.Achievement.values()));
achievementSpinner.setSelection(0); achievementSpinner.setSelection(0);
AlertDialog addDialog = new AlertDialog.Builder(this,R.style.dialogTheme) AlertDialog addDialog = new AlertDialogPro.Builder(this,R.style.dialogTheme)
.setMessage("Please select the achievement to add to party:") .setMessage("Please select the achievement to add to party:")
.setView(dialogView) .setView(dialogView)
.setPositiveButton("Add", new DialogInterface.OnClickListener() { .setPositiveButton("Add", new DialogInterface.OnClickListener() {
@@ -150,7 +151,7 @@ public class CampaignDetailsActivity extends RecyclerViewActivity {
RealmResults<Player> players = MiceAndMysticsApplication.getRealmInstance().where(Player.class).findAll(); RealmResults<Player> players = MiceAndMysticsApplication.getRealmInstance().where(Player.class).findAll();
playerSpinner.setAdapter(new ArrayAdapter<String>(this, R.layout.simple_spinner_item, Player.convertPlayerListToStringArray(players.subList(0,players.size())))); playerSpinner.setAdapter(new ArrayAdapter<String>(this, R.layout.simple_spinner_item, Player.convertPlayerListToStringArray(players.subList(0,players.size()))));
playerSpinner.setSelection(0); playerSpinner.setSelection(0);
AlertDialog addDialog = new AlertDialog.Builder(this,R.style.dialogTheme) AlertDialog addDialog = new AlertDialogPro.Builder(this,R.style.dialogTheme)
.setMessage("Please select your character and controlling player:") .setMessage("Please select your character and controlling player:")
.setView(dialogView) .setView(dialogView)
.setPositiveButton("Create", new DialogInterface.OnClickListener() { .setPositiveButton("Create", new DialogInterface.OnClickListener() {

View File

@@ -0,0 +1,111 @@
package com.eyecreate.miceandmystics.miceandmystics;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v7.widget.LinearLayoutManager;
import android.view.*;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import com.alertdialogpro.AlertDialogPro;
import com.eyecreate.miceandmystics.miceandmystics.adapters.CharacterDetailsAdapter;
import com.eyecreate.miceandmystics.miceandmystics.model.Character;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.Abilities;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.CharacterNames;
import io.realm.RealmResults;
public class CharacterDetailsActivity extends RecyclerViewActivity {
Character currentCharacter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("Character Details");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
if(getIntent().hasExtra("characterId")) {
currentCharacter = MiceAndMysticsApplication.getRealmInstance().where(Character.class).equalTo("uuid",getIntent().getStringExtra("characterId")).findFirst();
} else if(savedInstanceState.containsKey("characterId")) {
currentCharacter = MiceAndMysticsApplication.getRealmInstance().where(Character.class).equalTo("uuid",savedInstanceState.getString("characterId")).findFirst();
}
setLayoutManager(new LinearLayoutManager(this));
setAdapter(new CharacterDetailsAdapter(currentCharacter));
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putString("characterId", currentCharacter.getUuid());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_character_details, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == R.id.action_add_ability) {
newAbilityDialog();
return true;
} else if(id == R.id.action_add_item) {
newItemDialog();
return true;
} else if (id == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
public void newAbilityDialog() {
LayoutInflater inflator = (LayoutInflater)(new ContextThemeWrapper(this, R.style.dialogTheme)).getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View dialogView = inflator.inflate(R.layout.dialog_new_ability, null, false);
final Spinner abilitySpinner = ((Spinner)dialogView.findViewById(R.id.ability_name));
abilitySpinner.setAdapter(new ArrayAdapter<Abilities>(this, R.layout.simple_spinner_item, Abilities.getMatchingCharacterAbilities(CharacterNames.valueOf(currentCharacter.getCharacterName()).characterTypes())));
abilitySpinner.setSelection(0);
AlertDialog addDialog = new AlertDialogPro.Builder(this,R.style.dialogTheme)
.setMessage("Please select the ability to be added:")
.setView(dialogView)
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
RealmResults<Character> duplicates = MiceAndMysticsApplication.getRealmInstance().where(Character.class).equalTo("abilities.abilityName",abilitySpinner.getSelectedItem().toString()).equalTo("uuid",currentCharacter.getUuid()).findAll();
if(duplicates.size()==0) {
((CharacterDetailsAdapter) getAdapter()).addAbility((Abilities) abilitySpinner.getSelectedItem());
} else {
Toast.makeText(CharacterDetailsActivity.this,"That ability is already on this character.",Toast.LENGTH_LONG).show();
}
}
})
.create();
addDialog.show();
}
public void newItemDialog() {
LayoutInflater inflator = (LayoutInflater)(new ContextThemeWrapper(this, R.style.dialogTheme)).getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View dialogView = inflator.inflate(R.layout.dialog_new_item, null, false);
final EditText itemEdit = ((EditText)dialogView.findViewById(R.id.item_name));
AlertDialog addDialog = new AlertDialogPro.Builder(this,R.style.dialogTheme)
.setMessage("Please name the item to mark as held:")
.setView(dialogView)
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if (itemEdit.getText().length() > 0) {
((CharacterDetailsAdapter) getAdapter()).addItem(itemEdit.getText().toString());
} else if (itemEdit.getText().length() == 0) {
Toast.makeText(CharacterDetailsActivity.this, "Can not have a blank item name!", Toast.LENGTH_LONG).show();
}
}
})
.create();
addDialog.show();
}
}

View File

@@ -0,0 +1,107 @@
package com.eyecreate.miceandmystics.miceandmystics.adapters;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.eyecreate.miceandmystics.miceandmystics.MiceAndMysticsApplication;
import com.eyecreate.miceandmystics.miceandmystics.R;
import com.eyecreate.miceandmystics.miceandmystics.model.Ability;
import com.eyecreate.miceandmystics.miceandmystics.model.BackpackItem;
import com.eyecreate.miceandmystics.miceandmystics.model.Character;
import com.eyecreate.miceandmystics.miceandmystics.model.Enums.Abilities;
import com.eyecreate.miceandmystics.miceandmystics.viewholders.CharacterAbilityHeaderViewHolder;
import com.eyecreate.miceandmystics.miceandmystics.viewholders.CharacterAbilityViewHolder;
import com.eyecreate.miceandmystics.miceandmystics.viewholders.CharacterItemViewHolder;
import com.eyecreate.miceandmystics.miceandmystics.viewholders.CharacterItemsHeaderViewHolder;
import java.util.UUID;
public class CharacterDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
Character currentCharacter;
LayoutInflater inflater;
public CharacterDetailsAdapter(Character currentCharacter) {
this.currentCharacter = currentCharacter;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(inflater == null) inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(viewType == R.id.characterDeatilAbilityHeader) {
return new CharacterAbilityHeaderViewHolder(inflater.inflate(R.layout.item_character_ability_header,parent,false));
} else if(viewType == R.id.characterDetailAbility) {
return new CharacterAbilityViewHolder(inflater.inflate(R.layout.item_character_ability,parent,false),this);
} else if(viewType == R.id.characterDetailItemHeader) {
return new CharacterItemsHeaderViewHolder(inflater.inflate(R.layout.item_character_items_header,parent,false));
} else {
return new CharacterItemViewHolder(inflater.inflate(R.layout.item_character_item,parent,false),this);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof CharacterAbilityHeaderViewHolder) {
((CharacterAbilityHeaderViewHolder) holder).bindHolder(currentCharacter);
} else if(holder instanceof CharacterAbilityViewHolder) {
((CharacterAbilityViewHolder)holder).bindHolder(currentCharacter.getAbilities().get(position-1));
} else if(holder instanceof CharacterItemViewHolder) {
((CharacterItemViewHolder) holder).bindModel(currentCharacter.getStoredItems().get(position-2-currentCharacter.getAbilities().size()));
}
}
@Override
public int getItemCount() {
return currentCharacter.getAbilities().size()+1+currentCharacter.getStoredItems().size()+1; //The plus ones represent headers
}
@Override
public int getItemViewType(int position) {
if(position == 0) {
return R.id.characterDeatilAbilityHeader;
} else if(position < currentCharacter.getAbilities().size()+1) {
return R.id.characterDetailAbility;
} else if (position == currentCharacter.getAbilities().size()+1) {
return R.id.characterDetailItemHeader;
} else {
return R.id.characterDetailItem;
}
}
public void addAbility(Abilities ability) {
MiceAndMysticsApplication.getRealmInstance().beginTransaction();
Ability realmAbility = MiceAndMysticsApplication.getRealmInstance().createObject(Ability.class);
realmAbility.setUuid(UUID.randomUUID().toString());
realmAbility.setAbilityName(ability.displayName());
currentCharacter.getAbilities().add(realmAbility);
MiceAndMysticsApplication.getRealmInstance().commitTransaction();
notifyDataSetChanged();
}
public void addItem(String itemName) {
MiceAndMysticsApplication.getRealmInstance().beginTransaction();
BackpackItem item = MiceAndMysticsApplication.getRealmInstance().createObject(BackpackItem.class);
item.setUuid(UUID.randomUUID().toString());
item.setItemName(itemName);
currentCharacter.getStoredItems().add(item);
MiceAndMysticsApplication.getRealmInstance().commitTransaction();
notifyDataSetChanged();
}
public void removeItem(String itemUuid) {
BackpackItem item = MiceAndMysticsApplication.getRealmInstance().where(BackpackItem.class).equalTo("uuid",itemUuid).findFirst();
MiceAndMysticsApplication.getRealmInstance().beginTransaction();
item.removeFromRealm();
MiceAndMysticsApplication.getRealmInstance().commitTransaction();
notifyDataSetChanged();
}
public void removeAbility(String abilityUuid) {
Ability ability = MiceAndMysticsApplication.getRealmInstance().where(Ability.class).equalTo("uuid",abilityUuid).findFirst();
MiceAndMysticsApplication.getRealmInstance().beginTransaction();
ability.removeFromRealm();
MiceAndMysticsApplication.getRealmInstance().commitTransaction();
notifyDataSetChanged();
}
}

View File

@@ -6,6 +6,7 @@ import android.content.DialogInterface;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.alertdialogpro.AlertDialogPro;
import com.eyecreate.miceandmystics.miceandmystics.MiceAndMysticsApplication; import com.eyecreate.miceandmystics.miceandmystics.MiceAndMysticsApplication;
import com.eyecreate.miceandmystics.miceandmystics.R; import com.eyecreate.miceandmystics.miceandmystics.R;
import com.eyecreate.miceandmystics.miceandmystics.model.*; import com.eyecreate.miceandmystics.miceandmystics.model.*;
@@ -45,7 +46,7 @@ public class PlayerManagerAdapter extends RecyclerView.Adapter<PlayerViewHolder>
final RealmResults<Character> playerCharacters = MiceAndMysticsApplication.getRealmInstance().where(com.eyecreate.miceandmystics.miceandmystics.model.Character.class) final RealmResults<Character> playerCharacters = MiceAndMysticsApplication.getRealmInstance().where(com.eyecreate.miceandmystics.miceandmystics.model.Character.class)
.equalTo("controllingPlayer.playerName", playerName).findAll(); .equalTo("controllingPlayer.playerName", playerName).findAll();
if(playerCharacters.size()>0) { if(playerCharacters.size()>0) {
AlertDialog removeDialog = new AlertDialog.Builder(ctx,R.style.dialogTheme) AlertDialog removeDialog = new AlertDialogPro.Builder(ctx,R.style.dialogTheme)
.setMessage("Removing player "+playerName+" must first remove all characters owned by player. Do you want to continue still?") .setMessage("Removing player "+playerName+" must first remove all characters owned by player. Do you want to continue still?")
.setNegativeButton("No", new DialogInterface.OnClickListener() { .setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override @Override
@@ -68,7 +69,7 @@ public class PlayerManagerAdapter extends RecyclerView.Adapter<PlayerViewHolder>
.create(); .create();
removeDialog.show(); removeDialog.show();
} else { } else {
AlertDialog removeDialog = new AlertDialog.Builder(ctx, R.style.dialogTheme) AlertDialog removeDialog = new AlertDialogPro.Builder(ctx, R.style.dialogTheme)
.setMessage("Do you want to remove player: " + playerName + "?") .setMessage("Do you want to remove player: " + playerName + "?")
.setNegativeButton("No", new DialogInterface.OnClickListener() { .setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override @Override

View File

@@ -1,6 +1,8 @@
package com.eyecreate.miceandmystics.miceandmystics.model.Enums; package com.eyecreate.miceandmystics.miceandmystics.model.Enums;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
public enum Abilities { public enum Abilities {
@@ -52,6 +54,16 @@ public enum Abilities {
return false; return false;
} }
public static Abilities[] getMatchingCharacterAbilities(CharacterType[] matchingTypes) {
List<Abilities> matchingList = new ArrayList<Abilities>();
for(Abilities ability:Abilities.values()) {
if(ability.doesApply(matchingTypes)) {
matchingList.add(ability);
}
}
return matchingList.toArray(new Abilities[matchingList.size()]);
}
public String displayName() { return displayName; } public String displayName() { return displayName; }
@Override public String toString() { return displayName; } @Override public String toString() { return displayName; }

View File

@@ -2,10 +2,13 @@ package com.eyecreate.miceandmystics.miceandmystics.viewholders;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.alertdialogpro.AlertDialogPro;
import com.eyecreate.miceandmystics.miceandmystics.CharacterDetailsActivity;
import com.eyecreate.miceandmystics.miceandmystics.R; import com.eyecreate.miceandmystics.miceandmystics.R;
import com.eyecreate.miceandmystics.miceandmystics.adapters.CampaignDetailsAdapter; import com.eyecreate.miceandmystics.miceandmystics.adapters.CampaignDetailsAdapter;
import com.eyecreate.miceandmystics.miceandmystics.model.Character; import com.eyecreate.miceandmystics.miceandmystics.model.Character;
@@ -37,12 +40,14 @@ public class CampaignDetailsViewHolder extends RecyclerView.ViewHolder implement
@Override @Override
public void onClick(View view) { public void onClick(View view) {
//TODO:implement character edit screen. Intent editCharacter = new Intent(view.getContext(), CharacterDetailsActivity.class);
editCharacter.putExtra("characterId",boundCharacter.getUuid());
view.getContext().startActivity(editCharacter);
} }
@Override @Override
public boolean onLongClick(View view) { public boolean onLongClick(View view) {
AlertDialog removeDialog = new AlertDialog.Builder(view.getContext(),R.style.dialogTheme) AlertDialog removeDialog = new AlertDialogPro.Builder(view.getContext(),R.style.dialogTheme)
.setMessage("Do you want to remove character: "+characterName.getText()+"?") .setMessage("Do you want to remove character: "+characterName.getText()+"?")
.setNegativeButton("No", new DialogInterface.OnClickListener() { .setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override @Override

View File

@@ -9,6 +9,7 @@ import android.support.v7.widget.RecyclerView;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import com.alertdialogpro.AlertDialogPro;
import com.echo.holographlibrary.PieGraph; import com.echo.holographlibrary.PieGraph;
import com.echo.holographlibrary.PieSlice; import com.echo.holographlibrary.PieSlice;
import com.eyecreate.miceandmystics.miceandmystics.CampaignDetailsActivity; import com.eyecreate.miceandmystics.miceandmystics.CampaignDetailsActivity;
@@ -74,7 +75,7 @@ public class CampaignViewHolder extends RecyclerView.ViewHolder implements View.
@Override @Override
public boolean onLongClick(View view) { public boolean onLongClick(View view) {
AlertDialog removeDialog = new AlertDialog.Builder(view.getContext(),R.style.dialogTheme) AlertDialog removeDialog = new AlertDialogPro.Builder(view.getContext(),R.style.dialogTheme)
.setMessage("Do you want to remove campaign: "+campaignName.getText()+"?") .setMessage("Do you want to remove campaign: "+campaignName.getText()+"?")
.setNegativeButton("No", new DialogInterface.OnClickListener() { .setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override @Override

View File

@@ -0,0 +1,21 @@
package com.eyecreate.miceandmystics.miceandmystics.viewholders;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.eyecreate.miceandmystics.miceandmystics.R;
import com.eyecreate.miceandmystics.miceandmystics.model.Character;
public class CharacterAbilityHeaderViewHolder extends RecyclerView.ViewHolder {
TextView characterName;
public CharacterAbilityHeaderViewHolder(View itemView) {
super(itemView);
characterName = (TextView) itemView.findViewById(R.id.character_name);
}
public void bindHolder(Character currentCharacter) {
characterName.setText(currentCharacter.getCharacterName());
}
}

View File

@@ -0,0 +1,51 @@
package com.eyecreate.miceandmystics.miceandmystics.viewholders;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.alertdialogpro.AlertDialogPro;
import com.eyecreate.miceandmystics.miceandmystics.R;
import com.eyecreate.miceandmystics.miceandmystics.adapters.CharacterDetailsAdapter;
import com.eyecreate.miceandmystics.miceandmystics.model.Ability;
public class CharacterAbilityViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {
CharacterDetailsAdapter adapter;
TextView abilityName;
String uuid;
public CharacterAbilityViewHolder(View itemView,CharacterDetailsAdapter adapter) {
super(itemView);
this.adapter = adapter;
abilityName = (TextView) itemView.findViewById(R.id.ability_name);
itemView.setOnLongClickListener(this);
}
public void bindHolder(Ability ability) {
abilityName.setText(ability.getAbilityName());
uuid = ability.getUuid();
}
@Override
public boolean onLongClick(View view) {
AlertDialog removeDialog = new AlertDialogPro.Builder(view.getContext(),R.style.dialogTheme)
.setMessage("Do you want to remove ability: "+abilityName.getText()+"?")
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
adapter.removeAbility(uuid);
}
})
.create();
removeDialog.show();
return true;
}
}

View File

@@ -0,0 +1,51 @@
package com.eyecreate.miceandmystics.miceandmystics.viewholders;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.alertdialogpro.AlertDialogPro;
import com.eyecreate.miceandmystics.miceandmystics.R;
import com.eyecreate.miceandmystics.miceandmystics.adapters.CharacterDetailsAdapter;
import com.eyecreate.miceandmystics.miceandmystics.model.BackpackItem;
public class CharacterItemViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {
CharacterDetailsAdapter adapter;
TextView itemName;
String uuid;
public CharacterItemViewHolder(View itemView,CharacterDetailsAdapter adapter) {
super(itemView);
this.adapter = adapter;
itemName = (TextView) itemView.findViewById(R.id.item_name);
itemView.setOnLongClickListener(this);
}
public void bindModel(BackpackItem item) {
itemName.setText(item.getItemName());
uuid = item.getUuid();
}
@Override
public boolean onLongClick(View view) {
AlertDialog removeDialog = new AlertDialogPro.Builder(view.getContext(),R.style.dialogTheme)
.setMessage("Do you want to remove item: "+itemName.getText()+"?")
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
adapter.removeItem(uuid);
}
})
.create();
removeDialog.show();
return true;
}
}

View File

@@ -0,0 +1,10 @@
package com.eyecreate.miceandmystics.miceandmystics.viewholders;
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class CharacterItemsHeaderViewHolder extends RecyclerView.ViewHolder {
public CharacterItemsHeaderViewHolder(View itemView) {
super(itemView);
}
}

View File

@@ -6,6 +6,7 @@ import android.support.v7.widget.RecyclerView;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.alertdialogpro.AlertDialogPro;
import com.eyecreate.miceandmystics.miceandmystics.R; import com.eyecreate.miceandmystics.miceandmystics.R;
import com.eyecreate.miceandmystics.miceandmystics.adapters.CampaignDetailsAdapter; import com.eyecreate.miceandmystics.miceandmystics.adapters.CampaignDetailsAdapter;
import com.eyecreate.miceandmystics.miceandmystics.model.Achievement; import com.eyecreate.miceandmystics.miceandmystics.model.Achievement;
@@ -33,7 +34,7 @@ public class PartyAchievementViewHolder extends RecyclerView.ViewHolder implemen
@Override @Override
public boolean onLongClick(View view) { public boolean onLongClick(View view) {
AlertDialog removeDialog = new AlertDialog.Builder(view.getContext(),R.style.dialogTheme) AlertDialog removeDialog = new AlertDialogPro.Builder(view.getContext(),R.style.dialogTheme)
.setMessage("Do you want to remove achievement: "+achievementName.getText()+"?") .setMessage("Do you want to remove achievement: "+achievementName.getText()+"?")
.setNegativeButton("No", new DialogInterface.OnClickListener() { .setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override @Override

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ability_name"/>
</LinearLayout>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="12dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/item_name"/>
</LinearLayout>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
app:cardUseCompatPadding="true"
app:cardElevation="4dp"
android:foreground="?android:attr/selectableItemBackground"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/ability_list"
android:padding="8dp"
android:background="@color/parchment_yellow">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textColor="@android:color/black"
android:layout_gravity="center_vertical"
android:id="@+id/ability_name"/>
</LinearLayout>
</android.support.v7.widget.CardView>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="@color/dark_red"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/parchment_yellow"
android:id="@+id/character_name"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/parchment_yellow"
android:text="Abilities"/>
</LinearLayout>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
app:cardUseCompatPadding="true"
app:cardElevation="4dp"
android:foreground="?android:attr/selectableItemBackground"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/item_list"
android:padding="8dp"
android:background="@color/parchment_yellow">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textColor="@android:color/black"
android:layout_gravity="center_vertical"
android:id="@+id/item_name"/>
</LinearLayout>
</android.support.v7.widget.CardView>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="@color/dark_red"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/parchment_yellow"
android:text="Items:"/>
</LinearLayout>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_add_ability"
android:title="Add Ability"
app:showAsAction="never"/>
<item android:id="@+id/action_add_item"
android:title="Add Held Item"
app:showAsAction="never"/>
</menu>

View File

@@ -4,4 +4,8 @@
<item type="id" name="campaignDetailItem"/> <item type="id" name="campaignDetailItem"/>
<item type="id" name="campaignPartyAchievementsHeader"/> <item type="id" name="campaignPartyAchievementsHeader"/>
<item type="id" name="campaignPartyAchievement"/> <item type="id" name="campaignPartyAchievement"/>
<item type="id" name="characterDeatilAbilityHeader"/>
<item type="id" name="characterDetailItemHeader"/>
<item type="id" name="characterDetailAbility"/>
<item type="id" name="characterDetailItem"/>
</resources> </resources>

View File

@@ -8,13 +8,14 @@
<item name="colorAccent">@color/parchment_yellow</item> <item name="colorAccent">@color/parchment_yellow</item>
<item name="android:textColorPrimary">@color/parchment_yellow</item> <item name="android:textColorPrimary">@color/parchment_yellow</item>
<item name="actionBarPopupTheme">@style/popupMenu</item> <item name="actionBarPopupTheme">@style/popupMenu</item>
<item name="alertDialogProTheme">@style/Theme.AlertDialogPro.Material.Light</item>
</style> </style>
<style name="popupMenu" parent="Theme.AppCompat"> <style name="popupMenu" parent="Theme.AppCompat">
<item name="android:colorBackground">@color/blood_red</item> <item name="android:colorBackground">@color/blood_red</item>
</style> </style>
<style name="dialogTheme" parent="Theme.AppCompat.Light.Dialog"> <style name="dialogTheme" parent="Theme.AlertDialogPro.Material.Light">
<item name="android:background">@color/parchment_yellow</item> <item name="android:background">@color/parchment_yellow</item>
<item name="colorPrimary">@color/blood_red</item> <item name="colorPrimary">@color/blood_red</item>
<item name="colorPrimaryDark">@color/dark_red</item> <item name="colorPrimaryDark">@color/dark_red</item>