1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-2218 Tech | Internal protocol switch (#890) (#912)

This commit is contained in:
Konstantin Ivanov 2024-02-23 15:26:29 +01:00 committed by uburoiubu
parent ce58396342
commit 751417a8b7
No known key found for this signature in database
GPG key ID: C8FB80E0A595FBB6
12 changed files with 75 additions and 34 deletions

View file

@ -62,9 +62,7 @@ class OnboardingNetworkSetupDialog : BaseBottomSheetComposeFragment() {
onAnytypeNetworkClicked = {
vm.proceedWithNetworkMode(NetworkModeConstants.NETWORK_MODE_DEFAULT)
},
onUseYamuxToggled = {
toast("TODO")
}
onUseYamuxToggled = vm::onChangeMultiplexLibrary
)
}
}

View file

@ -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"

View file

@ -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(

View file

@ -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 {

View file

@ -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) {

View file

@ -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) {

View file

@ -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)

View file

@ -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(

View file

@ -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>

View file

@ -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)

View file

@ -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"
}

View file

@ -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(