more fixes

This commit is contained in:
2024-07-16 07:43:08 +03:00
parent c8b1d72f08
commit a696425dc8
52 changed files with 113 additions and 251 deletions
@@ -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,
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 = userSettings.enableAmoledDark.value,
enableBlur = userSettings.useBlur.value,
enableMultiline = userSettings.enableMultiline.value,
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()
}
}
-4
View File
@@ -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>
-4
View File
@@ -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"),
-4
View File
@@ -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,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
@@ -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,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,4 +1,4 @@
package com.meloda.fast.auth.login.model
package dev.meloda.fast.auth.login.model
import androidx.compose.runtime.Immutable
@@ -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,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,4 +1,4 @@
package com.meloda.fast.auth.login.model
package dev.meloda.fast.auth.login.model
sealed class LoginValidationResult {
@@ -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
@@ -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
@@ -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
@@ -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>
@@ -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?
}