Show success notification if validation passes after previously not passing. Resolves #4.

This commit is contained in:
Aidan Follestad 2019-01-08 16:39:00 -08:00
parent e3820fd7d3
commit cbac2796aa
6 changed files with 66 additions and 13 deletions

View file

@ -19,8 +19,8 @@ import android.app.job.JobParameters
import android.app.job.JobService
import android.content.Intent
import com.afollestad.nocknock.data.AppDatabase
import com.afollestad.nocknock.data.model.RetryPolicy
import com.afollestad.nocknock.data.getSite
import com.afollestad.nocknock.data.model.RetryPolicy
import com.afollestad.nocknock.data.model.Site
import com.afollestad.nocknock.data.model.Status
import com.afollestad.nocknock.data.model.Status.CHECKING
@ -80,6 +80,10 @@ class ValidationJob : JobService() {
sendBroadcast(Intent(ACTION_JOB_RUNNING).apply { putExtra(KEY_SITE_ID, site.id) })
log("Checking ${site.name} (${site.url})...")
val lastResult = site.lastResult
if (lastResult != null) {
log("Result of previous attempt: ${lastResult.status}")
}
val jobResult = async(IO) {
updateStatus(site, CHECKING)
@ -139,6 +143,9 @@ class ValidationJob : JobService() {
if (jobResult.lastResult!!.status == OK) {
notificationManager.cancelStatusNotification(jobResult)
if (lastResult != null && lastResult.status != OK) {
notificationManager.postValidationSuccessNotification(jobResult)
}
} else {
val retryPolicy = site.retryPolicy
if (retryPolicy != null) {
@ -167,7 +174,7 @@ class ValidationJob : JobService() {
}
}
notificationManager.postStatusNotification(jobResult)
notificationManager.postValidationErrorNotification(jobResult)
}
validationManager.scheduleValidation(

View file

@ -24,7 +24,13 @@ enum class Channel(
val description: Int,
val importance: Int
) {
CheckFailures(
ValidationSuccess(
id = "check_success",
title = R.string.channel_server_check_success_title,
description = R.string.channel_server_check_success_description,
importance = IMPORTANCE_DEFAULT
),
ValidationErrors(
id = "check_failures",
title = R.string.channel_server_check_failures_title,
description = R.string.channel_server_check_failures_description,

View file

@ -18,7 +18,7 @@ package com.afollestad.nocknock.notifications
import android.annotation.TargetApi
import android.app.NotificationManager
import android.os.Build.VERSION_CODES
import com.afollestad.nocknock.notifications.Channel.CheckFailures
import com.afollestad.nocknock.notifications.Channel.ValidationErrors
import com.afollestad.nocknock.utilities.providers.CanNotifyModel
import com.afollestad.nocknock.utilities.providers.IntentProvider
import com.afollestad.nocknock.utilities.providers.NotificationChannelProvider
@ -34,7 +34,9 @@ interface NockNotificationManager {
fun createChannels()
fun postStatusNotification(model: CanNotifyModel)
fun postValidationErrorNotification(model: CanNotifyModel)
fun postValidationSuccessNotification(model: CanNotifyModel)
fun cancelStatusNotification(model: CanNotifyModel)
@ -60,26 +62,48 @@ class RealNockNotificationManager(
override fun createChannels() =
Channel.values().forEach(this::createChannel)
override fun postStatusNotification(model: CanNotifyModel) {
override fun postValidationErrorNotification(model: CanNotifyModel) {
if (isAppOpen) {
// Don't show notifications while the app is open
log("App is open, status notification for site ${model.notifyId()} won't be posted.")
log("App is open, validation error notification for site ${model.notifyId()} won't be posted.")
return
}
log("Posting status notification for site ${model.notifyId()}...")
log("Posting validation error notification for site ${model.notifyId()}...")
val intent = intentProvider.getPendingIntentForViewSite(model)
val newNotification = notificationProvider.create(
channelId = CheckFailures.id,
channelId = ValidationErrors.id,
title = model.notifyName(),
content = model.notifyDescription() ?: stringProvider.get(R.string.something_wrong),
intent = intent,
smallIcon = R.drawable.ic_notification
smallIcon = R.drawable.ic_notification_error
)
stockManager.notify(model.notifyTag(), model.notificationId(), newNotification)
log("Posted status notification for site ${model.notificationId()}.")
log("Posted validation error notification for site ${model.notificationId()}.")
}
override fun postValidationSuccessNotification(model: CanNotifyModel) {
if (isAppOpen) {
// Don't show notifications while the app is open
log("App is open, validation success notification for site ${model.notifyId()} won't be posted.")
return
}
log("Posting validation success notification for site ${model.notifyId()}...")
val intent = intentProvider.getPendingIntentForViewSite(model)
val newNotification = notificationProvider.create(
channelId = ValidationErrors.id,
title = model.notifyName(),
content = stringProvider.get(R.string.validation_passed),
intent = intent,
smallIcon = R.drawable.ic_notification_success
)
stockManager.notify(model.notifyTag(), model.notificationId(), newNotification)
log("Posted validation success notification for site ${model.notificationId()}.")
}
override fun cancelStatusNotification(model: CanNotifyModel) {

View file

@ -0,0 +1,10 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0"
android:width="24dp">
<path
android:fillColor="#FFFFFF"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z"/>
</vector>

View file

@ -1,12 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="channel_server_check_failures_title">Server Check Failures</string>
<string name="channel_server_check_failures_title">Site Validation Failures</string>
<string name="channel_server_check_failures_description">
Notifications for Nock Nock status checks failing for your sites. Something has gone
Notifications for Nock Nock validations failing for your sites. Something has gone
wrong if you see one of these.
</string>
<string name="channel_server_check_success_title">Site Validation Success</string>
<string name="channel_server_check_success_description">
Notifications for Nock Nock when a site validation passes when it previously had not.
</string>
<string name="something_wrong">Something\'s wrong! Tap for details.</string>
<string name="validation_passed">Yay! No longer in trouble! Validation passed.</string>
</resources>