more fixes
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package dev.meloda.fast.presentation
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.NotificationChannel
|
||||
import android.app.NotificationManager
|
||||
import android.content.Context
|
||||
@@ -18,6 +19,7 @@ import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.toArgb
|
||||
@@ -51,6 +53,7 @@ import dev.meloda.fast.ui.R as UiR
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
@SuppressLint("HardwareIds", "InlinedApi")
|
||||
@OptIn(ExperimentalPermissionsApi::class)
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -155,15 +158,34 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
val themeConfig = ThemeConfig(
|
||||
darkMode = isNeedToEnableDarkMode(userSettings.darkMode.value),
|
||||
dynamicColors = userSettings.enableDynamicColors.value,
|
||||
selectedColorScheme = 0,
|
||||
amoledDark = userSettings.enableAmoledDark.value,
|
||||
enableBlur = userSettings.useBlur.value,
|
||||
enableMultiline = userSettings.enableMultiline.value,
|
||||
isDeviceCompact = isDeviceCompact
|
||||
)
|
||||
val darkMode by userSettings.darkMode.collectAsStateWithLifecycle()
|
||||
val dynamicColors by userSettings.enableDynamicColors.collectAsStateWithLifecycle()
|
||||
val amoledDark by userSettings.enableAmoledDark.collectAsStateWithLifecycle()
|
||||
val enableBlur by userSettings.useBlur.collectAsStateWithLifecycle()
|
||||
val enableMultiline by userSettings.enableMultiline.collectAsStateWithLifecycle()
|
||||
|
||||
val setDarkMode = isNeedToEnableDarkMode(darkMode = darkMode)
|
||||
|
||||
val themeConfig by remember(
|
||||
darkMode,
|
||||
dynamicColors,
|
||||
amoledDark,
|
||||
enableBlur,
|
||||
enableMultiline,
|
||||
setDarkMode
|
||||
) {
|
||||
mutableStateOf(
|
||||
ThemeConfig(
|
||||
darkMode = setDarkMode,
|
||||
dynamicColors = dynamicColors,
|
||||
selectedColorScheme = 0,
|
||||
amoledDark = amoledDark,
|
||||
enableBlur = enableBlur,
|
||||
enableMultiline = enableMultiline,
|
||||
isDeviceCompact = isDeviceCompact
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
CompositionLocalProvider(LocalThemeConfig provides themeConfig) {
|
||||
AppTheme(
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
package dev.meloda.fast.receiver
|
||||
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.util.Log
|
||||
|
||||
class DownloadManagerReceiver : BroadcastReceiver() {
|
||||
|
||||
var onReceiveAction: (() -> Unit)? = null
|
||||
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
onReceiveAction?.invoke()
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -8,11 +8,9 @@ import androidx.annotation.ChecksSdkIntAtLeast
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asFlow
|
||||
import kotlinx.coroutines.flow.flow
|
||||
@@ -20,10 +18,6 @@ import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.flow.onStart
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
@@ -98,26 +92,6 @@ fun createTimerFlow(
|
||||
}
|
||||
}
|
||||
|
||||
context(ViewModel)
|
||||
fun <T> MutableSharedFlow<T>.emitOnMainScope(value: T) = emitOnScope(Dispatchers.Main) { value }
|
||||
|
||||
context(ViewModel)
|
||||
fun <T> MutableSharedFlow<T>.emitOnScope(
|
||||
coroutineContext: CoroutineContext = EmptyCoroutineContext,
|
||||
value: () -> T,
|
||||
) {
|
||||
viewModelScope.launch(coroutineContext) {
|
||||
emit(value())
|
||||
}
|
||||
}
|
||||
|
||||
context(CoroutineScope)
|
||||
suspend fun <T> MutableSharedFlow<T>.emitWithMain(value: T) {
|
||||
withContext(Dispatchers.Main) {
|
||||
emit(value)
|
||||
}
|
||||
}
|
||||
|
||||
context(ViewModel)
|
||||
fun <T> MutableStateFlow<T>.updateValue(newValue: T) = this.update { newValue }
|
||||
|
||||
|
||||
@@ -13,11 +13,6 @@ import androidx.core.content.FileProvider
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
|
||||
private object BuildConfig {
|
||||
const val DEBUG = true
|
||||
const val APPLICATION_ID = "dev.meloda.fast"
|
||||
}
|
||||
|
||||
object AndroidUtils {
|
||||
|
||||
fun copyText(
|
||||
@@ -95,7 +90,7 @@ object AndroidUtils {
|
||||
action = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
|
||||
Settings.ACTION_SECURITY_SETTINGS
|
||||
} else {
|
||||
data = Uri.parse("package:${BuildConfig.APPLICATION_ID}")
|
||||
data = Uri.parse("package:dev.meloda.fast")
|
||||
Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES
|
||||
}
|
||||
})
|
||||
@@ -113,7 +108,7 @@ object AndroidUtils {
|
||||
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true)
|
||||
intent.data = FileProvider.getUriForFile(
|
||||
context,
|
||||
BuildConfig.APPLICATION_ID + providerPath,
|
||||
"dev.meloda.fast$providerPath",
|
||||
fileToRead
|
||||
)
|
||||
|
||||
@@ -132,7 +127,7 @@ object AndroidUtils {
|
||||
}
|
||||
|
||||
val file = existingFile.copyTo(copyToFile)
|
||||
FileProvider.getUriForFile(context, "${BuildConfig.APPLICATION_ID}.provider", file)
|
||||
FileProvider.getUriForFile(context, "dev.meloda.fast.provider", file)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
null
|
||||
@@ -150,7 +145,7 @@ object AndroidUtils {
|
||||
bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream)
|
||||
outputStream.flush()
|
||||
outputStream.close()
|
||||
FileProvider.getUriForFile(context, "${BuildConfig.APPLICATION_ID}.fileprovider", file)
|
||||
FileProvider.getUriForFile(context, "dev.meloda.fast.fileprovider", file)
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
null
|
||||
@@ -188,7 +183,6 @@ object AndroidUtils {
|
||||
}
|
||||
val chooserIntent = Intent.createChooser(intent, "Share $contentType")
|
||||
|
||||
|
||||
context.startActivity(chooserIntent)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,9 +8,9 @@ interface AccountUseCase {
|
||||
suspend fun setOnline(
|
||||
voip: Boolean,
|
||||
accessToken: String
|
||||
): Flow<State<Unit>>
|
||||
): Flow<State<Int>>
|
||||
|
||||
suspend fun setOffline(
|
||||
accessToken: String
|
||||
): Flow<State<Unit>>
|
||||
): Flow<State<Int>>
|
||||
}
|
||||
|
||||
@@ -1,49 +1,30 @@
|
||||
package dev.meloda.fast.data.api.account
|
||||
|
||||
import dev.meloda.fast.data.State
|
||||
import dev.meloda.fast.data.mapToState
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.flow
|
||||
|
||||
// TODO: 05/05/2024, Danil Nikolaev: implement
|
||||
class AccountUseCaseImpl(
|
||||
private val accountRepository: dev.meloda.fast.data.api.account.AccountRepository
|
||||
) : dev.meloda.fast.data.api.account.AccountUseCase {
|
||||
private val repository: AccountRepository
|
||||
) : AccountUseCase {
|
||||
|
||||
override suspend fun setOnline(
|
||||
voip: Boolean,
|
||||
accessToken: String
|
||||
): Flow<State<Unit>> = flow {
|
||||
// emit(dev.meloda.fast.data.State.Loading)
|
||||
//
|
||||
// val newState = accountRepository.setOnline(
|
||||
// params = AccountSetOnlineRequest(
|
||||
// voip = voip,
|
||||
// accessToken = accessToken
|
||||
// )
|
||||
// ).fold(
|
||||
// onSuccess = { response -> dev.meloda.fast.data.State.Success(response) },
|
||||
// onNetworkFailure = { dev.meloda.fast.data.State.Error.ConnectionError },
|
||||
// onUnknownFailure = { dev.meloda.fast.data.State.UNKNOWN_ERROR },
|
||||
// onHttpFailure = { result -> result.error.toStateApiError() },
|
||||
// onApiFailure = { result -> result.error.toStateApiError() }
|
||||
// )
|
||||
// emit(newState)
|
||||
): Flow<State<Int>> = flow {
|
||||
emit(State.Loading)
|
||||
|
||||
val newState = repository.setOnline(voip = voip).mapToState()
|
||||
emit(newState)
|
||||
}
|
||||
|
||||
override suspend fun setOffline(
|
||||
accessToken: String
|
||||
): Flow<dev.meloda.fast.data.State<Unit>> = flow {
|
||||
emit(dev.meloda.fast.data.State.Loading)
|
||||
): Flow<State<Int>> = flow {
|
||||
emit(State.Loading)
|
||||
|
||||
// val newState = accountRepository.setOffline(
|
||||
// params = AccountSetOfflineRequest(accessToken = accessToken)
|
||||
// ).fold(
|
||||
// onSuccess = { response -> dev.meloda.fast.data.State.Success(response) },
|
||||
// onNetworkFailure = { dev.meloda.fast.data.State.Error.ConnectionError },
|
||||
// onUnknownFailure = { dev.meloda.fast.data.State.UNKNOWN_ERROR },
|
||||
// onHttpFailure = { result -> result.error.toStateApiError() },
|
||||
// onApiFailure = { result -> result.error.toStateApiError() }
|
||||
// )
|
||||
// emit(newState)
|
||||
val newState = repository.setOffline().mapToState()
|
||||
emit(newState)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.meloda.fast.model;
|
||||
package dev.meloda.fast.model
|
||||
|
||||
enum class ApiEvent(val value: Int) {
|
||||
MESSAGE_SET_FLAGS(2),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.meloda.fast.model.api;
|
||||
package dev.meloda.fast.model.api
|
||||
|
||||
enum class PeerType(val value: String) {
|
||||
USER("user"),
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -11,5 +11,4 @@ data class ApiResponse<T>(
|
||||
val isSuccessful get() = error == null && response != null
|
||||
|
||||
fun requireResponse(): T = requireNotNull(response)
|
||||
fun requireError(): RestApiError = requireNotNull(error)
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.meloda.fast.network;
|
||||
package dev.meloda.fast.network
|
||||
|
||||
enum class ValidationType(val value: String) {
|
||||
APP("2fa_app"),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.meloda.fast.network;
|
||||
package dev.meloda.fast.network
|
||||
|
||||
enum class VkOAuthErrorType(val value: String) {
|
||||
WRONG_OTP_FORMAT("otp_format_is_incorrect"),
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
package com.meloda.fast.auth.login
|
||||
package dev.meloda.fast.auth.login
|
||||
|
||||
import androidx.compose.ui.test.assertHasClickAction
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import com.meloda.fast.auth.login.presentation.LoginScreen
|
||||
import dev.meloda.fast.auth.login.presentation.LoginScreen
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
package com.meloda.fast.auth.login
|
||||
package dev.meloda.fast.auth.login
|
||||
|
||||
import androidx.compose.ui.test.assertHasClickAction
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import com.meloda.fast.auth.login.presentation.LogoScreen
|
||||
import dev.meloda.fast.auth.login.presentation.LogoScreen
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,9 +1,8 @@
|
||||
package com.meloda.fast.auth.login
|
||||
package dev.meloda.fast.auth.login
|
||||
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dev.meloda.fast.auth.login.BuildConfig
|
||||
import dev.meloda.fast.common.LongPollController
|
||||
import dev.meloda.fast.common.UserConfig
|
||||
import dev.meloda.fast.common.VkConstants
|
||||
@@ -16,16 +15,15 @@ import dev.meloda.fast.data.api.users.UsersUseCase
|
||||
import dev.meloda.fast.data.db.AccountsRepository
|
||||
import dev.meloda.fast.data.processState
|
||||
import dev.meloda.fast.datastore.AppSettings
|
||||
import dev.meloda.fast.datastore.UserSettings
|
||||
import dev.meloda.fast.model.database.AccountEntity
|
||||
import dev.meloda.fast.network.OAuthErrorDomain
|
||||
import com.meloda.fast.auth.login.model.CaptchaArguments
|
||||
import com.meloda.fast.auth.login.model.LoginError
|
||||
import com.meloda.fast.auth.login.model.LoginScreenState
|
||||
import com.meloda.fast.auth.login.model.LoginUserBannedArguments
|
||||
import com.meloda.fast.auth.login.model.LoginValidationArguments
|
||||
import com.meloda.fast.auth.login.model.LoginValidationResult
|
||||
import com.meloda.fast.auth.login.validation.LoginValidator
|
||||
import dev.meloda.fast.auth.login.model.CaptchaArguments
|
||||
import dev.meloda.fast.auth.login.model.LoginError
|
||||
import dev.meloda.fast.auth.login.model.LoginScreenState
|
||||
import dev.meloda.fast.auth.login.model.LoginUserBannedArguments
|
||||
import dev.meloda.fast.auth.login.model.LoginValidationArguments
|
||||
import dev.meloda.fast.auth.login.model.LoginValidationResult
|
||||
import dev.meloda.fast.auth.login.validation.LoginValidator
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
@@ -72,7 +70,6 @@ class LoginViewModelImpl(
|
||||
private val usersUseCase: UsersUseCase,
|
||||
private val accountsRepository: AccountsRepository,
|
||||
private val loginValidator: LoginValidator,
|
||||
private val userSettings: UserSettings,
|
||||
private val longPollController: LongPollController
|
||||
) : ViewModel(), LoginViewModel {
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.meloda.fast.auth.login
|
||||
package dev.meloda.fast.auth.login
|
||||
|
||||
import dev.meloda.fast.data.State
|
||||
import com.meloda.fast.auth.login.model.AuthInfo
|
||||
import dev.meloda.fast.auth.login.model.AuthInfo
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface OAuthUseCase {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.auth.login
|
||||
package dev.meloda.fast.auth.login
|
||||
|
||||
import dev.meloda.fast.data.State
|
||||
import dev.meloda.fast.data.api.oauth.OAuthRepository
|
||||
@@ -6,7 +6,7 @@ import dev.meloda.fast.network.OAuthErrorDomain
|
||||
import dev.meloda.fast.network.ValidationType
|
||||
import dev.meloda.fast.network.VkOAuthError
|
||||
import dev.meloda.fast.network.VkOAuthErrorType
|
||||
import com.meloda.fast.auth.login.model.AuthInfo
|
||||
import dev.meloda.fast.auth.login.model.AuthInfo
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.flow
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.meloda.fast.auth.login.di
|
||||
package dev.meloda.fast.auth.login.di
|
||||
|
||||
import com.meloda.fast.auth.login.LoginViewModel
|
||||
import com.meloda.fast.auth.login.LoginViewModelImpl
|
||||
import com.meloda.fast.auth.login.OAuthUseCase
|
||||
import com.meloda.fast.auth.login.OAuthUseCaseImpl
|
||||
import com.meloda.fast.auth.login.validation.LoginValidator
|
||||
import dev.meloda.fast.auth.login.LoginViewModel
|
||||
import dev.meloda.fast.auth.login.LoginViewModelImpl
|
||||
import dev.meloda.fast.auth.login.OAuthUseCase
|
||||
import dev.meloda.fast.auth.login.OAuthUseCaseImpl
|
||||
import dev.meloda.fast.auth.login.validation.LoginValidator
|
||||
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
||||
import org.koin.core.module.dsl.singleOf
|
||||
import org.koin.dsl.bind
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.auth.login.model
|
||||
package dev.meloda.fast.auth.login.model
|
||||
|
||||
data class AuthInfo(
|
||||
val userId: Int?,
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.auth.login.model
|
||||
package dev.meloda.fast.auth.login.model
|
||||
|
||||
import android.os.Parcelable
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.meloda.fast.auth.login.model
|
||||
|
||||
data class LoginArguments(val code: String) {
|
||||
|
||||
companion object {
|
||||
val EMPTY: LoginArguments = LoginArguments(code = "")
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.auth.login.model
|
||||
package dev.meloda.fast.auth.login.model
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.auth.login.model
|
||||
package dev.meloda.fast.auth.login.model
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.auth.login.model
|
||||
package dev.meloda.fast.auth.login.model
|
||||
|
||||
import android.os.Parcelable
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.auth.login.model
|
||||
package dev.meloda.fast.auth.login.model
|
||||
|
||||
import android.os.Parcelable
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.auth.login.model
|
||||
package dev.meloda.fast.auth.login.model
|
||||
|
||||
sealed class LoginValidationResult {
|
||||
|
||||
|
||||
+8
-8
@@ -1,17 +1,17 @@
|
||||
package com.meloda.fast.auth.login.navigation
|
||||
package dev.meloda.fast.auth.login.navigation
|
||||
|
||||
import androidx.navigation.NavBackStackEntry
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavGraphBuilder
|
||||
import androidx.navigation.compose.composable
|
||||
import dev.meloda.fast.common.extensions.navigation.sharedViewModel
|
||||
import com.meloda.fast.auth.login.LoginViewModel
|
||||
import com.meloda.fast.auth.login.LoginViewModelImpl
|
||||
import com.meloda.fast.auth.login.model.CaptchaArguments
|
||||
import com.meloda.fast.auth.login.model.LoginValidationArguments
|
||||
import com.meloda.fast.auth.login.model.LoginUserBannedArguments
|
||||
import com.meloda.fast.auth.login.presentation.LoginRoute
|
||||
import com.meloda.fast.auth.login.presentation.LogoRoute
|
||||
import dev.meloda.fast.auth.login.LoginViewModel
|
||||
import dev.meloda.fast.auth.login.LoginViewModelImpl
|
||||
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.presentation.LoginRoute
|
||||
import dev.meloda.fast.auth.login.presentation.LogoRoute
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
|
||||
+8
-8
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.auth.login.presentation
|
||||
package dev.meloda.fast.auth.login.presentation
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.fadeIn
|
||||
@@ -58,13 +58,13 @@ import dev.meloda.fast.ui.components.TextFieldErrorText
|
||||
import dev.meloda.fast.ui.theme.LocalThemeConfig
|
||||
import dev.meloda.fast.ui.util.handleEnterKey
|
||||
import dev.meloda.fast.ui.util.handleTabKey
|
||||
import com.meloda.fast.auth.login.LoginViewModel
|
||||
import com.meloda.fast.auth.login.LoginViewModelImpl
|
||||
import com.meloda.fast.auth.login.model.CaptchaArguments
|
||||
import com.meloda.fast.auth.login.model.LoginError
|
||||
import com.meloda.fast.auth.login.model.LoginScreenState
|
||||
import com.meloda.fast.auth.login.model.LoginUserBannedArguments
|
||||
import com.meloda.fast.auth.login.model.LoginValidationArguments
|
||||
import dev.meloda.fast.auth.login.LoginViewModel
|
||||
import dev.meloda.fast.auth.login.LoginViewModelImpl
|
||||
import dev.meloda.fast.auth.login.model.CaptchaArguments
|
||||
import dev.meloda.fast.auth.login.model.LoginError
|
||||
import dev.meloda.fast.auth.login.model.LoginScreenState
|
||||
import dev.meloda.fast.auth.login.model.LoginUserBannedArguments
|
||||
import dev.meloda.fast.auth.login.model.LoginValidationArguments
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
import dev.meloda.fast.ui.R as UiR
|
||||
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
package com.meloda.fast.auth.login.presentation
|
||||
package dev.meloda.fast.auth.login.presentation
|
||||
|
||||
import androidx.compose.animation.core.animateDpAsState
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
@@ -32,8 +32,8 @@ import androidx.compose.ui.unit.LayoutDirection
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import dev.meloda.fast.ui.theme.LocalThemeConfig
|
||||
import com.meloda.fast.auth.login.LoginViewModel
|
||||
import com.meloda.fast.auth.login.LoginViewModelImpl
|
||||
import dev.meloda.fast.auth.login.LoginViewModel
|
||||
import dev.meloda.fast.auth.login.LoginViewModelImpl
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
import dev.meloda.fast.ui.R as UiR
|
||||
|
||||
|
||||
+3
-3
@@ -1,8 +1,8 @@
|
||||
package com.meloda.fast.auth.login.validation
|
||||
package dev.meloda.fast.auth.login.validation
|
||||
|
||||
import dev.meloda.fast.common.extensions.addIf
|
||||
import com.meloda.fast.auth.login.model.LoginScreenState
|
||||
import com.meloda.fast.auth.login.model.LoginValidationResult
|
||||
import dev.meloda.fast.auth.login.model.LoginScreenState
|
||||
import dev.meloda.fast.auth.login.model.LoginValidationResult
|
||||
|
||||
class LoginValidator {
|
||||
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -13,9 +13,9 @@ import dev.meloda.fast.auth.validation.navigation.validationScreen
|
||||
import dev.meloda.fast.auth.userbanned.model.UserBannedArguments
|
||||
import dev.meloda.fast.auth.userbanned.navigation.navigateToUserBanned
|
||||
import dev.meloda.fast.auth.userbanned.navigation.userBannedRoute
|
||||
import com.meloda.fast.auth.login.navigation.Logo
|
||||
import com.meloda.fast.auth.login.navigation.loginScreen
|
||||
import com.meloda.fast.auth.login.navigation.navigateToLogin
|
||||
import dev.meloda.fast.auth.login.navigation.Logo
|
||||
import dev.meloda.fast.auth.login.navigation.loginScreen
|
||||
import dev.meloda.fast.auth.login.navigation.navigateToLogin
|
||||
import kotlinx.serialization.Serializable
|
||||
import java.net.URLEncoder
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package dev.meloda.fast.auth
|
||||
|
||||
import dev.meloda.fast.auth.captcha.di.captchaModule
|
||||
import dev.meloda.fast.auth.validation.di.validationModule
|
||||
import com.meloda.fast.auth.login.di.loginModule
|
||||
import dev.meloda.fast.auth.login.di.loginModule
|
||||
import org.koin.dsl.module
|
||||
|
||||
val authModule = module {
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,5 +0,0 @@
|
||||
package dev.meloda.fast.friends.model
|
||||
|
||||
enum class OnlineState {
|
||||
OFFLINE, ONLINE, ONLINE_MOBILE
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
-3
@@ -48,9 +48,6 @@ import dev.meloda.fast.common.model.UiImage
|
||||
import dev.meloda.fast.photoviewer.PhotoViewViewModel
|
||||
import dev.meloda.fast.photoviewer.model.PhotoViewState
|
||||
|
||||
@OptIn(
|
||||
ExperimentalFoundationApi::class,
|
||||
)
|
||||
@Composable
|
||||
fun PhotoViewScreenContent(
|
||||
onBackClick: () -> Unit,
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</manifest>
|
||||
@@ -104,10 +104,10 @@ class SettingsViewModelImpl(
|
||||
}
|
||||
|
||||
SettingsKeys.KEY_DEBUG_HIDE_DEBUG_LIST -> {
|
||||
val showDebugCategory = AppSettings.Debug.showDebugCategory
|
||||
if (!showDebugCategory) return
|
||||
if (!AppSettings.Debug.showDebugCategory) return
|
||||
|
||||
onSettingsItemChanged(key, false)
|
||||
AppSettings.Debug.showDebugCategory = false
|
||||
userSettings.onShowDebugCategoryChanged(false)
|
||||
|
||||
createSettings()
|
||||
|
||||
@@ -122,7 +122,8 @@ class SettingsViewModelImpl(
|
||||
SettingsKeys.KEY_ACTIVITY_SEND_ONLINE_STATUS -> {
|
||||
if (AppSettings.Debug.showDebugCategory) return
|
||||
|
||||
onSettingsItemChanged(key, true)
|
||||
AppSettings.Debug.showDebugCategory = true
|
||||
userSettings.onShowDebugCategoryChanged(true)
|
||||
|
||||
createSettings()
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package dev.meloda.fast.settings.model
|
||||
|
||||
import dev.meloda.fast.common.model.UiText
|
||||
|
||||
fun interface TitleProvider<T, S : SettingsItem<T>> {
|
||||
fun provideTitle(item: S): UiText?
|
||||
}
|
||||
Reference in New Issue
Block a user