Skip to content

Commit

Permalink
Setup contacts and other lists for store resources
Browse files Browse the repository at this point in the history
  • Loading branch information
Abhriya committed Jan 14, 2021
1 parent 4ed0ffa commit bc8c0cf
Show file tree
Hide file tree
Showing 44 changed files with 282 additions and 491 deletions.
6 changes: 2 additions & 4 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,6 @@ dependencies {
implementation(Libs.coroutineAndroid)
// Lifecycle components
implementation(Libs.lifecycleComponentExtension)
implementation("org.jetbrains.kotlin:kotlin-stdlib:${rootProject.extra["kotlin_version"]}")
implementation("androidx.legacy:legacy-support-v4:1.0.0")
kapt(Libs.lifecycleComponentExtension)
// Viewmodel
implementation(Libs.viewmodel)
Expand Down Expand Up @@ -96,8 +94,8 @@ dependencies {

implementation(Libs.fuzzySearch)

implementation(project(":commons"))
implementation(project(":datasource"))
implementation(project(Modules.commons))
implementation(project(Modules.datasource))


}
21 changes: 16 additions & 5 deletions app/src/main/java/com/abhriya/callblockr/NotificationProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import android.content.Intent
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import com.abhriya.callblockr.util.stringRes
import com.abhriya.commons.SystemPermissionUtil
import com.abhriya.commons.util.stringRes

interface NotificationProvider {
fun showCallBlockNotification(
Expand All @@ -17,7 +17,11 @@ interface NotificationProvider {
number: String
)

fun showKeepAppAliveForegroundNotification(context: Context, service: Service, onNotificationClickIntent: Intent)
fun showKeepAppAliveForegroundNotification(
context: Context,
service: Service,
onNotificationClickIntent: Intent
)
}

const val NOTIFICATION_ID = "notif_id"
Expand All @@ -26,7 +30,8 @@ const val NOTIFICATION_CHANNEL_DESCRIPTION = "Call blocked"
const val NOTIFICATION_CHANNEL_ID = "call_blocker_defaul_channel"
const val DEFAULT_CHANNEL_GROUP = "defaul_group"

class NotificationsProviderImpl(private val systemPermissionUtil: SystemPermissionUtil) : NotificationProvider {
class NotificationsProviderImpl(private val systemPermissionUtil: SystemPermissionUtil) :
NotificationProvider {

private var serviceKeepAliveDescriptiontext = ""

Expand Down Expand Up @@ -75,12 +80,18 @@ class NotificationsProviderImpl(private val systemPermissionUtil: SystemPermissi
service: Service,
onNotificationClickIntent: Intent
) {
val contentText = if(systemPermissionUtil.getMissingPermissionsArray(systemPermissionUtil.checkPermissions(context, getListOfRequiredPermissions())).isNotEmpty()){
val contentText = if (systemPermissionUtil.getMissingPermissionsArray(
systemPermissionUtil.checkPermissions(
context,
getListOfRequiredPermissions()
)
).isNotEmpty()
) {
service.stringRes(R.string.call_blocker_not_running_due_to_missing_permission)
} else {
service.stringRes(R.string.call_blocker_running)
}
if(contentText!=serviceKeepAliveDescriptiontext){
if (contentText != serviceKeepAliveDescriptiontext) {
serviceKeepAliveDescriptiontext = contentText
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationManager =
Expand Down
11 changes: 6 additions & 5 deletions app/src/main/java/com/abhriya/callblockr/PhoneReceiver.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import android.telecom.TelecomManager
import android.telephony.TelephonyManager
import androidx.annotation.NonNull
import androidx.annotation.RequiresApi
import com.abhriya.callblockr.util.stringRes
import com.abhriya.commons.util.stringRes
import com.abhriya.datasource.local.LocalDataSource
import com.android.internal.telephony.ITelephony
import kotlinx.coroutines.GlobalScope
Expand Down Expand Up @@ -58,14 +58,13 @@ class PhoneReceiverImpl(
?: return false
if (incomingNumber.isNotBlank()) {
val contactData = localDataSource.getBlockedContactByNumber(incomingNumber)
println("contact data obtained $contactData")
return contactData != null
}
return false
}

@SuppressLint("MissingPermission")
private fun rejectCall(
private suspend fun rejectCall(
@NonNull context: Context,
intent: Intent,
onNotificationClickIntent: Intent
Expand All @@ -81,11 +80,13 @@ class PhoneReceiverImpl(
// Handle accordingly
}
}
val notificationBodyIdentifier: String? =
localDataSource.getBlockedContactByNumber(intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER))?.name
?: intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)
notificationProvider.showCallBlockNotification(
context,
onNotificationClickIntent,
intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER)
?: context.stringRes(R.string.unknown)
notificationBodyIdentifier ?: context.stringRes(R.string.unknown)
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ import androidx.annotation.CallSuper

abstract class HiltBroadcastReceiver : BroadcastReceiver() {
@CallSuper
override fun onReceive(context: Context, intent: Intent) {}
override fun onReceive(context: Context, intent: Intent) {
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.abhriya.callblockr.broadcastreceiver

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.abhriya.callblockr.ui.MainActivity
import com.abhriya.callblockr.PhoneReceiver
import com.abhriya.callblockr.ui.MainActivity
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.abhriya.callblockr.model
package com.abhriya.callblockr.data.entity

data class DeviceContactsEntity(
val name: String?,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.abhriya.callblockr.data.mapper

import com.abhriya.callblockr.data.entity.ContactEntity
import com.abhriya.callblockr.util.removeAllWhiteSpaces
import com.abhriya.callblockr.model.DeviceContactsEntity
import com.abhriya.callblockr.data.entity.DeviceContactsEntity
import com.abhriya.commons.util.removeAllWhiteSpaces
import com.abhriya.datasource.local.entity.ContactDbEntity

internal object ContactEntityMapper {
Expand All @@ -19,7 +19,10 @@ internal object ContactEntityMapper {

internal fun mapToDeviceContactEntityFromContactEntity(contactEntity: ContactEntity): DeviceContactsEntity =
contactEntity.let {
DeviceContactsEntity(it.name, it.number)
DeviceContactsEntity(
it.name,
it.number
)
}

internal fun mapToContactEntityFromDeviceContactEntity(deviceContactsEntity: DeviceContactsEntity): ContactEntity =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package com.abhriya.callblockr.data
package com.abhriya.callblockr.data.repository

import com.abhriya.callblockr.calllogprovider.CallLogProvider
import com.abhriya.callblockr.contactsprovider.ContactsProvider
import com.abhriya.callblockr.data.entity.CallLogEntity
import com.abhriya.callblockr.data.entity.ContactEntity
import com.abhriya.callblockr.data.exception.DataLayerException
import com.abhriya.callblockr.data.mapper.ContactEntityMapper
import com.abhriya.callblockr.domain.model.CallLogModel
import com.abhriya.callblockr.data.source.CallLogDataSource
import com.abhriya.callblockr.data.source.ContactsDataSource
import com.abhriya.datasource.local.LocalDataSource
import com.abhriya.datasource.local.exception.DatabaseException

Expand All @@ -20,8 +19,8 @@ interface ContactsRepository {

class ContactsRepositoryImpl(
private val localDataSource: LocalDataSource,
private val contactsProvider: ContactsProvider,
private val callLogProvider: CallLogProvider,
private val contactsDataSource: ContactsDataSource,
private val callLogDataSource: CallLogDataSource
) : ContactsRepository {
override suspend fun saveBlockedContact(contactEntity: ContactEntity) {
try {
Expand Down Expand Up @@ -55,13 +54,13 @@ class ContactsRepositoryImpl(
}

override suspend fun getAllContactsFromDevice(): List<ContactEntity> {
return contactsProvider.getAllContactsFromDevice()
return contactsDataSource.getAllContactsFromDevice()
.map {
ContactEntityMapper.mapToContactEntityFromDeviceContactEntity(it)
}
}

override suspend fun getAllCallLogs(): List<CallLogEntity> {
return callLogProvider.getCallLog()
return callLogDataSource.getCallLog()
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.abhriya.callblockr.calllogprovider
package com.abhriya.callblockr.data.source

import android.Manifest
import android.content.Context
Expand All @@ -9,14 +9,14 @@ import com.abhriya.callblockr.data.entity.CallType
import com.abhriya.commons.SystemPermissionUtil
import dagger.hilt.android.qualifiers.ApplicationContext

interface CallLogProvider {
interface CallLogDataSource {
fun getCallLog(): List<CallLogEntity>
}

class CallLogProviderImpl(
class CallLogDataSourceImpl(
@ApplicationContext private val context: Context,
private val systemPermissionUtil: SystemPermissionUtil
) : CallLogProvider {
) : CallLogDataSource {
override fun getCallLog(): List<CallLogEntity> {
if (systemPermissionUtil.checkPermission(context, Manifest.permission.READ_CALL_LOG)) {
val c = context.applicationContext
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,27 @@
package com.abhriya.callblockr.contactsprovider
package com.abhriya.callblockr.data.source

import android.Manifest
import android.content.ContentResolver
import android.content.Context
import android.database.Cursor
import android.provider.ContactsContract
import com.abhriya.callblockr.model.DeviceContactsEntity
import com.abhriya.callblockr.data.entity.DeviceContactsEntity
import com.abhriya.commons.SystemPermissionUtil
import me.xdrop.fuzzywuzzy.FuzzySearch

interface ContactsProvider {
interface ContactsDataSource {
suspend fun getAllContactsFromDevice(): List<DeviceContactsEntity>

suspend fun searchContact(charSequence: CharSequence, allContactList: List<DeviceContactsEntity>): List<DeviceContactsEntity>
suspend fun searchContact(
charSequence: CharSequence,
allContactList: List<DeviceContactsEntity>
): List<DeviceContactsEntity>
}

class ContactsProviderImpl(
class ContactsDataSourceImpl(
private val context: Context,
private val permissionUtil: SystemPermissionUtil
) : ContactsProvider {
) : ContactsDataSource {

override suspend fun getAllContactsFromDevice(): List<DeviceContactsEntity> {
if (permissionUtil.checkPermissions(
Expand Down
39 changes: 26 additions & 13 deletions app/src/main/java/com/abhriya/callblockr/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import com.abhriya.callblockr.NotificationProvider
import com.abhriya.callblockr.NotificationsProviderImpl
import com.abhriya.callblockr.PhoneReceiver
import com.abhriya.callblockr.PhoneReceiverImpl
import com.abhriya.callblockr.calllogprovider.CallLogProvider
import com.abhriya.callblockr.calllogprovider.CallLogProviderImpl
import com.abhriya.callblockr.contactsprovider.ContactsProvider
import com.abhriya.callblockr.contactsprovider.ContactsProviderImpl
import com.abhriya.callblockr.data.ContactsRepository
import com.abhriya.callblockr.data.ContactsRepositoryImpl
import com.abhriya.datasource.local.LocalDataSource
import com.abhriya.callblockr.data.repository.ContactsRepository
import com.abhriya.callblockr.data.repository.ContactsRepositoryImpl
import com.abhriya.callblockr.data.source.CallLogDataSource
import com.abhriya.callblockr.data.source.CallLogDataSourceImpl
import com.abhriya.callblockr.data.source.ContactsDataSource
import com.abhriya.callblockr.data.source.ContactsDataSourceImpl
import com.abhriya.commons.SystemPermissionUtil
import com.abhriya.datasource.local.LocalDataSource
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
Expand All @@ -34,10 +34,14 @@ class AppModule {
@Singleton
fun providesContactRepository(
localDataSource: LocalDataSource,
contactsProvider: ContactsProvider,
callLogProvider: CallLogProvider
contactsDataSource: ContactsDataSource,
callLogDataSource: CallLogDataSource
): ContactsRepository =
ContactsRepositoryImpl(localDataSource, contactsProvider, callLogProvider)
ContactsRepositoryImpl(
localDataSource,
contactsDataSource,
callLogDataSource
)

@Provides
@Singleton
Expand All @@ -48,20 +52,29 @@ class AppModule {

@Provides
@Singleton
fun providesNotificationsProvider(systemPermissionUtil: SystemPermissionUtil): NotificationProvider = NotificationsProviderImpl(systemPermissionUtil)
fun providesNotificationsProvider(systemPermissionUtil: SystemPermissionUtil): NotificationProvider =
NotificationsProviderImpl(systemPermissionUtil)

@Provides
@Singleton
fun providesContactProvider(
@ApplicationContext context: Context,
permissionUtil: SystemPermissionUtil
): ContactsProvider = ContactsProviderImpl(context, permissionUtil)
): ContactsDataSource =
ContactsDataSourceImpl(
context,
permissionUtil
)

@Provides
@Singleton
fun providesCallLogProvider(
@ApplicationContext context: Context,
systemPermissionUtil: SystemPermissionUtil
): CallLogProvider = CallLogProviderImpl(context, systemPermissionUtil)
): CallLogDataSource =
CallLogDataSourceImpl(
context,
systemPermissionUtil
)

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.abhriya.callblockr.di

import com.abhriya.callblockr.data.ContactsRepository
import com.abhriya.callblockr.data.repository.ContactsRepository
import com.abhriya.callblockr.domain.ContactsInteractor
import com.abhriya.callblockr.domain.ContactsUseCase
import dagger.Module
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.abhriya.callblockr.di

import androidx.hilt.lifecycle.ViewModelInject
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.abhriya.callblockr.viewmodel.ContactsViewModel
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.abhriya.callblockr.domain

import com.abhriya.callblockr.data.ContactsRepository
import com.abhriya.callblockr.data.repository.ContactsRepository
import com.abhriya.callblockr.domain.mapper.ContactsModelMapper
import com.abhriya.callblockr.domain.model.CallLogModel
import com.abhriya.callblockr.domain.model.ContactModel
Expand Down Expand Up @@ -38,7 +38,7 @@ class ContactsInteractor(private val contactsRepository: ContactsRepository) : C
}

override suspend fun getAllSavedContacts(): List<ContactModel> {
val savedContacts : List<ContactModel> = contactsRepository.getAllContactsFromDevice()
val savedContacts: List<ContactModel> = contactsRepository.getAllContactsFromDevice()
.map {
ContactsModelMapper.mapToContactsModelFromContactEntity(
it,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ data class CallLogModel(
val callType: CallType,
val timeStampInMillis: String,
val callDuration: String,
val isNumberBlocked : Boolean
val isNumberBlocked: Boolean
)
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ data class ContactModel(
val name: String? = null,
val phoneNumber: String,
val contactModelType: ContactModelType,
val isContactBlocked : Boolean = false
val isContactBlocked: Boolean = false
) : Comparable<ContactModel> {
override fun compareTo(other: ContactModel): Int {
return if (name == other.name && phoneNumber == other.phoneNumber && contactModelType == other.contactModelType) {
Expand Down
Loading

0 comments on commit bc8c0cf

Please sign in to comment.