Advertisement
amjadArabia

FirebaseChat

Nov 26th, 2017
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.72 KB | None | 0 0
  1. activity_main.xml
  2. =======================
  3. <?xml version="1.0" encoding="utf-8"?>
  4. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  5.     xmlns:tools="http://schemas.android.com/tools"
  6.     android:layout_width="match_parent"
  7.     android:layout_height="match_parent"
  8.   >
  9.  
  10.     <EditText
  11.         android:layout_width="wrap_content"
  12.         android:layout_height="wrap_content"
  13.         android:id="@+id/room_name_edittext"
  14.         android:layout_alignParentBottom="true"
  15.         android:layout_alignParentLeft="true"
  16.         android:layout_alignParentStart="true"
  17.         android:layout_toLeftOf="@+id/btn_add_room"
  18.         android:layout_toStartOf="@+id/btn_add_room" />
  19.  
  20.     <Button
  21.         android:layout_width="wrap_content"
  22.         android:layout_height="wrap_content"
  23.         android:text="Add user"
  24.         android:id="@+id/btn_add_room"
  25.         android:layout_alignParentBottom="true"
  26.         android:layout_alignParentRight="true"
  27.         android:layout_alignParentEnd="true" />
  28.  
  29.     <ListView
  30.         android:layout_width="wrap_content"
  31.         android:layout_height="wrap_content"
  32.         android:id="@+id/listView"
  33.         android:layout_alignParentTop="true"
  34.         android:layout_alignParentLeft="true"
  35.         android:layout_alignParentStart="true"
  36.         android:layout_above="@+id/room_name_edittext" />
  37. </RelativeLayout>
  38.  
  39.  
  40.  
  41. MainActivity.java
  42. ===========================
  43. import android.content.DialogInterface;
  44. import android.content.Intent;
  45. import android.support.v7.app.AlertDialog;
  46. import android.support.v7.app.AppCompatActivity;
  47. import android.os.Bundle;
  48. import android.view.View;
  49. import android.widget.AdapterView;
  50. import android.widget.ArrayAdapter;
  51. import android.widget.Button;
  52. import android.widget.EditText;
  53. import android.widget.ListView;
  54. import android.widget.TextView;
  55.  
  56.  
  57. import com.google.firebase.database.DataSnapshot;
  58. import com.google.firebase.database.DatabaseError;
  59. import com.google.firebase.database.DatabaseReference;
  60. import com.google.firebase.database.FirebaseDatabase;
  61. import com.google.firebase.database.ValueEventListener;
  62.  
  63. import java.util.ArrayList;
  64. import java.util.HashMap;
  65. import java.util.HashSet;
  66. import java.util.Iterator;
  67. import java.util.Map;
  68. import java.util.Set;
  69.  
  70. public class MainActivity extends AppCompatActivity {
  71.  
  72.  
  73.     private Button  add_room;
  74.     private EditText room_name;
  75.  
  76.     private ListView listView;
  77.     private ArrayAdapter<String> arrayAdapter;
  78.     private ArrayList<String> list_of_rooms = new ArrayList<>();
  79.     private String name;
  80.     private DatabaseReference root = FirebaseDatabase.getInstance().getReference().getRoot();
  81.  
  82.     @Override
  83.     protected void onCreate(Bundle savedInstanceState) {
  84.         super.onCreate(savedInstanceState);
  85.         setContentView(R.layout.activity_main);
  86.  
  87.         add_room = (Button) findViewById(R.id.btn_add_room);
  88.         room_name = (EditText) findViewById(R.id.room_name_edittext);
  89.         listView = (ListView) findViewById(R.id.listView);
  90.  
  91.         arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list_of_rooms);
  92.  
  93.         listView.setAdapter(arrayAdapter);
  94.  
  95.         request_user_name();
  96.  
  97.         add_room.setOnClickListener(new View.OnClickListener() {
  98.             @Override
  99.             public void onClick(View view) {
  100.  
  101.                 Map<String,Object> map = new HashMap<String, Object>();
  102.                 map.put(room_name.getText().toString(),"");
  103.                 root.updateChildren(map);
  104.                 room_name.setText("");
  105.  
  106.  
  107.             }
  108.         });
  109.  
  110.         root.addValueEventListener(new ValueEventListener() {
  111.             @Override
  112.             public void onDataChange(DataSnapshot dataSnapshot) {
  113.  
  114.                 Set<String> set = new HashSet<String>();
  115.                 Iterator i = dataSnapshot.getChildren().iterator();
  116.  
  117.                 while (i.hasNext()){
  118.                     set.add(((DataSnapshot)i.next()).getKey());
  119.                 }
  120.  
  121.                 list_of_rooms.clear();
  122.                 list_of_rooms.addAll(set);
  123.  
  124.                 arrayAdapter.notifyDataSetChanged();
  125.             }
  126.  
  127.             @Override
  128.             public void onCancelled(DatabaseError databaseError) {
  129.  
  130.             }
  131.         });
  132.  
  133.         listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  134.             @Override
  135.             public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
  136.  
  137.                 Intent intent = new Intent(getApplicationContext(),Chat_Room.class);
  138.                 intent.putExtra("room_name",((TextView)view).getText().toString() );
  139.                 intent.putExtra("user_name","(" +name + ") ");
  140.                 startActivity(intent);
  141.             }
  142.         });
  143.  
  144.     }
  145.  
  146.     private void request_user_name() {
  147.         AlertDialog.Builder builder = new AlertDialog.Builder(this);
  148.         builder.setTitle("Enter name:");
  149.  
  150.         final EditText input_field = new EditText(this);
  151.         builder.setIcon(R.drawable.chat);
  152.         builder.setView(input_field);
  153.         builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
  154.             @Override
  155.             public void onClick(DialogInterface dialogInterface, int i) {
  156.                 name = input_field.getText().toString();
  157.             }
  158.         });
  159.  
  160.         builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
  161.             @Override
  162.             public void onClick(DialogInterface dialogInterface, int i) {
  163.                 dialogInterface.cancel();
  164.                 request_user_name();
  165.             }
  166.         });
  167.  
  168.         builder.show();
  169.     }
  170.  
  171.  
  172. }
  173.  
  174.  
  175. Chat_Room.java
  176. ==========================
  177. import android.os.Bundle;
  178. import android.support.annotation.Nullable;
  179. import android.support.v7.app.AppCompatActivity;
  180. import android.view.View;
  181. import android.widget.Button;
  182. import android.widget.EditText;
  183. import android.widget.TextView;
  184.  
  185. import com.google.firebase.database.ChildEventListener;
  186. import com.google.firebase.database.DataSnapshot;
  187. import com.google.firebase.database.DatabaseError;
  188. import com.google.firebase.database.DatabaseReference;
  189. import com.google.firebase.database.FirebaseDatabase;
  190.  
  191. import java.util.HashMap;
  192. import java.util.Iterator;
  193. import java.util.Map;
  194.  
  195. /**
  196.  * Created by arabi_000 on 11/27/2017.
  197.  */
  198.  
  199. class Chat_Room extends AppCompatActivity{
  200.  
  201.     private Button btn_send_msg;
  202.     private EditText input_msg;
  203.     private TextView chat_conversation;
  204.  
  205.     private String user_name,room_name;
  206.     private DatabaseReference root ;
  207.     private String temp_key;
  208.  
  209.     @Override
  210.     protected void onCreate(@Nullable Bundle savedInstanceState) {
  211.         super.onCreate(savedInstanceState);
  212.         setContentView(R.layout.chat_room);
  213.  
  214.         btn_send_msg = (Button) findViewById(R.id.btn_send);
  215.         input_msg = (EditText) findViewById(R.id.msg_input);
  216.         chat_conversation = (TextView) findViewById(R.id.textView);
  217.  
  218.         user_name = getIntent().getExtras().get("user_name").toString();
  219.         room_name = getIntent().getExtras().get("room_name").toString();
  220.         setTitle(" Room - "+room_name);
  221.  
  222.         root = FirebaseDatabase.getInstance().getReference().child(room_name);
  223.  
  224.         btn_send_msg.setOnClickListener(new View.OnClickListener() {
  225.             @Override
  226.             public void onClick(View view) {
  227.  
  228.                 Map<String,Object> map = new HashMap<String, Object>();
  229.                 temp_key = root.push().getKey();
  230.                 root.updateChildren(map);
  231.  
  232.                 DatabaseReference message_root = root.child(temp_key);
  233.                 Map<String,Object> map2 = new HashMap<String, Object>();
  234.                 map2.put("name",user_name);
  235.                 map2.put("msg",input_msg.getText().toString());
  236.                 input_msg.setText("");
  237.                 message_root.updateChildren(map2);
  238.             }
  239.         });
  240.  
  241.         root.addChildEventListener(new ChildEventListener() {
  242.             @Override
  243.             public void onChildAdded(DataSnapshot dataSnapshot, String s) {
  244.  
  245.                 append_chat_conversation(dataSnapshot);
  246.             }
  247.  
  248.             @Override
  249.             public void onChildChanged(DataSnapshot dataSnapshot, String s) {
  250.  
  251.                 append_chat_conversation(dataSnapshot);
  252.  
  253.             }
  254.  
  255.             @Override
  256.             public void onChildRemoved(DataSnapshot dataSnapshot) {
  257.  
  258.             }
  259.  
  260.             @Override
  261.             public void onChildMoved(DataSnapshot dataSnapshot, String s) {
  262.  
  263.             }
  264.  
  265.             @Override
  266.             public void onCancelled(DatabaseError databaseError) {
  267.  
  268.             }
  269.         });
  270.  
  271.     }
  272.  
  273.     private String chat_msg,chat_user_name;
  274.  
  275.     private void append_chat_conversation(DataSnapshot dataSnapshot) {
  276.  
  277.         Iterator i = dataSnapshot.getChildren().iterator();
  278.  
  279.         while (i.hasNext()){
  280.  
  281.             chat_msg = (String) ((DataSnapshot)i.next()).getValue();
  282.             chat_user_name = (String) ((DataSnapshot)i.next()).getValue();
  283.  
  284.             chat_conversation.append(chat_user_name +" : "+chat_msg +" \n");
  285.         }
  286.  
  287.  
  288.     }
  289. }
  290.  
  291.  
  292. chat_room.xml
  293. =====================
  294. <?xml version="1.0" encoding="utf-8"?>
  295. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  296.     android:layout_width="match_parent" android:layout_height="match_parent">
  297.  
  298.     <Button
  299.         android:layout_width="wrap_content"
  300.         android:layout_height="wrap_content"
  301.         android:text="Send"
  302.         android:id="@+id/btn_send"
  303.         android:layout_alignParentBottom="true"
  304.         android:layout_alignParentRight="true"
  305.         android:layout_alignParentEnd="true" />
  306.  
  307.     <EditText
  308.         android:layout_width="wrap_content"
  309.         android:layout_height="wrap_content"
  310.         android:id="@+id/msg_input"
  311.         android:layout_alignTop="@+id/btn_send"
  312.         android:layout_alignParentLeft="true"
  313.         android:layout_alignParentStart="true"
  314.         android:layout_toLeftOf="@+id/btn_send"
  315.         android:layout_toStartOf="@+id/btn_send" />
  316.  
  317.     <ScrollView
  318.         android:layout_width="wrap_content"
  319.         android:layout_height="wrap_content"
  320.         android:id="@+id/scrollView"
  321.         android:layout_alignParentTop="true"
  322.         android:layout_alignParentLeft="true"
  323.         android:layout_alignParentStart="true"
  324.         android:layout_above="@+id/btn_send"
  325.         android:layout_alignRight="@+id/btn_send"
  326.         android:layout_alignEnd="@+id/btn_send">
  327.  
  328.         <TextView
  329.             android:layout_width="match_parent"
  330.             android:padding="15dp"
  331.             android:layout_height="match_parent"
  332.             android:textAppearance="?android:attr/textAppearanceLarge"
  333.             android:id="@+id/textView" />
  334.     </ScrollView>
  335. </RelativeLayout>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement