diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/data/contacts/ContactSpecialDatesDataSource.kt b/app/src/main/java/de/jeanlucmakiola/calendula/data/contacts/ContactSpecialDatesDataSource.kt index c7588d5..13449ed 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/data/contacts/ContactSpecialDatesDataSource.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/data/contacts/ContactSpecialDatesDataSource.kt @@ -28,6 +28,11 @@ interface ContactSpecialDatesDataSource { fun readSpecialDates(): List } +/** Whether `READ_CONTACTS` is granted — the gate for every contacts read. */ +fun Context.hasContactsPermission(): Boolean = + ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) == + PackageManager.PERMISSION_GRANTED + /** Map a `ContactsContract` event `TYPE` to our calendar bucket. */ internal fun specialDateTypeForRawEventType(type: Int): SpecialDateType = when (type) { Event.TYPE_BIRTHDAY -> SpecialDateType.Birthday @@ -40,9 +45,7 @@ class AndroidContactSpecialDatesDataSource @Inject constructor( @ApplicationContext private val context: Context, ) : ContactSpecialDatesDataSource { - override fun hasPermission(): Boolean = - ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) == - PackageManager.PERMISSION_GRANTED + override fun hasPermission(): Boolean = context.hasContactsPermission() override fun readSpecialDates(): List { if (!hasPermission()) return emptyList() diff --git a/app/src/main/java/de/jeanlucmakiola/calendula/ui/RootScreen.kt b/app/src/main/java/de/jeanlucmakiola/calendula/ui/RootScreen.kt index d3da90d..3e7a2f3 100644 --- a/app/src/main/java/de/jeanlucmakiola/calendula/ui/RootScreen.kt +++ b/app/src/main/java/de/jeanlucmakiola/calendula/ui/RootScreen.kt @@ -20,6 +20,7 @@ import androidx.core.content.ContextCompat import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import de.jeanlucmakiola.calendula.data.contacts.SpecialDatesScheduler +import de.jeanlucmakiola.calendula.data.contacts.hasContactsPermission import de.jeanlucmakiola.calendula.ui.permission.PermissionScreen import de.jeanlucmakiola.calendula.ui.permission.ReminderOnboardingScreen import de.jeanlucmakiola.calendula.ui.permission.ReminderOnboardingViewModel @@ -53,10 +54,7 @@ fun RootScreen( // Refresh the contact special-dates mirror on foreground (the // worker is debounced and no-ops when the feature is off). Gated // on the permission so users without the opt-in never enqueue it. - if (ContextCompat.checkSelfPermission( - context, Manifest.permission.READ_CONTACTS - ) == PackageManager.PERMISSION_GRANTED - ) { + if (context.hasContactsPermission()) { SpecialDatesScheduler.runNow(context, foreground = true) } }