package jp.juggler.subwaytooter import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import jp.juggler.subwaytooter.notification.TrackingType import jp.juggler.subwaytooter.notification.onNotificationDeleted import jp.juggler.subwaytooter.table.daoNotificationTracking import jp.juggler.util.coroutine.launchMain import jp.juggler.util.data.notEmpty import jp.juggler.util.log.LogCategory import jp.juggler.util.os.applicationContextSafe class EventReceiver : BroadcastReceiver() { companion object { internal val log = LogCategory("EventReceiver") const val ACTION_NOTIFICATION_DELETE = "notification_delete" } override fun onReceive(context: Context, intent: Intent?) { launchMain { try { log.i("onReceive action=${intent?.action}") when (val action = intent?.action) { Intent.ACTION_BOOT_COMPLETED, Intent.ACTION_MY_PACKAGE_REPLACED, -> { App1.prepare(context.applicationContextSafe, action) daoNotificationTracking.resetPostAll() } ACTION_NOTIFICATION_DELETE, -> intent.data?.let { uri -> val dbId = uri.getQueryParameter("db_id")?.toLongOrNull() val type = TrackingType.parseStr(uri.getQueryParameter("type")) val typeName = type.typeName val id = uri.getQueryParameter("notificationId")?.notEmpty() log.d("Notification deleted! db_id=$dbId,type=$type,id=$id") if (dbId != null) { onNotificationDeleted(dbId, typeName) } } else -> log.e("onReceive: unsupported action $action") } } catch (ex: Throwable) { log.e(ex, "resetPostAll failed.") } } } }