diff --git a/src/main/java/nyc/c4q/Book.java b/src/main/java/nyc/c4q/Book.java new file mode 100644 index 0000000..9af903f --- /dev/null +++ b/src/main/java/nyc/c4q/Book.java @@ -0,0 +1,173 @@ +package nyc.c4q; + +public class Book { + + private int id; + private String title; + private String author; + private String isbn; + private String isbn13; + private String publisher; + private int publishyear; + private boolean checkedout; + private int checkedoutby; + private int checkoutdateyear; + private int checkoutdatemonth; + private int checkoutdateday; + private int duedateyear; + private int duedatemonth; + private int duedateday; + + public Book(int id, String title, String author, String isbn, String isbn13, String publisher, int publishyear) { + this.id = id; + this.title = title; + this.author = author; + this.isbn = isbn; + this.isbn13 = isbn13; + this.publisher = publisher; + this.publishyear = publishyear; + } + + @Override + public String toString() { + return "id: " + this.id + "\n" + "title: " + this.title + "\n" + "author: " + this.author + "\n" + "isbn: " + this.isbn + "\n" + "isbn13: " + this.isbn13 + "\n" + "publisher: " + this.publisher + "\n" + "publication year: " + this.publishyear + "\n"; + } + + public Book(int id, String title, String author, String isbn, String isbn13, String publisher, int publishyear, boolean checkedout, int checkedoutby, int checkoutdateyear, int checkoutdatemonth, int checkoutdateday, int duedateyear, int duedatemonth, int duedateday) { + this.id = id; + this.title = title; + this.author = author; + this.isbn = isbn; + this.isbn13 = isbn13; + this.publisher = publisher; + this.publishyear = publishyear; + this.checkedout = checkedout; + this.checkedoutby = checkedoutby; + this.checkoutdateyear = checkoutdateyear; + this.checkoutdatemonth = checkoutdatemonth; + this.checkoutdateday = checkoutdateday; + this.duedateyear = duedateyear; + this.duedatemonth = duedatemonth; + this.duedateday = duedateday; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getIsbn() { + return isbn; + } + + public void setIsbn(String isbn) { + this.isbn = isbn; + } + + public String getIsbn13() { + return isbn13; + } + + public void setIsbn13(String isbn13) { + this.isbn13 = isbn13; + } + + public String getPublisher() { + return publisher; + } + + public void setPublisher(String publisher) { + this.publisher = publisher; + } + + public int getPublishyear() { + return publishyear; + } + + public void setPublishyear(int publishyear) { + this.publishyear = publishyear; + } + + public boolean getCheckedout() { + return checkedout; + } + + public void setCheckedout(boolean checkedout) { + this.checkedout = checkedout; + } + + public int getCheckedoutby() { + return checkedoutby; + } + + public void setCheckedoutby(int checkedoutby) { + this.checkedoutby = checkedoutby; + } + + public int getCheckoutdateyear() { + return checkoutdateyear; + } + + public void setCheckoutdateyear(int checkoutdateyear) { + this.checkoutdateyear = checkoutdateyear; + } + + public int getCheckoutdatemonth() { + return checkoutdatemonth; + } + + public void setCheckoutdatemonth(int checkoutdatemonth) { + this.checkoutdatemonth = checkoutdatemonth; + } + + public int getCheckoutdateday() { + return checkoutdateday; + } + + public void setCheckoutdateday(int checkoutdateday) { + this.checkoutdateday = checkoutdateday; + } + + public int getDuedateyear() { + return duedateyear; + } + + public void setDuedateyear(int duedateyear) { + this.duedateyear = duedateyear; + } + + public int getDuedatemonth() { + return duedatemonth; + } + + public void setDuedatemonth(int duedatemonth) { + this.duedatemonth = duedatemonth; + } + + public int getDuedateday() { + return duedateday; + } + + public void setDuedateday(int duedateday) { + this.duedateday = duedateday; + } +} diff --git a/src/main/java/nyc/c4q/BookContract.java b/src/main/java/nyc/c4q/BookContract.java new file mode 100644 index 0000000..360376c --- /dev/null +++ b/src/main/java/nyc/c4q/BookContract.java @@ -0,0 +1,56 @@ +package nyc.c4q; + +import android.provider.BaseColumns; + +public class BookContract { + + public static final String PRIMARY_KEY = " PRIMARY KEY"; + public static final String INT_TYPE = " INTEGER"; + public static final String TEXT_TYPE = " TEXT"; + public static final String BOOLEAN_TYPE = " BOOLEAN"; + public static final String COMMA_SEP = ","; + + public static final String SQL_CREATE_ENTRIES = + "CREATE TABLE " + BookEntry.TABLE_NAME + + " (" + + BookEntry.COLUMN_ID + INT_TYPE + PRIMARY_KEY + COMMA_SEP + + BookEntry.COLUMN_TITLE + TEXT_TYPE + COMMA_SEP + + BookEntry.COLUMN_AUTHOR + TEXT_TYPE + COMMA_SEP + + BookEntry.COLUMN_ISBN + TEXT_TYPE + COMMA_SEP + + BookEntry.COLUMN_ISBN13 + TEXT_TYPE + COMMA_SEP + + BookEntry.COLUMN_PUBLISHER + TEXT_TYPE + COMMA_SEP + + BookEntry.COLUMN_PUBLISHYEAR + INT_TYPE + COMMA_SEP + + BookEntry.COLUMN_CHECKEDOUT + BOOLEAN_TYPE + COMMA_SEP + + BookEntry.COLUMN_CHECKEDOUTBY+ INT_TYPE + COMMA_SEP + + BookEntry.COLUMN_CHECKOUTDATEYEAR + INT_TYPE + COMMA_SEP + + BookEntry.COLUMN_CHECKOUTDATEMONTH + INT_TYPE + COMMA_SEP + + BookEntry.COLUMN_CHECKOUTDATEDAY + INT_TYPE + COMMA_SEP + + BookEntry.COLUMN_DUEDATEYEAR + INT_TYPE + COMMA_SEP + + BookEntry.COLUMN_DUEDATEMONTH + INT_TYPE + COMMA_SEP + + BookEntry.COLUMN_DUEDATEDAY + INT_TYPE + COMMA_SEP + + ")"; + + public static final String SQL_DELETE_ENTRIES = + "DROP TABLE IF EXISTS " + BookEntry.TABLE_NAME; + + public static abstract class BookEntry implements BaseColumns { + public static final String TABLE_NAME = "BOOKS"; + public static final String COLUMN_ID = "ID"; + public static final String COLUMN_TITLE = "TITLE"; + public static final String COLUMN_AUTHOR = "AUTHOR"; + public static final String COLUMN_ISBN = "ISBN"; + public static final String COLUMN_ISBN13 = "ISBN13"; + public static final String COLUMN_PUBLISHER = "PUBLISHER"; + public static final String COLUMN_PUBLISHYEAR = "PUBLISHYEAR"; + public static final String COLUMN_CHECKEDOUT = "CHECKEDOUT"; + public static final String COLUMN_CHECKEDOUTBY = "CHECKEDOUTBY"; + public static final String COLUMN_CHECKOUTDATEYEAR = "CHECKOUTDATEYEAR"; + public static final String COLUMN_CHECKOUTDATEMONTH = "CHECKOUTDATEMONTH"; + public static final String COLUMN_CHECKOUTDATEDAY = "CHECKOUTDATEDAY"; + public static final String COLUMN_DUEDATEYEAR = "DUEDATEYEAR"; + public static final String COLUMN_DUEDATEMONTH = "DUEDATEMONTH"; + public static final String COLUMN_DUEDATEDAY = "DUEDATEDAY"; + + + } +} diff --git a/src/main/java/nyc/c4q/DBAsyncTask1.java b/src/main/java/nyc/c4q/DBAsyncTask1.java new file mode 100644 index 0000000..ed568a0 --- /dev/null +++ b/src/main/java/nyc/c4q/DBAsyncTask1.java @@ -0,0 +1,45 @@ +package nyc.c4q; + +import android.content.Context; +import android.os.AsyncTask; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +public class DBAsyncTask1 extends AsyncTask { + + public Context context; + + @Override + protected Void doInBackground(String... strings) { + LibraryDBHelper helper = new LibraryDBHelper(context); + + try { + JSONArray books = new JSONArray(strings[0]); + for (int i = 0; i < books.length(); i++) { + JSONObject book = books.getJSONObject(i); + int id = book.getInt("id"); + String title = book.getString("title"); + String author = book.getString("author"); + String isbn = book.getString("isbn"); + String isbn13 = book.getString("isbn13"); + String publisher = book.getString("publisher"); + int publisheryear = book.getInt("publishyear"); + boolean checkedout = book.getBoolean("checkedout"); + int checkedoutby = book.getInt("checkedoutby"); + int checkoutdateyear = book.getInt("checkoutdateyear"); + int checkoutdatemonth = book.getInt("checkoutdatemonth"); + int checkoutdateday = book.getInt("checkoutdateday"); + int duedateyear = book.getInt("duedateyear"); + int duedatemonth = book.getInt("duedatemonth"); + int duedateday = book.getInt("duedateday"); + Book newBook = new Book(id, title, author, isbn, isbn13, publisher, publisheryear, checkedout, checkedoutby, checkoutdateyear, checkoutdatemonth, checkoutdateday, duedateyear, duedatemonth, duedateday); + helper.insertBook(newBook); + } + } catch (JSONException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/main/java/nyc/c4q/DBAsyncTask2.java b/src/main/java/nyc/c4q/DBAsyncTask2.java new file mode 100644 index 0000000..0a78f70 --- /dev/null +++ b/src/main/java/nyc/c4q/DBAsyncTask2.java @@ -0,0 +1,36 @@ +package nyc.c4q; + +import android.content.Context; +import android.os.AsyncTask; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +public class DBAsyncTask2 extends AsyncTask { + + public Context context; + + @Override + protected Void doInBackground(String... strings) { + LibraryDBHelper helper = new LibraryDBHelper(context); + try { + JSONArray members = new JSONArray(strings[0]); + for (int i = 0; i < members.length(); i++) { + JSONObject member = members.getJSONObject(i); + int id = member.getInt("id"); + String name = member.getString("name"); + int dob_month = member.getInt("dob_month"); + int dob_day = member.getInt("dob_day"); + int dob_year = member.getInt("dob_year"); + String city = member.getString("city"); + String state = member.getString("state"); + Member newMember = new Member(id, name, dob_month, dob_day, dob_year, city, state); + helper.insertMember(newMember); + } + } catch (JSONException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/main/java/nyc/c4q/LibraryActivity.java b/src/main/java/nyc/c4q/LibraryActivity.java index ca2a050..056c87a 100644 --- a/src/main/java/nyc/c4q/LibraryActivity.java +++ b/src/main/java/nyc/c4q/LibraryActivity.java @@ -1,27 +1,69 @@ package nyc.c4q; import android.app.Activity; +import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.EditText; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Calendar; + public class LibraryActivity extends Activity { public EditText inputParameter; + LibraryDBHelper helper; + + DBAsyncTask1 dbAsyncTask1; + DBAsyncTask2 dbAsyncTask2; + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_library); inputParameter = (EditText) findViewById(R.id.input_parameter); + + helper = new LibraryDBHelper(this); + + dbAsyncTask1 = new DBAsyncTask1(); + dbAsyncTask2 = new DBAsyncTask2(); + + dbAsyncTask1.execute(getRawJSON(this, R.raw.books)); + dbAsyncTask2.execute(getRawJSON(this, R.raw.members)); + } + + public String getRawJSON (Context context, int jsonResource) { + InputStream is = context.getResources().openRawResource(jsonResource); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + StringBuilder sb = new StringBuilder(); + String rawJSON; + while (true) { + try { + rawJSON = reader.readLine(); + if (rawJSON == null) { + break; + } + sb.append(rawJSON + "\n"); + } catch (IOException e) { + e.printStackTrace(); + } + } + String jsonString = sb.toString(); + return jsonString; } public void checkOut(int memberId, int bookId) { // TODO This method is called when the member with the given ID checks // out the book with the given ID. Update the system accordingly. // The due date for the book is two weeks from today. + helper.checkOut(memberId, bookId); } public boolean checkIn(int memberId, int bookId) { @@ -29,7 +71,7 @@ public boolean checkIn(int memberId, int bookId) { // the book with the given ID. Update the system accordingly. If // the member is returning the book on time, return true. If it's // late, return false. - + helper.checkIn(memberId, bookId); return false; } @@ -37,12 +79,14 @@ public void button_getMember_onClick(View view) { String name = inputParameter.getText().toString(); // TODO Display member information for the member with the given name. + helper.getMemberInfo(name); } public void button_getBook_onClick(View view) { String isbn = inputParameter.getText().toString(); // TODO Display book information for the book with the given ISBN. + helper.getBookInfo(isbn); } public void button_getCheckedOut_onClick(View view) { diff --git a/src/main/java/nyc/c4q/LibraryDBHelper.java b/src/main/java/nyc/c4q/LibraryDBHelper.java new file mode 100644 index 0000000..e248fc7 --- /dev/null +++ b/src/main/java/nyc/c4q/LibraryDBHelper.java @@ -0,0 +1,159 @@ +package nyc.c4q; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import java.util.Calendar; + +public class LibraryDBHelper extends SQLiteOpenHelper { + + private static final String DATABASE_NAME = "library.db"; + private static final int DATABASE_VERSION = 1; + + public LibraryDBHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase sqLiteDatabase) { + sqLiteDatabase.execSQL(BookContract.SQL_CREATE_ENTRIES); + sqLiteDatabase.execSQL(MemberContract.SQL_CREATE_ENTRIES); + } + + @Override + public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) { + sqLiteDatabase.execSQL(BookContract.SQL_DELETE_ENTRIES); + sqLiteDatabase.execSQL(MemberContract.SQL_DELETE_ENTRIES); + onCreate(sqLiteDatabase); + } + + public void insertBook(Book book) { + SQLiteDatabase db = getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put(BookContract.BookEntry.COLUMN_ID, book.getId()); + values.put(BookContract.BookEntry.COLUMN_TITLE, book.getTitle()); + values.put(BookContract.BookEntry.COLUMN_AUTHOR, book.getAuthor()); + values.put(BookContract.BookEntry.COLUMN_ISBN, book.getIsbn()); + values.put(BookContract.BookEntry.COLUMN_ISBN13, book.getIsbn13()); + values.put(BookContract.BookEntry.COLUMN_PUBLISHER, book.getPublisher()); + values.put(BookContract.BookEntry.COLUMN_PUBLISHYEAR, book.getPublishyear()); + values.put(BookContract.BookEntry.COLUMN_CHECKEDOUT, book.getCheckedout()); + values.put(BookContract.BookEntry.COLUMN_CHECKEDOUTBY, book.getCheckedoutby()); + values.put(BookContract.BookEntry.COLUMN_CHECKOUTDATEYEAR, book.getCheckoutdateyear()); + values.put(BookContract.BookEntry.COLUMN_CHECKOUTDATEMONTH, book.getCheckoutdatemonth()); + values.put(BookContract.BookEntry.COLUMN_CHECKOUTDATEDAY, book.getCheckoutdateday()); + values.put(BookContract.BookEntry.COLUMN_DUEDATEYEAR, book.getDuedateyear()); + values.put(BookContract.BookEntry.COLUMN_DUEDATEMONTH, book.getDuedatemonth()); + values.put(BookContract.BookEntry.COLUMN_DUEDATEDAY, book.getDuedateday()); + db.insert(BookContract.BookEntry.TABLE_NAME, null, values); + db.close(); + } + + public void insertMember(Member member) { + SQLiteDatabase db = getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put(MemberContract.MemberEntry.COLUMN_ID, member.getId()); + values.put(MemberContract.MemberEntry.COLUMN_NAME, member.getName()); + values.put(MemberContract.MemberEntry.COLUMN_DOBMONTH, member.getDob_month()); + values.put(MemberContract.MemberEntry.COLUMN_DOBDAY, member.getDob_day()); + values.put(MemberContract.MemberEntry.COLUMN_DOBYEAR, member.getDob_year()); + values.put(MemberContract.MemberEntry.COLUMN_CITY, member.getCity()); + values.put(MemberContract.MemberEntry.COLUMN_STATE, member.getState()); + db.insert(MemberContract.MemberEntry.TABLE_NAME, null, values); + db.close(); + } + + public void checkOut(int memberId, int bookId) { + SQLiteDatabase db = getWritableDatabase(); + ContentValues values = new ContentValues(); + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DAY_OF_MONTH); + calendar.add(Calendar.DAY_OF_MONTH, 14); + int yearDue = calendar.get(Calendar.YEAR); + int monthDue = calendar.get(Calendar.MONTH); + int dayDue = calendar.get(Calendar.DAY_OF_MONTH); + values.put(BookContract.BookEntry.COLUMN_CHECKEDOUT, true); + values.put(BookContract.BookEntry.COLUMN_CHECKEDOUTBY, memberId); + values.put(BookContract.BookEntry.COLUMN_CHECKOUTDATEYEAR, year); + values.put(BookContract.BookEntry.COLUMN_CHECKOUTDATEMONTH, month); + values.put(BookContract.BookEntry.COLUMN_CHECKOUTDATEDAY, day); + values.put(BookContract.BookEntry.COLUMN_DUEDATEYEAR, yearDue); + values.put(BookContract.BookEntry.COLUMN_DUEDATEMONTH, monthDue); + values.put(BookContract.BookEntry.COLUMN_DUEDATEDAY, dayDue); + db.update(BookContract.BookEntry.TABLE_NAME, values, BookContract.BookEntry.COLUMN_ID + " = ?", new String[]{String.valueOf(bookId)}); + } + + public boolean checkIn(int memberId, int bookId) { + SQLiteDatabase db = getWritableDatabase(); + + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DAY_OF_MONTH); + + //query db for overdue status comparing with calendar instance + + ContentValues values = new ContentValues(); + values.put(BookContract.BookEntry.COLUMN_CHECKEDOUT, false); + values.put(BookContract.BookEntry.COLUMN_CHECKEDOUTBY, 0); + values.put(BookContract.BookEntry.COLUMN_CHECKOUTDATEYEAR, 0); + values.put(BookContract.BookEntry.COLUMN_CHECKOUTDATEMONTH, 0); + values.put(BookContract.BookEntry.COLUMN_CHECKOUTDATEDAY, 0); + values.put(BookContract.BookEntry.COLUMN_DUEDATEYEAR, 0); + values.put(BookContract.BookEntry.COLUMN_DUEDATEMONTH, 0); + values.put(BookContract.BookEntry.COLUMN_DUEDATEDAY, 0); + db.update(BookContract.BookEntry.TABLE_NAME, values, BookContract.BookEntry.COLUMN_ID + " = ?", new String[]{String.valueOf(bookId)}); + return false; + } + + public String getMemberInfo(String name) { + SQLiteDatabase db = getReadableDatabase(); + Cursor cursor = db.query(MemberContract.MemberEntry.TABLE_NAME, new String[]{ + MemberContract.MemberEntry.COLUMN_ID, + MemberContract.MemberEntry.COLUMN_NAME, + MemberContract.MemberEntry.COLUMN_DOBMONTH, + MemberContract.MemberEntry.COLUMN_DOBDAY, + MemberContract.MemberEntry.COLUMN_DOBYEAR, + MemberContract.MemberEntry.COLUMN_CITY, + MemberContract.MemberEntry.COLUMN_STATE}, MemberContract.MemberEntry.COLUMN_NAME + " = ?", new String[]{ + name}, null, null, null, null); + if (cursor != null) { + cursor.moveToFirst(); + } + Member searchedMember = new Member(cursor.getInt(0), cursor.getString(1), cursor.getInt(2), cursor.getInt(3), cursor.getInt(4), + cursor.getString(5), cursor.getString(6)); + return searchedMember.toString(); + } + + public String getBookInfo(String isbn) { + SQLiteDatabase db = getReadableDatabase(); + Cursor cursor = db.query(BookContract.BookEntry.TABLE_NAME, new String[]{ + BookContract.BookEntry.COLUMN_ID, + BookContract.BookEntry.COLUMN_TITLE, + BookContract.BookEntry.COLUMN_AUTHOR, + BookContract.BookEntry.COLUMN_ISBN, + BookContract.BookEntry.COLUMN_ISBN13, + BookContract.BookEntry.COLUMN_PUBLISHER, + BookContract.BookEntry.COLUMN_PUBLISHYEAR, + BookContract.BookEntry.COLUMN_CHECKEDOUT, + BookContract.BookEntry.COLUMN_CHECKEDOUTBY, + BookContract.BookEntry.COLUMN_CHECKOUTDATEYEAR, + BookContract.BookEntry.COLUMN_CHECKOUTDATEMONTH, + BookContract.BookEntry.COLUMN_CHECKOUTDATEDAY, + BookContract.BookEntry.COLUMN_DUEDATEYEAR, + BookContract.BookEntry.COLUMN_DUEDATEMONTH, + BookContract.BookEntry.COLUMN_DUEDATEDAY}, BookContract.BookEntry.COLUMN_ISBN + " = ?", new String[]{ + isbn}, null, null, null, null); + if (cursor != null) { + cursor.moveToFirst(); + } + Book searchedBook = new Book(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), + cursor.getString(5), cursor.getInt(6)); + return searchedBook.toString(); + } +} diff --git a/src/main/java/nyc/c4q/ListActivity.java b/src/main/java/nyc/c4q/ListActivity.java index 08894ac..01859a2 100644 --- a/src/main/java/nyc/c4q/ListActivity.java +++ b/src/main/java/nyc/c4q/ListActivity.java @@ -4,42 +4,47 @@ import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; +import android.view.View; +import android.widget.Button; import android.widget.ListView; +import java.util.Comparator; + public class ListActivity extends Activity { public ListView list; + Button button_name, button_color; public static final Person[] PEOPLE = { - new Person("Hannah", "Abbott", House.Hufflepuff), - new Person("Katie", "Bell", House.Gryffindor), - new Person("Susan", "Bones", House.Hufflepuff), - new Person("Terry", "Boot", House.Ravenclaw), - new Person("Lavender", "Brown", House.Gryffindor), - new Person("Cho", "Chang", House.Ravenclaw), - new Person("Michael", "Corner", House.Ravenclaw), - new Person("Colin", "Creevey", House.Gryffindor), - new Person("Marietta", "Edgecombe", House.Ravenclaw), - new Person("Justin", "Finch-Fletchley", House.Hufflepuff), - new Person("Seamus", "Finnigan", House.Gryffindor), - new Person("Anthony", "Goldstein", House.Ravenclaw), - new Person("Hermione", "Granger", House.Gryffindor), - new Person("Angelina", "Johnson", House.Gryffindor), - new Person("Lee", "Jordan", House.Gryffindor), - new Person("Neville", "Longbottom", House.Gryffindor), - new Person("Luna", "Lovegood", House.Ravenclaw), - new Person("Ernie", "Macmillan", House.Hufflepuff), - new Person("Parvati", "Patil", House.Gryffindor), - new Person("Padma", "Patil", House.Ravenclaw), - new Person("Harry", "Potter", House.Gryffindor), - new Person("Zacharias", "Smith", House.Hufflepuff), - new Person("Alicia", "Spinnet", House.Gryffindor), - new Person("Dean", "Thomas", House.Gryffindor), - new Person("Fred", "Weasley", House.Gryffindor), - new Person("George", "Weasley", House.Gryffindor), - new Person("Ginny", "Weasley", House.Gryffindor), - new Person("Ron", "Weasley", House.Gryffindor) + new Person("Hannah", "Abbott", House.Hufflepuff), + new Person("Katie", "Bell", House.Gryffindor), + new Person("Susan", "Bones", House.Hufflepuff), + new Person("Terry", "Boot", House.Ravenclaw), + new Person("Lavender", "Brown", House.Gryffindor), + new Person("Cho", "Chang", House.Ravenclaw), + new Person("Michael", "Corner", House.Ravenclaw), + new Person("Colin", "Creevey", House.Gryffindor), + new Person("Marietta", "Edgecombe", House.Ravenclaw), + new Person("Justin", "Finch-Fletchley", House.Hufflepuff), + new Person("Seamus", "Finnigan", House.Gryffindor), + new Person("Anthony", "Goldstein", House.Ravenclaw), + new Person("Hermione", "Granger", House.Gryffindor), + new Person("Angelina", "Johnson", House.Gryffindor), + new Person("Lee", "Jordan", House.Gryffindor), + new Person("Neville", "Longbottom", House.Gryffindor), + new Person("Luna", "Lovegood", House.Ravenclaw), + new Person("Ernie", "Macmillan", House.Hufflepuff), + new Person("Parvati", "Patil", House.Gryffindor), + new Person("Padma", "Patil", House.Ravenclaw), + new Person("Harry", "Potter", House.Gryffindor), + new Person("Zacharias", "Smith", House.Hufflepuff), + new Person("Alicia", "Spinnet", House.Gryffindor), + new Person("Dean", "Thomas", House.Gryffindor), + new Person("Fred", "Weasley", House.Gryffindor), + new Person("George", "Weasley", House.Gryffindor), + new Person("Ginny", "Weasley", House.Gryffindor), + new Person("Ron", "Weasley", House.Gryffindor) }; @Override @@ -48,6 +53,44 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_list); list = (ListView) findViewById(R.id.list); + button_name = (Button) findViewById(R.id.button_name); + button_color = (Button) findViewById(R.id.button_color); + + final PersonAdapter adapter = new PersonAdapter(this, PEOPLE); + list.setAdapter(adapter); + + button_name.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + int counter = 0; + if (counter % 2 == 0) { + adapter.sort(new Comparator() { + @Override + public int compare(Person person, Person person2) { + return person.lastName.compareTo(person2.lastName); + } + }); + counter++; + } else { + adapter.sort(new Comparator() { + @Override + public int compare(Person person, Person person2) { + return person.firstName.compareTo(person2.firstName); + } + }); + counter++; + } + adapter.notifyDataSetChanged(); + } + }); + + button_color.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + } + }); + } } diff --git a/src/main/java/nyc/c4q/Member.java b/src/main/java/nyc/c4q/Member.java new file mode 100644 index 0000000..d2f9b94 --- /dev/null +++ b/src/main/java/nyc/c4q/Member.java @@ -0,0 +1,83 @@ +package nyc.c4q; + +public class Member { + + private int id; + private String name; + private int dob_month; + private int dob_day; + private int dob_year; + private String city; + private String state; + + public Member(int id, String name, int dob_month, int dob_day, int dob_year, String city, String state) { + this.id = id; + this.name = name; + this.dob_month = dob_month; + this.dob_day = dob_day; + this.dob_year = dob_year; + this.city = city; + this.state = state; + } + + @Override + public String toString() { + return "id: " + this.id + "\n" + "name: " + this.name + "\n" + "dob: " + this.dob_month + "/" + this.dob_day + "/" + "/" + this.dob_year + "\n" + "location: " + this.city + ", " + this.state; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getDob_month() { + return dob_month; + } + + public void setDob_month(int dob_month) { + this.dob_month = dob_month; + } + + public int getDob_day() { + return dob_day; + } + + public void setDob_day(int dob_day) { + this.dob_day = dob_day; + } + + public int getDob_year() { + return dob_year; + } + + public void setDob_year(int dob_year) { + this.dob_year = dob_year; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } +} diff --git a/src/main/java/nyc/c4q/MemberContract.java b/src/main/java/nyc/c4q/MemberContract.java new file mode 100644 index 0000000..a262cea --- /dev/null +++ b/src/main/java/nyc/c4q/MemberContract.java @@ -0,0 +1,37 @@ +package nyc.c4q; + +import android.provider.BaseColumns; + +public class MemberContract { + + public static final String PRIMARY_KEY = " PRIMARY KEY"; + public static final String INT_TYPE = " INTEGER"; + public static final String TEXT_TYPE = " TEXT"; + public static final String COMMA_SEP = ","; + + public static final String SQL_CREATE_ENTRIES = + "CREATE TABLE " + MemberEntry.TABLE_NAME + + " (" + + MemberEntry.COLUMN_ID + INT_TYPE + PRIMARY_KEY + COMMA_SEP + + MemberEntry.COLUMN_NAME + TEXT_TYPE + COMMA_SEP + + MemberEntry.COLUMN_DOBMONTH + INT_TYPE + COMMA_SEP + + MemberEntry.COLUMN_DOBDAY + INT_TYPE + COMMA_SEP + + MemberEntry.COLUMN_DOBYEAR + INT_TYPE + COMMA_SEP + + MemberEntry.COLUMN_CITY + TEXT_TYPE + COMMA_SEP + + MemberEntry.COLUMN_STATE + TEXT_TYPE + COMMA_SEP + + ")"; + + public static final String SQL_DELETE_ENTRIES = + "DROP TABLE IF EXISTS " + MemberEntry.TABLE_NAME; + + public static abstract class MemberEntry implements BaseColumns { + public static final String TABLE_NAME = "MEMBERS"; + public static final String COLUMN_ID = "ID"; + public static final String COLUMN_NAME = "TITLE"; + public static final String COLUMN_DOBMONTH = "AUTHOR"; + public static final String COLUMN_DOBDAY = "ISBN"; + public static final String COLUMN_DOBYEAR = "ISBN13"; + public static final String COLUMN_CITY = "PUBLISHER"; + public static final String COLUMN_STATE = "PUBLISHYEAR"; + } +} diff --git a/src/main/java/nyc/c4q/PaceCalculatorActivity.java b/src/main/java/nyc/c4q/PaceCalculatorActivity.java index 5c0616e..196039a 100644 --- a/src/main/java/nyc/c4q/PaceCalculatorActivity.java +++ b/src/main/java/nyc/c4q/PaceCalculatorActivity.java @@ -1,7 +1,10 @@ package nyc.c4q; -import android.support.v4.app.FragmentActivity; import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; public class PaceCalculatorActivity extends FragmentActivity { @@ -9,6 +12,10 @@ public class PaceCalculatorActivity extends FragmentActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pace_calculator); - } + FragmentManager fm = getSupportFragmentManager(); + FragmentTransaction ft = fm.beginTransaction(); + Fragment fragment = new PaceCalculatorFragment(); + ft.add(R.id.container, fragment); + } } diff --git a/src/main/java/nyc/c4q/PaceCalculatorFragment.java b/src/main/java/nyc/c4q/PaceCalculatorFragment.java new file mode 100644 index 0000000..698dfad --- /dev/null +++ b/src/main/java/nyc/c4q/PaceCalculatorFragment.java @@ -0,0 +1,120 @@ +package nyc.c4q; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; + +public class PaceCalculatorFragment extends Fragment implements View.OnClickListener { + + private EditText input_distance, input_time_min, input_time_sec, input_pace_min, input_pace_sec; + private Button button_calculate; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_pace_calculator, container, false); + input_distance = (EditText) view.findViewById(R.id.input_distance); + input_time_min = (EditText) view.findViewById(R.id.input_time_min); + input_time_sec = (EditText) view.findViewById(R.id.input_time_sec); + input_pace_min = (EditText) view.findViewById(R.id.input_pace_min); + input_pace_sec = (EditText) view.findViewById(R.id.input_pace_sec); + button_calculate = (Button) view.findViewById(R.id.button_calculate); + button_calculate.setOnClickListener(this); + return view; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.button_calculate: + boolean distanceEmpty; + boolean timeMinEmpty; + boolean timeSecEmpty; + boolean paceMinEmpty; + boolean paceSecEmpty; + + String distance = input_distance.getText().toString(); + String time_min = input_time_min.getText().toString(); + String time_sec = input_time_sec.getText().toString(); + String pace_min = input_pace_min.getText().toString(); + String pace_sec = input_pace_sec.getText().toString(); + + int d; + int time; + int tm; + int ts; + int pace; + int pm; + int ps; + + if (distance.isEmpty()) { + distanceEmpty = true; + input_distance.setText("0"); + d = 0; + } else { + distanceEmpty = false; + d = Integer.parseInt(distance); + } + + if (time_min.isEmpty()) { + timeMinEmpty = true; + input_time_min.setText("0"); + tm = 0; + } else { + timeMinEmpty = false; + tm = Integer.parseInt(time_min); + } + + if (time_sec.isEmpty()) { + timeSecEmpty = true; + input_time_sec.setText("0"); + ts = 0; + } else { + timeSecEmpty = false; + ts = Integer.parseInt(time_sec); + } + + if (pace_min.isEmpty()) { + paceMinEmpty = true; + input_pace_min.setText("0"); + pm = 0; + } else { + paceMinEmpty = false; + pm = Integer.parseInt(pace_min); + } + + if (pace_sec.isEmpty()) { + paceSecEmpty = true; + input_pace_sec.setText("0"); + ps = 0; + } else { + paceSecEmpty = false; + ps = Integer.parseInt(pace_sec); + } + + time = (tm * 60) + ts; + pace = (pm * 60) + ps; + + if (distanceEmpty && (!timeMinEmpty || !timeSecEmpty) && (!paceMinEmpty || !paceSecEmpty)) { + //distance is empty but user input time and pace + input_distance.setText(time / pace); + } else if (!distanceEmpty && (timeMinEmpty || timeSecEmpty) && (!paceMinEmpty || !paceSecEmpty)) { + //time is empty but user input distance and pace + input_time_min.setText(d * pace); + } else if (!distanceEmpty && (!timeMinEmpty || !timeSecEmpty) && (paceMinEmpty || paceSecEmpty)) { + //pace is empty but user input distance and time + input_pace_min.setText(time / d); + } else { + //do nothing + } + } + } +} diff --git a/src/main/java/nyc/c4q/PersonAdapter.java b/src/main/java/nyc/c4q/PersonAdapter.java new file mode 100644 index 0000000..4785a8e --- /dev/null +++ b/src/main/java/nyc/c4q/PersonAdapter.java @@ -0,0 +1,63 @@ +package nyc.c4q; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +public class PersonAdapter extends ArrayAdapter { + + Context context; + private Person[] people; + private LayoutInflater li; + View view; + + public PersonAdapter(Context context, Person[] people) { + super(context, R.layout.listitem_member, people); + this.context = context; + this.people = people; + li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + PersonViewHolder personViewHolder; + + if (convertView == null) { + convertView = li.inflate(R.layout.listitem_member, parent, false); + personViewHolder = new PersonViewHolder(); + personViewHolder.text_house = (TextView) convertView.findViewById(R.id.text_house); + personViewHolder.text_name = (TextView) convertView.findViewById(R.id.text_name); + + convertView.setTag(personViewHolder); + convertView.setTag(R.id.text_house, personViewHolder.text_house); + convertView.setTag(R.id.text_name, personViewHolder.text_name); + } else { + personViewHolder = (PersonViewHolder) convertView.getTag(); + } + + Person person = people[position]; + + if (person.house == House.Gryffindor) { + convertView.setBackgroundColor(context.getResources().getColor(R.color.gryffindor_red)); + } else if (person.house == House.Ravenclaw) { + convertView.setBackgroundColor(context.getResources().getColor(R.color.ravenclaw_blue)); + } else if (person.house == House.Hufflepuff) { + convertView.setBackgroundColor(context.getResources().getColor(R.color.hufflepuff_yellow)); + } else if (person.house == House.Slytherin) { + convertView.setBackgroundColor(context.getResources().getColor(R.color.slytherin_green)); + } + + personViewHolder.text_house.setText(person.house.toString()); + personViewHolder.text_name.setText(person.lastName + ", " + person.firstName); + + return convertView; + } + + static class PersonViewHolder { + TextView text_house; + TextView text_name; + } +} diff --git a/src/main/res/layout/activity_pace_calculator.xml b/src/main/res/layout/activity_pace_calculator.xml index ed76b3e..cfc3437 100644 --- a/src/main/res/layout/activity_pace_calculator.xml +++ b/src/main/res/layout/activity_pace_calculator.xml @@ -1,8 +1,14 @@ - + tools:context="nyc.c4q.PaceCalculatorActivity"> + + + + diff --git a/src/main/res/raw/books.json b/src/main/res/raw/books.json index 8cc9673..79b378e 100644 --- a/src/main/res/raw/books.json +++ b/src/main/res/raw/books.json @@ -838,7 +838,7 @@ "isbn": "0439554934", "isbn13": "9780439554930", "publisher": "Scholastic", - "publishyear": 2003. + "publishyear": 2003, "checkedout": true, "checkedoutby": 38, "checkoutdateyear": 2015,