Skip to content

Commit

Permalink
basic chat feature with badge and notification
Browse files Browse the repository at this point in the history
  • Loading branch information
mRahulJain committed May 27, 2020
1 parent 7f0f8b9 commit 67f101b
Show file tree
Hide file tree
Showing 13 changed files with 209 additions and 33 deletions.
3 changes: 2 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,11 @@
tools:ignore="LockedOrientationActivity" />

<activity android:name=".Activities.MessagesActivity"
android:parentActivityName=".Activities.InboxActivity"
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity" />

<service android:name=".Notification.FriendRequestMessagingService">
<service android:name=".Notification.NotificationMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package com.android.beastchat.Activities

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import androidx.fragment.app.Fragment
import com.android.beastchat.Fragments.InboxFragment
import com.android.beastchat.Models.constants
import com.android.beastchat.R
import com.google.firebase.database.FirebaseDatabase
import com.google.firebase.iid.FirebaseInstanceId

Expand All @@ -16,12 +20,15 @@ class InboxActivity : BaseFragmentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

var messageToken: String? = null
val sharedPreferences = getSharedPreferences(
constants().USER_INFO_PREFERENCE,
Context.MODE_PRIVATE
)
FirebaseInstanceId.getInstance().instanceId

supportActionBar!!.title = sharedPreferences.getString(constants().USER_NAME, "")!! + "'s Inbox"
FirebaseInstanceId.getInstance().instanceId
.addOnCompleteListener {
Log.d("myCHECK", "INSIDE ON COMPLETE")
if(!it.isSuccessful) {
Expand All @@ -39,4 +46,21 @@ class InboxActivity : BaseFragmentActivity() {
}
}

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
return true
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId) {
R.id.menu_main_createNewMessage -> {
val intent = Intent(application, FriendsActivity::class.java)
startActivity(intent)
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
finish()
return true
}
}
return true
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ class MessagesActivity : BaseFragmentActivity() {

override fun createFragment(): Fragment {
val friendDetails = intent!!.getStringArrayListExtra(EXTRA_FRIEND_DETAILS)

supportActionBar!!.title = friendDetails[2]
return MessageFragment().newInstant(friendDetails)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ class FriendsFragment : BaseFragments() {
private lateinit var mAllFriendRequestsReference: DatabaseReference
private lateinit var mUserEmailString: String

private lateinit var mUsersNewMessagesReference: DatabaseReference
private lateinit var mUserNewMessagesListener: ValueEventListener

fun newInstant() : FriendsFragment {
return FriendsFragment()
}
Expand Down Expand Up @@ -59,12 +62,18 @@ class FriendsFragment : BaseFragments() {
mTabLayout.setupWithViewPager(mViewPager)

mAllFriendRequestsListener = mLiveFriendsServices
.getFriendRequestBottom(nav, 0, activity!!)
.getFriendRequestBottom(nav, R.id.tab_friends, activity!!)
mAllFriendRequestsReference = FirebaseDatabase.getInstance()
.getReference().child(constants().FIREBASE_FRIEND_REQUEST_RECEIVED_PATH)
.child(constants().encodeEmail(mUserEmailString))
mAllFriendRequestsReference.addValueEventListener(mAllFriendRequestsListener)

mUsersNewMessagesReference = FirebaseDatabase.getInstance()
.getReference().child(constants().FIREBASE_PATH_USER_NEW_MESSAGES)
.child(constants().encodeEmail(mUserEmailString))
mUserNewMessagesListener = mLiveFriendsServices.getAllNewMessages(nav, R.id.tab_inbox, activity!!)
mUsersNewMessagesReference.addValueEventListener(mUserNewMessagesListener)

return rootView
}

Expand All @@ -75,5 +84,8 @@ class FriendsFragment : BaseFragments() {
if(mAllFriendRequestsListener != null) {
mAllFriendRequestsReference.removeEventListener(mAllFriendRequestsListener)
}
if(mUserNewMessagesListener != null) {
mUsersNewMessagesReference.removeEventListener(mUserNewMessagesListener)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ class InboxFragment : BaseFragments(), ChatRoomAdapter.ChatRoomListener {
private lateinit var mUserChatRoomReference: DatabaseReference
private lateinit var mUserChatRoomListener: ValueEventListener

private lateinit var mUsersNewMessagesReference: DatabaseReference
private lateinit var mUserNewMessagesListener: ValueEventListener

fun newInstant() : InboxFragment {
return InboxFragment()
}
Expand All @@ -62,7 +65,7 @@ class InboxFragment : BaseFragments(), ChatRoomAdapter.ChatRoomListener {
nav.selectedItemId = R.id.tab_inbox

mAllFriendRequestsListener = mLiveFriendsServices
.getFriendRequestBottom(nav, 0, activity!!)
.getFriendRequestBottom(nav, R.id.tab_friends, activity!!)
mAllFriendRequestsReference = FirebaseDatabase.getInstance()
.getReference().child(constants().FIREBASE_FRIEND_REQUEST_RECEIVED_PATH)
.child(constants().encodeEmail(mUserEmailString))
Expand All @@ -77,6 +80,12 @@ class InboxFragment : BaseFragments(), ChatRoomAdapter.ChatRoomListener {
mUserChatRoomReference.addValueEventListener(mUserChatRoomListener)
mRecyclerView.adapter = adapter

mUsersNewMessagesReference = FirebaseDatabase.getInstance()
.getReference().child(constants().FIREBASE_PATH_USER_NEW_MESSAGES)
.child(constants().encodeEmail(mUserEmailString))
mUserNewMessagesListener = mLiveFriendsServices.getAllNewMessages(nav, R.id.tab_inbox, activity!!)
mUsersNewMessagesReference.addValueEventListener(mUserNewMessagesListener)

return rootView
}

Expand All @@ -91,6 +100,10 @@ class InboxFragment : BaseFragments(), ChatRoomAdapter.ChatRoomListener {
if(mUserChatRoomListener != null) {
mUserChatRoomReference.removeEventListener(mUserChatRoomListener)
}

if(mUserNewMessagesListener != null) {
mUsersNewMessagesReference.removeEventListener(mUserNewMessagesListener)
}
}

override fun onChatRoomClicked(chatRoom: ChatRoom) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,14 +119,13 @@ class MessageFragment : BaseFragments() {
.getReference().child(constants().FIREBASE_PATH_USER_MESSAGES)
.child(constants().encodeEmail(mUserEmailString))
.child(constants().encodeEmail(mFriendEmailString))
mGetAllMessagesListener = mLiveFriendsServices.getAllMessages(mRecyclerView, mFriendName, mFriendPicture, adapter)
mGetAllMessagesListener = mLiveFriendsServices.getAllMessages(mRecyclerView, mFriendName, mFriendPicture, adapter, mUserEmailString)
mGetAllMessagesReference.addValueEventListener(mGetAllMessagesListener)
mRecyclerView.adapter = adapter

mUserChatRoomReference = FirebaseDatabase.getInstance()
.getReference().child(constants().FIREBASE_PATH_USER_CHATROOM)
.child(constants().encodeEmail(mUserEmailString))

mCompositeDisposable.add(
createChatRoomDisposable()
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ class ProfileFragment : BaseFragments() {
private lateinit var mAllFriendRequestsReference: DatabaseReference
private lateinit var mUserEmailString: String

private lateinit var mUsersNewMessagesReference: DatabaseReference
private lateinit var mUserNewMessagesListener: ValueEventListener

fun newInstant() : ProfileFragment {
return ProfileFragment()
}
Expand All @@ -47,12 +50,18 @@ class ProfileFragment : BaseFragments() {
nav.selectedItemId = R.id.tab_profile

mAllFriendRequestsListener = mLiveFriendsServices
.getFriendRequestBottom(nav, 0, activity!!)
.getFriendRequestBottom(nav, R.id.tab_friends, activity!!)
mAllFriendRequestsReference = FirebaseDatabase.getInstance()
.getReference().child(constants().FIREBASE_FRIEND_REQUEST_RECEIVED_PATH)
.child(constants().encodeEmail(mUserEmailString))
mAllFriendRequestsReference.addValueEventListener(mAllFriendRequestsListener)

mUsersNewMessagesReference = FirebaseDatabase.getInstance()
.getReference().child(constants().FIREBASE_PATH_USER_NEW_MESSAGES)
.child(constants().encodeEmail(mUserEmailString))
mUserNewMessagesListener = mLiveFriendsServices.getAllNewMessages(nav, R.id.tab_inbox, activity!!)
mUsersNewMessagesReference.addValueEventListener(mUserNewMessagesListener)

return rootView
}

Expand All @@ -63,5 +72,9 @@ class ProfileFragment : BaseFragments() {
if(mAllFriendRequestsListener != null) {
mAllFriendRequestsReference.removeEventListener(mAllFriendRequestsListener)
}

if(mUserNewMessagesListener != null) {
mUsersNewMessagesReference.removeEventListener(mUserNewMessagesListener)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.android.beastchat.Notification

import android.annotation.SuppressLint
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
Expand All @@ -12,27 +11,35 @@ import android.media.RingtoneManager
import android.os.Build
import androidx.core.app.NotificationCompat
import com.android.beastchat.Activities.FriendsActivity
import com.android.beastchat.Activities.InboxActivity
import com.android.beastchat.R
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage

class FriendRequestMessagingService : FirebaseMessagingService() {
class NotificationMessagingService : FirebaseMessagingService() {
override fun onMessageReceived(p0: RemoteMessage) {
super.onMessageReceived(p0)
var title = p0.data!!["title"]
var body = p0.data!!["body"]
sendNotification(title!!, body!!)

}

@SuppressLint("WrongConstant")
private fun sendNotification(title: String, body: String) {
val intent = Intent(this, FriendsActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
val pendingIntent = PendingIntent.getActivity(
val intentFriendRequest = Intent(this, FriendsActivity::class.java)
val intentNewMessage = Intent(this, InboxActivity::class.java)
intentFriendRequest.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
intentNewMessage.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
val pendingIntentFriendRequest = PendingIntent.getActivity(
this,
0,
intent,
intentFriendRequest,
PendingIntent.FLAG_UPDATE_CURRENT
)
val pendingIntentNewMessage= PendingIntent.getActivity(
this,
0,
intentNewMessage,
PendingIntent.FLAG_UPDATE_CURRENT
)
val pattern: Array<Long> = arrayOf(
Expand All @@ -54,17 +61,30 @@ class FriendRequestMessagingService : FirebaseMessagingService() {
nm.createNotificationChannel(mChannel)
}
}

val clickableNotification = NotificationCompat.Builder(this, "first")
.setContentTitle(title)
.setContentText(body)
.setVibrate(pattern.toLongArray())
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setLights(Color.BLUE, 1, 1)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setAutoCancel(true)
lateinit var clickableNotification: NotificationCompat.Builder
if(title == "New Message") {
clickableNotification = NotificationCompat.Builder(this, "first")
.setContentTitle(title)
.setContentText(body)
.setVibrate(pattern.toLongArray())
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setLights(Color.BLUE, 1, 1)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntentNewMessage)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setAutoCancel(true)
} else {
clickableNotification = NotificationCompat.Builder(this, "first")
.setContentTitle(title)
.setContentText(body)
.setVibrate(pattern.toLongArray())
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setLights(Color.BLUE, 1, 1)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntentFriendRequest)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setAutoCancel(true)
}

nm.notify(0, clickableNotification.build())
}
Expand Down
Loading

0 comments on commit 67f101b

Please sign in to comment.