Приложение

This commit is contained in:
Халимов Рустам
2026-04-14 01:15:54 +03:00
parent 8399d32490
commit 1fb1be47dd
126 changed files with 6145 additions and 0 deletions
@@ -0,0 +1,78 @@
package core.notifications.data
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build
import androidx.core.app.NotificationCompat
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import auth.data.remote.api.AuthApi
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch
import javax.inject.Inject
@AndroidEntryPoint
class ForkFirebaseMessagingService : FirebaseMessagingService() {
@Inject
lateinit var authApi: AuthApi
private val job = SupervisorJob()
private val scope = CoroutineScope(Dispatchers.IO + job)
override fun onNewToken(token: String) {
super.onNewToken(token)
// Отправляем новый токен на сервер
scope.launch {
try {
authApi.updatePushToken(token)
} catch (e: Exception) {
// Ошибка логируется или игнорируется (сервер может быть недоступен)
}
}
}
override fun onMessageReceived(message: RemoteMessage) {
super.onMessageReceived(message)
val title = message.notification?.title ?: message.data["title"]
val body = message.notification?.body ?: message.data["body"]
val type = message.data["type"] // "chat", "call", "story"
showNotification(title, body, type)
}
private fun showNotification(title: String?, body: String?, type: String?) {
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val channelId = "fork_notifications_channel"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
channelId,
"Fork Messenger Notifications",
NotificationManager.IMPORTANCE_HIGH
)
notificationManager.createNotificationChannel(channel)
}
val notificationBuilder = NotificationCompat.Builder(this, channelId)
.setSmallIcon(android.R.drawable.ic_dialog_info) // Заменить на наш Indigo-логотип
.setContentTitle(title)
.setContentText(body)
.setAutoCancel(true)
.setPriority(NotificationCompat.PRIORITY_HIGH)
notificationManager.notify(System.currentTimeMillis().toInt(), notificationBuilder.build())
}
override fun onDestroy() {
job.cancel()
super.onDestroy()
}
}