Advertisement
Guest User

hghgh

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