Advertisement
Guest User

gg

a guest
May 25th, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 18.23 KB | None | 0 0
  1. package com.rsv.messio;
  2.  
  3. import android.app.Notification;
  4. import android.app.NotificationManager;
  5. import android.app.PendingIntent;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.content.SharedPreferences;
  9. import android.media.AudioManager;
  10. import android.media.RingtoneManager;
  11. import android.media.SoundPool;
  12. import android.net.Uri;
  13. import android.os.Bundle;
  14. import android.preference.PreferenceManager;
  15. import android.support.v7.app.AppCompatActivity;
  16. import android.text.TextUtils;
  17. import android.util.Log;
  18. import android.view.Menu;
  19. import android.view.MenuInflater;
  20. import android.view.MenuItem;
  21. import android.view.View;
  22. import android.widget.EditText;
  23. import android.widget.ImageButton;
  24. import android.widget.ListView;
  25. import android.widget.RelativeLayout;
  26. import android.widget.TextView;
  27.  
  28. import com.google.gson.Gson;
  29. import com.google.gson.GsonBuilder;
  30.  
  31. import org.json.JSONException;
  32. import org.json.JSONObject;
  33.  
  34. import java.io.DataInputStream;
  35. import java.io.DataOutputStream;
  36. import java.io.IOException;
  37. import java.io.ObjectInputStream;
  38. import java.io.ObjectOutputStream;
  39. import java.net.ServerSocket;
  40. import java.net.Socket;
  41. import java.text.DateFormat;
  42. import java.text.SimpleDateFormat;
  43. import java.util.ArrayList;
  44. import java.util.Date;
  45.  
  46. public class ChatActivity extends AppCompatActivity {
  47.  
  48.  
  49.  
  50.     private EditText messageET;
  51.     private static ListView messagesContainer;
  52.     private ImageButton sendBtn;
  53.     private ChatAdapter adapter;
  54.     private ArrayList<ChatMessage> chatHistory;
  55.     private ObjectInputStream objectInputStream;
  56.     private ObjectOutputStream objectOutputStream;
  57.     private final String AUTHKEYPREF = "BOOLEANAUTHKEY";
  58.     private final String USERNAME = "USERNAME";
  59.     private final String PASSWORD = "PASSWORD";
  60.     private final String CHATTAG = "CHAT_ACTIVITY_TAG";
  61.     public  String login;
  62.     private String token;
  63.     private String hash;
  64.     private Socket socket;
  65.     ServerSocket _socketServer;
  66.     private String server_address;
  67.     private int server_port;
  68.  
  69.     public static String newMessage;
  70.  
  71.     public void listenNewMessages()
  72.     {
  73.         /*
  74.         try {
  75.             while (true) {
  76.                 Thread.sleep(500);
  77.                 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
  78.                 RClient rClient = new RClient(server_address, server_port);
  79.                 MessioObject.GetMessageResponse response = rClient.getMessageFromHash(token,hash);
  80.                 if(response.isResult()&&response.getHash()!=hash)
  81.                 {
  82.                     ArrayList<RChecksum.Pair<String,String>> messagesList =
  83.                             response.getMessagesList();
  84.                     for(final RChecksum.Pair<String,String> pair : messagesList)
  85.                     {
  86.                         runOnUiThread(new Runnable() {
  87.                             @Override
  88.                             public void run() {
  89.                                 ChatMessage chatMessage = new ChatMessage();
  90.                                 chatMessage.setMessage(pair.getRight());
  91.                                 chatMessage.setMe(false);
  92.                                 displayMessage(chatMessage);
  93.                             }
  94.                         });
  95.  
  96.                     }
  97.  
  98.                 }
  99.                 SharedPreferences s = getSharedPreferences("rset",MODE_PRIVATE);
  100.                 SharedPreferences.Editor sh = s.edit();
  101.                 sh.putString("HASH",response.getHash());
  102.                 sh.commit();
  103.  
  104.             }
  105.         }
  106.         catch (InterruptedException ex)
  107.         {
  108.             ex.printStackTrace();
  109.         }
  110.         */
  111.         while (true)
  112.         {
  113.             try {
  114.                 Thread.sleep(10);
  115.                 Socket socket = _socketServer.accept();
  116.                 newMessage = new DataInputStream(socket.getInputStream()).readUTF();
  117.                 Log.d("MESSAGE", newMessage);
  118.  
  119.                 runOnUiThread(new Runnable() {
  120.                     @Override
  121.                     public void run() {
  122.                         try {
  123.                             JSONObject jsonObject = new JSONObject(newMessage);
  124.                             ChatMessage chatMessage = new ChatMessage();
  125.                             Log.d("MESSAGETEXT", "message received" + jsonObject.toString());
  126.                             String author = jsonObject.getString("author");
  127.                             String text = jsonObject.getString("message");
  128.                             chatMessage.setMessage(jsonObject.getString("message"));
  129.                             chatMessage.setMe(false);
  130.                             chatMessage.setDate(DateFormat.getDateTimeInstance().format(new Date()) + "\n" + jsonObject.getString("author"));
  131.                             chatMessage.setId(1);
  132.                             chatMessage.setUserId(53);
  133.                             showNotification(text, author);
  134.                             displayMessage(chatMessage);
  135.                         }
  136.                         catch (JSONException ex)
  137.                         {
  138.  
  139.                         }
  140.                     }
  141.                 });
  142.                 /*
  143.                 Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
  144.                 Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
  145.                 r.play();
  146.                 */
  147.                 socket.close();
  148.             }
  149.             catch (Exception ex)
  150.             {
  151.                // ex.printStackTrace();
  152.             }
  153.         }
  154.     }
  155.  
  156.     public final static int NOTIFY_ID = 101;
  157.     public void showNotification(String text, String author){
  158.         Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
  159.         Intent intent = new Intent(ChatActivity.this, ChatActivity.class);
  160.         PendingIntent pIntent = PendingIntent.getActivity(ChatActivity.this, 0, intent, 0);
  161.         Notification mNotification = new Notification.Builder(this)
  162.                 .setContentTitle(author + " send you a new message!" )
  163.                 .setContentText(text)
  164.                 .setSmallIcon(R.drawable.sendicon)
  165.                 .setContentIntent(pIntent)
  166.                 .setSound(soundUri)
  167.                 .addAction(R.drawable.sendicon, "View", pIntent)
  168.                 .addAction(0, "Remind", pIntent)
  169.                 .build();
  170.         NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  171.         notificationManager.notify(0, mNotification);
  172.     }
  173.  
  174.     public void cancelNotification(int notificationId){
  175.  
  176.         if (Context.NOTIFICATION_SERVICE!=null) {
  177.             String ns = Context.NOTIFICATION_SERVICE;
  178.             NotificationManager nMgr = (NotificationManager) getApplicationContext().getSystemService(ns);
  179.             nMgr.cancel(notificationId);
  180.         }
  181.     }
  182.  
  183.  
  184.  
  185.     @Override
  186.     protected void onCreate(Bundle savedInstanceState) {
  187.         super.onCreate(savedInstanceState);
  188.  
  189.  
  190.                 SharedPreferences s = getSharedPreferences("rset", MODE_PRIVATE);
  191.                 token = s.getString("TOKEN","");
  192.                 hash = s.getString("HASH","");
  193.                 login = s.getString(USERNAME, "");
  194.                 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
  195.                  server_address = sp.getString("server", "");
  196.                  server_port = Integer.parseInt(sp.getString("port", ""));
  197.  
  198.                 if (!server_address.equals("") && server_port != 0) {
  199.                     try {
  200.                         Thread thread = new Thread(new Runnable() {
  201.                             @Override
  202.                             public void run()   {
  203.                                 try {
  204.                                     _socketServer = new ServerSocket(1347);
  205.                                     socket = new Socket(server_address, server_port);
  206.                                     objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
  207.                                     objectOutputStream.flush();
  208.                                     objectInputStream = new ObjectInputStream(socket.getInputStream());
  209.                                 }
  210.                                 catch (IOException ex)
  211.                                 {
  212.                                     ex.printStackTrace();
  213.                                 }
  214.                                 RClient rClient = new RClient(server_address, server_port);
  215.  
  216.                             }
  217.                         });
  218.                         thread.start();
  219.  
  220.  
  221.  
  222.  
  223.  
  224.                     } catch (Exception ex) {
  225.                         ex.printStackTrace();
  226.                     }
  227.                 }
  228.  
  229.         setContentView(R.layout.activity_chat);
  230.         initControls();
  231.  
  232.  
  233.  
  234.  
  235.     }
  236.  
  237.     private void initControls() {
  238.         adapter = new ChatAdapter(ChatActivity.this, new ArrayList<ChatMessage>());
  239.         messagesContainer = (ListView) findViewById(R.id.messagesContainer);
  240.         messageET = (EditText) findViewById(R.id.messageEdit);
  241.         sendBtn = (ImageButton) findViewById(R.id.chatSendButton);
  242.         TextView meLabel = (TextView) findViewById(R.id.meLbl);
  243.         meLabel.setText(getSharedPreferences("rset", MODE_PRIVATE).getString(USERNAME, ""));
  244.         TextView companionLabel = (TextView) findViewById(R.id.friendLabel);
  245.         RelativeLayout container = (RelativeLayout) findViewById(R.id.container);
  246.         companionLabel.setText("Chat");
  247.         Thread _thread = new Thread(new Runnable() {
  248.             @Override
  249.             public void run() {
  250.                 listenNewMessages();
  251.             }
  252.         });
  253.         /*
  254.         Thread updateChatThread = new Thread(new Runnable() {
  255.             @Override
  256.             public void run() {
  257.                 while(true) {
  258.                     try {
  259.                         Thread.sleep(2000);
  260.                         doHistoryRequest();
  261.                     }
  262.                     catch (InterruptedException ex)
  263.                     {
  264.  
  265.                     }
  266.                 }
  267.             }
  268.         });
  269.  
  270.         updateChatThread.start();
  271.         */
  272.         _thread.setDaemon(true);
  273.         _thread.start();
  274.         sendBtn.setOnClickListener(new View.OnClickListener() {
  275.             @Override
  276.             public void onClick(View v) {
  277.                 try {
  278.                             final String messageText = messageET.getText().toString();
  279.                             if (TextUtils.isEmpty(messageText)) {
  280.                                 return;
  281.                             }
  282.                             messageET.setText("");
  283.                             Log.d(CHATTAG, messageText);
  284.                             SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
  285.                             final String server_address = sp.getString("server", "");
  286.                             final int server_port = Integer.parseInt(sp.getString("port", ""));
  287.  
  288.                             Thread thread  = new Thread(new Runnable() {
  289.                                 @Override
  290.                                 public void run() {
  291.                                     if (!server_address.equals("") && server_port != 0)
  292.                                     {
  293.                                         String hash = null;
  294.                                         RClient rClient = new RClient(server_address, server_port);
  295.                                         try {
  296.                                             hash = RChecksum.sha1hash(getCurrentTimeStamp() + login + messageText);
  297.                                         }
  298.  
  299.                                         catch (Exception ex)
  300.                                         {
  301.                                             ex.printStackTrace();
  302.                                         }
  303.                                         MessioObject.SendMessageResponse response =
  304.                                                 rClient.sendMessageRequest(token,hash,messageText);
  305.  
  306.                                         final ChatMessage chatMessage = new ChatMessage();
  307.                                         chatMessage.setMessage(messageText);
  308.                                         chatMessage.setMe(true);
  309.                                         chatMessage.setDate(DateFormat.getDateTimeInstance().format(new Date()));
  310.                                         chatMessage.setId(1);
  311.                                         SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 100);
  312.                                         soundPool.load(getApplicationContext(), R.raw.sound_in, 1);
  313.                                         soundPool.play(1, 1, 1, 1, 0 ,1);
  314.                                         runOnUiThread(new Runnable() {
  315.                                             @Override
  316.                                             public void run() {
  317.                                                 displayMessage(chatMessage);
  318.                                             }
  319.                                         });
  320.  
  321.                                     }
  322.                                 }
  323.                             });
  324.                     thread.start();
  325.  
  326.                 }
  327.                 catch (Exception ex)
  328.                 {
  329.                     ex.printStackTrace();
  330.                 }
  331.  
  332.  
  333.  
  334.  
  335.             }
  336.         });
  337.  
  338.         }
  339.  
  340.     public void displayMessage(ChatMessage message) {
  341.         adapter.add(message);
  342.         adapter.notifyDataSetChanged();
  343.         scroll();
  344.     }
  345.  
  346.     public String getDateFromUnixTimeStamp(long time)
  347.     {
  348.         Date date = new Date(time); // *1000 is to convert seconds to milliseconds
  349.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // the format of your date
  350.         return sdf.format(date);
  351.     }
  352.  
  353.     private void scroll() {
  354.         messagesContainer.setSelection(messagesContainer.getCount() - 1);
  355.     }
  356.  
  357.     private void loadHistory(ArrayList<MessioObject.MessageDBItem> list) {
  358.  
  359.         chatHistory = new ArrayList<ChatMessage>();
  360.         messagesContainer.setAdapter(null);
  361.         ArrayList<ChatMessage> arrayList = new ArrayList<>();
  362.         for(MessioObject.MessageDBItem item :  list)
  363.         {
  364.             ChatMessage message = new ChatMessage();
  365.             Log.d("History: ", "current login: " + login + "checking: " + item.getLOGIN());
  366.             if(item.getLOGIN().equals(login)) {
  367.                 message.setMe(true);
  368.                 message.setDate(getDateFromUnixTimeStamp(item.getDATEOFMESSAGE()));
  369.             }
  370.             else {
  371.                 message.setMe(false);
  372.                 message.setDate(getDateFromUnixTimeStamp(item.getDATEOFMESSAGE()) + "\n" + item.getLOGIN());
  373.             }
  374.             message.setId(1);
  375.             message.setUserId(53);
  376.             message.setMessage(item.getMESSAGE());
  377.             arrayList.add(message);
  378.         }
  379.         adapter = new ChatAdapter(ChatActivity.this, arrayList);
  380.         messagesContainer.setAdapter(adapter);
  381.         for (int i = 0; i < chatHistory.size(); i++) {
  382.             ChatMessage message = chatHistory.get(i);
  383.             displayMessage(message);
  384.             scroll();
  385.         }
  386.         scroll();
  387.     }
  388.  
  389.  
  390.     public String getCurrentTimeStamp() {
  391.         return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
  392.     }
  393.  
  394.     @Override
  395.     public boolean onCreateOptionsMenu(Menu menu) {
  396.         MenuInflater menuInflater = getMenuInflater();
  397.         menuInflater.inflate(R.menu.chatmenu, menu);
  398.         return super.onCreateOptionsMenu(menu);
  399.     }
  400.  
  401.     @Override
  402.     public boolean onOptionsItemSelected(MenuItem item) {
  403.         switch (item.getItemId()) {
  404.             case R.id.exit_button: {
  405.                 SharedPreferences sharedPreferences = getSharedPreferences("rset", MODE_PRIVATE);
  406.                 SharedPreferences.Editor editor = sharedPreferences.edit();
  407.                 editor.putString("TOKEN", token);
  408.                 editor.putString(USERNAME, "");
  409.                 editor.putString(PASSWORD, "");
  410.                 editor.putBoolean("BOOLEANAUTHKEY", false);
  411.                 editor.commit();
  412.                 this.finish();
  413.             }
  414.             case R.id.update: {
  415.                 doHistoryRequest();
  416.             }
  417.             return true;
  418.  
  419.             default:
  420.                 // If we got here, the user's action was not recognized.
  421.                 // Invoke the superclass to handle it.
  422.                 return super.onOptionsItemSelected(item);
  423.  
  424.         }
  425.     }
  426.  
  427.     public void doHistoryRequest()
  428.     {
  429.         Thread thread = new Thread(new Runnable() {
  430.             @Override
  431.             public void run() {
  432.                 try {
  433.                     Socket socket = new Socket(server_address, server_port);
  434.                     DataOutputStream os = new DataOutputStream(socket.getOutputStream());
  435.                     os.flush();
  436.                     DataInputStream is = new DataInputStream(socket.getInputStream());
  437.  
  438.                     MessioObject.GetHistoryMessagesRequest request = new
  439.                             MessioObject.GetHistoryMessagesRequest();
  440.                     request.setToken(token);
  441.                     request.setType(MessioObject.GETALLCHATHISTORY_REQUEST);
  442.                     Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
  443.                     os.writeUTF(gson.toJson(request));
  444.                     os.flush();
  445.                     String re = is.readUTF();
  446.                     final MessioObject.GetHistoryMessagesResponse response =
  447.                             gson.fromJson(re, MessioObject.GetHistoryMessagesResponse.class);
  448.                     Log.d("tag", re);
  449.                     socket.close();
  450.                     runOnUiThread(new Runnable() {
  451.                         @Override
  452.                         public void run() {
  453.                             loadHistory(response.getMessagesList());
  454.                         }
  455.                     });
  456.                 } catch (Exception ex) {
  457.  
  458.                 }
  459.             }
  460.         });
  461.         thread.start();
  462.     }
  463.  
  464.     @Override
  465.     public void onBackPressed() {
  466.         super.onBackPressed();
  467.     }
  468. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement