shlist

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

commit 3480da4016e70febe244d80e744b774828e573ac
parent bde0602d8c593d876296d4b64723ba6e03b031f8
Author: David Engel <drengel88@gmail.com>
Date:   Sun,  9 Aug 2015 15:19:22 -0600

android: Contact screen, get list of lists message

Diffstat:
Aandroid/shlist/.idea/inspectionProfiles/Project_Default.xml | 12++++++++++++
Aandroid/shlist/.idea/inspectionProfiles/profiles_settings.xml | 8++++++++
Mandroid/shlist/app/src/main/AndroidManifest.xml | 9++++++++-
Aandroid/shlist/app/src/main/java/drsocto/shlist/ContactsScreen.java | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mandroid/shlist/app/src/main/java/drsocto/shlist/HomeScreen.java | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
Mandroid/shlist/app/src/main/java/drsocto/shlist/NetMan.java | 30+++++++++++++++++++-----------
Mandroid/shlist/app/src/main/res/layout/add_list_prompt.xml | 7+++++++
Aandroid/shlist/app/src/main/res/layout/layout_contacts_screen.xml | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mandroid/shlist/app/src/main/res/layout/layout_home_screen.xml | 44++++++++++++++++++++++++++++++++++++++++----
Aandroid/shlist/app/src/main/res/menu/menu_contacts_screen.xml | 6++++++
Mandroid/shlist/app/src/main/res/menu/menu_home_screen.xml | 2++
Mandroid/shlist/app/src/main/res/values/strings.xml | 1+
12 files changed, 305 insertions(+), 28 deletions(-)

