1+ @file:Suppress(" MoveVariableDeclarationIntoWhen" )
2+
13package com.lgtm.android
24
35import android.app.NotificationChannel
46import android.app.NotificationManager
7+ import android.app.PendingIntent
8+ import android.app.TaskStackBuilder
9+ import android.content.ContentValues.TAG
510import android.content.Context
6- import android.graphics.Bitmap
11+ import android.content.Intent
712import android.util.Log
813import androidx.core.app.NotificationCompat
14+ import androidx.core.content.ContextCompat
915import com.google.firebase.messaging.FirebaseMessaging
1016import com.google.firebase.messaging.FirebaseMessagingService
1117import com.google.firebase.messaging.RemoteMessage
1218import com.lgtm.android.common_ui.R
19+ import com.lgtm.android.main.MainActivity
20+ import com.lgtm.android.manage_mission.dashboard.DashboardActivity
21+ import com.lgtm.android.manage_mission.ping_pong_junior.PingPongJuniorActivity
22+ import com.lgtm.domain.constants.ProcessState.CODE_REVIEW
23+ import com.lgtm.domain.constants.ProcessState.MISSION_FINISHED
24+ import com.lgtm.domain.constants.ProcessState.MISSION_PROCEEDING
25+ import com.lgtm.domain.constants.ProcessState.PAYMENT_CONFIRMATION
26+ import com.lgtm.domain.constants.ProcessState.WAITING_FOR_PAYMENT
27+ import com.lgtm.domain.constants.ProcessState.valueOf
1328import com.lgtm.domain.firebase.LgtmMessagingService
1429import com.lgtm.domain.usecase.DeviceTokenManagerUseCase
1530import dagger.hilt.android.AndroidEntryPoint
1631import javax.inject.Inject
1732
18-
1933@AndroidEntryPoint
2034class LGTMFirebaseMessagingService : FirebaseMessagingService (), LgtmMessagingService {
2135 @Inject
@@ -29,31 +43,65 @@ class LGTMFirebaseMessagingService : FirebaseMessagingService(), LgtmMessagingSe
2943 override fun onMessageReceived (remoteMessage : RemoteMessage ) {
3044 super .onMessageReceived(remoteMessage)
3145
46+ Log .d(TAG , " onMessageReceived: ${remoteMessage.data} " )
47+
3248 if (remoteMessage.data.isNotEmpty()) {
33- // data 확인
49+ handleDataType(remoteMessage. data)
3450 }
3551
3652 remoteMessage.notification?.let {
37- generateNotification (it.title !! , it.body !! )
53+ handleNotificationType (it)
3854 }
3955 }
4056
41- private fun generateNotification (
42- title : String? ,
43- message : String? ,
44- image : Bitmap ? = null,
45- ) {
57+ private fun handleDataType (data : Map <String , String >) {
4658 val requestCode = System .currentTimeMillis().toInt()
4759
48- val builder = NotificationCompat .Builder (this , channelID)
60+ val title = data[" title" ]
61+ val body = data[" body" ]
62+ val missionId: Int? = data[" missionId" ]?.toInt()
63+ val processState = data[" pushCategory" ]?.let { valueOf(it) }
64+ val intent = when (processState) {
65+ WAITING_FOR_PAYMENT , PAYMENT_CONFIRMATION , CODE_REVIEW ->
66+ Intent (this , DashboardActivity ::class .java)
67+ .putExtra(DashboardActivity .MISSION_ID , missionId)
68+
69+ MISSION_PROCEEDING , MISSION_FINISHED ->
70+ Intent (this , PingPongJuniorActivity ::class .java)
71+ .putExtra(DashboardActivity .MISSION_ID , missionId)
72+
73+ else -> return
74+ }
75+
76+ val mainIntent = Intent (this , MainActivity ::class .java)
77+
78+ val stackBuilder = TaskStackBuilder .create(this )
79+ .addParentStack(MainActivity ::class .java)
80+ .addNextIntent(mainIntent)
81+ .addNextIntent(intent)
82+
83+ val resultPendingIntent = stackBuilder.getPendingIntent(0 , PendingIntent .FLAG_IMMUTABLE )
84+
85+ val builder = createNotificationBuilder(title, body, resultPendingIntent)
86+ notifyWithChannel(requestCode, builder)
87+ }
88+
89+ private fun createNotificationBuilder (
90+ title : String? ,
91+ message : String? ,
92+ contentIntent : PendingIntent ? ,
93+ ): NotificationCompat .Builder {
94+ return NotificationCompat .Builder (this , channelID)
4995 .setPriority(NotificationCompat .PRIORITY_HIGH )
50- .setSmallIcon(R .drawable.ic_launcher_foreground )
51- // .setColor(Color.argb(255, 133, 120, 255)) // havit_purple
96+ .setSmallIcon(R .drawable.ic_launch_mono )
97+ .setColor(ContextCompat .getColor( this , R .color.green))
5298 .setAutoCancel(true )
5399 .setContentTitle(title)
54- .setLargeIcon(image)
55100 .setStyle(NotificationCompat .BigTextStyle ().bigText(message))
101+ .setContentIntent(contentIntent)
102+ }
56103
104+ private fun notifyWithChannel (requestCode : Int , builder : NotificationCompat .Builder ) {
57105 val notificationManager =
58106 getSystemService(Context .NOTIFICATION_SERVICE ) as NotificationManager
59107
@@ -63,6 +111,15 @@ class LGTMFirebaseMessagingService : FirebaseMessagingService(), LgtmMessagingSe
63111 notificationManager.notify(requestCode, builder.build())
64112 }
65113
114+ private fun handleNotificationType (notification : RemoteMessage .Notification ) {
115+ val title = notification.title ? : " "
116+ val message = notification.body ? : " "
117+ val requestCode = System .currentTimeMillis().toInt()
118+
119+ val builder = createNotificationBuilder(title, message, null )
120+ notifyWithChannel(requestCode, builder)
121+ }
122+
66123 override fun getDeviceToken (tokenCallBack : (String? ) -> Unit ) {
67124 FirebaseMessaging .getInstance().token.addOnCompleteListener { task ->
68125 if (! task.isSuccessful) {
0 commit comments