Advertisement
Guest User

MessagingActivity.java

a guest
Jul 13th, 2015
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.23 KB | None | 0 0
  1. import android.app.Activity;
  2. import android.content.ComponentName;
  3. import android.content.Intent;
  4. import android.content.ServiceConnection;
  5. import android.os.Bundle;
  6. import android.os.IBinder;
  7. import android.view.View;
  8. import android.widget.EditText;
  9. import android.widget.ListView;
  10. import android.widget.Toast;
  11.  
  12. import com.parse.FindCallback;
  13. import com.parse.ParseObject;
  14. import com.parse.ParseQuery;
  15. import com.parse.ParseUser;
  16. import com.sinch.android.rtc.PushPair;
  17. import com.sinch.android.rtc.messaging.Message;
  18. import com.sinch.android.rtc.messaging.MessageClient;
  19. import com.sinch.android.rtc.messaging.MessageClientListener;
  20. import com.sinch.android.rtc.messaging.MessageDeliveryInfo;
  21. import com.sinch.android.rtc.messaging.MessageFailureInfo;
  22. import com.sinch.android.rtc.messaging.WritableMessage;
  23.  
  24. import java.util.Arrays;
  25. import java.util.List;
  26.  
  27. public class MessagingActivity extends Activity {
  28.  
  29. // private String recipientId;
  30. private String other;
  31. private EditText messageBodyField;
  32. private String messageBody;
  33. private MessageService.MessageServiceInterface messageService;
  34. private MessageAdapter messageAdapter;
  35. private ListView messagesList;
  36. private String currentUserId;
  37. private String currentUserName;
  38. // private String otherUserName;
  39. private ServiceConnection serviceConnection = new MyServiceConnection();
  40. private MessageClientListener messageClientListener = new MyMessageClientListener();
  41.  
  42. @Override
  43. protected void onCreate(Bundle savedInstanceState) {
  44. super.onCreate(savedInstanceState);
  45. setContentView(R.layout.messaging);
  46.  
  47. bindService(new Intent(this, MessageService.class), serviceConnection, BIND_AUTO_CREATE);
  48.  
  49. Intent intent = getIntent();
  50. // recipientId = intent.getStringExtra("RECIPIENT_ID");
  51. other = intent.getStringExtra("OTHER");
  52.  
  53. currentUserId = ParseUser.getCurrentUser().getObjectId();
  54. currentUserName = ParseUser.getCurrentUser().getUsername();
  55.  
  56. messagesList = (ListView) findViewById(R.id.listMessages);
  57. messageAdapter = new MessageAdapter(this);
  58. messagesList.setAdapter(messageAdapter);
  59. populateMessageHistory();
  60.  
  61. messageBodyField = (EditText) findViewById(R.id.messageBodyField);
  62.  
  63. findViewById(R.id.sendButton).setOnClickListener(new View.OnClickListener() {
  64. @Override
  65. public void onClick(View view) {
  66. sendMessage();
  67. }
  68. });
  69. }
  70.  
  71. // get previous messages from parse & display
  72. private void populateMessageHistory() {
  73. String[] userIds = {currentUserId, other};
  74. // String[] userNames = {currentUserName, other};
  75. // ParseQuery<ParseObject> query = ParseQuery.getQuery("ParseMessage");
  76. ParseQuery<ParseObject> query = ParseQuery.getQuery("Messages");
  77. // query.whereContainedIn("senderId", Arrays.asList(userIds));
  78. // query.whereContainedIn("recipientId", Arrays.asList(userIds));
  79. query.whereContainedIn("sender", Arrays.asList(userIds));
  80. query.whereContainedIn("other", Arrays.asList(userIds));
  81. query.orderByAscending("createdAt");
  82. query.findInBackground(new FindCallback<ParseObject>() {
  83. @Override
  84. public void done(List<ParseObject> messageList, com.parse.ParseException e) {
  85. if (e == null) {
  86. for (int i = 0; i < messageList.size(); i++) {
  87. WritableMessage message = new WritableMessage(messageList.get(i).get("other").toString(), messageList.get(i).get("message").toString());
  88. // WritableMessage message = new WritableMessage(messageList.get(i).get("recipientId").toString(), messageList.get(i).get("messageText").toString());
  89. // if (messageList.get(i).get("senderId").toString().equals(currentUserId)) {
  90. if (messageList.get(i).get("sender").toString().equals(currentUserName)) {
  91. messageAdapter.addMessage(message, MessageAdapter.DIRECTION_OUTGOING);
  92. } else {
  93. messageAdapter.addMessage(message, MessageAdapter.DIRECTION_INCOMING);
  94. }
  95. }
  96. }
  97. }
  98. });
  99. }
  100.  
  101. private void sendMessage() {
  102. messageBody = messageBodyField.getText().toString();
  103. if (messageBody.isEmpty()) {
  104. Toast.makeText(this, "Please enter a message.", Toast.LENGTH_LONG).show();
  105. return;
  106. }
  107.  
  108. messageService.sendMessage(other, messageBody);
  109. messageBodyField.setText("");
  110. }
  111.  
  112. @Override
  113. public void onDestroy() {
  114. messageService.removeMessageClientListener(messageClientListener);
  115. unbindService(serviceConnection);
  116. super.onDestroy();
  117. }
  118.  
  119. private class MyServiceConnection implements ServiceConnection {
  120. @Override
  121. public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
  122. messageService = (MessageService.MessageServiceInterface) iBinder;
  123. messageService.addMessageClientListener(messageClientListener);
  124. }
  125.  
  126. @Override
  127. public void onServiceDisconnected(ComponentName componentName) {
  128. messageService = null;
  129. }
  130. }
  131.  
  132. private class MyMessageClientListener implements MessageClientListener {
  133. @Override
  134. public void onMessageFailed(MessageClient client, Message message,
  135. MessageFailureInfo failureInfo) {
  136. Toast.makeText(MessagingActivity.this, "Message failed to send.", Toast.LENGTH_LONG).show();
  137. }
  138.  
  139. @Override
  140. public void onIncomingMessage(MessageClient client, Message message) {
  141. if (message.getSenderId().equals(other)) {
  142. WritableMessage writableMessage = new WritableMessage(message.getRecipientIds().get(0), message.getTextBody());
  143. messageAdapter.addMessage(writableMessage, MessageAdapter.DIRECTION_INCOMING);
  144. }
  145. }
  146.  
  147. @Override
  148. public void onMessageSent(MessageClient client, Message message, String recipientId) {
  149.  
  150. final WritableMessage writableMessage = new WritableMessage(message.getRecipientIds().get(0), message.getTextBody());
  151.  
  152. // only add message to parse database if it doesn't already exist there
  153. // ParseQuery<ParseObject> query = ParseQuery.getQuery("ParseMessage");
  154. ParseQuery<ParseObject> query = ParseQuery.getQuery("Messages");
  155. query.whereEqualTo("sinchId", message.getMessageId());
  156. query.findInBackground(new FindCallback<ParseObject>() {
  157. @Override
  158. public void done(List<ParseObject> messageList, com.parse.ParseException e) {
  159. if (e == null) {
  160. if (messageList.size() == 0) {
  161. // ParseObject parseMessage = new ParseObject("ParseMessage");
  162. ParseObject parseMessage = new ParseObject("Messages");
  163. // parseMessage.put("senderId", currentUserId);
  164. // parseMessage.put("recipientId", writableMessage.getRecipientIds().get(0));
  165. // parseMessage.put("messageText", writableMessage.getTextBody());
  166. parseMessage.put("sender", currentUserName);
  167. parseMessage.put("other", writableMessage.getRecipientIds().get(0));
  168. parseMessage.put("message", writableMessage.getTextBody());
  169. parseMessage.put("sinchId", writableMessage.getMessageId());
  170. parseMessage.saveInBackground();
  171.  
  172. messageAdapter.addMessage(writableMessage, MessageAdapter.DIRECTION_OUTGOING);
  173. }
  174. }
  175. }
  176. });
  177. }
  178.  
  179. @Override
  180. public void onMessageDelivered(MessageClient client, MessageDeliveryInfo deliveryInfo) {}
  181.  
  182. @Override
  183. public void onShouldSendPushData(MessageClient client, Message message, List<PushPair> pushPairs) {}
  184. }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement