Skip to content

Commit

Permalink
Merge pull request #258 from toquete/alarm_module
Browse files Browse the repository at this point in the history
Creating alarm module
  • Loading branch information
toquete authored Jun 23, 2024
2 parents 3bbe606 + 3dd30f0 commit 488f31e
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 0 deletions.
1 change: 1 addition & 0 deletions core/alarm/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
8 changes: 8 additions & 0 deletions core/alarm/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
plugins {
id("boxbox.android.library")
id("boxbox.android.hilt")
}

android {
namespace = "com.toquete.boxbox.core.alarm"
}
4 changes: 4 additions & 0 deletions core/alarm/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest>

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.toquete.boxbox.core.alarm

import com.toquete.boxbox.core.alarm.model.AlarmItem

interface AlarmScheduler {
fun setAndAllowWhileIdle(alarmItem: AlarmItem)
fun cancel(alarmItem: AlarmItem)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.toquete.boxbox.core.alarm

import android.app.AlarmManager
import android.app.PendingIntent
import android.content.Context
import com.toquete.boxbox.core.alarm.model.AlarmItem
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toInstant
import javax.inject.Inject

internal class DefaultAlarmScheduler @Inject constructor(
@ApplicationContext private val context: Context,
private val alarmManager: AlarmManager
) : AlarmScheduler {

override fun setAndAllowWhileIdle(alarmItem: AlarmItem) {
alarmManager.setAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
getAlarmTime(alarmItem),
getPendingIntent(alarmItem)
)
}

override fun cancel(alarmItem: AlarmItem) {
alarmManager.cancel(getPendingIntent(alarmItem))
}

private fun getAlarmTime(alarmItem: AlarmItem): Long {
return alarmItem.dateTime
.toInstant(TimeZone.currentSystemDefault())
.toEpochMilliseconds()
}

private fun getPendingIntent(alarmItem: AlarmItem): PendingIntent {
return PendingIntent.getBroadcast(
context,
alarmItem.hashCode(),
alarmItem.intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.toquete.boxbox.core.alarm.di

import android.app.AlarmManager
import android.content.Context
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
internal object AlarmModule {

@Singleton
@Provides
fun provideAlarmManager(@ApplicationContext context: Context): AlarmManager {
return context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.toquete.boxbox.core.alarm.di

import com.toquete.boxbox.core.alarm.AlarmScheduler
import com.toquete.boxbox.core.alarm.DefaultAlarmScheduler
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(SingletonComponent::class)
internal abstract class AlarmSchedulerModule {

@Binds
abstract fun bindNotificationScheduler(
defaultNotificationScheduler: DefaultAlarmScheduler
): AlarmScheduler
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.toquete.boxbox.core.alarm.model

import android.content.Intent
import kotlinx.datetime.LocalDateTime

data class AlarmItem(
val intent: Intent,
val dateTime: LocalDateTime,
val message: String
)
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ include(":core:database")
include(":core:network")
include(":core:common")
include(":core:testing")
include(":core:alarm")
include(":data:countries")
include(":data:drivers")
include(":data:driverstandings")
Expand Down

0 comments on commit 488f31e

Please sign in to comment.