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() // ) // } }