diff --git a/android/app/src/main/java/com/chatman/HomeFragment.java b/android/app/src/main/java/com/chatman/HomeFragment.java index 0dfbb15ff4190313db6c480936d7be65a7037d17..487d4b77e09f13967ef8f337a3a97ce99f96ecf0 100644 --- a/android/app/src/main/java/com/chatman/HomeFragment.java +++ b/android/app/src/main/java/com/chatman/HomeFragment.java @@ -3,15 +3,24 @@ package com.chatman; import android.content.Context; import android.net.Uri; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.chatman.adapter.ChatListAdapter; +import com.chatman.helper.PreferencesHelper; import com.chatman.model.ChatList; +import com.google.firebase.database.ChildEventListener; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.FirebaseDatabase; +import com.google.firebase.database.ValueEventListener; import java.util.ArrayList; import java.util.List; @@ -27,6 +36,8 @@ import java.util.List; */ public class HomeFragment extends Fragment { + private static String TAG = HomeFragment.class.getSimpleName(); + private RecyclerView recycler; private ChatListAdapter adapter; private List<ChatList> chatLists; @@ -58,6 +69,7 @@ public class HomeFragment extends Fragment { linearLayoutManager.setReverseLayout(true); linearLayoutManager.setStackFromEnd(true); recycler.setLayoutManager(linearLayoutManager); + chatLists = new ArrayList<>(); getChatLists(); adapter = new ChatListAdapter(chatLists); recycler.setAdapter(adapter); @@ -102,24 +114,156 @@ public class HomeFragment extends Fragment { void onFragmentInteraction(Uri uri); } + private class MessageChildListener implements ChildEventListener { + + private String sender; + private String idChatRoom; + public MessageChildListener(String sender, String idChatRoom) { + this.sender = sender; + this.idChatRoom = idChatRoom; + } + + @Override + public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { + String messageId = (String) dataSnapshot.getValue(); + Log.d(TAG, "onDataChange: messageId " + messageId); + FirebaseDatabase.getInstance().getReference().child("message") + .child(messageId).addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + String message = (String) dataSnapshot.child("message").getValue(); + Log.d(TAG, "onDataChange: message " + message); + chatLists.add(new ChatList(R.mipmap.chatman_launcher_round, sender, message, idChatRoom)); + adapter.notifyDataSetChanged(); + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + + } + }); + } + + @Override + public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {} + + @Override + public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {} + + @Override + public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {} + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) {} + } + + private class UserChildListener implements ChildEventListener { + + private DataSnapshot chatRoomSnapshot; + + public UserChildListener(DataSnapshot chatRoomSnapshot) { + this.chatRoomSnapshot = chatRoomSnapshot; + } + + @Override + public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { + Log.d(TAG, "onDataChange: user found 2"); + final String sender = (String) dataSnapshot.child("name").getValue(); + String idChatRoom = chatRoomSnapshot.getKey(); + Log.d(TAG, "onChildAdded: idChatRoom " + idChatRoom); + Log.d(TAG, "onDataChange: sender " + sender); + if (chatRoomSnapshot.hasChild("messages")) { + Log.d(TAG, "onDataChange: chatroom is occupied with messages"); + chatRoomSnapshot.getRef().child("messages").addChildEventListener(new MessageChildListener(sender, idChatRoom)); + } + else { + chatLists.add(new ChatList(R.mipmap.chatman_launcher_round, sender, "", idChatRoom)); + adapter.notifyDataSetChanged(); + } + } + + @Override + public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {} + + @Override + public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {} + + @Override + public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {} + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) {} + } + // Todo: Ganti data dummmy jadi data asli ngambil dari database + // sorry for bad code :( private List<ChatList> getChatLists() { - chatLists = new ArrayList<>(); - chatLists.add(new ChatList( - R.drawable.rama, - "Yusuf Rahmat Pratama5", - "Eh, gmn gmn?" - )); - chatLists.add(new ChatList( - R.drawable.priagung, - "Priagung Satyagama6", - "Woi sini ke sekre 2 temani diriku yang kesepian" - )); - chatLists.add(new ChatList( - R.drawable.ilham, - "Ilham Firdausi Putra", - "Mantap betul" - )); + + FirebaseDatabase.getInstance().getReference().child("chatroom").addChildEventListener(new ChildEventListener() { + @Override + public void onChildAdded(@NonNull final DataSnapshot chatRoomSnapshot, @Nullable String s) { + Log.d(TAG, "onDataChange: chatroom changed"); + Log.d(TAG, "onDataChange: chatroom key " + chatRoomSnapshot.getKey()); + chatRoomSnapshot.getRef().child("users").addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot userSnapshot) { + Log.d(TAG, "onDataChange: users changed"); + Log.d(TAG, "onDataChange: userSnapshot count " + userSnapshot.getChildrenCount()); + for (DataSnapshot ds : userSnapshot.getChildren()) { + String instanceId = (String) ds.getValue(); + Log.d(TAG, "onDataChange: instance id " + instanceId); + if (!instanceId.equals(PreferencesHelper.getToken(getContext()))) { + Log.d(TAG, "onDataChange: user found"); + Log.d(TAG, "onDataChange: instance id 2 " + instanceId); + FirebaseDatabase.getInstance().getReference().child("user").orderByChild("key").limitToFirst(1) + .equalTo(instanceId).addChildEventListener(new UserChildListener(chatRoomSnapshot)); + } + } + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + + } + }); + } + + @Override + public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { + + } + + @Override + public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) { + + } + + @Override + public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) { + + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + + } + }); +// chatLists = new ArrayList<>(); +// chatLists.add(new ChatList( +// R.drawable.rama, +// "Yusuf Rahmat Pratama5", +// "Eh, gmn gmn?" +// )); +// chatLists.add(new ChatList( +// R.drawable.priagung, +// "Priagung Satyagama6", +// "Woi sini ke sekre 2 temani diriku yang kesepian" +// )); +// chatLists.add(new ChatList( +// R.drawable.ilham, +// "Ilham Firdausi Putra", +// "Mantap betul" +// )); return chatLists; } } diff --git a/android/app/src/main/java/com/chatman/fragment/ChatList.java b/android/app/src/main/java/com/chatman/fragment/ChatList.java index 1401eb169fb6670b1203942731cae05d1f0749fc..4b5ffd065755cbed6324f7f047fe48114c443699 100644 --- a/android/app/src/main/java/com/chatman/fragment/ChatList.java +++ b/android/app/src/main/java/com/chatman/fragment/ChatList.java @@ -54,66 +54,66 @@ public class ChatList extends Fragment { private List<com.chatman.model.ChatList> getChatLists() { chatLists = new ArrayList<>(); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.priagung, - "Priagung Satyagama", - "Woi sini ke sekre 2 temani diriku yang kesepian" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.rama, - "Yusuf Rahmat Pratama", - "Eh, gmn gmn?" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.priagung, - "Priagung Satyagama", - "Woi sini ke sekre 2 temani diriku yang kesepian" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.rama, - "Yusuf Rahmat Pratama", - "Eh, gmn gmn?" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.priagung, - "Priagung Satyagama", - "Woi sini ke sekre 2 temani diriku yang kesepian" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.rama, - "Yusuf Rahmat Pratama", - "Eh, gmn gmn?" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.priagung, - "Priagung Satyagama", - "Woi sini ke sekre 2 temani diriku yang kesepian" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.rama, - "Yusuf Rahmat Pratama", - "Eh, gmn gmn?" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.priagung, - "Priagung Satyagama", - "Woi sini ke sekre 2 temani diriku yang kesepian" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.rama, - "Yusuf Rahmat Pratama", - "Eh, gmn gmn?" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.priagung, - "Priagung Satyagama", - "Woi sini ke sekre 2 temani diriku yang kesepian" - )); - chatLists.add(new com.chatman.model.ChatList( - R.drawable.rama, - "Yusuf Rahmat Pratama", - "Eh, gmn gmn?" - )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.priagung, +// "Priagung Satyagama", +// "Woi sini ke sekre 2 temani diriku yang kesepian" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.rama, +// "Yusuf Rahmat Pratama", +// "Eh, gmn gmn?" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.priagung, +// "Priagung Satyagama", +// "Woi sini ke sekre 2 temani diriku yang kesepian" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.rama, +// "Yusuf Rahmat Pratama", +// "Eh, gmn gmn?" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.priagung, +// "Priagung Satyagama", +// "Woi sini ke sekre 2 temani diriku yang kesepian" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.rama, +// "Yusuf Rahmat Pratama", +// "Eh, gmn gmn?" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.priagung, +// "Priagung Satyagama", +// "Woi sini ke sekre 2 temani diriku yang kesepian" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.rama, +// "Yusuf Rahmat Pratama", +// "Eh, gmn gmn?" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.priagung, +// "Priagung Satyagama", +// "Woi sini ke sekre 2 temani diriku yang kesepian" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.rama, +// "Yusuf Rahmat Pratama", +// "Eh, gmn gmn?" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.priagung, +// "Priagung Satyagama", +// "Woi sini ke sekre 2 temani diriku yang kesepian" +// )); +// chatLists.add(new com.chatman.model.ChatList( +// R.drawable.rama, +// "Yusuf Rahmat Pratama", +// "Eh, gmn gmn?" +// )); return chatLists; } diff --git a/android/app/src/main/java/com/chatman/model/ChatList.java b/android/app/src/main/java/com/chatman/model/ChatList.java index 4d9e40a6a1c70abd8480fd6fbf41f6e9c634df04..a589e0ba83bbf243f9f51fb654377e95c6c26ace 100644 --- a/android/app/src/main/java/com/chatman/model/ChatList.java +++ b/android/app/src/main/java/com/chatman/model/ChatList.java @@ -4,17 +4,27 @@ public class ChatList { private int avatarResource; private String name; private String lastMessage; + private String idChatRoom; // Todo : tambahin atribut KEY atau apalah supaya ntar waktu ditekan, ke fragmentnya bisa dipass KEY itu terus data di dalam fragmentnya diambil berdasarkan KEY tersebut public ChatList() { } - public ChatList(int avatarResource, String name, String lastMessage) { + public ChatList(int avatarResource, String name, String lastMessage, String idChatRoom) { + this.idChatRoom = idChatRoom; this.avatarResource = avatarResource; this.name = name; this.lastMessage = lastMessage; } + public String getIdChatRoom() { + return idChatRoom; + } + + public void setIdChatRoom(String idChatRoom) { + this.idChatRoom = idChatRoom; + } + public int getAvatarResource() { return avatarResource; }