Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.androidchatapp;
- import android.content.Intent;
- import android.database.Cursor;
- import android.net.Uri;
- import android.provider.OpenableColumns;
- import android.support.annotation.NonNull;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.text.Editable;
- import android.text.TextWatcher;
- import android.util.Log;
- import android.view.*;
- import android.widget.AdapterView;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ImageButton;
- import android.widget.ImageView;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.android.volley.Request;
- import com.android.volley.RequestQueue;
- import com.android.volley.Response;
- import com.android.volley.VolleyError;
- import com.android.volley.toolbox.StringRequest;
- import com.android.volley.toolbox.Volley;
- import com.firebase.client.Firebase;
- import com.firebase.ui.auth.AuthUI;
- import com.google.android.gms.tasks.OnSuccessListener;
- import com.google.firebase.auth.FirebaseAuth;
- import com.google.firebase.auth.FirebaseUser;
- import com.google.firebase.database.ChildEventListener;
- import com.google.firebase.database.DataSnapshot;
- import com.google.firebase.database.DatabaseError;
- import com.google.firebase.database.DatabaseReference;
- import com.google.firebase.database.FirebaseDatabase;
- import com.google.firebase.database.ValueEventListener;
- import com.google.firebase.storage.FirebaseStorage;
- import com.google.firebase.storage.StorageReference;
- import com.google.firebase.storage.UploadTask;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- public class MessageActivity extends AppCompatActivity {
- public static final String ANONYMOUS = "anonymous";
- public static final int SIGN_IN_REQUEST_CODE = 1;
- public static final int PHOTO_PICKER_REQUEST_CODE = 2;
- private ListView messageListView;
- private ImageButton imageButton;
- private EditText editTextField;
- private Button sendButton;
- private String username;
- private MessageAdapter messageAdapter;
- private FirebaseAuth firebaseAuth;
- private FirebaseDatabase firebaseDatabase;
- private FirebaseStorage firebaseStorage;
- private DatabaseReference databaseReference;
- private StorageReference storageReference;
- private FirebaseAuth.AuthStateListener authStateListener;
- private ChildEventListener childEventListener;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_message);
- // Toast.makeText(getApplicationContext(),"oke "+UserDetails.chatWith,Toast.LENGTH_LONG).show();
- initializeInstanceVariables();
- setArrayAdapter();
- initializeFirebaseVariables();
- setStatus();
- authorizeAndManageStates();
- addListenerToEditText();
- attachClickListenerToSendButton();
- setClickListenerOnPhotoPicker();
- }
- private void initializeInstanceVariables()
- {
- messageListView = findViewById(R.id.messageListView);
- imageButton = findViewById(R.id.photoPickerButton);
- editTextField = findViewById(R.id.messageEditText);
- sendButton = findViewById(R.id.sendButton);
- }
- private void setArrayAdapter()
- {
- messageAdapter = new MessageAdapter(this, R.layout.message_item, new ArrayList<Message>());
- messageListView.setAdapter(messageAdapter);
- }
- private void initializeFirebaseVariables()
- {
- firebaseAuth = FirebaseAuth.getInstance();
- firebaseDatabase = FirebaseDatabase.getInstance();
- firebaseStorage = FirebaseStorage.getInstance();
- databaseReference = firebaseDatabase.getReference().child("messages");
- storageReference = firebaseStorage.getReference().child("chat-photos");
- }
- private void addListenerToEditText()
- {
- editTextField.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { }
- @Override
- public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
- if(charSequence.toString().trim().length() > 0)
- sendButton.setEnabled(true);
- else
- sendButton.setEnabled(false);
- }
- @Override
- public void afterTextChanged(Editable editable) { }
- });
- }
- private void attachClickListenerToSendButton()
- {
- sendButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- String textInEditText = editTextField.getText().toString();
- databaseReference.push().setValue(new Message(textInEditText, username, UserDetails.chatWith, "terkirim", null, null/*, null*/));
- setRelated();
- editTextField.setText("");
- }
- });
- }
- private void setClickListenerOnPhotoPicker()
- {
- imageButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
- intent.setType("image/jpeg");
- intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
- startActivityForResult(Intent.createChooser(intent, "Complete Action Using"), PHOTO_PICKER_REQUEST_CODE);
- //the result is returned using onActivityResult()
- }
- });
- }
- private void authorizeAndManageStates()
- {
- authStateListener = new FirebaseAuth.AuthStateListener() {
- @Override
- public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
- FirebaseUser user = firebaseAuth.getCurrentUser();
- if(user != null)
- onSignedInInitialize(user.getDisplayName());
- else
- {
- onSignedOutCleanUp();
- //if not signed in, we use FirebaseUI to display a sign in screen
- startActivityForResult(AuthUI.getInstance()
- .createSignInIntentBuilder()
- .setIsSmartLockEnabled(false)
- .setAvailableProviders(
- Arrays.asList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
- new AuthUI.IdpConfig.Builder(AuthUI.PHONE_VERIFICATION_PROVIDER).build(),
- new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build())).build(), SIGN_IN_REQUEST_CODE);
- }
- }
- };
- firebaseAuth.addAuthStateListener(authStateListener);
- }
- private void onSignedInInitialize(String username)
- {
- this.username = UserDetails.username;//username;
- attachListenerToDatabaseReference();
- }
- private void attachListenerToDatabaseReference() {
- //when a new message added to database, this method notifies us. And we display it
- databaseReference.addChildEventListener(new ChildEventListener() {
- @Override
- public void onChildAdded(DataSnapshot dataSnapshot, String s) {
- if(dataSnapshot.hasChild("to") && dataSnapshot.hasChild("user")){
- if(
- (dataSnapshot.child("to").getValue().equals(UserDetails.chatWith) && dataSnapshot.child("user").getValue().equals(UserDetails.username)) ||
- (dataSnapshot.child("user").getValue().equals(UserDetails.chatWith) && dataSnapshot.child("to").getValue().equals(UserDetails.username))
- )
- {
- Message tempMessage = dataSnapshot.getValue(Message.class);
- messageAdapter.add(tempMessage);
- }
- }
- }
- @Override
- public void onChildChanged(DataSnapshot dataSnapshot, String s) { }
- @Override
- public void onChildRemoved(DataSnapshot dataSnapshot) { }
- @Override
- public void onChildMoved(DataSnapshot dataSnapshot, String s) { }
- @Override
- public void onCancelled(DatabaseError databaseError) { }
- });
- }
- private void onSignedOutCleanUp()
- {
- username = ANONYMOUS;
- messageAdapter.clear();
- }
- @Override
- public boolean onCreateOptionsMenu(android.view.Menu menu)
- {
- //displaying custom menu on the screen
- MenuInflater menuInflater = getMenuInflater();
- menuInflater.inflate(R.menu.menu_chat, menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- //Called when the user presses sign out in menu
- switch(item.getItemId())
- {
- case R.id.send_file:
- // AuthUI.getInstance().signOut(this);
- Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
- intent.setType("*/*");
- intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
- startActivityForResult(Intent.createChooser(intent, "Complete Action Using"), 1);
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- //when we request from Firebase and a result comes back,
- //its sent with this method
- super.onActivityResult(requestCode, resultCode, data);
- if(requestCode == PHOTO_PICKER_REQUEST_CODE && resultCode == RESULT_OK){
- storePhotoAndDisplay(data);
- Toast.makeText(this, "Photo", Toast.LENGTH_SHORT).show();
- }
- else if(requestCode == 1 && resultCode == RESULT_OK){
- storeFile(data);
- Toast.makeText(this, "File", Toast.LENGTH_SHORT).show();
- }
- }
- private void storePhotoAndDisplay(Intent data)
- {
- Uri chosenPhotoUri = data.getData();
- StorageReference storageReferenceToSave = storageReference.child(chosenPhotoUri.getLastPathSegment());
- storageReferenceToSave.putFile(chosenPhotoUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
- @Override
- public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
- Uri downloadUriInStorage = taskSnapshot.getDownloadUrl();
- databaseReference.push().setValue(new Message(null, username, UserDetails.chatWith, "terkirim", downloadUriInStorage.toString(), "image"/*, null*/));
- }
- });
- }
- private void storeFile(Intent data)
- {
- Uri chosenUri = data.getData();
- StorageReference storageReferenceToSave = storageReference.child(chosenUri.getLastPathSegment());
- storageReferenceToSave.putFile(chosenUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
- @Override
- public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
- Uri downloadUriInStorage = taskSnapshot.getDownloadUrl();
- databaseReference.push().setValue(new Message(null, username, UserDetails.chatWith, "terkirim", downloadUriInStorage.toString(), "file"/*, filename*/));
- }
- });
- }
- private void setStatus(){
- String url = "https://chatharis-6788f.firebaseio.com/messages.json";
- StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>(){
- @Override public void onResponse(String s) {
- try{
- JSONObject obj = new JSONObject(s);
- Iterator i = obj.keys();
- String key,userTo,userFrom;
- while(i.hasNext()){
- key = i.next().toString();
- userTo = obj.getJSONObject(key).getString("to");
- userFrom = obj.getJSONObject(key).getString("user");
- if(userTo.equals(UserDetails.username) && userFrom.equals(UserDetails.chatWith)){
- Log.d("CREATION", "key "+key+ " | to: "+userTo);
- Map<String, Object> hopperUpdates = new HashMap<String, Object>();
- hopperUpdates.put("status", "dibaca");
- databaseReference.child(key).updateChildren(hopperUpdates);
- }
- }
- }catch (JSONException e) {
- e.printStackTrace();
- }
- }
- },new Response.ErrorListener(){
- @Override
- public void onErrorResponse(VolleyError volleyError) {
- System.out.println("" + volleyError);
- }
- });
- RequestQueue rQueue = Volley.newRequestQueue(MessageActivity.this);
- rQueue.add(request);
- }
- private void setRelated(){
- DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
- rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
- @Override
- public void onDataChange(DataSnapshot dataSnapshot) {
- // Toast.makeText(MessageActivity.this, "o ", Toast.LENGTH_LONG).show();
- DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
- // Check if "relateduser" exist
- if (dataSnapshot.hasChild("relateduser"))
- {
- // Toast.makeText(MessageActivity.this, "m ", Toast.LENGTH_LONG).show();
- // check user1
- if(dataSnapshot.child("relateduser").hasChild(UserDetails.username)) {
- int i = 0;
- for (com.google.firebase.database.DataSnapshot data : dataSnapshot.child("relateduser").child(UserDetails.username).getChildren()) {
- if (data.child("user").getValue().equals(UserDetails.chatWith)) {
- i++;
- }
- }
- if (i <= 0) {
- Map<String, String> map = new HashMap<String, String>();
- map.put("user", UserDetails.chatWith);
- reference.child("relateduser/"+UserDetails.username).push().setValue(map);
- }
- }
- else{
- Map<String, String> map2 = new HashMap<String, String>();
- map2.put("user", UserDetails.chatWith);
- reference.child("relateduser/"+UserDetails.username).push().setValue(map2);
- }
- // check user2
- if(dataSnapshot.child("relateduser").hasChild(UserDetails.username)) {
- int i = 0;
- for (com.google.firebase.database.DataSnapshot data : dataSnapshot.child("relateduser").child(UserDetails.chatWith).getChildren()) {
- if (data.child("user").getValue().equals(UserDetails.username)) {
- i++;
- }
- }
- if (i <= 0) {
- Map<String, String> map = new HashMap<String, String>();
- map.put("user", UserDetails.username);
- reference.child("relateduser/"+UserDetails.chatWith).push().setValue(map);
- }
- }
- else{
- Map<String, String> map2 = new HashMap<String, String>();
- map2.put("user", UserDetails.username);
- reference.child("relateduser/"+UserDetails.chatWith).push().setValue(map2);
- }
- }
- else
- {
- // Toast.makeText(MessageActivity.this, "n ", Toast.LENGTH_LONG).show();
- Map<String, String> map = new HashMap<String, String>();
- map.put("user", UserDetails.chatWith);
- reference.child("relateduser/"+UserDetails.username).push().setValue(map);
- Map<String, String> map2 = new HashMap<String, String>();
- map2.put("user", UserDetails.username);
- reference.child("relateduser/"+UserDetails.chatWith).push().setValue(map2);
- }
- }
- @Override
- public void onCancelled(DatabaseError databaseError) {
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement