/*
* Copyright (c) 2023 Samson Achiaga
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.certified.audionote.utils
import android.app.NotificationManager
import android.content.Context
import android.media.RingtoneManager
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationCompat.DEFAULT_ALL
import androidx.core.app.NotificationCompat.PRIORITY_HIGH
import androidx.core.content.res.ResourcesCompat
import androidx.navigation.NavDeepLinkBuilder
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.certified.audionote.R
import com.certified.audionote.model.Note
import com.certified.audionote.ui.EditNoteFragmentArgs
import com.certified.audionote.ui.main.MainActivity
class NotificationWorker(private val appContext: Context, workerParams: WorkerParameters) :
Worker(appContext, workerParams) {
override fun doWork(): Result {
val noteId = inputData.getInt("noteId", 0)
val noteTitle = inputData.getString("noteTitle")
val noteDescription = inputData.getString("noteDescription")
val noteColor = inputData.getInt("noteColor", -1)
val noteLastModificationDate = inputData.getLong("noteLastModificationDate", -1L)
val noteSize = inputData.getString("noteSize")
val noteAudioLength = inputData.getLong("noteAudioLength", 0L)
val noteFilePath = inputData.getString("noteFilePath")
val noteStarted = inputData.getBoolean("noteStarted", false)
val noteReminder = inputData.getLong("noteReminder", -1L)
val note = Note(
noteTitle!!,
noteDescription!!,
noteColor,
noteLastModificationDate,
noteSize!!,
noteAudioLength,
noteFilePath!!,
noteStarted,
noteReminder,
noteId,
)
notifyUser(appContext, note)
return Result.success()
}
private fun notifyUser(context: Context, note: Note) {
val defaultSoundUri =
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
val notificationManager =
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val pendingIntent =
NavDeepLinkBuilder(context)
.setGraph(R.navigation.navigation)
.setDestination(
R.id.editNoteFragment,
EditNoteFragmentArgs(note).toBundle()
)
.setComponentName(MainActivity::class.java)
.createPendingIntent()
val notificationBuilder =
NotificationCompat.Builder(context, context.getString(R.string.channelId))
.setSmallIcon(R.drawable.ic_baseline_notifications_24)
.setContentTitle(note.title)
.setContentText("Hi there, it's time to check out ${note.title}")
.setColor(ResourcesCompat.getColor(context.resources, R.color.primary, null))
.setSound(defaultSoundUri)
.setDefaults(DEFAULT_ALL)
.setContentIntent(pendingIntent)
.setPriority(PRIORITY_HIGH)
.setAutoCancel(true)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
notificationBuilder.setChannelId(context.getString(R.string.channelId))
notificationManager.notify(note.id, notificationBuilder.build())
}
}