From 07b120754ecf9c61ece7155cce444c0e8f4e55c1 Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Sun, 19 Apr 2015 17:49:49 -0400 Subject: [PATCH] Change default font to something larger and easier to read. Implement RecyclerView for Campaign screen. Make simple realm objects have constructors for quick access. --- .../MiceAndMysticsTracker.iml | 2 + MiceAndMysticsTracker/build.gradle | 2 + .../src/main/assets/ArchitectsDaughter.ttf | Bin 0 -> 48640 bytes .../miceandmystics/CampaignActivity.java | 34 +++++--- .../MiceAndMysticsApplication.java | 18 ++++- .../miceandmystics/RecyclerViewActivity.java | 50 ++++++++++++ .../adapters/CampaignAdapter.java | 60 ++++++++++++++ .../miceandmystics/model/Ability.java | 4 + .../miceandmystics/model/Achievement.java | 4 + .../miceandmystics/model/BackpackItem.java | 4 + .../miceandmystics/model/Player.java | 4 + .../miceandmystics/viewholders/Campaign.java | 73 ++++++++++++++++++ .../src/main/res/layout/activity_campaign.xml | 15 ---- .../src/main/res/layout/item_campaign.xml | 29 +++++++ .../src/main/res/values/styles.xml | 15 +++- 15 files changed, 286 insertions(+), 28 deletions(-) create mode 100644 MiceAndMysticsTracker/src/main/assets/ArchitectsDaughter.ttf create mode 100644 MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/RecyclerViewActivity.java create mode 100644 MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/adapters/CampaignAdapter.java create mode 100644 MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/viewholders/Campaign.java delete mode 100644 MiceAndMysticsTracker/src/main/res/layout/activity_campaign.xml create mode 100644 MiceAndMysticsTracker/src/main/res/layout/item_campaign.xml diff --git a/MiceAndMysticsTracker/MiceAndMysticsTracker.iml b/MiceAndMysticsTracker/MiceAndMysticsTracker.iml index cd28d7f..37050bb 100644 --- a/MiceAndMysticsTracker/MiceAndMysticsTracker.iml +++ b/MiceAndMysticsTracker/MiceAndMysticsTracker.iml @@ -86,10 +86,12 @@ + + \ No newline at end of file diff --git a/MiceAndMysticsTracker/build.gradle b/MiceAndMysticsTracker/build.gradle index 28fe89a..5a9af1a 100644 --- a/MiceAndMysticsTracker/build.gradle +++ b/MiceAndMysticsTracker/build.gradle @@ -42,4 +42,6 @@ dependencies { compile 'io.realm:realm-android:0.80.1' compile 'uk.co.chrisjenx:calligraphy:2.0.2' compile 'com.android.support:recyclerview-v7:21.0.+' + compile 'com.android.support:cardview-v7:21.0.+' + compile 'org.quanqi:android-holo-graph:0.1.0' } diff --git a/MiceAndMysticsTracker/src/main/assets/ArchitectsDaughter.ttf b/MiceAndMysticsTracker/src/main/assets/ArchitectsDaughter.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f4469b701358ce1f144ea7084db91bdb10bc0eb7 GIT binary patch literal 48640 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 literal 0 HcmV?d00001 diff --git a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/CampaignActivity.java b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/CampaignActivity.java index b983be1..b62ed86 100644 --- a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/CampaignActivity.java +++ b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/CampaignActivity.java @@ -1,26 +1,27 @@ package com.eyecreate.miceandmystics.miceandmystics; -import android.content.Context; -import android.support.v7.app.ActionBarActivity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.graphics.Typeface; import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.view.ContextThemeWrapper; import android.view.Menu; import android.view.MenuItem; -import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; +import android.widget.EditText; +import com.eyecreate.miceandmystics.miceandmystics.adapters.CampaignAdapter; -public class CampaignActivity extends ActionBarActivity { +public class CampaignActivity extends RecyclerViewActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_campaign); getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setIcon(R.mipmap.ic_launcher); - } - - @Override - protected void attachBaseContext(Context newBase) { - super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); + getSupportActionBar().setDisplayShowTitleEnabled(false); + setLayoutManager(new LinearLayoutManager(this)); + setAdapter(new CampaignAdapter()); } @Override @@ -39,6 +40,19 @@ public class CampaignActivity extends ActionBarActivity { //noinspection SimplifiableIfStatement if (id == R.id.action_add_campaign) { + final EditText newName = new EditText(new ContextThemeWrapper(this,R.style.editTextDialogTheme)); + newName.setTypeface(Typeface.createFromAsset(getAssets(),"ArchitectsDaughter.ttf")); + AlertDialog addDialog = new AlertDialog.Builder(this,R.style.dialogTheme) + .setMessage("Please give your new campaign a unique name:") + .setView(newName) + .setPositiveButton("Ok", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + ((CampaignAdapter) getAdapter()).addItem(newName.getText().toString()); + } + }) + .create(); + addDialog.show(); return true; } diff --git a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/MiceAndMysticsApplication.java b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/MiceAndMysticsApplication.java index b243aa6..6cfa1c2 100644 --- a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/MiceAndMysticsApplication.java +++ b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/MiceAndMysticsApplication.java @@ -1,17 +1,31 @@ package com.eyecreate.miceandmystics.miceandmystics; import android.app.Application; +import io.realm.Realm; import uk.co.chrisjenx.calligraphy.CalligraphyConfig; public class MiceAndMysticsApplication extends Application { + + private static MiceAndMysticsApplication singletonApplication; + private static Realm singletonRealm; + @Override public void onCreate() { super.onCreate(); - //TODO:init realm here + singletonApplication = this; + singletonRealm = Realm.getInstance(this); CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() - .setDefaultFontPath("Eadui.ttf") + .setDefaultFontPath("ArchitectsDaughter.ttf") .setFontAttrId(R.attr.fontPath) .build() ); } + + public static MiceAndMysticsApplication getInstance() { + return singletonApplication; + } + + public static Realm getRealmInstance() { + return singletonRealm; + } } diff --git a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/RecyclerViewActivity.java b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/RecyclerViewActivity.java new file mode 100644 index 0000000..6f17916 --- /dev/null +++ b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/RecyclerViewActivity.java @@ -0,0 +1,50 @@ +/*** + Copyright (c) 2008-2015 CommonsWare, LLC + Licensed under the Apache License, Version 2.0 (the "License"); you may not + use this file except in compliance with the License. You may obtain a copy + of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required + by applicable law or agreed to in writing, software distributed under the + License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS + OF ANY KIND, either express or implied. See the License for the specific + language governing permissions and limitations under the License. + + From _The Busy Coder's Guide to Android Development_ + http://commonsware.com/Android + */ +package com.eyecreate.miceandmystics.miceandmystics; + +import android.content.Context; +import android.support.v7.app.ActionBarActivity; +import android.support.v7.widget.RecyclerView; +import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; + +public class RecyclerViewActivity extends ActionBarActivity { + private RecyclerView rv=null; + + public void setAdapter(RecyclerView.Adapter adapter) { + getRecyclerView().setAdapter(adapter); + } + + @Override + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); + } + + public RecyclerView.Adapter getAdapter() { + return(getRecyclerView().getAdapter()); + } + + public void setLayoutManager(RecyclerView.LayoutManager mgr) { + getRecyclerView().setLayoutManager(mgr); + } + + public RecyclerView getRecyclerView() { + if (rv==null) { + rv=new RecyclerView(this); + rv.setHasFixedSize(true); + setContentView(rv); + } + + return(rv); + } +} diff --git a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/adapters/CampaignAdapter.java b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/adapters/CampaignAdapter.java new file mode 100644 index 0000000..781b356 --- /dev/null +++ b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/adapters/CampaignAdapter.java @@ -0,0 +1,60 @@ +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.viewholders.Campaign; +import io.realm.RealmResults; + +public class CampaignAdapter extends RecyclerView.Adapter { + + LayoutInflater inflater; + RealmResults campaigns; + + public CampaignAdapter() { + campaigns = MiceAndMysticsApplication.getRealmInstance().where(com.eyecreate.miceandmystics.miceandmystics.model.Campaign.class).findAll(); + } + + @Override + public Campaign onCreateViewHolder(ViewGroup parent, int viewType) { + if(inflater == null) inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + return new Campaign(inflater.inflate(R.layout.item_campaign,parent,false),this); + } + + @Override + public void onBindViewHolder(Campaign holder, int position) { + holder.bindModel(campaigns.get(position)); + } + + public void fullRefresh() { + notifyDataSetChanged(); + } + + public void addItem(String campaignName) { + MiceAndMysticsApplication.getRealmInstance().beginTransaction(); + com.eyecreate.miceandmystics.miceandmystics.model.Campaign campaign = new com.eyecreate.miceandmystics.miceandmystics.model.Campaign(); + campaign.setCampaignName(campaignName); + MiceAndMysticsApplication.getRealmInstance().copyToRealm(campaign); + MiceAndMysticsApplication.getRealmInstance().commitTransaction(); + fullRefresh(); + } + + public void removeItem(String campaignName) { + com.eyecreate.miceandmystics.miceandmystics.model.Campaign campaign = MiceAndMysticsApplication.getRealmInstance() + .where(com.eyecreate.miceandmystics.miceandmystics.model.Campaign.class) + .equalTo("campaignName",campaignName) + .findFirst(); + MiceAndMysticsApplication.getRealmInstance().beginTransaction(); + campaign.removeFromRealm(); + MiceAndMysticsApplication.getRealmInstance().commitTransaction(); + fullRefresh(); + } + + @Override + public int getItemCount() { + return campaigns.size(); + } +} diff --git a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Ability.java b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Ability.java index 9b70223..90ec831 100644 --- a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Ability.java +++ b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Ability.java @@ -7,6 +7,10 @@ public class Ability extends RealmObject { @PrimaryKey private String abilityName; + public Ability() {} + + public Ability(String abilityName) {setAbilityName(abilityName);} + public String getAbilityName() { return abilityName; } diff --git a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Achievement.java b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Achievement.java index 483107d..d32945a 100644 --- a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Achievement.java +++ b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Achievement.java @@ -7,6 +7,10 @@ public class Achievement extends RealmObject { @PrimaryKey private String achievementName; + public Achievement() {} + + public Achievement(String achievementName) {setAchievementName(achievementName);} + public String getAchievementName() { return achievementName; } diff --git a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/BackpackItem.java b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/BackpackItem.java index f0fa2f0..dde64e3 100644 --- a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/BackpackItem.java +++ b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/BackpackItem.java @@ -8,6 +8,10 @@ public class BackpackItem extends RealmObject { @PrimaryKey private String itemName; + public BackpackItem() {} + + public BackpackItem(String itemName) {setItemName(itemName);} + public String getItemName() { return itemName; } diff --git a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Player.java b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Player.java index b26a2c2..487ce36 100644 --- a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Player.java +++ b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/model/Player.java @@ -7,6 +7,10 @@ public class Player extends RealmObject { @PrimaryKey private String playerName; + public Player() {} + + public Player(String playerName) {setPlayerName(playerName);} + public String getPlayerName() { return playerName; } diff --git a/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/viewholders/Campaign.java b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/viewholders/Campaign.java new file mode 100644 index 0000000..a84ef5e --- /dev/null +++ b/MiceAndMysticsTracker/src/main/java/com/eyecreate/miceandmystics/miceandmystics/viewholders/Campaign.java @@ -0,0 +1,73 @@ +package com.eyecreate.miceandmystics.miceandmystics.viewholders; + +import android.annotation.TargetApi; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.os.Build; +import android.support.v7.widget.RecyclerView; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; +import com.echo.holographlibrary.PieGraph; +import com.eyecreate.miceandmystics.miceandmystics.R; +import com.eyecreate.miceandmystics.miceandmystics.adapters.CampaignAdapter; + +public class Campaign extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener { + + CampaignAdapter adapter; + TextView campaignName; + PieGraph characterGraph; + + public Campaign(View itemView,CampaignAdapter adapter) { + super(itemView); + this.adapter = adapter; + campaignName = (TextView) itemView.findViewById(R.id.campagin_name); + characterGraph = (PieGraph) itemView.findViewById(R.id.campaign_characters_graph); + itemView.setOnClickListener(this); + itemView.setOnLongClickListener(this); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + itemView.setOnTouchListener(new View.OnTouchListener() { + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override + public boolean onTouch(View v, MotionEvent event) { + v + .findViewById(R.id.campaign_content) + .getBackground() + .setHotspot(event.getX(), event.getY()); + + return(false); + } + }); + } + } + + @Override + public void onClick(View view) { + //TODO:implement next screen + } + + public void bindModel(com.eyecreate.miceandmystics.miceandmystics.model.Campaign campaign) { + campaignName.setText(campaign.getCampaignName()); + } + + @Override + public boolean onLongClick(View view) { + AlertDialog removeDialog = new AlertDialog.Builder(view.getContext(),R.style.dialogTheme) + .setMessage("Do you want to remove campaign: "+campaignName.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((String) campaignName.getText()); + } + }) + .create(); + removeDialog.show(); + return true; + } +} diff --git a/MiceAndMysticsTracker/src/main/res/layout/activity_campaign.xml b/MiceAndMysticsTracker/src/main/res/layout/activity_campaign.xml deleted file mode 100644 index fb6f93b..0000000 --- a/MiceAndMysticsTracker/src/main/res/layout/activity_campaign.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - diff --git a/MiceAndMysticsTracker/src/main/res/layout/item_campaign.xml b/MiceAndMysticsTracker/src/main/res/layout/item_campaign.xml new file mode 100644 index 0000000..1226981 --- /dev/null +++ b/MiceAndMysticsTracker/src/main/res/layout/item_campaign.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/MiceAndMysticsTracker/src/main/res/values/styles.xml b/MiceAndMysticsTracker/src/main/res/values/styles.xml index 63d8da6..b0fd55a 100644 --- a/MiceAndMysticsTracker/src/main/res/values/styles.xml +++ b/MiceAndMysticsTracker/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ - + + + + -- GitLab