diff --git a/android/shlist/.idea/inspectionProfiles/Project_Default.xml b/android/shlist/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,11 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0" is_locked="false"> + <option name="myName" value="Project Default" /> + <option name="myLocal" value="false" /> + <inspection_tool class="AndroidLintButtonStyle" enabled="false" level="WARNING" enabled_by_default="false" /> + <inspection_tool class="LoggerInitializedWithForeignClass" enabled="false" level="WARNING" enabled_by_default="false"> + <option name="loggerClassName" value="org.apache.log4j.Logger,org.slf4j.LoggerFactory,org.apache.commons.logging.LogFactory,java.util.logging.Logger" /> + <option name="loggerFactoryMethodName" value="getLogger,getLogger,getLog,getLogger" /> + </inspection_tool> + </profile> +</component> +\ No newline at end of file diff --git a/android/shlist/.idea/inspectionProfiles/profiles_settings.xml b/android/shlist/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ +<component name="InspectionProjectProfileManager"> + <settings> + <option name="PROJECT_PROFILE" value="Project Default" /> + <option name="USE_PROJECT_PROFILE" value="true" /> + <version value="1.0" /> + </settings> +</component> +\ No newline at end of file diff --git a/android/shlist/app/src/main/AndroidManifest.xml b/android/shlist/app/src/main/AndroidManifest.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="drsocto.shlist" > - <uses-permission android:name="android.permission.READ_PHONE_STATE"/> + + <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.READ_CONTACTS" /> + <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" @@ -17,6 +20,10 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> + <activity + android:name=".ContactsScreen" + android:label="@string/app_name"> + </activity> </application> </manifest> diff --git a/android/shlist/app/src/main/java/drsocto/shlist/ContactsScreen.java b/android/shlist/app/src/main/java/drsocto/shlist/ContactsScreen.java @@ -0,0 +1,66 @@ +package drsocto.shlist; + +import android.database.Cursor; +import android.provider.ContactsContract; +import android.support.v7.app.ActionBarActivity; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +import java.util.ArrayList; + + +public class ContactsScreen extends ActionBarActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.layout_contacts_screen); + + ArrayList<String> list = new ArrayList<String>(); + ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_row, R.id.r_text, list); + ListView lv = (ListView) findViewById(R.id.contactList); + + 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 phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); + list.add(name + ": " + phoneNumber); + + } + phones.close(); + + lv.setAdapter(adapter); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_contacts_screen, menu); + return true; + } + + public void listPage(View v) { + finish(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + + return super.onOptionsItemSelected(item); + } +} diff --git a/android/shlist/app/src/main/java/drsocto/shlist/HomeScreen.java b/android/shlist/app/src/main/java/drsocto/shlist/HomeScreen.java @@ -3,8 +3,11 @@ package drsocto.shlist; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; import android.graphics.Canvas; import android.os.AsyncTask; +import android.provider.ContactsContract; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.telephony.TelephonyManager; @@ -20,10 +23,14 @@ import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; +import android.widget.Toast; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; // TODO: How do we preserve the local db on uninstall? // We could just save device id for reinstalls and have @@ -33,10 +40,8 @@ public class HomeScreen extends ActionBarActivity { private final String DEBUG_TAG = "PIMPJUICE"; private final String SERVER_ADDRESS = "104.236.186.39"; - private final int SERVER_PORT = 5437; + private final int SERVER_PORT = 5438; private final String dbName = "shlist.db"; - private final int NEW_LIST_MESSAGE_TYPE= 1; - private final int NEW_DEVICE_MESSAGE_TYPE= 3; private ArrayList<String> list1; private ArrayAdapter<String> adapter1; private ArrayAdapter<String> adapter2; @@ -69,10 +74,16 @@ public class HomeScreen extends ActionBarActivity { dbHelper.closeDB(); if (id == null) { - new sendNewDeviceMessageTask().execute(mPhoneNumber, "new_device"); - } else { - TextView tv = (TextView) findViewById(R.id.deviceID); - tv.setText("Device ID (From Local): " + id + "\n" + " Phone Number: " + mPhoneNumber); + AsyncTask sndmt = new sendNewDeviceMessageTask().execute(mPhoneNumber, "new_device"); + try { + sndmt.get(1000, TimeUnit.MILLISECONDS); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } catch (TimeoutException e) { + e.printStackTrace(); + } } @@ -83,11 +94,14 @@ public class HomeScreen extends ActionBarActivity { ListView lv1 = (ListView) findViewById(R.id.currentLists); list2 = new ArrayList<String>(); + list2.add("Ain't that just the shlist"); list2.add("Tough shlist"); list2.add("shlist happens"); - list2.add("Well shlist..."); - list2.add("Well shlist..."); - list2.add("Well shlist..."); + list2.add("YOU WANNA START SOME shlist?"); + list2.add("awww shlist... I think I'm out"); + list2.add("gotta pad this shlist a bit more"); + list2.add("and we're done..."); + list2.add("... shlist"); adapter2 = new ArrayAdapter<String>(this, R.layout.list_row, R.id.r_text, list2); @@ -102,6 +116,10 @@ public class HomeScreen extends ActionBarActivity { lv1.setAdapter(adapter1); lv2.setAdapter(adapter2); + if (id != null) { + new sendGetListsMessageTask().execute(id, "get_lists"); + } + /* if device id doesn't exist get phone number @@ -142,6 +160,8 @@ public class HomeScreen extends ActionBarActivity { } else if (id == R.id.action_add) { Log.d(DEBUG_TAG, "ADD PLAN CLICKED"); addPlanDialog(); + } else if(id == R.id.delete_db) { + dbHelper.deleteDB(); } return super.onOptionsItemSelected(item); @@ -151,6 +171,11 @@ public class HomeScreen extends ActionBarActivity { dbHelper.deleteDB(); } + public void contactsPage(View v) { + Intent intent = new Intent(this, ContactsScreen.class); + startActivity(intent); + } + public void addList(String name) { dbHelper.openOrCreateDB(); String device_id = dbHelper.getDeviceID(); @@ -191,13 +216,35 @@ public class HomeScreen extends ActionBarActivity { public class sendNewDeviceMessageTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { + Log.d("NetMan", "New Device Start"); String result = nm.sendMessage(urls); return result; } @Override protected void onPostExecute(String result) { - TextView tv = (TextView) findViewById(R.id.deviceID); - tv.setText("Device ID (From Server): " + result + " Phone Number: " + phoneNum); + //TextView tv = (TextView) findViewById(R.id.deviceID); + //tv.setText("Device ID (From Server): " + result + " Phone Number: " + phoneNum); + Log.d("NetMan", "New Device End"); + } + } + + public class sendGetListsMessageTask extends AsyncTask<String, Void, String> { + @Override + protected String doInBackground(String... urls) { + Log.d("NetMan", "Get Lists Start"); + String result = nm.sendMessage(urls); + return result; + } + @Override + protected void onPostExecute(String result) { + Log.d("NetMan", "Get Lists Done"); + result = result.substring(4); + String[] lists = result.split("\0"); + for (int i = 0; i < lists.length; ++i) { + String[] deets = lists[i].split(":"); + list1.add(deets[0] + " - " + deets[1]); + } + adapter1.notifyDataSetChanged(); } } diff --git a/android/shlist/app/src/main/java/drsocto/shlist/NetMan.java b/android/shlist/app/src/main/java/drsocto/shlist/NetMan.java @@ -17,6 +17,9 @@ import java.net.UnknownHostException; * Created by David on 7/12/2015. */ public class NetMan { + private final int NEW_DEVICE_MESSAGE_TYPE= 0; + private final int NEW_LIST_MESSAGE_TYPE= 1; + private final int LIST_REQUEST_MESSAGE_TYPE=3; private String addr; private int port; Socket socket; @@ -55,6 +58,8 @@ public class NetMan { Log.d("NetMan", "In sendMessage"); int mTypeInt = lookupMessageType(message[1]); byte[] type = toByteArray(mTypeInt); + Log.d("NetMan", "Type is: " + mTypeInt); + Log.d("NetMan", "message is: " + message[0]); byte[] length = toByteArray(message[0].length()); //Log.d("HomeScreen", "Resulting type array is of size: " + type.length); //Log.d("HomeScreen", "Resulting length array is of size: " + type.length); @@ -62,21 +67,22 @@ public class NetMan { try { PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); socket.getOutputStream().write(type); - Log.d("NetMan", "Sent Message Type: 3"); socket.getOutputStream().write(length); - Log.d("NetMan", "Sent Message Type: " + message[0].length()); - Log.d("NetMan", "Sending Message: " + message[0]); out.print(message[0]); out.flush(); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String response = in.readLine(); - Log.d("NetMan", "Received Device ID: " + response); - DBHelper dbh = new DBHelper("shlist.db", context); - dbh.openOrCreateDB(); - dbh.setDeviceID(response, message[0]); - if (mTypeInt == 1) { + if (mTypeInt == NEW_DEVICE_MESSAGE_TYPE) { + Log.d("NetMan", "Received Device ID: " + response.substring(4)); + DBHelper dbh = new DBHelper("shlist.db", context); + dbh.openOrCreateDB(); + dbh.setDeviceID(response.substring(4), message[0]); + dbh.closeDB(); + } else if (mTypeInt == NEW_LIST_MESSAGE_TYPE) { String[] messageParts = message[0].split("\0"); - response = messageParts[1] + " - " + response; + response = messageParts[1] + " - " + response.substring(4); + } else if (mTypeInt == LIST_REQUEST_MESSAGE_TYPE) { + Log.d("NetMan", response.substring(4)); } return response; @@ -90,9 +96,11 @@ public class NetMan { public int lookupMessageType(String mTypeStr) { if (mTypeStr.equals("new_list")) { - return 1; + return NEW_LIST_MESSAGE_TYPE; } else if (mTypeStr.equals("new_device")) { - return 3; + return NEW_DEVICE_MESSAGE_TYPE; + } else if (mTypeStr.equals("get_lists")) { + return LIST_REQUEST_MESSAGE_TYPE; } return -1; } diff --git a/android/shlist/app/src/main/res/layout/add_list_prompt.xml b/android/shlist/app/src/main/res/layout/add_list_prompt.xml @@ -19,4 +19,11 @@ </EditText> + <DatePicker + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/datePicker" + android:layout_gravity="center_horizontal" + android:paddingTop="20sp"/> + </LinearLayout> \ No newline at end of file diff --git a/android/shlist/app/src/main/res/layout/layout_contacts_screen.xml b/android/shlist/app/src/main/res/layout/layout_contacts_screen.xml @@ -0,0 +1,76 @@ +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:id="@+id/contactScreenLayout" + android:orientation="vertical"> + + <!-- <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Foobar" + android:id="@+id/deviceID" + android:textAppearance="?android:attr/textAppearanceLarge" + android:background="@color/white" + android:textColor="@color/black" + android:paddingTop="10dp" + android:paddingBottom="10dp" + android:paddingLeft="5dp" + android:textSize="15sp"/>--> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Contacts" + android:id="@+id/currentListsTV" + android:textAppearance="?android:attr/textAppearanceLarge" + android:background="@color/black" + android:textColor="@color/white" + android:paddingTop="10dp" + android:paddingBottom="10dp" + android:paddingLeft="5dp" + android:textSize="15sp"/> + + + <ListView + android:id="@+id/contactList" + android:layout_width="fill_parent" + android:layout_height="275dp" + android:layout_weight="0.4"/> + + <!--<Button + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:onClick="removeDB" + android:text="Delete DB File"/>--> + <TableLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <TableRow + android:layout_width="fill_parent" + android:layout_height="fill_parent"> + + <Button + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Lists" + android:id="@+id/button" + android:layout_weight="0.5" + android:padding="0dp" + android:background="#ff353535" + android:textColor="#ffffffff" + android:onClick="listPage"/> + + <Button + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Contacts" + android:id="@+id/button2" + android:layout_weight="0.5" + android:padding="0dp" + android:layout_margin="0dp" + android:background="#ff000000" + android:textColor="#ffffffff" + /> + </TableRow> + </TableLayout> +</LinearLayout> +\ No newline at end of file diff --git a/android/shlist/app/src/main/res/layout/layout_home_screen.xml b/android/shlist/app/src/main/res/layout/layout_home_screen.xml @@ -4,7 +4,7 @@ android:id="@+id/homeScreenLayout" android:orientation="vertical"> - <TextView + <!-- <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Foobar" @@ -15,7 +15,7 @@ android:paddingTop="10dp" android:paddingBottom="10dp" android:paddingLeft="5dp" - android:textSize="15sp"/> + android:textSize="15sp"/>--> <TextView android:layout_width="match_parent" @@ -36,6 +36,11 @@ android:layout_height="275dp" android:layout_weight="0.4"/> + <TableLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="right"></TableLayout> + <TextView android:layout_width="match_parent" android:layout_height="wrap_content" @@ -55,9 +60,40 @@ android:layout_height="275dp" android:layout_weight="0.4"/> - <Button + <!--<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="removeDB" - android:text="Delete DB File"/> + android:text="Delete DB File"/>--> + <TableLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <TableRow + android:layout_width="fill_parent" + android:layout_height="fill_parent"> + + <Button + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Lists" + android:id="@+id/button" + android:layout_weight="0.5" + android:padding="0dp" + android:background="#ff000000" + android:textColor="#ffffffff" /> + + <Button + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Contacts" + android:id="@+id/button2" + android:layout_weight="0.5" + android:padding="0dp" + android:layout_margin="0dp" + android:background="#ff353535" + android:textColor="#ffffffff" + android:onClick="contactsPage"/> + </TableRow> + </TableLayout> </LinearLayout> \ No newline at end of file diff --git a/android/shlist/app/src/main/res/menu/menu_contacts_screen.xml b/android/shlist/app/src/main/res/menu/menu_contacts_screen.xml @@ -0,0 +1,6 @@ +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" tools:context="drsocto.shlist.ContactsScreen"> + <item android:id="@+id/action_settings" android:title="@string/action_settings" + android:orderInCategory="100" app:showAsAction="never" /> +</menu> diff --git a/android/shlist/app/src/main/res/menu/menu_home_screen.xml b/android/shlist/app/src/main/res/menu/menu_home_screen.xml @@ -4,6 +4,8 @@ <item android:id="@+id/action_add" android:title="+" app:showAsAction="always"/> + <item android:id="@+id/delete_db" android:title="Delete DB File" + app:showAsAction="never"/> <item android:id="@+id/action_settings" android:title="@string/action_settings" android:orderInCategory="100" app:showAsAction="never" /> diff --git a/android/shlist/app/src/main/res/values/strings.xml b/android/shlist/app/src/main/res/values/strings.xml @@ -3,4 +3,5 @@ <string name="debug_tag">PIMPJUICE</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> + <string name="title_activity_contacts_screen">ContactsScreen</string> </resources>