mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
parent
ce58396342
commit
751417a8b7
12 changed files with 75 additions and 34 deletions
|
@ -62,9 +62,7 @@ class OnboardingNetworkSetupDialog : BaseBottomSheetComposeFragment() {
|
|||
onAnytypeNetworkClicked = {
|
||||
vm.proceedWithNetworkMode(NetworkModeConstants.NETWORK_MODE_DEFAULT)
|
||||
},
|
||||
onUseYamuxToggled = {
|
||||
toast("TODO")
|
||||
}
|
||||
onUseYamuxToggled = vm::onChangeMultiplexLibrary
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,13 +13,11 @@ import androidx.compose.foundation.layout.size
|
|||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.Switch
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.draw.scale
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.res.colorResource
|
||||
import androidx.compose.ui.res.painterResource
|
||||
|
@ -150,13 +148,13 @@ fun NetworkSetupScreen(
|
|||
color = NetworkSettingDescriptionColor,
|
||||
textPaddingStart = 0.dp
|
||||
)
|
||||
UseYamuxCard(onUseYamuxToggled)
|
||||
UseYamuxCard(config = config, onUseYamuxToggled = onUseYamuxToggled)
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun UseYamuxCard(onUseYamuxToggled: () -> Unit) {
|
||||
private fun UseYamuxCard(config: NetworkModeConfig, onUseYamuxToggled: () -> Unit) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
|
@ -172,13 +170,12 @@ private fun UseYamuxCard(onUseYamuxToggled: () -> Unit) {
|
|||
)
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.network_settings_use_),
|
||||
text = stringResource(id = R.string.settings_use_yamux),
|
||||
style = BodyCalloutRegular,
|
||||
color = NetworkSettingTitleColor,
|
||||
modifier = Modifier.weight(1.0f)
|
||||
)
|
||||
// TODO use flag from network config
|
||||
if (true) {
|
||||
if (config.useReserveMultiplexLib) {
|
||||
Image(
|
||||
painter = painterResource(id = R.drawable.ic_network_settings_checked),
|
||||
contentDescription = "Check icon"
|
||||
|
|
|
@ -10,14 +10,16 @@ sealed class Command {
|
|||
val avatarPath: String?,
|
||||
val icon: Int,
|
||||
val networkMode: NetworkMode = NetworkMode.DEFAULT,
|
||||
val networkConfigFilePath: String? = null
|
||||
val networkConfigFilePath: String? = null,
|
||||
val preferYamuxTransport: Boolean? = null
|
||||
) : Command()
|
||||
|
||||
data class AccountSelect(
|
||||
val id: String,
|
||||
val path: String,
|
||||
val networkMode: NetworkMode = NetworkMode.DEFAULT,
|
||||
val networkConfigFilePath: String? = null
|
||||
val networkConfigFilePath: String? = null,
|
||||
val preferYamuxTransport: Boolean? = null
|
||||
) : Command()
|
||||
|
||||
class UploadFile(
|
||||
|
|
|
@ -7,7 +7,8 @@ enum class NetworkMode {
|
|||
data class NetworkModeConfig(
|
||||
val networkMode: NetworkMode = NetworkMode.DEFAULT,
|
||||
val userFilePath: String? = null,
|
||||
val storedFilePath: String? = null
|
||||
val storedFilePath: String? = null,
|
||||
val useReserveMultiplexLib: Boolean = false
|
||||
)
|
||||
|
||||
object NetworkModeConst {
|
||||
|
|
|
@ -32,7 +32,8 @@ open class CreateAccount(
|
|||
avatarPath = params.avatarPath,
|
||||
icon = params.iconGradientValue,
|
||||
networkMode = networkMode.networkMode,
|
||||
networkConfigFilePath = networkMode.storedFilePath
|
||||
networkConfigFilePath = networkMode.storedFilePath,
|
||||
preferYamuxTransport = networkMode.useReserveMultiplexLib
|
||||
)
|
||||
val setup = repository.createAccount(command)
|
||||
with(repository) {
|
||||
|
|
|
@ -32,7 +32,8 @@ class SelectAccount @Inject constructor(
|
|||
id = params.id,
|
||||
path = params.path,
|
||||
networkMode = networkMode.networkMode,
|
||||
networkConfigFilePath = networkMode.storedFilePath
|
||||
networkConfigFilePath = networkMode.storedFilePath,
|
||||
preferYamuxTransport = networkMode.useReserveMultiplexLib
|
||||
)
|
||||
val setup = repository.selectAccount(command)
|
||||
with(repository) {
|
||||
|
|
|
@ -87,7 +87,8 @@ class CreateAccountTest {
|
|||
name = name,
|
||||
avatarPath = path,
|
||||
icon = icon,
|
||||
networkMode = NetworkMode.DEFAULT
|
||||
networkMode = NetworkMode.DEFAULT,
|
||||
preferYamuxTransport = false
|
||||
)
|
||||
onBlocking { createAccount(command) } doReturn setup
|
||||
}
|
||||
|
@ -103,7 +104,8 @@ class CreateAccountTest {
|
|||
name = name,
|
||||
avatarPath = path,
|
||||
icon = icon,
|
||||
networkMode = NetworkMode.DEFAULT
|
||||
networkMode = NetworkMode.DEFAULT,
|
||||
preferYamuxTransport = false
|
||||
)
|
||||
verify(repo, times(1)).getNetworkMode()
|
||||
verify(repo, times(1)).createAccount(command)
|
||||
|
|
|
@ -100,7 +100,8 @@ class StartAccountTest {
|
|||
val command = Command.AccountSelect(
|
||||
id = id,
|
||||
path = path,
|
||||
networkMode = NetworkMode.DEFAULT
|
||||
networkMode = NetworkMode.DEFAULT,
|
||||
preferYamuxTransport = false
|
||||
)
|
||||
selectAccount(command)
|
||||
} doReturn AccountSetup(
|
||||
|
@ -120,7 +121,8 @@ class StartAccountTest {
|
|||
val command = Command.AccountSelect(
|
||||
id = id,
|
||||
path = path,
|
||||
networkMode = NetworkMode.DEFAULT
|
||||
networkMode = NetworkMode.DEFAULT,
|
||||
preferYamuxTransport = false
|
||||
)
|
||||
|
||||
verify(repo, times(1)).getNetworkMode()
|
||||
|
@ -169,7 +171,8 @@ class StartAccountTest {
|
|||
val command = Command.AccountSelect(
|
||||
id = id,
|
||||
path = path,
|
||||
networkMode = NetworkMode.DEFAULT
|
||||
networkMode = NetworkMode.DEFAULT,
|
||||
preferYamuxTransport = false
|
||||
)
|
||||
selectAccount(command)
|
||||
} doReturn AccountSetup(
|
||||
|
@ -215,7 +218,8 @@ class StartAccountTest {
|
|||
val command = Command.AccountSelect(
|
||||
id = id,
|
||||
path = path,
|
||||
networkMode = NetworkMode.DEFAULT
|
||||
networkMode = NetworkMode.DEFAULT,
|
||||
preferYamuxTransport = false
|
||||
)
|
||||
selectAccount(command)
|
||||
} doReturn AccountSetup(
|
||||
|
@ -261,7 +265,8 @@ class StartAccountTest {
|
|||
val command = Command.AccountSelect(
|
||||
id = id,
|
||||
path = path,
|
||||
networkMode = NetworkMode.DEFAULT
|
||||
networkMode = NetworkMode.DEFAULT,
|
||||
preferYamuxTransport = false
|
||||
)
|
||||
selectAccount(command)
|
||||
} doReturn AccountSetup(
|
||||
|
@ -307,7 +312,8 @@ class StartAccountTest {
|
|||
val command = Command.AccountSelect(
|
||||
id = id,
|
||||
path = path,
|
||||
networkMode = NetworkMode.LOCAL
|
||||
networkMode = NetworkMode.LOCAL,
|
||||
preferYamuxTransport = false
|
||||
)
|
||||
selectAccount(command)
|
||||
} doReturn AccountSetup(
|
||||
|
@ -359,7 +365,8 @@ class StartAccountTest {
|
|||
id = id,
|
||||
path = path,
|
||||
networkMode = NetworkMode.CUSTOM,
|
||||
networkConfigFilePath = storedFilePath
|
||||
networkConfigFilePath = storedFilePath,
|
||||
preferYamuxTransport = false
|
||||
)
|
||||
selectAccount(command)
|
||||
} doReturn AccountSetup(
|
||||
|
|
|
@ -1241,6 +1241,8 @@
|
|||
<string name="dates_days_ago">%1$s days ago</string>
|
||||
<string name="dates_days_from">%1$s days from now</string>
|
||||
|
||||
<string name="settings_use_yamux">Use a reserve multiplex library</string>
|
||||
|
||||
<!--endregion-->
|
||||
|
||||
<string name="error_kanban_view_not_supported">Kanban view is not available on mobile yet.\nChange view type (Settings -> View) or create a new one to access your data.</string>
|
||||
|
@ -1284,7 +1286,6 @@
|
|||
<string name="network_settings_anytype_network">Anytype network</string>
|
||||
<string name="network_settings_anytype_network_description">Backup to the network managed by Anytype</string>
|
||||
<string name="network_settings_local_only">Local-only</string>
|
||||
<string name="network_settings_use_">Use Yamux transport for multiplexing</string>
|
||||
<string name="network_settings_local_only_description">Don\'t back up; sync within local network</string>
|
||||
<string name="network_settings_self_host">Self-hosted</string>
|
||||
<string name="network_settings_self_host_description">Back up to your self-hosted network</string>
|
||||
|
|
|
@ -66,9 +66,9 @@ class Middleware @Inject constructor(
|
|||
name = command.name,
|
||||
avatarLocalPath = command.avatarPath,
|
||||
icon = command.icon.toLong(),
|
||||
networkMode = command.networkMode?.toMiddlewareModel() ?: MNetworkMode.DefaultConfig,
|
||||
networkCustomConfigFilePath = command.networkConfigFilePath.orEmpty()
|
||||
|
||||
networkMode = command.networkMode.toMiddlewareModel(),
|
||||
networkCustomConfigFilePath = command.networkConfigFilePath.orEmpty(),
|
||||
preferYamuxTransport = command.preferYamuxTransport ?: false
|
||||
)
|
||||
if (BuildConfig.DEBUG) logRequest(request)
|
||||
val response = service.accountCreate(request)
|
||||
|
@ -87,7 +87,8 @@ class Middleware @Inject constructor(
|
|||
id = command.id,
|
||||
rootPath = command.path,
|
||||
networkMode = networkMode,
|
||||
networkCustomConfigFilePath = networkCustomConfigFilePath
|
||||
networkCustomConfigFilePath = networkCustomConfigFilePath,
|
||||
preferYamuxTransport = command.preferYamuxTransport ?: false
|
||||
)
|
||||
if (BuildConfig.DEBUG) logRequest(request)
|
||||
val response = service.accountSelect(request)
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.anytypeio.anytype.core_models.NetworkModeConstants.NETWORK_MODE_LOCAL
|
|||
import com.anytypeio.anytype.persistence.networkmode.DefaultNetworkModeProvider.NetworkModeConstants.NETWORK_MODE_APP_FILE_PATH_PREF
|
||||
import com.anytypeio.anytype.persistence.networkmode.DefaultNetworkModeProvider.NetworkModeConstants.NETWORK_MODE_PREF
|
||||
import com.anytypeio.anytype.persistence.networkmode.DefaultNetworkModeProvider.NetworkModeConstants.NETWORK_MODE_USER_FILE_PATH_PREF
|
||||
import com.anytypeio.anytype.persistence.networkmode.DefaultNetworkModeProvider.NetworkModeConstants.USE_RESERVE_MULTIPLEX_LIBRARY_PREF
|
||||
|
||||
interface NetworkModeProvider {
|
||||
fun set(networkModeConfig: NetworkModeConfig)
|
||||
|
@ -36,11 +37,14 @@ class DefaultNetworkModeProvider(private val sharedPreferences: SharedPreference
|
|||
putString(NETWORK_MODE_PREF, modeValue)
|
||||
putString(NETWORK_MODE_USER_FILE_PATH_PREF, userFilePath)
|
||||
putString(NETWORK_MODE_APP_FILE_PATH_PREF, storedFilePath)
|
||||
putBoolean(USE_RESERVE_MULTIPLEX_LIBRARY_PREF, networkModeConfig.useReserveMultiplexLib)
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
||||
override fun get(): NetworkModeConfig {
|
||||
val useReserveMultiplexLib = sharedPreferences.getBoolean(USE_RESERVE_MULTIPLEX_LIBRARY_PREF, false)
|
||||
|
||||
val networkMode =
|
||||
when (sharedPreferences.getString(NETWORK_MODE_PREF, NETWORK_MODE_DEFAULT)) {
|
||||
NETWORK_MODE_DEFAULT -> NetworkMode.DEFAULT
|
||||
|
@ -55,9 +59,19 @@ class DefaultNetworkModeProvider(private val sharedPreferences: SharedPreference
|
|||
val storedFilePath = sharedPreferences.getString(
|
||||
NETWORK_MODE_APP_FILE_PATH_PREF, null
|
||||
)
|
||||
NetworkModeConfig(networkMode, userFilePath, storedFilePath)
|
||||
NetworkModeConfig(
|
||||
networkMode = networkMode,
|
||||
userFilePath = userFilePath,
|
||||
storedFilePath = storedFilePath,
|
||||
useReserveMultiplexLib = useReserveMultiplexLib
|
||||
)
|
||||
} else {
|
||||
NetworkModeConfig(networkMode, null, null)
|
||||
NetworkModeConfig(
|
||||
networkMode = networkMode,
|
||||
userFilePath = null,
|
||||
storedFilePath = null,
|
||||
useReserveMultiplexLib = useReserveMultiplexLib
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,6 +83,7 @@ class DefaultNetworkModeProvider(private val sharedPreferences: SharedPreference
|
|||
const val NETWORK_MODE_PREF = "pref.network_mode"
|
||||
const val NETWORK_MODE_APP_FILE_PATH_PREF = "pref.network_config_file_path"
|
||||
const val NETWORK_MODE_USER_FILE_PATH_PREF = "pref.network_mode_user_config_file_path"
|
||||
const val USE_RESERVE_MULTIPLEX_LIBRARY_PREF = "pref.use_reserve_multiplex_library"
|
||||
|
||||
const val NAMED_NETWORK_MODE_PREFS = "network_mode"
|
||||
}
|
||||
|
|
|
@ -31,14 +31,16 @@ class PreferencesViewModel(
|
|||
) : ViewModel(), PickerListener {
|
||||
|
||||
val networkModeState = MutableStateFlow(NetworkModeConfig(NetworkMode.DEFAULT, "", ""))
|
||||
val reserveMultiplexSetting = MutableStateFlow(false)
|
||||
|
||||
fun onStart() {
|
||||
Timber.d("onStart")
|
||||
viewModelScope.launch {
|
||||
getNetworkMode.async(Unit).fold(
|
||||
onSuccess = {
|
||||
networkModeState.value = it
|
||||
Timber.d("Successfully get network mode on Start: $it")
|
||||
onSuccess = { config ->
|
||||
networkModeState.value = config
|
||||
reserveMultiplexSetting.value = config.useReserveMultiplexLib
|
||||
Timber.d("Successfully get network mode on Start: $config")
|
||||
},
|
||||
onFailure = {
|
||||
Timber.e(it, "Failed to get network mode")
|
||||
|
@ -102,6 +104,19 @@ class PreferencesViewModel(
|
|||
}
|
||||
}
|
||||
|
||||
fun onChangeMultiplexLibrary() {
|
||||
val newValue = !networkModeState.value.useReserveMultiplexLib
|
||||
Timber.d("onChangeMultiplexLibrary: $newValue")
|
||||
viewModelScope.launch {
|
||||
val mode = networkModeState.value.copy(useReserveMultiplexLib = newValue)
|
||||
val params = SetNetworkMode.Params(mode)
|
||||
setNetworkMode.async(params).fold(
|
||||
onSuccess = { networkModeState.value = mode },
|
||||
onFailure = { Timber.e(it, "Failed to update network mode ") }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStartCopyFileToCacheDir(uri: Uri) {
|
||||
Timber.d("onStartCopyFileToCacheDir: $uri")
|
||||
copyFileToCache.execute(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue