shlist

share and manage lists between multiple people
Log | Files | Refs

commit 5e2c06edef91a412a990d8f9a470e4210515d50b
parent e09f8471807937a9efaac6f1cdc0da1469923995
Author: David Engel <david@absentmindedproductions.ca>
Date:   Sun, 24 Jan 2016 21:31:59 -0700

android: Added classes for contacts and lists. Custom list adapters done for both.

Diffstat:
Aandroid/shlist/app/src/main/java/drsocto/shlist/Contact.java | 37+++++++++++++++++++++++++++++++++++++
Mandroid/shlist/app/src/main/java/drsocto/shlist/ContactsScreen.java | 75++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------
Mandroid/shlist/app/src/main/java/drsocto/shlist/HomeScreen.java | 115+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------
Aandroid/shlist/app/src/main/java/drsocto/shlist/Shlist.java | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mandroid/shlist/app/src/main/res/layout-land/list_row.xml | 15++-------------
Mandroid/shlist/app/src/main/res/layout-port/list_row.xml | 14++------------
6 files changed, 249 insertions(+), 62 deletions(-)

diff --git a/android/shlist/app/src/main/java/drsocto/shlist/Contact.java b/android/shlist/app/src/main/java/drsocto/shlist/Contact.java @@ -0,0 +1,37 @@ +package drsocto.shlist; + +/** + * Created by dreng on 1/24/2016. + */ +public class Contact { + private String number; + private String name; + private boolean selected = false; + + public Contact(String name, String number) { + this.number = number; + this.name = name; + } + + public Contact(String name, String number, boolean checked) { + this.name = name; + this.number = number; + this.selected = checked; + } + + public String getName() { + return name; + } + + public String getNumber() { + return number; + } + + public boolean getSelected() { + return selected; + } + + public void setSelected(boolean value) { + selected = value; + } +} diff --git a/android/shlist/app/src/main/java/drsocto/shlist/ContactsScreen.java b/android/shlist/app/src/main/java/drsocto/shlist/ContactsScreen.java @@ -19,6 +19,8 @@ import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class ContactsScreen extends ActionBarActivity { @@ -29,18 +31,35 @@ public class ContactsScreen extends ActionBarActivity { setContentView(R.layout.layout_contacts_screen); ArrayList<String> list = new ArrayList<String>(); + ArrayList<Boolean> list_bool = new ArrayList<Boolean>(); ListView lv = (ListView) findViewById(R.id.contactList); + ArrayList<Contact> contacts_list = new ArrayList<Contact>(); + Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); while (phones.moveToNext()) { - String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); + String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); - list.add(name + ": " + phoneNumber); + String pattern = "(\\d*)"; + Pattern r = Pattern.compile(pattern); + Matcher m = r.matcher(phoneNumber); + String out = ""; + while(m.find()) { + out += m.group(1); + } + if (out.length() == 11) { + out = out.substring(1); + } + Log.d("contacts", "Regex: " + out); + phoneNumber = out; + Contact contact = new Contact(name, phoneNumber); + contacts_list.add(contact); + list.add(name); } phones.close(); - ArrayAdapter<String> adapter = new MyCustomAdapter(this, R.layout.contact_row, list); + MyContactsListsAdapter adapter = new MyContactsListsAdapter(this, R.id.contactCheckBox, contacts_list, list); lv.setAdapter(adapter); } @@ -71,19 +90,23 @@ public class ContactsScreen extends ActionBarActivity { return super.onOptionsItemSelected(item); } - private class MyCustomAdapter extends ArrayAdapter<String> { + private class MyContactsListsAdapter extends ArrayAdapter<String> { - private ArrayList<String> taskList; + private ArrayList<Contact> contacts; - public MyCustomAdapter(Context context, int textViewResourceId, - ArrayList<String> taskList) { - super(context, textViewResourceId, taskList); - this.taskList = new ArrayList<String>(); - this.taskList.addAll(taskList); + public MyContactsListsAdapter(Context context, int textViewResourceId, + ArrayList<Contact> taskList, ArrayList<String> stringList) { + super(context, textViewResourceId, stringList); + contacts = taskList; } private class ViewHolder { - CheckBox cBox; + Contact shlist; + CheckBox name; + } + + public Contact getContact(int position) { + return contacts.get(position); } @Override @@ -97,25 +120,31 @@ public class ContactsScreen extends ActionBarActivity { convertView = inflater.inflate(R.layout.contact_row, null); viewHolder = new ViewHolder(); - viewHolder.cBox = (CheckBox) convertView.findViewById(R.id.contactCheckBox); + + convertView.setTag(viewHolder); - viewHolder.cBox.setOnClickListener( new View.OnClickListener() { - public void onClick(View v) { - CheckBox taskCB = (CheckBox) v; - if (taskCB.isChecked()) - Log.d("User Input: ", "Checked " + taskCB.getText()); - else - Log.d("User Input: ", "Un-Checked " + taskCB.getText()); - } - }); } else { viewHolder = (ViewHolder) convertView.getTag(); } - String task = taskList.get(position); - viewHolder.cBox.setText(task); + viewHolder.shlist = contacts.get(position); + viewHolder.name = (CheckBox) convertView.findViewById(R.id.contactCheckBox); + viewHolder.name.setText(viewHolder.shlist.getName()); + viewHolder.name.setChecked(viewHolder.shlist.getSelected()); + final Contact contact = viewHolder.shlist; + viewHolder.name.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.d("contacts", "Clicked: " + contact.getName() + ":" + contact.getNumber()); + if (contact.getSelected()) { + contact.setSelected(false); + } else { + contact.setSelected(true); + } + } + }); return convertView; diff --git a/android/shlist/app/src/main/java/drsocto/shlist/HomeScreen.java b/android/shlist/app/src/main/java/drsocto/shlist/HomeScreen.java @@ -22,6 +22,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; +import android.widget.CheckBox; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; @@ -31,6 +32,7 @@ import android.widget.Toast; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import org.w3c.dom.Text; import java.nio.ByteBuffer; import java.util.ArrayList; @@ -51,8 +53,9 @@ public class HomeScreen extends ActionBarActivity { private final String SERVER_ADDRESS = "104.236.186.39"; private final int SERVER_PORT = 5437; private final String dbName = "shlist.db"; - private ArrayList<String> list1; - private ArrayAdapter<String> adapter1; + private ArrayList<Shlist> list1; + private ArrayList<String> list1_str; + private MyInListsAdapter adapter1; private ArrayAdapter<String> adapter2; private ArrayList<String> list2; private long phoneNum; @@ -109,9 +112,10 @@ public class HomeScreen extends ActionBarActivity { } } - list1 = new ArrayList<String>(); + list1 = new ArrayList<Shlist>(); + list1_str = new ArrayList<String>(); - adapter1 = new ArrayAdapter<String>(this, R.layout.list_row, R.id.list_name, list1); + adapter1 = new MyInListsAdapter(this, R.layout.list_row, list1, list1_str); ListView lv1 = (ListView) findViewById(R.id.currentLists); registerForContextMenu(lv1); @@ -209,11 +213,10 @@ public class HomeScreen extends ActionBarActivity { case R.id.leave_list: int position = (int) info.id; joinLeavePosition = position; - String list_entry = adapter1.getItem(position); + Shlist list_entry = adapter1.getShlist(position); + int num = list_entry.getNum(); Log.d("main", "Tried to leave list: " + list_entry); - String list_entry_split[] = list_entry.split(":"); JSONObject obj = new JSONObject(); - int num = Integer.parseInt(list_entry_split[1]); try { obj.put("device_id", "" + id); obj.put("list_num", num); @@ -270,8 +273,7 @@ public class HomeScreen extends ActionBarActivity { dbHelper.closeDB(); try { JSONObject list_obj = new JSONObject(); - list_obj.put("num", 0); - list_obj.put("name", name); + list_obj.put("name", name.trim()); list_obj.put("date", System.currentTimeMillis() / 1000L); JSONObject main_obj = new JSONObject(); main_obj.put("device_id", device_id); @@ -341,7 +343,7 @@ public class HomeScreen extends ActionBarActivity { @Override protected void onPostExecute(String result) { Log.d("NetMan", "Join List End"); - list1.add(joinLeaveMessage); + //list1.add(joinLeaveMessage); list2.remove(joinLeavePosition); adapter1.notifyDataSetChanged(); adapter2.notifyDataSetChanged(); @@ -360,6 +362,7 @@ public class HomeScreen extends ActionBarActivity { @Override protected void onPostExecute(String result) { list1.remove(joinLeavePosition); + list1_str.remove(joinLeavePosition); adapter1.notifyDataSetChanged(); adapter2.notifyDataSetChanged(); cListsTV.setText("Current Lists (" + list1.size() + ")"); @@ -380,9 +383,17 @@ public class HomeScreen extends ActionBarActivity { JSONObject main_obj = new JSONObject(result); int num = main_obj.getInt("num_lists"); JSONArray lists_arr = main_obj.getJSONArray("lists"); + Shlist temp_shlist; + JSONObject temp_json; + int temp_items[] = new int[2]; for (int i = 0; i < num; ++i) { - list1.add(lists_arr.getJSONObject(i).getString("name") + ":" + lists_arr.getJSONObject(i).getString("num")); + temp_json = lists_arr.getJSONObject(i); + temp_items[0] = temp_json.getInt("items_complete"); + temp_items[1] = temp_json.getInt("items_total"); + temp_shlist = new Shlist(temp_json.getInt("num"), temp_json.getString("name"), temp_items, new String[1], 22); + list1.add(temp_shlist); + list1_str.add(temp_shlist.getName()); } cListsTV.setText("Current Lists (" + list1.size() + ")"); @@ -393,6 +404,19 @@ public class HomeScreen extends ActionBarActivity { } } + public class sendFriendAddMessage extends AsyncTask<String, Void, String> { + @Override + protected String doInBackground(String... urls) { + String result = nm.sendMessage(urls); + return result; + } + + @Override + protected void onPostExecute(String result) { + + } + } + public class sendNewListMessageTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { @@ -404,12 +428,21 @@ public class HomeScreen extends ActionBarActivity { try { JSONObject main_obj = new JSONObject(result); JSONObject list_obj = main_obj.getJSONObject("list"); - String list_num = list_obj.getString("num"); + int list_num = list_obj.getInt("num"); + String list_num_str = list_obj.getString("num"); String list_name = list_obj.getString("name"); + int date = list_obj.getInt("date"); + int items[] = new int[2]; + items[0] = list_obj.getInt("items_complete"); + items[1] = list_obj.getInt("items_total"); + int num_members = list_obj.getInt("num_members"); + String[] members = new String[0]; + Shlist shlist = new Shlist(list_num, list_name, date); dbHelper.openOrCreateDB(); - dbHelper.addList(list_num, list_name); + dbHelper.addList(list_num_str, list_name); dbHelper.closeDB(); - list1.add(list_name + ":" + list_num); + list1.add(shlist); + list1_str.add(shlist.getName()); cListsTV.setText("Current Lists (" + list1.size() + ")"); adapter1.notifyDataSetChanged(); } catch (JSONException e) { @@ -417,4 +450,58 @@ public class HomeScreen extends ActionBarActivity { } } } + + private class MyInListsAdapter extends ArrayAdapter<String> { + + private ArrayList<Shlist> ourLists; + + public MyInListsAdapter(Context context, int textViewResourceId, + ArrayList<Shlist> taskList, ArrayList<String> stringList) { + super(context, textViewResourceId, stringList); + ourLists = taskList; + } + + private class ViewHolder { + Shlist shlist; + TextView name; + TextView completion; + TextView friends; + } + + public Shlist getShlist(int position) { + return ourLists.get(position); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + + ViewHolder viewHolder = null; + Log.v("ConvertView", String.valueOf(position)); + + if (convertView == null) { + LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); + convertView = inflater.inflate(R.layout.list_row, null); + + viewHolder = new ViewHolder(); + viewHolder.name = (TextView) convertView.findViewById(R.id.list_name); + viewHolder.completion = (TextView) convertView.findViewById(R.id.list_completion); + viewHolder.friends = (TextView) convertView.findViewById(R.id.friends_list); + + convertView.setTag(viewHolder); + + } + else { + viewHolder = (ViewHolder) convertView.getTag(); + } + + viewHolder.shlist = ourLists.get(position); + viewHolder.name.setText(viewHolder.shlist.getName()); + viewHolder.completion.setText(viewHolder.shlist.getComplete() + "/" + viewHolder.shlist.getTotal()); + viewHolder.friends.setText("Kyle Muthafuckin Milz"); + + return convertView; + + } + + } } diff --git a/android/shlist/app/src/main/java/drsocto/shlist/Shlist.java b/android/shlist/app/src/main/java/drsocto/shlist/Shlist.java @@ -0,0 +1,55 @@ +package drsocto.shlist; + +/** + * Created by dreng on 1/24/2016. + */ +public class Shlist { + + private int num; + private String name; + private int[] items = new int[2]; + + private String[] member_list; + private int members; + + private int date; + + + // Constructors + + // New List + public Shlist(int num, String name, int date) { + this.num = num; + this.name = name; + this.date = date; + this.items[0] = 0; + this.items[1] = 0; + this.members = 1; + } + + // Existing List + public Shlist(int num, String name, int[] items, String[] member_list, int date) { + this.num = num; + this.name = name; + this.items = items; + this.member_list = member_list; + this.date = date; + this.members = member_list.length; + } + + public String getName() { + return name; + } + + public int getNum() { + return num; + } + + public int getComplete() { + return items[0]; + } + + public int getTotal() { + return items[1]; + } +} diff --git a/android/shlist/app/src/main/res/layout-land/list_row.xml b/android/shlist/app/src/main/res/layout-land/list_row.xml @@ -22,7 +22,7 @@ android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="(3/9)" - android:id="@+id/textView2" + android:id="@+id/list_completion" android:layout_alignParentRight="true" android:layout_alignBottom="@id/list_name" android:layout_alignParentBottom="false" @@ -33,21 +33,10 @@ android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Friends: David, Greg, Kyle" - android:id="@+id/textView" + android:id="@+id/friends_list" android:layout_alignParentTop="false" android:layout_alignParentLeft="true" android:layout_alignParentStart="false" android:layout_alignParentBottom="true" android:layout_below="@+id/list_name" /> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textAppearance="?android:attr/textAppearanceSmall" - android:text="In 12 months" - android:id="@+id/textView3" - android:layout_alignParentBottom="true" - android:layout_alignParentRight="true" - android:layout_below="@+id/textView2" - android:textColor="#ffff0030" /> </RelativeLayout> diff --git a/android/shlist/app/src/main/res/layout-port/list_row.xml b/android/shlist/app/src/main/res/layout-port/list_row.xml @@ -22,7 +22,7 @@ android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="(3/9)" - android:id="@+id/textView2" + android:id="@+id/list_completion" android:layout_alignParentRight="true" android:layout_alignBottom="@id/list_name" android:layout_alignParentBottom="false" @@ -33,21 +33,11 @@ android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Friends: David, Greg, Kyle" - android:id="@+id/textView" + android:id="@+id/friends_list" android:layout_alignParentTop="false" android:layout_alignParentLeft="true" android:layout_alignParentStart="false" android:layout_alignParentBottom="true" android:layout_below="@+id/list_name" /> - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textAppearance="?android:attr/textAppearanceSmall" - android:text="In 12 months" - android:id="@+id/textView3" - android:layout_alignParentBottom="true" - android:layout_alignParentRight="true" - android:layout_below="@+id/textView2" - android:textColor="#ffffb11a" /> </RelativeLayout>