Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.dagger.hilt)
// alias(libs.plugins.dagger.hilt)
alias(libs.plugins.triplet.play)
alias(libs.plugins.ksp)
}
Expand Down Expand Up @@ -155,9 +155,9 @@ dependencies {
implementation(libs.orbit.viewmodel)

// DAGGER SETUP
implementation(libs.dagger.hilt.android)
implementation(libs.androidx.hilt.nav.compose)
ksp(libs.dagger.hilt.compiler)
//implementation(libs.dagger.hilt.android)
//implementation(libs.androidx.hilt.nav.compose)
//ksp(libs.dagger.hilt.compiler)

// EXTRA ICONS
implementation(libs.simple.icons)
Expand All @@ -177,6 +177,12 @@ dependencies {
implementation(libs.io.coil)
implementation(libs.androidx.compose.foundation)
implementation(libs.kotlinx.serialization)

// Koin Dependency Injection
implementation(libs.io.koin.core)
implementation(libs.io.koin.android)
implementation(libs.io.koin.compose)
implementation(libs.io.koin.test)
}

tasks.named<Delete>("clean") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,16 @@ package dev.arkbuilders.drop.app.data.datasource

import android.content.Context
import android.content.SharedPreferences
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import javax.inject.Inject
import androidx.core.content.edit
import dev.arkbuilders.drop.app.data.model.UserAvatarDto
import dev.arkbuilders.drop.app.data.model.UserProfileDto
import dev.arkbuilders.drop.app.domain.AvatarHelper
import dev.arkbuilders.drop.app.domain.model.UserAvatar
import dev.arkbuilders.drop.app.domain.model.UserProfile
import kotlinx.serialization.json.Json

class ProfileLocalDataSource @Inject constructor(
@ApplicationContext private val context: Context,
class ProfileLocalDataSource(
private val context: Context,
private val avatarHelper: AvatarHelper,
) {
private val prefs: SharedPreferences =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import javax.inject.Inject

class TransferHistoryItemLocalDataSource @Inject constructor(
class TransferHistoryItemLocalDataSource(
private val dao: TransferHistoryItemDao
) {
fun flow(): Flow<List<TransferHistoryItem>> =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,14 @@ import android.net.Uri
import android.util.Base64
import androidx.core.graphics.scale
import androidx.core.net.toUri
import dagger.hilt.android.qualifiers.ApplicationContext
import dev.arkbuilders.drop.app.domain.AvatarHelper
import dev.arkbuilders.drop.app.domain.AvatarHelper.Companion.JPEG_QUALITY
import dev.arkbuilders.drop.app.domain.AvatarHelper.Companion.MAX_FILE_SIZE
import dev.arkbuilders.drop.app.domain.AvatarHelper.Companion.MAX_IMAGE_SIZE
import java.io.ByteArrayOutputStream
import java.io.IOException
import javax.inject.Inject

class AvatarHelperImpl @Inject constructor(
@ApplicationContext
class AvatarHelperImpl(
private val context: Context,
) : AvatarHelper {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@ import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import androidx.core.content.ContextCompat
import dagger.hilt.android.qualifiers.ApplicationContext
import dev.arkbuilders.drop.app.domain.PermissionsHelper
import javax.inject.Inject

class PermissionsHelperImpl @Inject constructor(
@ApplicationContext private val ctx: Context,
class PermissionsHelperImpl(
private val ctx: Context,
): PermissionsHelper {
override fun isCameraGranted(): Boolean {
return ContextCompat.checkSelfPermission(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,11 @@ package dev.arkbuilders.drop.app.data.helper
import android.content.Context
import android.provider.OpenableColumns
import androidx.core.net.toUri
import dagger.hilt.android.qualifiers.ApplicationContext
import dev.arkbuilders.drop.app.domain.ResourcesHelper
import timber.log.Timber
import javax.inject.Inject

class ResourcesHelperImpl @Inject constructor(
@ApplicationContext private val context: Context,
class ResourcesHelperImpl(
private val context: Context,
) : ResourcesHelper {
override fun getFileName(uri: String): String? {
return try {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
package dev.arkbuilders.drop.app.data.repository

import android.annotation.SuppressLint
import android.content.Context
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import android.os.Build
import dagger.hilt.android.qualifiers.ApplicationContext
import dev.arkbuilders.drop.app.domain.repository.NetworkStatus
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import javax.inject.Inject

class NetworkStatusImpl @Inject constructor(
@ApplicationContext private val context: Context,
class NetworkStatusImpl(
private val context: Context,
) : NetworkStatus {
private val cm =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,17 @@
package dev.arkbuilders.drop.app.data.repository

import android.content.Context
import dagger.hilt.android.qualifiers.ApplicationContext
import dev.arkbuilders.drop.app.data.datasource.ProfileLocalDataSource
import dev.arkbuilders.drop.app.domain.model.UserAvatar
import dev.arkbuilders.drop.app.domain.model.UserProfile
import dev.arkbuilders.drop.app.domain.repository.ProfileRepo
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class ProfileRepoImpl @Inject constructor(
class ProfileRepoImpl(
private val localDataSource: ProfileLocalDataSource,
@ApplicationContext private val context: Context,
private val context: Context,
) : ProfileRepo {

private val _profile = MutableStateFlow(localDataSource.loadProfile())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,8 @@ import dev.arkbuilders.drop.app.domain.model.TransferType
import dev.arkbuilders.drop.app.domain.repository.TransferHistoryItemRepository
import kotlinx.coroutines.flow.Flow
import java.time.OffsetDateTime
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class TransferHistoryItemRepositoryImpl @Inject constructor(
class TransferHistoryItemRepositoryImpl(
private val localSource: TransferHistoryItemLocalDataSource
): TransferHistoryItemRepository {
override val historyItems: Flow<List<TransferHistoryItem>> = localSource.flow()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,30 @@ import android.os.Environment
import android.provider.MediaStore
import android.provider.OpenableColumns
import android.util.Log
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.android.qualifiers.ApplicationContext
import dev.arkbuilders.drop.ReceiveFilesBubble
import dev.arkbuilders.drop.SendFilesBubble
import dev.arkbuilders.drop.app.data.ReceiveFilesSubscriberImpl
import dev.arkbuilders.drop.app.data.ReceivingProgress
import dev.arkbuilders.drop.app.data.SendFilesSubscriberImpl
import dev.arkbuilders.drop.app.data.SendingProgress
import dev.arkbuilders.drop.app.di.TmpEntryPoint
import dev.arkbuilders.drop.app.domain.model.TransferStatus
import dev.arkbuilders.drop.app.domain.repository.ProfileRepo
import dev.arkbuilders.drop.app.domain.repository.TransferHistoryItemRepository
import dev.arkbuilders.drop.app.domain.usecase.ReceiveFilesUseCase
import dev.arkbuilders.drop.app.domain.usecase.SendFilesUseCase
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.withContext
import org.koin.core.component.KoinComponent
import org.koin.core.component.get
import java.io.File
import java.io.FileOutputStream
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class TransferManager @Inject constructor(
@ApplicationContext private val context: Context,
class TransferManager(
private val context: Context,
private val profileRepo: ProfileRepo,
private val transferHistoryRepository: TransferHistoryItemRepository,
) {
): KoinComponent {
companion object {
private const val TAG = "TransferManager"
}
Expand All @@ -49,11 +47,8 @@ class TransferManager @Inject constructor(
get() = receiveSubscriber?.progress

suspend fun sendFiles(fileUris: List<Uri>): SendFilesBubble? = withContext(Dispatchers.IO) {
val entryPoint = EntryPointAccessors.fromApplication(
context.applicationContext,
TmpEntryPoint::class.java
)
val sendUseCase = entryPoint.sendFilesUseCase()
val sendUseCase: SendFilesUseCase = get()

sendUseCase.invoke(fileUris).fold(
onSuccess = { bubble ->
currentSendBubble = bubble
Expand All @@ -70,11 +65,7 @@ class TransferManager @Inject constructor(

suspend fun receiveFiles(ticket: String, confirmation: UByte): ReceiveFilesBubble? =
withContext(Dispatchers.IO) {
val entryPoint = EntryPointAccessors.fromApplication(
context.applicationContext,
TmpEntryPoint::class.java
)
val receiveFilesUseCase = entryPoint.receiveFilesUseCase()
val receiveFilesUseCase: ReceiveFilesUseCase = get()

receiveFilesUseCase.invoke(ticket, confirmation).fold(
onSuccess = { bubble ->
Expand Down
39 changes: 29 additions & 10 deletions app/src/main/java/dev/arkbuilders/drop/app/di/AppModule.kt
Original file line number Diff line number Diff line change
@@ -1,28 +1,46 @@
package dev.arkbuilders.drop.app.di

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 dev.arkbuilders.drop.app.data.repository.TransferManager
import dev.arkbuilders.drop.app.data.helper.ResourcesHelperImpl
import dev.arkbuilders.drop.app.data.datasource.ProfileLocalDataSource
import dev.arkbuilders.drop.app.data.datasource.TransferHistoryItemLocalDataSource
import dev.arkbuilders.drop.app.data.db.Database
import dev.arkbuilders.drop.app.data.db.dao.TransferHistoryItemDao
import dev.arkbuilders.drop.app.data.helper.AvatarHelperImpl
import dev.arkbuilders.drop.app.data.helper.PermissionsHelperImpl
import dev.arkbuilders.drop.app.data.helper.ResourcesHelperImpl
import dev.arkbuilders.drop.app.data.repository.NetworkStatusImpl
import dev.arkbuilders.drop.app.data.repository.ProfileRepoImpl
import dev.arkbuilders.drop.app.data.repository.TransferHistoryItemRepositoryImpl
import dev.arkbuilders.drop.app.data.repository.TransferManager
import dev.arkbuilders.drop.app.domain.AvatarHelper
import dev.arkbuilders.drop.app.domain.PermissionsHelper
import dev.arkbuilders.drop.app.domain.ResourcesHelper
import dev.arkbuilders.drop.app.domain.repository.NetworkStatus
import dev.arkbuilders.drop.app.domain.repository.ProfileRepo
import dev.arkbuilders.drop.app.domain.repository.TransferHistoryItemRepository
import javax.inject.Singleton
import dev.arkbuilders.drop.app.domain.usecase.ReceiveFilesUseCase
import dev.arkbuilders.drop.app.domain.usecase.SendFilesUseCase
import org.koin.dsl.module

val appModule = module {
single<ProfileRepo> { ProfileRepoImpl(get(), get()) }
single<TransferManager> { TransferManager(get(), get(), get()) }
single<ResourcesHelper> { ResourcesHelperImpl(get()) }
single<Database> { Database.build(get()) }
single<TransferHistoryItemRepository> { TransferHistoryItemRepositoryImpl(get()) }
single<PermissionsHelper> { PermissionsHelperImpl(get()) }
single<NetworkStatus> { NetworkStatusImpl(get()) }
single<AvatarHelper> { AvatarHelperImpl(get()) }
single{ ProfileLocalDataSource(get(), get()) }
single{ TransferHistoryItemLocalDataSource(get()) }
factory<TransferHistoryItemDao> {
val db: Database = get()
db.transferHistoryDao()
}
factory<SendFilesUseCase> { SendFilesUseCase(get(), get(), get()) }
factory<ReceiveFilesUseCase> { ReceiveFilesUseCase(get(), get(), get()) }
}

@Module
/*@Module
@InstallIn(SingletonComponent::class)
object AppModule {

Expand Down Expand Up @@ -81,3 +99,4 @@ object AppModule {
impl: AvatarHelperImpl
): AvatarHelper = impl
}
*/
18 changes: 0 additions & 18 deletions app/src/main/java/dev/arkbuilders/drop/app/di/TmpEntryPoint.kt

This file was deleted.

17 changes: 17 additions & 0 deletions app/src/main/java/dev/arkbuilders/drop/app/di/ViewModelsModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package dev.arkbuilders.drop.app.di

import dev.arkbuilders.drop.app.presentation.home.HomeViewModel
import dev.arkbuilders.drop.app.presentation.history.HistoryViewModel
import dev.arkbuilders.drop.app.presentation.profile.EditProfileViewModel
import dev.arkbuilders.drop.app.presentation.receive.ReceiveViewModel
import dev.arkbuilders.drop.app.presentation.send.SendViewModel
import org.koin.core.module.dsl.viewModel
import org.koin.dsl.module

val viewModelsModule = module {
viewModel { HistoryViewModel(get()) }
viewModel { HomeViewModel(get(), get()) }
viewModel { EditProfileViewModel(get(), get()) }
viewModel { ReceiveViewModel(get(), get()) }
viewModel { SendViewModel(get(), get(), get()) }
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package dev.arkbuilders.drop.app.domain.usecase

import android.content.Context
import dagger.hilt.android.qualifiers.ApplicationContext
import dev.arkbuilders.drop.ReceiveFilesBubble
import dev.arkbuilders.drop.ReceiveFilesRequest
import dev.arkbuilders.drop.ReceiverConfig
Expand All @@ -12,10 +11,9 @@ import dev.arkbuilders.drop.receiveFiles
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import timber.log.Timber
import javax.inject.Inject

class ReceiveFilesUseCase @Inject constructor(
@ApplicationContext private val context: Context,
class ReceiveFilesUseCase(
private val context: Context,
private val profileRepo: ProfileRepo,
private val resourcesHelper: ResourcesHelper,
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package dev.arkbuilders.drop.app.domain.usecase

import android.content.Context
import android.net.Uri
import dagger.hilt.android.qualifiers.ApplicationContext
import dev.arkbuilders.drop.SendFilesBubble
import dev.arkbuilders.drop.SendFilesRequest
import dev.arkbuilders.drop.SenderConfig
Expand All @@ -15,10 +14,9 @@ import dev.arkbuilders.drop.sendFiles
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import timber.log.Timber
import javax.inject.Inject

class SendFilesUseCase @Inject constructor(
@ApplicationContext private val context: Context,
class SendFilesUseCase(
private val context: Context,
private val profileRepo: ProfileRepo,
private val resourcesHelper: ResourcesHelper,
) {
Expand Down
Loading