domain module
This commit is contained in:
@@ -81,6 +81,7 @@ dependencies {
|
|||||||
implementation(projects.core.common)
|
implementation(projects.core.common)
|
||||||
implementation(projects.core.ui)
|
implementation(projects.core.ui)
|
||||||
implementation(projects.core.data)
|
implementation(projects.core.data)
|
||||||
|
implementation(projects.core.domain)
|
||||||
implementation(projects.core.model)
|
implementation(projects.core.model)
|
||||||
implementation(projects.core.datastore)
|
implementation(projects.core.datastore)
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ import com.google.accompanist.permissions.ExperimentalPermissionsApi
|
|||||||
import com.google.accompanist.permissions.PermissionStatus
|
import com.google.accompanist.permissions.PermissionStatus
|
||||||
import dev.meloda.fast.auth.AuthGraph
|
import dev.meloda.fast.auth.AuthGraph
|
||||||
import dev.meloda.fast.common.LongPollController
|
import dev.meloda.fast.common.LongPollController
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.common.extensions.ifEmpty
|
import dev.meloda.fast.common.extensions.ifEmpty
|
||||||
import dev.meloda.fast.common.extensions.listenValue
|
import dev.meloda.fast.common.extensions.listenValue
|
||||||
import dev.meloda.fast.common.extensions.setValue
|
import dev.meloda.fast.common.extensions.setValue
|
||||||
import dev.meloda.fast.common.model.LongPollState
|
import dev.meloda.fast.common.model.LongPollState
|
||||||
import dev.meloda.fast.data.db.GetCurrentAccountUseCase
|
import dev.meloda.fast.data.UserConfig
|
||||||
|
import dev.meloda.fast.domain.GetCurrentAccountUseCase
|
||||||
import dev.meloda.fast.datastore.AppSettings
|
import dev.meloda.fast.datastore.AppSettings
|
||||||
import dev.meloda.fast.datastore.UserSettings
|
import dev.meloda.fast.datastore.UserSettings
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ class AppGlobal : Application(), ImageLoaderFactory {
|
|||||||
|
|
||||||
val preferences = PreferenceManager.getDefaultSharedPreferences(this)
|
val preferences = PreferenceManager.getDefaultSharedPreferences(this)
|
||||||
AppSettings.init(preferences)
|
AppSettings.init(preferences)
|
||||||
UserConfig.init(preferences)
|
|
||||||
|
|
||||||
initKoin()
|
initKoin()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,14 +4,19 @@ import android.content.Context
|
|||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.os.PowerManager
|
import android.os.PowerManager
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
|
import coil.ImageLoader
|
||||||
import dev.meloda.fast.MainViewModelImpl
|
import dev.meloda.fast.MainViewModelImpl
|
||||||
import dev.meloda.fast.auth.captcha.di.captchaModule
|
import dev.meloda.fast.auth.captcha.di.captchaModule
|
||||||
import dev.meloda.fast.auth.login.di.loginModule
|
import dev.meloda.fast.auth.login.di.loginModule
|
||||||
import dev.meloda.fast.auth.validation.di.validationModule
|
import dev.meloda.fast.auth.validation.di.validationModule
|
||||||
import dev.meloda.fast.chatmaterials.di.chatMaterialsModule
|
import dev.meloda.fast.chatmaterials.di.chatMaterialsModule
|
||||||
|
import dev.meloda.fast.common.LongPollController
|
||||||
|
import dev.meloda.fast.common.LongPollControllerImpl
|
||||||
import dev.meloda.fast.common.provider.Provider
|
import dev.meloda.fast.common.provider.Provider
|
||||||
|
import dev.meloda.fast.common.provider.ResourceProvider
|
||||||
|
import dev.meloda.fast.common.provider.ResourceProviderImpl
|
||||||
import dev.meloda.fast.conversations.di.conversationsModule
|
import dev.meloda.fast.conversations.di.conversationsModule
|
||||||
import dev.meloda.fast.data.di.dataModule
|
import dev.meloda.fast.domain.di.domainModule
|
||||||
import dev.meloda.fast.friends.di.friendsModule
|
import dev.meloda.fast.friends.di.friendsModule
|
||||||
import dev.meloda.fast.languagepicker.di.languagePickerModule
|
import dev.meloda.fast.languagepicker.di.languagePickerModule
|
||||||
import dev.meloda.fast.messageshistory.di.messagesHistoryModule
|
import dev.meloda.fast.messageshistory.di.messagesHistoryModule
|
||||||
@@ -28,7 +33,7 @@ import org.koin.dsl.bind
|
|||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
val applicationModule = module {
|
val applicationModule = module {
|
||||||
includes(dataModule)
|
includes(domainModule)
|
||||||
includes(
|
includes(
|
||||||
loginModule,
|
loginModule,
|
||||||
validationModule,
|
validationModule,
|
||||||
@@ -55,4 +60,13 @@ val applicationModule = module {
|
|||||||
viewModelOf(::MainViewModelImpl) {
|
viewModelOf(::MainViewModelImpl) {
|
||||||
qualifier = qualifier("main")
|
qualifier = qualifier("main")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
single {
|
||||||
|
ImageLoader.Builder(get())
|
||||||
|
.crossfade(true)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
singleOf(::LongPollControllerImpl) bind LongPollController::class
|
||||||
|
singleOf(::ResourceProviderImpl) bind ResourceProvider::class
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import dev.meloda.fast.MainViewModel
|
|||||||
import dev.meloda.fast.MainViewModelImpl
|
import dev.meloda.fast.MainViewModelImpl
|
||||||
import dev.meloda.fast.common.AppConstants
|
import dev.meloda.fast.common.AppConstants
|
||||||
import dev.meloda.fast.common.LongPollController
|
import dev.meloda.fast.common.LongPollController
|
||||||
import dev.meloda.fast.common.extensions.isSdkAtLeast
|
|
||||||
import dev.meloda.fast.common.model.LongPollState
|
import dev.meloda.fast.common.model.LongPollState
|
||||||
import dev.meloda.fast.datastore.AppSettings
|
import dev.meloda.fast.datastore.AppSettings
|
||||||
import dev.meloda.fast.datastore.UserSettings
|
import dev.meloda.fast.datastore.UserSettings
|
||||||
@@ -239,7 +238,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createNotificationChannels() {
|
private fun createNotificationChannels() {
|
||||||
isSdkAtLeast(Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
val noCategoryName = getString(UiR.string.notification_channel_no_category_name)
|
val noCategoryName = getString(UiR.string.notification_channel_no_category_name)
|
||||||
val noCategoryDescriptionText =
|
val noCategoryDescriptionText =
|
||||||
getString(UiR.string.notification_channel_no_category_description)
|
getString(UiR.string.notification_channel_no_category_description)
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import android.app.Service
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.common.extensions.createTimerFlow
|
import dev.meloda.fast.common.extensions.createTimerFlow
|
||||||
import dev.meloda.fast.data.api.account.AccountUseCase
|
import dev.meloda.fast.data.UserConfig
|
||||||
|
import dev.meloda.fast.domain.AccountUseCase
|
||||||
import dev.meloda.fast.data.processState
|
import dev.meloda.fast.data.processState
|
||||||
import kotlinx.coroutines.CoroutineExceptionHandler
|
import kotlinx.coroutines.CoroutineExceptionHandler
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|||||||
@@ -13,12 +13,12 @@ import androidx.core.app.ServiceCompat
|
|||||||
import com.conena.nanokt.android.app.stopForegroundCompat
|
import com.conena.nanokt.android.app.stopForegroundCompat
|
||||||
import dev.meloda.fast.common.AppConstants
|
import dev.meloda.fast.common.AppConstants
|
||||||
import dev.meloda.fast.common.LongPollController
|
import dev.meloda.fast.common.LongPollController
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.common.VkConstants
|
import dev.meloda.fast.common.VkConstants
|
||||||
import dev.meloda.fast.common.extensions.listenValue
|
import dev.meloda.fast.common.extensions.listenValue
|
||||||
import dev.meloda.fast.common.model.LongPollState
|
import dev.meloda.fast.common.model.LongPollState
|
||||||
import dev.meloda.fast.data.LongPollUpdatesParser
|
import dev.meloda.fast.domain.LongPollUpdatesParser
|
||||||
import dev.meloda.fast.data.LongPollUseCase
|
import dev.meloda.fast.domain.LongPollUseCase
|
||||||
|
import dev.meloda.fast.data.UserConfig
|
||||||
import dev.meloda.fast.data.processState
|
import dev.meloda.fast.data.processState
|
||||||
import dev.meloda.fast.datastore.AppSettings
|
import dev.meloda.fast.datastore.AppSettings
|
||||||
import dev.meloda.fast.model.api.data.LongPollUpdates
|
import dev.meloda.fast.model.api.data.LongPollUpdates
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package dev.meloda.fast.service.longpolling.di
|
package dev.meloda.fast.service.longpolling.di
|
||||||
|
|
||||||
import dev.meloda.fast.data.LongPollUpdatesParser
|
import dev.meloda.fast.domain.LongPollUpdatesParser
|
||||||
import dev.meloda.fast.data.LongPollUseCase
|
import dev.meloda.fast.domain.LongPollUseCase
|
||||||
import dev.meloda.fast.data.LongPollUseCaseImpl
|
import dev.meloda.fast.domain.LongPollUseCaseImpl
|
||||||
import org.koin.core.module.dsl.singleOf
|
import org.koin.core.module.dsl.singleOf
|
||||||
import org.koin.dsl.bind
|
import org.koin.dsl.bind
|
||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|||||||
@@ -58,6 +58,10 @@ gradlePlugin {
|
|||||||
id = "fast.android.test"
|
id = "fast.android.test"
|
||||||
implementationClass = "AndroidTestConventionPlugin"
|
implementationClass = "AndroidTestConventionPlugin"
|
||||||
}
|
}
|
||||||
|
register("koin") {
|
||||||
|
id = "fast.koin"
|
||||||
|
implementationClass = "KoinConventionPlugin"
|
||||||
|
}
|
||||||
register("androidRoom") {
|
register("androidRoom") {
|
||||||
id = "fast.android.room"
|
id = "fast.android.room"
|
||||||
implementationClass = "AndroidRoomConventionPlugin"
|
implementationClass = "AndroidRoomConventionPlugin"
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import dev.meloda.fast.libs
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.kotlin.dsl.dependencies
|
||||||
|
|
||||||
|
class KoinConventionPlugin : Plugin<Project> {
|
||||||
|
override fun apply(target: Project) {
|
||||||
|
with(target) {
|
||||||
|
pluginManager.apply("com.google.devtools.ksp")
|
||||||
|
dependencies {
|
||||||
|
add("implementation", libs.findLibrary("koin.core").get())
|
||||||
|
}
|
||||||
|
|
||||||
|
pluginManager.withPlugin("com.android.base") {
|
||||||
|
dependencies {
|
||||||
|
add("implementation", libs.findLibrary("koin.android").get())
|
||||||
|
add("implementation", libs.findLibrary("koin.androidx.compose").get())
|
||||||
|
add("implementation", libs.findLibrary("koin.androidx.compose.navigation").get())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-2
@@ -1,11 +1,12 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.android.application) apply false
|
alias(libs.plugins.android.application) apply false
|
||||||
alias(libs.plugins.android.library) apply false
|
alias(libs.plugins.android.library) apply false
|
||||||
// alias(libs.plugins.org.jetbrains.kotlin.android) apply false
|
alias(libs.plugins.kotlin.android) apply false
|
||||||
alias(libs.plugins.kotlin.parcelize) apply false
|
alias(libs.plugins.kotlin.parcelize) apply false
|
||||||
alias(libs.plugins.kotlin.serialization) apply false
|
alias(libs.plugins.kotlin.serialization) apply false
|
||||||
alias(libs.plugins.compose) apply false
|
|
||||||
alias(libs.plugins.kotlin.jvm) apply false
|
alias(libs.plugins.kotlin.jvm) apply false
|
||||||
|
alias(libs.plugins.compose) apply false
|
||||||
alias(libs.plugins.room) apply false
|
alias(libs.plugins.room) apply false
|
||||||
alias(libs.plugins.ksp) apply false
|
alias(libs.plugins.ksp) apply false
|
||||||
|
alias(libs.plugins.module.graph) apply true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.fast.android.library)
|
alias(libs.plugins.fast.android.library)
|
||||||
alias(libs.plugins.fast.android.library.compose)
|
// alias(libs.plugins.fast.jvm.library)
|
||||||
|
// alias(libs.plugins.fast.koin)
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
@@ -8,23 +9,8 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(libs.core.ktx)
|
implementation(libs.kotlinx.coroutines.core)
|
||||||
implementation(libs.preference.ktx)
|
implementation(libs.bundles.nanokt)
|
||||||
|
|
||||||
implementation(libs.lifecycle.viewmodel.ktx)
|
implementation(libs.lifecycle.viewmodel.ktx)
|
||||||
implementation(libs.lifecycle.runtime.ktx)
|
|
||||||
|
|
||||||
implementation(libs.koin.android)
|
|
||||||
implementation(libs.koin.androidx.compose)
|
|
||||||
implementation(libs.koin.androidx.compose.navigation)
|
|
||||||
|
|
||||||
implementation(libs.coil.compose)
|
|
||||||
|
|
||||||
implementation(libs.nanokt.jvm)
|
|
||||||
implementation(libs.nanokt.android)
|
|
||||||
implementation(libs.nanokt)
|
|
||||||
|
|
||||||
implementation(libs.androidx.navigation.compose)
|
|
||||||
|
|
||||||
implementation(libs.kotlin.serialization)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
package dev.meloda.fast.common.di
|
|
||||||
|
|
||||||
import coil.ImageLoader
|
|
||||||
import dev.meloda.fast.common.LongPollController
|
|
||||||
import dev.meloda.fast.common.LongPollControllerImpl
|
|
||||||
import dev.meloda.fast.common.provider.ResourceProvider
|
|
||||||
import dev.meloda.fast.common.provider.ResourceProviderImpl
|
|
||||||
import org.koin.core.module.dsl.singleOf
|
|
||||||
import org.koin.dsl.bind
|
|
||||||
import org.koin.dsl.module
|
|
||||||
|
|
||||||
val commonModule = module {
|
|
||||||
single {
|
|
||||||
ImageLoader.Builder(get())
|
|
||||||
.crossfade(true)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
|
|
||||||
singleOf(::LongPollControllerImpl) bind LongPollController::class
|
|
||||||
singleOf(::ResourceProviderImpl) bind ResourceProvider::class
|
|
||||||
}
|
|
||||||
@@ -1,10 +1,5 @@
|
|||||||
package dev.meloda.fast.common.extensions
|
package dev.meloda.fast.common.extensions
|
||||||
|
|
||||||
import android.app.Activity
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Build
|
|
||||||
import androidx.annotation.ChecksSdkIntAtLeast
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
@@ -21,18 +16,6 @@ import kotlinx.coroutines.flow.update
|
|||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
fun Context.restartApp() {
|
|
||||||
(this as? Activity)?.let { activity ->
|
|
||||||
activity.finishAffinity()
|
|
||||||
activity.startActivity(
|
|
||||||
Intent(
|
|
||||||
this,
|
|
||||||
Class.forName("dev.meloda.fast.MainActivity")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun <T> Iterable<T>.findWithIndex(predicate: (T) -> Boolean): Pair<Int, T>? {
|
inline fun <T> Iterable<T>.findWithIndex(predicate: (T) -> Boolean): Pair<Int, T>? {
|
||||||
val value = firstOrNull(predicate) ?: return null
|
val value = firstOrNull(predicate) ?: return null
|
||||||
return indexOf(value).let { index -> if (index == -1) null else index to value }
|
return indexOf(value).let { index -> if (index == -1) null else index to value }
|
||||||
@@ -115,13 +98,3 @@ fun <T> Any.toList(mapper: (old: Any) -> T): List<T> {
|
|||||||
else -> emptyList()
|
else -> emptyList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ChecksSdkIntAtLeast(parameter = 0, lambda = 1)
|
|
||||||
fun isSdkAtLeast(sdkInt: Int, action: (() -> Unit)? = null): Boolean {
|
|
||||||
return if (Build.VERSION.SDK_INT >= sdkInt) {
|
|
||||||
action?.invoke()
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -4,14 +4,10 @@ import android.content.ClipData
|
|||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.content.FileProvider
|
|
||||||
import java.io.File
|
|
||||||
import java.io.FileOutputStream
|
|
||||||
|
|
||||||
object AndroidUtils {
|
object AndroidUtils {
|
||||||
|
|
||||||
@@ -96,61 +92,61 @@ object AndroidUtils {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getInstallPackageIntent(
|
// fun getInstallPackageIntent(
|
||||||
context: Context,
|
// context: Context,
|
||||||
providerPath: String,
|
// providerPath: String,
|
||||||
fileToRead: File,
|
// fileToRead: File,
|
||||||
): Intent {
|
// ): Intent {
|
||||||
val intent = Intent(Intent.ACTION_VIEW)
|
// val intent = Intent(Intent.ACTION_VIEW)
|
||||||
|
//
|
||||||
|
// intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||||
|
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
// intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true)
|
||||||
|
// intent.data = FileProvider.getUriForFile(
|
||||||
|
// context,
|
||||||
|
// "dev.meloda.fast$providerPath",
|
||||||
|
// fileToRead
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// return intent
|
||||||
|
// }
|
||||||
|
|
||||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
// fun getImageToShare(context: Context, existingFile: File): Uri? {
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
// val imageFolder = File(context.cacheDir, "images")
|
||||||
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true)
|
//
|
||||||
intent.data = FileProvider.getUriForFile(
|
// return try {
|
||||||
context,
|
// imageFolder.mkdirs()
|
||||||
"dev.meloda.fast$providerPath",
|
//
|
||||||
fileToRead
|
// val copyToFile = File(imageFolder, "shared_image.png")
|
||||||
)
|
// if (copyToFile.exists()) {
|
||||||
|
// copyToFile.delete()
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// val file = existingFile.copyTo(copyToFile)
|
||||||
|
// FileProvider.getUriForFile(context, "dev.meloda.fast.provider", file)
|
||||||
|
// } catch (e: Exception) {
|
||||||
|
// e.printStackTrace()
|
||||||
|
// null
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
return intent
|
// fun getImageToShare(context: Context, bitmap: Bitmap): Uri? {
|
||||||
}
|
// val imageFolder = File(context.cacheDir, "images")
|
||||||
|
//
|
||||||
fun getImageToShare(context: Context, existingFile: File): Uri? {
|
// return try {
|
||||||
val imageFolder = File(context.cacheDir, "images")
|
// imageFolder.mkdirs()
|
||||||
|
//
|
||||||
return try {
|
// val file = File(imageFolder, "shared_image.png")
|
||||||
imageFolder.mkdirs()
|
// val outputStream = FileOutputStream(file)
|
||||||
|
// bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream)
|
||||||
val copyToFile = File(imageFolder, "shared_image.png")
|
// outputStream.flush()
|
||||||
if (copyToFile.exists()) {
|
// outputStream.close()
|
||||||
copyToFile.delete()
|
// FileProvider.getUriForFile(context, "dev.meloda.fast.fileprovider", file)
|
||||||
}
|
// } catch (e: Exception) {
|
||||||
|
// e.printStackTrace()
|
||||||
val file = existingFile.copyTo(copyToFile)
|
// null
|
||||||
FileProvider.getUriForFile(context, "dev.meloda.fast.provider", file)
|
// }
|
||||||
} catch (e: Exception) {
|
// }
|
||||||
e.printStackTrace()
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getImageToShare(context: Context, bitmap: Bitmap): Uri? {
|
|
||||||
val imageFolder = File(context.cacheDir, "images")
|
|
||||||
|
|
||||||
return try {
|
|
||||||
imageFolder.mkdirs()
|
|
||||||
|
|
||||||
val file = File(imageFolder, "shared_image.png")
|
|
||||||
val outputStream = FileOutputStream(file)
|
|
||||||
bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream)
|
|
||||||
outputStream.flush()
|
|
||||||
outputStream.close()
|
|
||||||
FileProvider.getUriForFile(context, "dev.meloda.fast.fileprovider", file)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun showShareSheet(context: Context, content: ShareContent) {
|
fun showShareSheet(context: Context, content: ShareContent) {
|
||||||
val intent = Intent(Intent.ACTION_SEND).apply {
|
val intent = Intent(Intent.ACTION_SEND).apply {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.fast.android.library)
|
alias(libs.plugins.fast.android.library)
|
||||||
|
// alias(libs.plugins.fast.koin)
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
@@ -13,9 +14,8 @@ dependencies {
|
|||||||
api(projects.core.network)
|
api(projects.core.network)
|
||||||
api(projects.core.database)
|
api(projects.core.database)
|
||||||
|
|
||||||
implementation(libs.koin.android)
|
// TODO: 11/08/2024, Danil Nikolaev: remove?
|
||||||
|
|
||||||
// TODO: 05/05/2024, Danil Nikolaev: research, maybe remove
|
|
||||||
implementation(libs.retrofit)
|
implementation(libs.retrofit)
|
||||||
implementation(libs.eithernet)
|
implementation(libs.eithernet)
|
||||||
|
implementation(libs.koin.android)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -1,7 +1,6 @@
|
|||||||
package dev.meloda.fast.network.interceptor
|
package dev.meloda.fast.data
|
||||||
|
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import okhttp3.Interceptor
|
import okhttp3.Interceptor
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import java.net.URLEncoder
|
import java.net.URLEncoder
|
||||||
+4
-12
@@ -1,24 +1,16 @@
|
|||||||
package dev.meloda.fast.common
|
package dev.meloda.fast.data
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import dev.meloda.fast.datastore.AppSettings
|
||||||
import androidx.core.content.edit
|
|
||||||
import kotlin.properties.Delegates
|
|
||||||
|
|
||||||
object UserConfig {
|
object UserConfig {
|
||||||
|
|
||||||
private const val ARG_CURRENT_USER_ID = "current_user_id"
|
private const val ARG_CURRENT_USER_ID = "current_user_id"
|
||||||
|
|
||||||
private var preferences: SharedPreferences by Delegates.notNull()
|
|
||||||
|
|
||||||
fun init(preferences: SharedPreferences) {
|
|
||||||
this.preferences = preferences
|
|
||||||
}
|
|
||||||
|
|
||||||
var currentUserId: Int = -1
|
var currentUserId: Int = -1
|
||||||
get() = preferences.getInt(ARG_CURRENT_USER_ID, -1)
|
get() = AppSettings.getInt(ARG_CURRENT_USER_ID, -1)
|
||||||
set(value) {
|
set(value) {
|
||||||
field = value
|
field = value
|
||||||
preferences.edit { putInt(ARG_CURRENT_USER_ID, value) }
|
AppSettings.edit { putInt(ARG_CURRENT_USER_ID, value) }
|
||||||
}
|
}
|
||||||
|
|
||||||
var userId: Int = -1
|
var userId: Int = -1
|
||||||
@@ -1,10 +1,8 @@
|
|||||||
package dev.meloda.fast.data.di
|
package dev.meloda.fast.data.di
|
||||||
|
|
||||||
import dev.meloda.fast.common.di.commonModule
|
import dev.meloda.fast.data.AccessTokenInterceptor
|
||||||
import dev.meloda.fast.data.api.account.AccountRepository
|
import dev.meloda.fast.data.api.account.AccountRepository
|
||||||
import dev.meloda.fast.data.api.account.AccountRepositoryImpl
|
import dev.meloda.fast.data.api.account.AccountRepositoryImpl
|
||||||
import dev.meloda.fast.data.api.account.AccountUseCase
|
|
||||||
import dev.meloda.fast.data.api.account.AccountUseCaseImpl
|
|
||||||
import dev.meloda.fast.data.api.audios.AudiosRepository
|
import dev.meloda.fast.data.api.audios.AudiosRepository
|
||||||
import dev.meloda.fast.data.api.auth.AuthRepository
|
import dev.meloda.fast.data.api.auth.AuthRepository
|
||||||
import dev.meloda.fast.data.api.auth.AuthRepositoryImpl
|
import dev.meloda.fast.data.api.auth.AuthRepositoryImpl
|
||||||
@@ -22,29 +20,26 @@ import dev.meloda.fast.data.api.oauth.OAuthRepositoryImpl
|
|||||||
import dev.meloda.fast.data.api.photos.PhotosRepository
|
import dev.meloda.fast.data.api.photos.PhotosRepository
|
||||||
import dev.meloda.fast.data.api.users.UsersRepository
|
import dev.meloda.fast.data.api.users.UsersRepository
|
||||||
import dev.meloda.fast.data.api.users.UsersRepositoryImpl
|
import dev.meloda.fast.data.api.users.UsersRepositoryImpl
|
||||||
import dev.meloda.fast.data.api.users.UsersUseCase
|
|
||||||
import dev.meloda.fast.data.api.users.UsersUseCaseImpl
|
|
||||||
import dev.meloda.fast.data.api.videos.VideosRepository
|
import dev.meloda.fast.data.api.videos.VideosRepository
|
||||||
import dev.meloda.fast.data.db.AccountsRepository
|
import dev.meloda.fast.data.db.AccountsRepository
|
||||||
import dev.meloda.fast.data.db.AccountsRepositoryImpl
|
import dev.meloda.fast.data.db.AccountsRepositoryImpl
|
||||||
import dev.meloda.fast.data.db.GetCurrentAccountUseCase
|
|
||||||
import dev.meloda.fast.database.di.databaseModule
|
import dev.meloda.fast.database.di.databaseModule
|
||||||
import dev.meloda.fast.datastore.di.dataStoreModule
|
import dev.meloda.fast.datastore.di.dataStoreModule
|
||||||
import dev.meloda.fast.network.di.networkModule
|
import dev.meloda.fast.network.di.networkModule
|
||||||
|
import okhttp3.Interceptor
|
||||||
import org.koin.core.module.dsl.singleOf
|
import org.koin.core.module.dsl.singleOf
|
||||||
|
import org.koin.core.qualifier.named
|
||||||
import org.koin.dsl.bind
|
import org.koin.dsl.bind
|
||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
val dataModule = module {
|
val dataModule = module {
|
||||||
includes(
|
includes(
|
||||||
commonModule,
|
|
||||||
databaseModule,
|
databaseModule,
|
||||||
dataStoreModule,
|
dataStoreModule,
|
||||||
networkModule,
|
networkModule,
|
||||||
)
|
)
|
||||||
|
|
||||||
singleOf(::AccountRepositoryImpl) bind AccountRepository::class
|
singleOf(::AccountRepositoryImpl) bind AccountRepository::class
|
||||||
singleOf(::AccountUseCaseImpl) bind AccountUseCase::class
|
|
||||||
|
|
||||||
singleOf(::AudiosRepository)
|
singleOf(::AudiosRepository)
|
||||||
|
|
||||||
@@ -63,12 +58,15 @@ val dataModule = module {
|
|||||||
singleOf(::PhotosRepository)
|
singleOf(::PhotosRepository)
|
||||||
|
|
||||||
singleOf(::UsersRepositoryImpl) bind UsersRepository::class
|
singleOf(::UsersRepositoryImpl) bind UsersRepository::class
|
||||||
singleOf(::UsersUseCaseImpl) bind UsersUseCase::class
|
|
||||||
|
|
||||||
singleOf(::VideosRepository)
|
singleOf(::VideosRepository)
|
||||||
|
|
||||||
singleOf(::AccountsRepositoryImpl) bind AccountsRepository::class
|
singleOf(::AccountsRepositoryImpl) bind AccountsRepository::class
|
||||||
singleOf(::GetCurrentAccountUseCase)
|
|
||||||
|
|
||||||
singleOf(::FriendsRepositoryImpl) bind FriendsRepository::class
|
singleOf(::FriendsRepositoryImpl) bind FriendsRepository::class
|
||||||
|
|
||||||
|
// TODO: 11/08/2024, Danil Nikolaev: find a better solution
|
||||||
|
single<Interceptor>(named("token_interceptor")) {
|
||||||
|
AccessTokenInterceptor()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
/build
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
plugins {
|
||||||
|
alias(libs.plugins.fast.android.library)
|
||||||
|
// alias(libs.plugins.fast.android.koin)
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = "dev.meloda.fast.domain"
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
api(projects.core.data)
|
||||||
|
api(projects.core.model)
|
||||||
|
|
||||||
|
// TODO: 11/08/2024, Danil Nikolaev: remove?
|
||||||
|
implementation(libs.kotlinx.coroutines.core)
|
||||||
|
implementation(libs.koin.core)
|
||||||
|
implementation(libs.eithernet)
|
||||||
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package dev.meloda.fast.data.api.account
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
+2
-1
@@ -1,6 +1,7 @@
|
|||||||
package dev.meloda.fast.data.api.account
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
|
import dev.meloda.fast.data.api.account.AccountRepository
|
||||||
import dev.meloda.fast.data.mapToState
|
import dev.meloda.fast.data.mapToState
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.flow
|
import kotlinx.coroutines.flow.flow
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package dev.meloda.fast.auth.validation
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.model.api.responses.ValidatePhoneResponse
|
import dev.meloda.fast.model.api.responses.ValidatePhoneResponse
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package dev.meloda.fast.auth.validation
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.data.api.auth.AuthRepository
|
import dev.meloda.fast.data.api.auth.AuthRepository
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package dev.meloda.fast.data.api.conversations
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.model.api.domain.VkConversation
|
import dev.meloda.fast.model.api.domain.VkConversation
|
||||||
+1
-2
@@ -1,8 +1,7 @@
|
|||||||
package dev.meloda.fast.conversations.data
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.data.api.conversations.ConversationsRepository
|
import dev.meloda.fast.data.api.conversations.ConversationsRepository
|
||||||
import dev.meloda.fast.data.api.conversations.ConversationsUseCase
|
|
||||||
import dev.meloda.fast.data.mapToState
|
import dev.meloda.fast.data.mapToState
|
||||||
import dev.meloda.fast.model.api.domain.VkConversation
|
import dev.meloda.fast.model.api.domain.VkConversation
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package dev.meloda.fast.data.api.friends
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.model.FriendsInfo
|
import dev.meloda.fast.model.FriendsInfo
|
||||||
+3
-3
@@ -1,15 +1,15 @@
|
|||||||
package dev.meloda.fast.friends.domain
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.data.api.friends.FriendsRepository
|
import dev.meloda.fast.data.api.friends.FriendsRepository
|
||||||
import dev.meloda.fast.data.api.friends.FriendsUseCase
|
|
||||||
import dev.meloda.fast.data.mapToState
|
import dev.meloda.fast.data.mapToState
|
||||||
import dev.meloda.fast.model.FriendsInfo
|
import dev.meloda.fast.model.FriendsInfo
|
||||||
import dev.meloda.fast.model.api.domain.VkUser
|
import dev.meloda.fast.model.api.domain.VkUser
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.flow
|
import kotlinx.coroutines.flow.flow
|
||||||
|
|
||||||
class FriendsUseCaseImpl(private val repository: FriendsRepository) : FriendsUseCase {
|
class FriendsUseCaseImpl(private val repository: FriendsRepository) :
|
||||||
|
FriendsUseCase {
|
||||||
|
|
||||||
override fun getAllFriends(count: Int?, offset: Int?): Flow<State<FriendsInfo>> = flow {
|
override fun getAllFriends(count: Int?, offset: Int?): Flow<State<FriendsInfo>> = flow {
|
||||||
emit(State.Loading)
|
emit(State.Loading)
|
||||||
+6
-3
@@ -1,11 +1,14 @@
|
|||||||
package dev.meloda.fast.data.db
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.common.UserConfig
|
import dev.meloda.fast.data.UserConfig
|
||||||
|
import dev.meloda.fast.data.db.AccountsRepository
|
||||||
import dev.meloda.fast.model.database.AccountEntity
|
import dev.meloda.fast.model.database.AccountEntity
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
class GetCurrentAccountUseCase(private val accountsRepository: AccountsRepository) {
|
class GetCurrentAccountUseCase(
|
||||||
|
private val accountsRepository: AccountsRepository
|
||||||
|
) {
|
||||||
|
|
||||||
suspend operator fun invoke(): AccountEntity? = withContext(Dispatchers.IO) {
|
suspend operator fun invoke(): AccountEntity? = withContext(Dispatchers.IO) {
|
||||||
accountsRepository.getAccountById(UserConfig.currentUserId)
|
accountsRepository.getAccountById(UserConfig.currentUserId)
|
||||||
+4
-3
@@ -1,12 +1,13 @@
|
|||||||
package dev.meloda.fast.data
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.common.VkConstants
|
import dev.meloda.fast.common.VkConstants
|
||||||
import dev.meloda.fast.common.extensions.asInt
|
import dev.meloda.fast.common.extensions.asInt
|
||||||
import dev.meloda.fast.common.extensions.listenValue
|
import dev.meloda.fast.common.extensions.listenValue
|
||||||
import dev.meloda.fast.common.extensions.toList
|
import dev.meloda.fast.common.extensions.toList
|
||||||
import dev.meloda.fast.data.api.messages.MessagesUseCase
|
import dev.meloda.fast.data.UserConfig
|
||||||
|
import dev.meloda.fast.data.VkMemoryCache
|
||||||
|
import dev.meloda.fast.data.processState
|
||||||
import dev.meloda.fast.model.ApiEvent
|
import dev.meloda.fast.model.ApiEvent
|
||||||
import dev.meloda.fast.model.InteractionType
|
import dev.meloda.fast.model.InteractionType
|
||||||
import dev.meloda.fast.model.LongPollEvent
|
import dev.meloda.fast.model.LongPollEvent
|
||||||
+2
-1
@@ -1,5 +1,6 @@
|
|||||||
package dev.meloda.fast.data
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.model.api.data.LongPollUpdates
|
import dev.meloda.fast.model.api.data.LongPollUpdates
|
||||||
import dev.meloda.fast.model.api.data.VkLongPollData
|
import dev.meloda.fast.model.api.data.VkLongPollData
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
+3
-1
@@ -1,6 +1,8 @@
|
|||||||
package dev.meloda.fast.data
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.data.api.longpoll.LongPollRepository
|
import dev.meloda.fast.data.api.longpoll.LongPollRepository
|
||||||
|
import dev.meloda.fast.data.mapToState
|
||||||
import dev.meloda.fast.model.api.data.LongPollUpdates
|
import dev.meloda.fast.model.api.data.LongPollUpdates
|
||||||
import dev.meloda.fast.model.api.data.VkLongPollData
|
import dev.meloda.fast.model.api.data.VkLongPollData
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
+2
-1
@@ -1,6 +1,7 @@
|
|||||||
package dev.meloda.fast.data.api.messages
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
|
import dev.meloda.fast.data.api.messages.MessagesHistoryInfo
|
||||||
import dev.meloda.fast.model.api.domain.VkAttachment
|
import dev.meloda.fast.model.api.domain.VkAttachment
|
||||||
import dev.meloda.fast.model.api.domain.VkAttachmentHistoryMessage
|
import dev.meloda.fast.model.api.domain.VkAttachmentHistoryMessage
|
||||||
import dev.meloda.fast.model.api.domain.VkMessage
|
import dev.meloda.fast.model.api.domain.VkMessage
|
||||||
+1
-2
@@ -1,9 +1,8 @@
|
|||||||
package dev.meloda.fast.messageshistory.domain
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.data.api.messages.MessagesHistoryInfo
|
import dev.meloda.fast.data.api.messages.MessagesHistoryInfo
|
||||||
import dev.meloda.fast.data.api.messages.MessagesRepository
|
import dev.meloda.fast.data.api.messages.MessagesRepository
|
||||||
import dev.meloda.fast.data.api.messages.MessagesUseCase
|
|
||||||
import dev.meloda.fast.data.mapToState
|
import dev.meloda.fast.data.mapToState
|
||||||
import dev.meloda.fast.model.api.domain.VkAttachment
|
import dev.meloda.fast.model.api.domain.VkAttachment
|
||||||
import dev.meloda.fast.model.api.domain.VkAttachmentHistoryMessage
|
import dev.meloda.fast.model.api.domain.VkAttachmentHistoryMessage
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
package dev.meloda.fast.auth.login
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.auth.login.model.AuthInfo
|
import dev.meloda.fast.model.AuthInfo
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
interface OAuthUseCase {
|
interface OAuthUseCase {
|
||||||
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
package dev.meloda.fast.auth.login
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.auth.login.model.AuthInfo
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.data.api.oauth.OAuthRepository
|
import dev.meloda.fast.data.api.oauth.OAuthRepository
|
||||||
|
import dev.meloda.fast.model.AuthInfo
|
||||||
import dev.meloda.fast.network.OAuthErrorDomain
|
import dev.meloda.fast.network.OAuthErrorDomain
|
||||||
import dev.meloda.fast.network.ValidationType
|
import dev.meloda.fast.network.ValidationType
|
||||||
import dev.meloda.fast.network.VkOAuthError
|
import dev.meloda.fast.network.VkOAuthError
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package dev.meloda.fast.data.api.users
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.model.api.domain.VkUser
|
import dev.meloda.fast.model.api.domain.VkUser
|
||||||
+2
-1
@@ -1,6 +1,7 @@
|
|||||||
package dev.meloda.fast.data.api.users
|
package dev.meloda.fast.domain
|
||||||
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
|
import dev.meloda.fast.data.api.users.UsersRepository
|
||||||
import dev.meloda.fast.data.mapToState
|
import dev.meloda.fast.data.mapToState
|
||||||
import dev.meloda.fast.model.api.domain.VkUser
|
import dev.meloda.fast.model.api.domain.VkUser
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package dev.meloda.fast.domain.di
|
||||||
|
|
||||||
|
import dev.meloda.fast.data.di.dataModule
|
||||||
|
import dev.meloda.fast.domain.AccountUseCase
|
||||||
|
import dev.meloda.fast.domain.AccountUseCaseImpl
|
||||||
|
import dev.meloda.fast.domain.GetCurrentAccountUseCase
|
||||||
|
import dev.meloda.fast.domain.UsersUseCase
|
||||||
|
import dev.meloda.fast.domain.UsersUseCaseImpl
|
||||||
|
import org.koin.core.module.dsl.singleOf
|
||||||
|
import org.koin.dsl.bind
|
||||||
|
import org.koin.dsl.module
|
||||||
|
|
||||||
|
val domainModule = module {
|
||||||
|
includes(dataModule)
|
||||||
|
|
||||||
|
singleOf(::UsersUseCaseImpl) bind UsersUseCase::class
|
||||||
|
singleOf(::AccountUseCaseImpl) bind AccountUseCase::class
|
||||||
|
singleOf(::GetCurrentAccountUseCase)
|
||||||
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package dev.meloda.fast.auth.login.model
|
package dev.meloda.fast.model
|
||||||
|
|
||||||
data class AuthInfo(
|
data class AuthInfo(
|
||||||
val userId: Int?,
|
val userId: Int?,
|
||||||
@@ -2,12 +2,14 @@ package dev.meloda.fast.network.di
|
|||||||
|
|
||||||
import com.chuckerteam.chucker.api.ChuckerCollector
|
import com.chuckerteam.chucker.api.ChuckerCollector
|
||||||
import com.chuckerteam.chucker.api.ChuckerInterceptor
|
import com.chuckerteam.chucker.api.ChuckerInterceptor
|
||||||
|
import com.slack.eithernet.ApiResultCallAdapterFactory
|
||||||
|
import com.slack.eithernet.ApiResultConverterFactory
|
||||||
|
import com.squareup.moshi.Moshi
|
||||||
import dev.meloda.fast.common.AppConstants
|
import dev.meloda.fast.common.AppConstants
|
||||||
import dev.meloda.fast.network.JsonConverter
|
import dev.meloda.fast.network.JsonConverter
|
||||||
import dev.meloda.fast.network.MoshiConverter
|
import dev.meloda.fast.network.MoshiConverter
|
||||||
import dev.meloda.fast.network.OAuthResultCallFactory
|
import dev.meloda.fast.network.OAuthResultCallFactory
|
||||||
import dev.meloda.fast.network.ResponseConverterFactory
|
import dev.meloda.fast.network.ResponseConverterFactory
|
||||||
import dev.meloda.fast.network.interceptor.AccessTokenInterceptor
|
|
||||||
import dev.meloda.fast.network.interceptor.LanguageInterceptor
|
import dev.meloda.fast.network.interceptor.LanguageInterceptor
|
||||||
import dev.meloda.fast.network.interceptor.VersionInterceptor
|
import dev.meloda.fast.network.interceptor.VersionInterceptor
|
||||||
import dev.meloda.fast.network.service.account.AccountService
|
import dev.meloda.fast.network.service.account.AccountService
|
||||||
@@ -22,9 +24,7 @@ import dev.meloda.fast.network.service.oauth.OAuthService
|
|||||||
import dev.meloda.fast.network.service.photos.PhotosService
|
import dev.meloda.fast.network.service.photos.PhotosService
|
||||||
import dev.meloda.fast.network.service.users.UsersService
|
import dev.meloda.fast.network.service.users.UsersService
|
||||||
import dev.meloda.fast.network.service.videos.VideosService
|
import dev.meloda.fast.network.service.videos.VideosService
|
||||||
import com.slack.eithernet.ApiResultCallAdapterFactory
|
import okhttp3.Interceptor
|
||||||
import com.slack.eithernet.ApiResultConverterFactory
|
|
||||||
import com.squareup.moshi.Moshi
|
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.logging.HttpLoggingInterceptor
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
import org.koin.core.module.dsl.singleOf
|
import org.koin.core.module.dsl.singleOf
|
||||||
@@ -41,14 +41,13 @@ val networkModule = module {
|
|||||||
singleOf(::MoshiConverter) bind JsonConverter::class
|
singleOf(::MoshiConverter) bind JsonConverter::class
|
||||||
single { ChuckerCollector(get()) }
|
single { ChuckerCollector(get()) }
|
||||||
single { ChuckerInterceptor.Builder(get()).collector(get()).build() }
|
single { ChuckerInterceptor.Builder(get()).collector(get()).build() }
|
||||||
singleOf(::AccessTokenInterceptor)
|
|
||||||
singleOf(::VersionInterceptor)
|
singleOf(::VersionInterceptor)
|
||||||
singleOf(::LanguageInterceptor)
|
singleOf(::LanguageInterceptor)
|
||||||
single {
|
single {
|
||||||
OkHttpClient.Builder()
|
OkHttpClient.Builder()
|
||||||
.connectTimeout(20, TimeUnit.SECONDS)
|
.connectTimeout(20, TimeUnit.SECONDS)
|
||||||
.readTimeout(30, TimeUnit.SECONDS)
|
.readTimeout(30, TimeUnit.SECONDS)
|
||||||
.addInterceptor(get<AccessTokenInterceptor>())
|
.addInterceptor(get(named("token_interceptor")) as Interceptor)
|
||||||
.addInterceptor(get<VersionInterceptor>())
|
.addInterceptor(get<VersionInterceptor>())
|
||||||
.addInterceptor(get<LanguageInterceptor>())
|
.addInterceptor(get<LanguageInterceptor>())
|
||||||
.addInterceptor(get<ChuckerInterceptor>())
|
.addInterceptor(get<ChuckerInterceptor>())
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.fast.android.library)
|
alias(libs.plugins.fast.android.library)
|
||||||
alias(libs.plugins.fast.android.library.compose)
|
alias(libs.plugins.fast.android.library.compose)
|
||||||
|
alias(libs.plugins.kotlin.serialization)
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
@@ -8,7 +9,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.core.common)
|
api(projects.core.common)
|
||||||
api(projects.core.model)
|
api(projects.core.model)
|
||||||
|
|
||||||
implementation(libs.haze)
|
implementation(libs.haze)
|
||||||
@@ -17,5 +18,9 @@ dependencies {
|
|||||||
implementation(platform(libs.compose.bom))
|
implementation(platform(libs.compose.bom))
|
||||||
implementation(libs.bundles.compose)
|
implementation(libs.bundles.compose)
|
||||||
|
|
||||||
|
implementation(libs.androidx.navigation.compose)
|
||||||
|
implementation(libs.kotlin.serialization)
|
||||||
|
implementation(libs.koin.androidx.compose.navigation)
|
||||||
|
|
||||||
debugImplementation(libs.compose.ui.tooling)
|
debugImplementation(libs.compose.ui.tooling)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package dev.meloda.fast.common.extensions
|
package dev.meloda.fast.ui.extensions
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package dev.meloda.fast.common.extensions.navigation
|
package dev.meloda.fast.ui.extensions
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
@@ -64,7 +64,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.core.data)
|
implementation(projects.core.domain)
|
||||||
implementation(projects.core.ui)
|
implementation(projects.core.ui)
|
||||||
|
|
||||||
implementation(platform(libs.compose.bom))
|
implementation(platform(libs.compose.bom))
|
||||||
|
|||||||
@@ -11,17 +11,18 @@ import dev.meloda.fast.auth.login.model.LoginValidationArguments
|
|||||||
import dev.meloda.fast.auth.login.model.LoginValidationResult
|
import dev.meloda.fast.auth.login.model.LoginValidationResult
|
||||||
import dev.meloda.fast.auth.login.validation.LoginValidator
|
import dev.meloda.fast.auth.login.validation.LoginValidator
|
||||||
import dev.meloda.fast.common.LongPollController
|
import dev.meloda.fast.common.LongPollController
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.common.VkConstants
|
import dev.meloda.fast.common.VkConstants
|
||||||
import dev.meloda.fast.common.extensions.listenValue
|
import dev.meloda.fast.common.extensions.listenValue
|
||||||
import dev.meloda.fast.common.extensions.setValue
|
import dev.meloda.fast.common.extensions.setValue
|
||||||
import dev.meloda.fast.common.extensions.updateValue
|
import dev.meloda.fast.common.extensions.updateValue
|
||||||
import dev.meloda.fast.common.model.LongPollState
|
import dev.meloda.fast.common.model.LongPollState
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.data.api.users.UsersUseCase
|
import dev.meloda.fast.data.UserConfig
|
||||||
import dev.meloda.fast.data.db.AccountsRepository
|
import dev.meloda.fast.data.db.AccountsRepository
|
||||||
import dev.meloda.fast.data.processState
|
import dev.meloda.fast.data.processState
|
||||||
import dev.meloda.fast.datastore.AppSettings
|
import dev.meloda.fast.datastore.AppSettings
|
||||||
|
import dev.meloda.fast.domain.OAuthUseCase
|
||||||
|
import dev.meloda.fast.domain.UsersUseCase
|
||||||
import dev.meloda.fast.model.database.AccountEntity
|
import dev.meloda.fast.model.database.AccountEntity
|
||||||
import dev.meloda.fast.network.OAuthErrorDomain
|
import dev.meloda.fast.network.OAuthErrorDomain
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -70,12 +71,12 @@ interface LoginViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class LoginViewModelImpl(
|
class LoginViewModelImpl(
|
||||||
private val oAuthUseCase: dev.meloda.fast.auth.login.OAuthUseCase,
|
private val oAuthUseCase: OAuthUseCase,
|
||||||
private val usersUseCase: UsersUseCase,
|
private val usersUseCase: UsersUseCase,
|
||||||
private val accountsRepository: AccountsRepository,
|
private val accountsRepository: AccountsRepository,
|
||||||
private val loginValidator: LoginValidator,
|
private val loginValidator: LoginValidator,
|
||||||
private val longPollController: LongPollController
|
private val longPollController: LongPollController
|
||||||
) : ViewModel(), dev.meloda.fast.auth.login.LoginViewModel {
|
) : ViewModel(), LoginViewModel {
|
||||||
|
|
||||||
override val screenState = MutableStateFlow(LoginScreenState.EMPTY)
|
override val screenState = MutableStateFlow(LoginScreenState.EMPTY)
|
||||||
override val loginError = MutableStateFlow<LoginError?>(null)
|
override val loginError = MutableStateFlow<LoginError?>(null)
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
package dev.meloda.fast.auth.login.di
|
package dev.meloda.fast.auth.login.di
|
||||||
|
|
||||||
import dev.meloda.fast.auth.login.LoginViewModel
|
|
||||||
import dev.meloda.fast.auth.login.LoginViewModelImpl
|
import dev.meloda.fast.auth.login.LoginViewModelImpl
|
||||||
import dev.meloda.fast.auth.login.OAuthUseCase
|
import dev.meloda.fast.domain.OAuthUseCase
|
||||||
import dev.meloda.fast.auth.login.OAuthUseCaseImpl
|
import dev.meloda.fast.domain.OAuthUseCaseImpl
|
||||||
import dev.meloda.fast.auth.login.validation.LoginValidator
|
import dev.meloda.fast.auth.login.validation.LoginValidator
|
||||||
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
||||||
import org.koin.core.module.dsl.singleOf
|
import org.koin.core.module.dsl.singleOf
|
||||||
|
|||||||
+4
-4
@@ -4,14 +4,14 @@ import androidx.navigation.NavBackStackEntry
|
|||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import androidx.navigation.NavGraphBuilder
|
import androidx.navigation.NavGraphBuilder
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import dev.meloda.fast.common.extensions.navigation.sharedViewModel
|
|
||||||
import dev.meloda.fast.auth.login.LoginViewModel
|
import dev.meloda.fast.auth.login.LoginViewModel
|
||||||
import dev.meloda.fast.auth.login.LoginViewModelImpl
|
import dev.meloda.fast.auth.login.LoginViewModelImpl
|
||||||
import dev.meloda.fast.auth.login.model.CaptchaArguments
|
import dev.meloda.fast.auth.login.model.CaptchaArguments
|
||||||
import dev.meloda.fast.auth.login.model.LoginValidationArguments
|
|
||||||
import dev.meloda.fast.auth.login.model.LoginUserBannedArguments
|
import dev.meloda.fast.auth.login.model.LoginUserBannedArguments
|
||||||
|
import dev.meloda.fast.auth.login.model.LoginValidationArguments
|
||||||
import dev.meloda.fast.auth.login.presentation.LoginRoute
|
import dev.meloda.fast.auth.login.presentation.LoginRoute
|
||||||
import dev.meloda.fast.auth.login.presentation.LogoRoute
|
import dev.meloda.fast.auth.login.presentation.LogoRoute
|
||||||
|
import dev.meloda.fast.ui.extensions.sharedViewModel
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
@@ -29,8 +29,8 @@ fun NavGraphBuilder.loginScreen(
|
|||||||
navController: NavController
|
navController: NavController
|
||||||
) {
|
) {
|
||||||
composable<Login> { backStackEntry ->
|
composable<Login> { backStackEntry ->
|
||||||
val viewModel: dev.meloda.fast.auth.login.LoginViewModel =
|
val viewModel: LoginViewModel =
|
||||||
backStackEntry.sharedViewModel<dev.meloda.fast.auth.login.LoginViewModelImpl>(navController = navController)
|
backStackEntry.sharedViewModel<LoginViewModelImpl>(navController = navController)
|
||||||
|
|
||||||
val validationCode = backStackEntry.getValidationResult()
|
val validationCode = backStackEntry.getValidationResult()
|
||||||
val captchaCode = backStackEntry.getCaptchaResult()
|
val captchaCode = backStackEntry.getCaptchaResult()
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import dev.meloda.fast.common.extensions.listenValue
|
|||||||
import dev.meloda.fast.common.extensions.setValue
|
import dev.meloda.fast.common.extensions.setValue
|
||||||
import dev.meloda.fast.common.extensions.updateValue
|
import dev.meloda.fast.common.extensions.updateValue
|
||||||
import dev.meloda.fast.data.processState
|
import dev.meloda.fast.data.processState
|
||||||
|
import dev.meloda.fast.domain.AuthUseCase
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package dev.meloda.fast.auth.validation.di
|
package dev.meloda.fast.auth.validation.di
|
||||||
|
|
||||||
import dev.meloda.fast.auth.validation.AuthUseCase
|
import dev.meloda.fast.domain.AuthUseCase
|
||||||
import dev.meloda.fast.auth.validation.AuthUseCaseImpl
|
import dev.meloda.fast.domain.AuthUseCaseImpl
|
||||||
import dev.meloda.fast.auth.validation.ValidationViewModel
|
import dev.meloda.fast.auth.validation.ValidationViewModel
|
||||||
import dev.meloda.fast.auth.validation.ValidationViewModelImpl
|
import dev.meloda.fast.auth.validation.ValidationViewModelImpl
|
||||||
import dev.meloda.fast.auth.validation.validation.ValidationValidator
|
import dev.meloda.fast.auth.validation.validation.ValidationValidator
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ import androidx.navigation.compose.composable
|
|||||||
import androidx.navigation.toRoute
|
import androidx.navigation.toRoute
|
||||||
import dev.meloda.fast.auth.validation.model.ValidationArguments
|
import dev.meloda.fast.auth.validation.model.ValidationArguments
|
||||||
import dev.meloda.fast.auth.validation.presentation.ValidationRoute
|
import dev.meloda.fast.auth.validation.presentation.ValidationRoute
|
||||||
import dev.meloda.fast.common.extensions.customNavType
|
import dev.meloda.fast.ui.extensions.customNavType
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlin.reflect.typeOf
|
import kotlin.reflect.typeOf
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.core.data)
|
implementation(projects.core.domain)
|
||||||
implementation(projects.core.model)
|
implementation(projects.core.model)
|
||||||
implementation(projects.core.ui)
|
implementation(projects.core.ui)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -7,8 +7,8 @@ import dev.meloda.fast.chatmaterials.navigation.ChatMaterials
|
|||||||
import dev.meloda.fast.chatmaterials.util.asPresentation
|
import dev.meloda.fast.chatmaterials.util.asPresentation
|
||||||
import dev.meloda.fast.common.extensions.listenValue
|
import dev.meloda.fast.common.extensions.listenValue
|
||||||
import dev.meloda.fast.common.extensions.setValue
|
import dev.meloda.fast.common.extensions.setValue
|
||||||
import dev.meloda.fast.data.api.messages.MessagesUseCase
|
|
||||||
import dev.meloda.fast.data.processState
|
import dev.meloda.fast.data.processState
|
||||||
|
import dev.meloda.fast.domain.MessagesUseCase
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
import dev.meloda.fast.model.api.domain.VkAttachmentHistoryMessage
|
import dev.meloda.fast.model.api.domain.VkAttachmentHistoryMessage
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|||||||
@@ -9,13 +9,11 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.core.common)
|
implementation(projects.core.common)
|
||||||
implementation(projects.core.data)
|
implementation(projects.core.domain)
|
||||||
implementation(projects.core.model)
|
implementation(projects.core.model)
|
||||||
implementation(projects.core.ui)
|
implementation(projects.core.ui)
|
||||||
|
|
||||||
implementation(libs.nanokt.android)
|
implementation(libs.bundles.nanokt)
|
||||||
implementation(libs.nanokt.jvm)
|
|
||||||
implementation(libs.nanokt)
|
|
||||||
|
|
||||||
implementation(libs.koin.android)
|
implementation(libs.koin.android)
|
||||||
implementation(libs.koin.androidx.compose)
|
implementation(libs.koin.androidx.compose)
|
||||||
|
|||||||
+3
-3
@@ -14,12 +14,12 @@ import dev.meloda.fast.conversations.model.ConversationsShowOptions
|
|||||||
import dev.meloda.fast.conversations.model.UiConversation
|
import dev.meloda.fast.conversations.model.UiConversation
|
||||||
import dev.meloda.fast.conversations.util.asPresentation
|
import dev.meloda.fast.conversations.util.asPresentation
|
||||||
import dev.meloda.fast.conversations.util.extractAvatar
|
import dev.meloda.fast.conversations.util.extractAvatar
|
||||||
import dev.meloda.fast.data.LongPollUpdatesParser
|
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.data.api.conversations.ConversationsUseCase
|
|
||||||
import dev.meloda.fast.data.api.messages.MessagesUseCase
|
|
||||||
import dev.meloda.fast.data.processState
|
import dev.meloda.fast.data.processState
|
||||||
import dev.meloda.fast.datastore.UserSettings
|
import dev.meloda.fast.datastore.UserSettings
|
||||||
|
import dev.meloda.fast.domain.ConversationsUseCase
|
||||||
|
import dev.meloda.fast.domain.LongPollUpdatesParser
|
||||||
|
import dev.meloda.fast.domain.MessagesUseCase
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
import dev.meloda.fast.model.InteractionType
|
import dev.meloda.fast.model.InteractionType
|
||||||
import dev.meloda.fast.model.LongPollEvent
|
import dev.meloda.fast.model.LongPollEvent
|
||||||
|
|||||||
+3
-3
@@ -1,14 +1,14 @@
|
|||||||
package dev.meloda.fast.conversations.di
|
package dev.meloda.fast.conversations.di
|
||||||
|
|
||||||
import dev.meloda.fast.conversations.ConversationsViewModelImpl
|
import dev.meloda.fast.conversations.ConversationsViewModelImpl
|
||||||
import dev.meloda.fast.conversations.data.ConversationsUseCaseImpl
|
import dev.meloda.fast.domain.ConversationsUseCaseImpl
|
||||||
import dev.meloda.fast.data.api.conversations.ConversationsUseCase
|
import dev.meloda.fast.domain.ConversationsUseCase
|
||||||
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
||||||
import org.koin.core.module.dsl.singleOf
|
import org.koin.core.module.dsl.singleOf
|
||||||
import org.koin.dsl.bind
|
import org.koin.dsl.bind
|
||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
val conversationsModule = module {
|
val conversationsModule = module {
|
||||||
singleOf(::ConversationsUseCaseImpl) bind ConversationsUseCase::class
|
singleOf(::ConversationsUseCaseImpl) bind dev.meloda.fast.domain.ConversationsUseCase::class
|
||||||
viewModelOf(::ConversationsViewModelImpl)
|
viewModelOf(::ConversationsViewModelImpl)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -3,11 +3,11 @@ package dev.meloda.fast.conversations.navigation
|
|||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import androidx.navigation.NavGraphBuilder
|
import androidx.navigation.NavGraphBuilder
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import dev.meloda.fast.common.extensions.navigation.sharedViewModel
|
|
||||||
import dev.meloda.fast.conversations.ConversationsViewModel
|
import dev.meloda.fast.conversations.ConversationsViewModel
|
||||||
import dev.meloda.fast.conversations.ConversationsViewModelImpl
|
import dev.meloda.fast.conversations.ConversationsViewModelImpl
|
||||||
import dev.meloda.fast.conversations.presentation.ConversationsRoute
|
import dev.meloda.fast.conversations.presentation.ConversationsRoute
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
|
import dev.meloda.fast.ui.extensions.sharedViewModel
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
|||||||
+1
-1
@@ -23,10 +23,10 @@ import androidx.compose.runtime.rememberCoroutineScope
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.conversations.model.ConversationOption
|
import dev.meloda.fast.conversations.model.ConversationOption
|
||||||
import dev.meloda.fast.conversations.model.ConversationsScreenState
|
import dev.meloda.fast.conversations.model.ConversationsScreenState
|
||||||
import dev.meloda.fast.conversations.model.UiConversation
|
import dev.meloda.fast.conversations.model.UiConversation
|
||||||
|
import dev.meloda.fast.data.UserConfig
|
||||||
import dev.meloda.fast.ui.theme.LocalBottomPadding
|
import dev.meloda.fast.ui.theme.LocalBottomPadding
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|||||||
+2
-2
@@ -9,14 +9,14 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.text.withStyle
|
import androidx.compose.ui.text.withStyle
|
||||||
import com.conena.nanokt.jvm.util.dayOfMonth
|
import com.conena.nanokt.jvm.util.dayOfMonth
|
||||||
import com.conena.nanokt.jvm.util.month
|
import com.conena.nanokt.jvm.util.month
|
||||||
|
import dev.meloda.fast.common.extensions.orDots
|
||||||
import dev.meloda.fast.common.model.UiImage
|
import dev.meloda.fast.common.model.UiImage
|
||||||
import dev.meloda.fast.common.model.UiText
|
import dev.meloda.fast.common.model.UiText
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.common.extensions.orDots
|
|
||||||
import dev.meloda.fast.common.model.parseString
|
import dev.meloda.fast.common.model.parseString
|
||||||
import dev.meloda.fast.common.util.TimeUtils
|
import dev.meloda.fast.common.util.TimeUtils
|
||||||
import dev.meloda.fast.conversations.model.ActionState
|
import dev.meloda.fast.conversations.model.ActionState
|
||||||
import dev.meloda.fast.conversations.model.UiConversation
|
import dev.meloda.fast.conversations.model.UiConversation
|
||||||
|
import dev.meloda.fast.data.UserConfig
|
||||||
import dev.meloda.fast.data.VkMemoryCache
|
import dev.meloda.fast.data.VkMemoryCache
|
||||||
import dev.meloda.fast.model.InteractionType
|
import dev.meloda.fast.model.InteractionType
|
||||||
import dev.meloda.fast.model.api.PeerType
|
import dev.meloda.fast.model.api.PeerType
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.core.common)
|
implementation(projects.core.common)
|
||||||
implementation(projects.core.data)
|
implementation(projects.core.domain)
|
||||||
implementation(projects.core.model)
|
implementation(projects.core.model)
|
||||||
implementation(projects.core.ui)
|
implementation(projects.core.ui)
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import androidx.lifecycle.ViewModel
|
|||||||
import dev.meloda.fast.common.extensions.listenValue
|
import dev.meloda.fast.common.extensions.listenValue
|
||||||
import dev.meloda.fast.common.extensions.setValue
|
import dev.meloda.fast.common.extensions.setValue
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.data.api.friends.FriendsUseCase
|
import dev.meloda.fast.domain.FriendsUseCase
|
||||||
import dev.meloda.fast.data.processState
|
import dev.meloda.fast.data.processState
|
||||||
import dev.meloda.fast.datastore.UserSettings
|
import dev.meloda.fast.datastore.UserSettings
|
||||||
import dev.meloda.fast.friends.model.FriendsScreenState
|
import dev.meloda.fast.friends.model.FriendsScreenState
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
package dev.meloda.fast.friends.di
|
package dev.meloda.fast.friends.di
|
||||||
|
|
||||||
import dev.meloda.fast.data.api.friends.FriendsUseCase
|
import dev.meloda.fast.domain.FriendsUseCase
|
||||||
import dev.meloda.fast.friends.FriendsViewModelImpl
|
import dev.meloda.fast.friends.FriendsViewModelImpl
|
||||||
import dev.meloda.fast.friends.domain.FriendsUseCaseImpl
|
import dev.meloda.fast.domain.FriendsUseCaseImpl
|
||||||
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
||||||
import org.koin.core.module.dsl.singleOf
|
import org.koin.core.module.dsl.singleOf
|
||||||
import org.koin.dsl.bind
|
import org.koin.dsl.bind
|
||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
val friendsModule = module {
|
val friendsModule = module {
|
||||||
singleOf(::FriendsUseCaseImpl) bind FriendsUseCase::class
|
singleOf(::FriendsUseCaseImpl) bind dev.meloda.fast.domain.FriendsUseCase::class
|
||||||
|
|
||||||
viewModelOf(::FriendsViewModelImpl)
|
viewModelOf(::FriendsViewModelImpl)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -3,11 +3,11 @@ package dev.meloda.fast.friends.navigation
|
|||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import androidx.navigation.NavGraphBuilder
|
import androidx.navigation.NavGraphBuilder
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import dev.meloda.fast.common.extensions.navigation.sharedViewModel
|
|
||||||
import dev.meloda.fast.friends.FriendsViewModel
|
import dev.meloda.fast.friends.FriendsViewModel
|
||||||
import dev.meloda.fast.friends.FriendsViewModelImpl
|
import dev.meloda.fast.friends.FriendsViewModelImpl
|
||||||
import dev.meloda.fast.friends.presentation.FriendsRoute
|
import dev.meloda.fast.friends.presentation.FriendsRoute
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
|
import dev.meloda.fast.ui.extensions.sharedViewModel
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.core.common)
|
implementation(projects.core.common)
|
||||||
implementation(projects.core.data)
|
implementation(projects.core.domain)
|
||||||
implementation(projects.core.model)
|
implementation(projects.core.model)
|
||||||
implementation(projects.core.ui)
|
implementation(projects.core.ui)
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -9,19 +9,19 @@ import androidx.lifecycle.viewModelScope
|
|||||||
import com.conena.nanokt.collections.indexOfFirstOrNull
|
import com.conena.nanokt.collections.indexOfFirstOrNull
|
||||||
import com.conena.nanokt.collections.indexOfOrNull
|
import com.conena.nanokt.collections.indexOfOrNull
|
||||||
import com.conena.nanokt.text.isEmptyOrBlank
|
import com.conena.nanokt.text.isEmptyOrBlank
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.common.extensions.listenValue
|
import dev.meloda.fast.common.extensions.listenValue
|
||||||
import dev.meloda.fast.common.extensions.setValue
|
import dev.meloda.fast.common.extensions.setValue
|
||||||
import dev.meloda.fast.common.extensions.updateValue
|
import dev.meloda.fast.common.extensions.updateValue
|
||||||
import dev.meloda.fast.common.provider.ResourceProvider
|
import dev.meloda.fast.common.provider.ResourceProvider
|
||||||
import dev.meloda.fast.data.LongPollUpdatesParser
|
import dev.meloda.fast.data.UserConfig
|
||||||
import dev.meloda.fast.data.VkMemoryCache
|
import dev.meloda.fast.data.VkMemoryCache
|
||||||
import dev.meloda.fast.data.api.conversations.ConversationsUseCase
|
|
||||||
import dev.meloda.fast.data.api.messages.MessagesUseCase
|
|
||||||
import dev.meloda.fast.data.processState
|
import dev.meloda.fast.data.processState
|
||||||
import dev.meloda.fast.datastore.AppSettings
|
import dev.meloda.fast.datastore.AppSettings
|
||||||
import dev.meloda.fast.datastore.SettingsKeys
|
import dev.meloda.fast.datastore.SettingsKeys
|
||||||
import dev.meloda.fast.datastore.UserSettings
|
import dev.meloda.fast.datastore.UserSettings
|
||||||
|
import dev.meloda.fast.domain.ConversationsUseCase
|
||||||
|
import dev.meloda.fast.domain.LongPollUpdatesParser
|
||||||
|
import dev.meloda.fast.domain.MessagesUseCase
|
||||||
import dev.meloda.fast.messageshistory.model.ActionMode
|
import dev.meloda.fast.messageshistory.model.ActionMode
|
||||||
import dev.meloda.fast.messageshistory.model.MessagesHistoryScreenState
|
import dev.meloda.fast.messageshistory.model.MessagesHistoryScreenState
|
||||||
import dev.meloda.fast.messageshistory.model.UiItem
|
import dev.meloda.fast.messageshistory.model.UiItem
|
||||||
|
|||||||
+3
-3
@@ -1,9 +1,9 @@
|
|||||||
package dev.meloda.fast.messageshistory.di
|
package dev.meloda.fast.messageshistory.di
|
||||||
|
|
||||||
import dev.meloda.fast.data.api.messages.MessagesUseCase
|
import dev.meloda.fast.domain.MessagesUseCase
|
||||||
import dev.meloda.fast.messageshistory.MessagesHistoryViewModel
|
import dev.meloda.fast.messageshistory.MessagesHistoryViewModel
|
||||||
import dev.meloda.fast.messageshistory.MessagesHistoryViewModelImpl
|
import dev.meloda.fast.messageshistory.MessagesHistoryViewModelImpl
|
||||||
import dev.meloda.fast.messageshistory.domain.MessagesUseCaseImpl
|
import dev.meloda.fast.domain.MessagesUseCaseImpl
|
||||||
import dev.meloda.fast.messageshistory.validation.MessagesHistoryValidator
|
import dev.meloda.fast.messageshistory.validation.MessagesHistoryValidator
|
||||||
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
||||||
import org.koin.core.module.dsl.singleOf
|
import org.koin.core.module.dsl.singleOf
|
||||||
@@ -11,7 +11,7 @@ import org.koin.dsl.bind
|
|||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
|
|
||||||
val messagesHistoryModule = module {
|
val messagesHistoryModule = module {
|
||||||
singleOf(::MessagesUseCaseImpl) bind MessagesUseCase::class
|
singleOf(::MessagesUseCaseImpl) bind dev.meloda.fast.domain.MessagesUseCase::class
|
||||||
singleOf(::MessagesHistoryValidator)
|
singleOf(::MessagesHistoryValidator)
|
||||||
viewModelOf(::MessagesHistoryViewModelImpl) bind MessagesHistoryViewModel::class
|
viewModelOf(::MessagesHistoryViewModelImpl) bind MessagesHistoryViewModel::class
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -5,10 +5,10 @@ import androidx.navigation.NavController
|
|||||||
import androidx.navigation.NavGraphBuilder
|
import androidx.navigation.NavGraphBuilder
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.toRoute
|
import androidx.navigation.toRoute
|
||||||
import dev.meloda.fast.common.extensions.customNavType
|
|
||||||
import dev.meloda.fast.messageshistory.model.MessagesHistoryArguments
|
import dev.meloda.fast.messageshistory.model.MessagesHistoryArguments
|
||||||
import dev.meloda.fast.messageshistory.presentation.MessagesHistoryRoute
|
import dev.meloda.fast.messageshistory.presentation.MessagesHistoryRoute
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
|
import dev.meloda.fast.ui.extensions.customNavType
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import kotlin.reflect.typeOf
|
import kotlin.reflect.typeOf
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -5,12 +5,12 @@ import androidx.compose.ui.text.AnnotatedString
|
|||||||
import androidx.compose.ui.text.SpanStyle
|
import androidx.compose.ui.text.SpanStyle
|
||||||
import androidx.compose.ui.text.buildAnnotatedString
|
import androidx.compose.ui.text.buildAnnotatedString
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.common.extensions.orDots
|
import dev.meloda.fast.common.extensions.orDots
|
||||||
import dev.meloda.fast.common.model.UiImage
|
import dev.meloda.fast.common.model.UiImage
|
||||||
import dev.meloda.fast.common.model.UiText
|
import dev.meloda.fast.common.model.UiText
|
||||||
import dev.meloda.fast.common.model.parseString
|
import dev.meloda.fast.common.model.parseString
|
||||||
import dev.meloda.fast.common.provider.ResourceProvider
|
import dev.meloda.fast.common.provider.ResourceProvider
|
||||||
|
import dev.meloda.fast.data.UserConfig
|
||||||
import dev.meloda.fast.data.VkMemoryCache
|
import dev.meloda.fast.data.VkMemoryCache
|
||||||
import dev.meloda.fast.messageshistory.model.UiItem
|
import dev.meloda.fast.messageshistory.model.UiItem
|
||||||
import dev.meloda.fast.model.api.PeerType
|
import dev.meloda.fast.model.api.PeerType
|
||||||
|
|||||||
+1
-1
@@ -5,9 +5,9 @@ import androidx.navigation.NavController
|
|||||||
import androidx.navigation.NavGraphBuilder
|
import androidx.navigation.NavGraphBuilder
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.toRoute
|
import androidx.navigation.toRoute
|
||||||
import dev.meloda.fast.common.extensions.customNavType
|
|
||||||
import dev.meloda.fast.photoviewer.model.PhotoViewArguments
|
import dev.meloda.fast.photoviewer.model.PhotoViewArguments
|
||||||
import dev.meloda.fast.photoviewer.presentation.PhotoViewRoute
|
import dev.meloda.fast.photoviewer.presentation.PhotoViewRoute
|
||||||
|
import dev.meloda.fast.ui.extensions.customNavType
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import java.net.URLEncoder
|
import java.net.URLEncoder
|
||||||
import kotlin.reflect.typeOf
|
import kotlin.reflect.typeOf
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.core.common)
|
implementation(projects.core.common)
|
||||||
implementation(projects.core.data)
|
implementation(projects.core.domain)
|
||||||
implementation(projects.core.model)
|
implementation(projects.core.model)
|
||||||
implementation(projects.core.ui)
|
implementation(projects.core.ui)
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package dev.meloda.fast.profile
|
package dev.meloda.fast.profile
|
||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.common.VkConstants
|
import dev.meloda.fast.common.VkConstants
|
||||||
import dev.meloda.fast.common.extensions.listenValue
|
import dev.meloda.fast.common.extensions.listenValue
|
||||||
import dev.meloda.fast.common.extensions.setValue
|
import dev.meloda.fast.common.extensions.setValue
|
||||||
import dev.meloda.fast.data.State
|
import dev.meloda.fast.data.State
|
||||||
import dev.meloda.fast.data.api.users.UsersUseCase
|
import dev.meloda.fast.data.UserConfig
|
||||||
import dev.meloda.fast.data.processState
|
import dev.meloda.fast.data.processState
|
||||||
|
import dev.meloda.fast.domain.UsersUseCase
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
import dev.meloda.fast.network.VkErrorCode
|
import dev.meloda.fast.network.VkErrorCode
|
||||||
import dev.meloda.fast.profile.model.ProfileScreenState
|
import dev.meloda.fast.profile.model.ProfileScreenState
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ package dev.meloda.fast.profile.navigation
|
|||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import androidx.navigation.NavGraphBuilder
|
import androidx.navigation.NavGraphBuilder
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import dev.meloda.fast.common.extensions.navigation.sharedViewModel
|
|
||||||
import dev.meloda.fast.model.BaseError
|
import dev.meloda.fast.model.BaseError
|
||||||
import dev.meloda.fast.profile.ProfileViewModel
|
import dev.meloda.fast.profile.ProfileViewModel
|
||||||
import dev.meloda.fast.profile.ProfileViewModelImpl
|
import dev.meloda.fast.profile.ProfileViewModelImpl
|
||||||
import dev.meloda.fast.profile.presentation.ProfileRoute
|
import dev.meloda.fast.profile.presentation.ProfileRoute
|
||||||
|
import dev.meloda.fast.ui.extensions.sharedViewModel
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
|||||||
@@ -7,13 +7,12 @@ import androidx.core.view.HapticFeedbackConstantsCompat
|
|||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import dev.meloda.fast.common.LongPollController
|
import dev.meloda.fast.common.LongPollController
|
||||||
import dev.meloda.fast.common.UserConfig
|
|
||||||
import dev.meloda.fast.common.extensions.findWithIndex
|
import dev.meloda.fast.common.extensions.findWithIndex
|
||||||
import dev.meloda.fast.common.extensions.isSdkAtLeast
|
|
||||||
import dev.meloda.fast.common.extensions.setValue
|
import dev.meloda.fast.common.extensions.setValue
|
||||||
import dev.meloda.fast.common.model.DarkMode
|
import dev.meloda.fast.common.model.DarkMode
|
||||||
import dev.meloda.fast.common.model.LongPollState
|
import dev.meloda.fast.common.model.LongPollState
|
||||||
import dev.meloda.fast.common.model.UiText
|
import dev.meloda.fast.common.model.UiText
|
||||||
|
import dev.meloda.fast.data.UserConfig
|
||||||
import dev.meloda.fast.data.db.AccountsRepository
|
import dev.meloda.fast.data.db.AccountsRepository
|
||||||
import dev.meloda.fast.datastore.AppSettings
|
import dev.meloda.fast.datastore.AppSettings
|
||||||
import dev.meloda.fast.datastore.SettingsKeys
|
import dev.meloda.fast.datastore.SettingsKeys
|
||||||
@@ -330,7 +329,7 @@ class SettingsViewModelImpl(
|
|||||||
val appearanceUseDynamicColors = SettingsItem.Switch(
|
val appearanceUseDynamicColors = SettingsItem.Switch(
|
||||||
key = SettingsKeys.KEY_USE_DYNAMIC_COLORS,
|
key = SettingsKeys.KEY_USE_DYNAMIC_COLORS,
|
||||||
title = UiText.Resource(UiR.string.settings_dynamic_colors),
|
title = UiText.Resource(UiR.string.settings_dynamic_colors),
|
||||||
isVisible = isSdkAtLeast(Build.VERSION_CODES.S),
|
isVisible = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S,
|
||||||
text = UiText.Resource(UiR.string.settings_dynamic_colors_description),
|
text = UiText.Resource(UiR.string.settings_dynamic_colors_description),
|
||||||
defaultValue = SettingsKeys.DEFAULT_VALUE_USE_DYNAMIC_COLORS
|
defaultValue = SettingsKeys.DEFAULT_VALUE_USE_DYNAMIC_COLORS
|
||||||
)
|
)
|
||||||
|
|||||||
+6
-6
@@ -30,7 +30,12 @@ import androidx.compose.ui.res.painterResource
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.LayoutDirection
|
import androidx.compose.ui.unit.LayoutDirection
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import dev.meloda.fast.common.UserConfig
|
import dev.chrisbanes.haze.HazeState
|
||||||
|
import dev.chrisbanes.haze.haze
|
||||||
|
import dev.chrisbanes.haze.hazeChild
|
||||||
|
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
||||||
|
import dev.chrisbanes.haze.materials.HazeMaterials
|
||||||
|
import dev.meloda.fast.data.UserConfig
|
||||||
import dev.meloda.fast.datastore.SettingsKeys
|
import dev.meloda.fast.datastore.SettingsKeys
|
||||||
import dev.meloda.fast.settings.HapticType
|
import dev.meloda.fast.settings.HapticType
|
||||||
import dev.meloda.fast.settings.SettingsViewModel
|
import dev.meloda.fast.settings.SettingsViewModel
|
||||||
@@ -45,11 +50,6 @@ import dev.meloda.fast.settings.presentation.item.TitleTextItem
|
|||||||
import dev.meloda.fast.ui.components.ActionInvokeDismiss
|
import dev.meloda.fast.ui.components.ActionInvokeDismiss
|
||||||
import dev.meloda.fast.ui.components.MaterialDialog
|
import dev.meloda.fast.ui.components.MaterialDialog
|
||||||
import dev.meloda.fast.ui.theme.LocalThemeConfig
|
import dev.meloda.fast.ui.theme.LocalThemeConfig
|
||||||
import dev.chrisbanes.haze.HazeState
|
|
||||||
import dev.chrisbanes.haze.haze
|
|
||||||
import dev.chrisbanes.haze.hazeChild
|
|
||||||
import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
|
|
||||||
import dev.chrisbanes.haze.materials.HazeMaterials
|
|
||||||
import org.koin.androidx.compose.koinViewModel
|
import org.koin.androidx.compose.koinViewModel
|
||||||
import dev.meloda.fast.ui.R as UiR
|
import dev.meloda.fast.ui.R as UiR
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ appcompat = "1.7.0"
|
|||||||
androidx-navigation = "2.8.0-beta07"
|
androidx-navigation = "2.8.0-beta07"
|
||||||
serialization = "1.7.1"
|
serialization = "1.7.1"
|
||||||
rebugger = "1.0.0-rc03"
|
rebugger = "1.0.0-rc03"
|
||||||
|
moduleGraph = "2.5.0"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" }
|
accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" }
|
||||||
@@ -125,13 +126,14 @@ nanokt = [
|
|||||||
[plugins]
|
[plugins]
|
||||||
android-application = { id = "com.android.application", version.ref = "agp" }
|
android-application = { id = "com.android.application", version.ref = "agp" }
|
||||||
android-library = { id = "com.android.library", version.ref = "agp" }
|
android-library = { id = "com.android.library", version.ref = "agp" }
|
||||||
org-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
|
||||||
compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
||||||
|
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
||||||
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
|
kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
|
||||||
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
||||||
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
||||||
room = { id = "androidx.room", version.ref = "room" }
|
room = { id = "androidx.room", version.ref = "room" }
|
||||||
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
||||||
|
module-graph = { id = "com.jraska.module.graph.assertion", version.ref = "moduleGraph" }
|
||||||
|
|
||||||
#project plugins
|
#project plugins
|
||||||
fast-android-application = { id = "fast.android.application", version = "unspecified" }
|
fast-android-application = { id = "fast.android.application", version = "unspecified" }
|
||||||
|
|||||||
@@ -35,3 +35,4 @@ include(":feature:photoviewer")
|
|||||||
include(":feature:settings")
|
include(":feature:settings")
|
||||||
include(":feature:friends")
|
include(":feature:friends")
|
||||||
include(":feature:profile")
|
include(":feature:profile")
|
||||||
|
include(":core:domain")
|
||||||
|
|||||||
Reference in New Issue
Block a user