127 lines
6.0 KiB
Kotlin
127 lines
6.0 KiB
Kotlin
package com.adlerosn.brasilfurfest.notification
|
|
|
|
import android.app.Notification
|
|
import android.app.PendingIntent
|
|
import android.content.Context
|
|
import android.content.Intent
|
|
import android.net.Uri
|
|
import androidx.core.app.NotificationCompat
|
|
import androidx.core.app.NotificationManagerCompat
|
|
import android.util.Log
|
|
import com.adlerosn.brasilfurfest.R
|
|
import com.adlerosn.brasilfurfest.helper.notificationBuilderCompat
|
|
import com.adlerosn.brasilfurfest.helper.runtimeLanguage
|
|
import com.adlerosn.brasilfurfest.schedule.EventActivity
|
|
import com.adlerosn.brasilfurfest.schedule.managers.ScheduleManagerGetter
|
|
import java.io.PrintWriter
|
|
import java.io.StringWriter
|
|
import java.util.*
|
|
|
|
class NotificationFirer {
|
|
fun fire(context: Context){
|
|
try {
|
|
val scheduleManager = ScheduleManagerGetter[context]
|
|
val timeForNotification = scheduleManager.convention.notificationFireMinutesBefore*60*1000.toLong() + scheduleManager.conventionTime.timeInMillis
|
|
val dateForNotification = GregorianCalendar().apply { timeInMillis=timeForNotification }
|
|
val toNotify =
|
|
scheduleManager.attendeeFavorites
|
|
.toList()
|
|
.filter { dateForNotification in it.timeRange }
|
|
.filterNot { it.notified }
|
|
.sortedBy { -it.timeRange.start.timeInMillis }
|
|
val notificationManager = NotificationManagerCompat.from(context)
|
|
toNotify.withIndex().forEach {
|
|
val builder = context.notificationBuilderCompat(R.string.defaultNotificationChannel, true)
|
|
.setDefaults(Notification.DEFAULT_ALL)
|
|
.setSmallIcon(R.drawable.ic_notificacao)
|
|
.setContentTitle(it.value.getString())
|
|
.setContentText(it.value.getSecondaryString())
|
|
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
|
.setTimeoutAfter(
|
|
it.value.timeRange.let { cal ->
|
|
cal.finish.timeInMillis - cal.start.timeInMillis
|
|
}
|
|
)
|
|
.setWhen(it.value.timeRange.start.timeInMillis)
|
|
.setShowWhen(true)
|
|
.setContentIntent(
|
|
PendingIntent.getActivity(
|
|
context,
|
|
it.value.getString().hashCode(),
|
|
Intent(context, EventActivity::class.java).apply {
|
|
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_TASK_ON_HOME
|
|
putExtra("favorite", it.value)
|
|
putExtra("fromNotification", true)
|
|
},
|
|
0
|
|
)
|
|
)
|
|
notificationManager.notify(
|
|
((timeForNotification+it.index)%Int.MAX_VALUE).toInt(),
|
|
builder.build()
|
|
)
|
|
}
|
|
toNotify.forEach {
|
|
it.notified = true
|
|
}
|
|
} catch (e: Throwable) {
|
|
val writer = StringWriter()
|
|
e.printStackTrace(PrintWriter(writer))
|
|
val s = writer.toString()
|
|
Log.e(NotificationFirer::class.java.simpleName, s)
|
|
}
|
|
///////////////////////
|
|
try {
|
|
val notificationManager = NotificationManagerCompat.from(context)
|
|
val scheduleManager = ScheduleManagerGetter[context]
|
|
val announcements = scheduleManager.unreadAnnouncements
|
|
scheduleManager.setAnnouncementsRead()
|
|
announcements.forEach { announcement ->
|
|
val title = announcement.title[context.runtimeLanguage]
|
|
val body = announcement.body[context.runtimeLanguage]
|
|
val link = announcement.link?.get(context.runtimeLanguage)
|
|
val nt = context.notificationBuilderCompat(R.string.announcementsNotificationChannel, true)
|
|
.setDefaults(Notification.DEFAULT_ALL)
|
|
.setSmallIcon(R.drawable.ic_notificacao)
|
|
.setContentTitle(title)
|
|
.setContentText(body)
|
|
.let { builder ->
|
|
if(link==null)
|
|
builder
|
|
else
|
|
builder.setContentIntent(
|
|
PendingIntent.getActivity(
|
|
context,
|
|
announcement.uuid.hashCode(),
|
|
Intent(Intent.ACTION_VIEW, Uri.parse(link)),
|
|
0
|
|
)
|
|
)
|
|
}
|
|
.setPriority(NotificationCompat.PRIORITY_HIGH)
|
|
notificationManager.notify(
|
|
1, nt.build()
|
|
)
|
|
|
|
}
|
|
} catch (e: Throwable) {
|
|
val writer = StringWriter()
|
|
e.printStackTrace(PrintWriter(writer))
|
|
val s = writer.toString()
|
|
Log.e(NotificationFirer::class.java.simpleName, s)
|
|
}
|
|
}
|
|
|
|
// fun firePing(context: Context){
|
|
// val notificationManager = NotificationManagerCompat.from(context)
|
|
// val nt = context.notificationBuilderCompat(R.string.defaultNotificationChannel, true)
|
|
// .setDefaults(Notification.DEFAULT_ALL)
|
|
// .setSmallIcon(R.drawable.ic_notificacao)
|
|
// .setContentTitle("Ping")
|
|
// .setContentText("It works!")
|
|
// .setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
|
// notificationManager.notify(
|
|
// 1, nt.build()
|
|
// )
|
|
// }
|
|
} |