diff --git a/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/DatabaseHelper.java b/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/DatabaseHelper.java index a9c75c1d..a140f785 100644 --- a/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/DatabaseHelper.java +++ b/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/DatabaseHelper.java @@ -30,7 +30,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { // If you change the database schema, you must increment the database version. - public static final int DATABASE_VERSION = 15; + public static final int DATABASE_VERSION = 16; public static final String DATABASE_NAME = "Olympus.db"; private static final String TAG = "DatabaseHelper"; @@ -52,7 +52,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { DatabaseContract.MessageEntry.COLUMN_NAME_TEXT + " TEXT NOT NULL, " + DatabaseContract.MessageEntry.COLUMN_NAME_TYPE + " TEXT NOT NULL, " + DatabaseContract.MessageEntry.COLUMN_NAME_TIMESTAMP + " DATETIME DEFAULT CURRENT_TIMESTAMP, " + - DatabaseContract.MessageEntry.COLUMN_NAME_DELIVERY_STATUS + " INTEGER, " + + DatabaseContract.MessageEntry.COLUMN_NAME_DELIVERY_STATUS + " INTEGER DEFAULT 0, " + "FOREIGN KEY (" + DatabaseContract.MessageEntry.COLUMN_NAME_CONTACT_ID + ") REFERENCES " + DatabaseContract.ContactEntry.TABLE_NAME + "(" + DatabaseContract.ContactEntry._ID + ") " + " );"; diff --git a/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/DatabaseManager.java b/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/DatabaseManager.java index 3288f004..64287a15 100644 --- a/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/DatabaseManager.java +++ b/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/DatabaseManager.java @@ -340,7 +340,8 @@ public int removeContact(String name, String uri) // ---- Message table // Retrieve all messages for a contact ordered by timestamp - ArrayList> retrieveMessages(String contactName) + //ArrayList> retrieveMessages(String contactName) + Cursor retrieveMessages(String contactName) { if (databaseHelper == null) { throw new RuntimeException("Database hasn't been opened yet, please call open()"); @@ -361,6 +362,7 @@ ArrayList> retrieveMessages(String contactName) Log.i(TAG, "Query String: " + sqlQuery); Cursor cursor = db.rawQuery(sqlQuery, selectionArgs); + /* ArrayList> messageList = new ArrayList>(); // moveToFirst() fails if cursor is empty @@ -373,9 +375,12 @@ ArrayList> retrieveMessages(String contactName) cursor.getString(cursor.getColumnIndexOrThrow(DatabaseContract.MessageEntry.COLUMN_NAME_TEXT)))); } while (cursor.moveToNext()); } - cursor.close(); + */ + + return cursor; - return messageList; + //cursor.close(); + //return messageList; } public void addMessage(String contactName, String messageText, boolean isLocal) throws SQLException diff --git a/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/MessageFragment.java b/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/MessageFragment.java index daaeeb75..5dfb8f48 100644 --- a/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/MessageFragment.java +++ b/Examples/restcomm-olympus/app/src/main/java/org/restcomm/android/olympus/MessageFragment.java @@ -26,11 +26,19 @@ import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; +import android.database.Cursor; import android.os.Bundle; +import android.provider.ContactsContract; import android.support.v4.app.ListFragment; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.ContextCompat; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; +import android.support.v4.widget.SimpleCursorAdapter; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; +import android.widget.TextView; import org.restcomm.android.sdk.RCDevice; @@ -40,7 +48,7 @@ public class MessageFragment extends ListFragment { - private SimpleAdapter listViewAdapter; + private SimpleCursorAdapter listViewAdapter; private ArrayList> messageList; public static final String MESSAGE_CONTACT_KEY = "username"; public static final String MESSAGE_TEXT_KEY = "message-text"; @@ -101,15 +109,41 @@ public void onCreate(Bundle savedInstanceState) String contactName = args.getString("contact-name"); */ DatabaseManager.getInstance().open(getActivity().getApplicationContext()); - messageList = DatabaseManager.getInstance().retrieveMessages(contactName); + Cursor cursor = DatabaseManager.getInstance().retrieveMessages(contactName); //messageList = new ArrayList>(); - String[] from = {MESSAGE_CONTACT_KEY, MESSAGE_TEXT_KEY}; - int[] to = {R.id.message_username, R.id.message_text}; + String[] fromColumns = { DatabaseContract.ContactEntry.COLUMN_NAME_NAME, DatabaseContract.MessageEntry.COLUMN_NAME_TEXT, + DatabaseContract.MessageEntry.COLUMN_NAME_DELIVERY_STATUS }; + int[] toViews = { R.id.message_username, R.id.message_text, + R.id.message_status }; + + listViewAdapter = new SimpleCursorAdapter(getActivity().getApplicationContext(), R.layout.message_row_layout, cursor, + fromColumns, toViews, 0); + + // Use a binder for the delivery status column which doesn't map 1-on-1 with the view: status in the db is an integer, while in the view it's a string + listViewAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { + @Override + public boolean setViewValue(View view, Cursor cursor, int columnIndex) + { + if (cursor.getColumnName(columnIndex).equals(DatabaseContract.MessageEntry.COLUMN_NAME_DELIVERY_STATUS)) { + int deliveryStatus = cursor.getInt(columnIndex); + TextView deliveryStatusView = (TextView)view; + if (deliveryStatus == 0) { + deliveryStatusView.setText("Failed"); + deliveryStatusView.setTextColor(ContextCompat.getColor(getActivity(), R.color.colorError)); + } + else { + deliveryStatusView.setText("Success"); + deliveryStatusView.setTextColor(ContextCompat.getColor(getActivity(), R.color.colorTextSecondary)); + } + return true; + } + + return false; + } + }); - listViewAdapter = new SimpleAdapter(getActivity().getApplicationContext(), messageList, - R.layout.message_row_layout, from, to); setListAdapter(listViewAdapter); } @@ -204,12 +238,15 @@ private void setActivatedPosition(int position) // Called by Activity when when new message is sent public int addLocalMessage(String message, String username) { - HashMap item = new HashMap(); - item.put(MESSAGE_CONTACT_KEY, "Me"); - item.put(MESSAGE_TEXT_KEY, message); - messageList.add(item); + //HashMap item = new HashMap(); + //item.put(MESSAGE_CONTACT_KEY, "Me"); + //item.put(MESSAGE_TEXT_KEY, message); + //messageList.add(item); int countBeforeAddition = listViewAdapter.getCount(); DatabaseManager.getInstance().addMessage(username, message, true); + Cursor cursor = DatabaseManager.getInstance().retrieveMessages(username); + // update adapter cursor to use the new one with updated rows + this.listViewAdapter.changeCursor(cursor); this.listViewAdapter.notifyDataSetChanged(); getListView().setSelection(listViewAdapter.getCount() - 1); return countBeforeAddition; @@ -218,11 +255,14 @@ public int addLocalMessage(String message, String username) // Called by Activity when when new message is sent public void addRemoteMessage(String message, String username) { - HashMap item = new HashMap(); - item.put(MESSAGE_CONTACT_KEY, username); - item.put(MESSAGE_TEXT_KEY, message); - messageList.add(item); + //HashMap item = new HashMap(); + //item.put(MESSAGE_CONTACT_KEY, username); + //item.put(MESSAGE_TEXT_KEY, message); + //messageList.add(item); DatabaseManager.getInstance().addMessage(username, message, false); + Cursor cursor = DatabaseManager.getInstance().retrieveMessages(username); + // update adapter cursor to use the new one with updated rows + this.listViewAdapter.changeCursor(cursor); this.listViewAdapter.notifyDataSetChanged(); getListView().setSelection(listViewAdapter.getCount() - 1); } diff --git a/Examples/restcomm-olympus/app/src/main/res/layout/message_row_layout.xml b/Examples/restcomm-olympus/app/src/main/res/layout/message_row_layout.xml index 43b1ca11..e3ae36ce 100644 --- a/Examples/restcomm-olympus/app/src/main/res/layout/message_row_layout.xml +++ b/Examples/restcomm-olympus/app/src/main/res/layout/message_row_layout.xml @@ -23,7 +23,7 @@