mirror of
https://github.com/bitwarden/android.git
synced 2026-06-07 23:58:03 -05:00
BIT-972 Add the import url (#903)
This commit is contained in:
committed by
Álison Fernandes
parent
7b32e46d37
commit
77913805ab
@@ -50,6 +50,15 @@ val EnvironmentUrlDataJson.baseWebSendUrl: String
|
||||
?.let { "$it/#/send/" }
|
||||
?: DEFAULT_WEB_SEND_URL
|
||||
|
||||
/**
|
||||
* Returns the base web vault import URL or the default value if one is not present.
|
||||
*/
|
||||
val EnvironmentUrlDataJson.toBaseWebVaultImportUrl: String
|
||||
get() =
|
||||
this
|
||||
.baseWebVaultUrlOrDefault
|
||||
.let { "$it/#/tools/import" }
|
||||
|
||||
/**
|
||||
* Returns a base icon url based on the environment or the default value if values are missing.
|
||||
*/
|
||||
|
||||
@@ -17,13 +17,17 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.core.net.toUri
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import com.x8bit.bitwarden.R
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.EventsEffect
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenExternalLinkRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenScaffold
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenTextRow
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenTopAppBar
|
||||
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
|
||||
import com.x8bit.bitwarden.ui.platform.theme.LocalIntentManager
|
||||
|
||||
/**
|
||||
* Displays the vault settings screen.
|
||||
@@ -36,7 +40,10 @@ fun VaultSettingsScreen(
|
||||
onNavigateToExportVault: () -> Unit,
|
||||
onNavigateToFolders: () -> Unit,
|
||||
viewModel: VaultSettingsViewModel = hiltViewModel(),
|
||||
intentManager: IntentManager = LocalIntentManager.current,
|
||||
) {
|
||||
val state = viewModel.stateFlow.collectAsStateWithLifecycle()
|
||||
|
||||
val context = LocalContext.current
|
||||
EventsEffect(viewModel = viewModel) { event ->
|
||||
when (event) {
|
||||
@@ -46,6 +53,10 @@ fun VaultSettingsScreen(
|
||||
is VaultSettingsEvent.ShowToast -> {
|
||||
Toast.makeText(context, event.message, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
is VaultSettingsEvent.NavigateToImportVault -> {
|
||||
intentManager.launchUri(event.url.toUri())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,8 +107,12 @@ fun VaultSettingsScreen(
|
||||
{ viewModel.trySendAction(VaultSettingsAction.ImportItemsClick) }
|
||||
},
|
||||
withDivider = true,
|
||||
dialogTitle = stringResource(id = R.string.import_items_confirmation),
|
||||
dialogMessage = stringResource(id = R.string.import_items_description),
|
||||
dialogTitle = stringResource(id = R.string.continue_to_web_app),
|
||||
dialogMessage =
|
||||
stringResource(
|
||||
id = R.string.you_can_import_data_to_your_vault_on_x,
|
||||
state.value.baseUrl,
|
||||
),
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package com.x8bit.bitwarden.ui.platform.feature.settings.vault
|
||||
|
||||
import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository
|
||||
import com.x8bit.bitwarden.data.platform.repository.util.baseWebVaultUrlOrDefault
|
||||
import com.x8bit.bitwarden.data.platform.repository.util.toBaseWebVaultImportUrl
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseViewModel
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import javax.inject.Inject
|
||||
@@ -8,10 +11,23 @@ import javax.inject.Inject
|
||||
* View model for the vault screen.
|
||||
*/
|
||||
@HiltViewModel
|
||||
class VaultSettingsViewModel @Inject constructor() :
|
||||
BaseViewModel<Unit, VaultSettingsEvent, VaultSettingsAction>(
|
||||
initialState = Unit,
|
||||
) {
|
||||
class VaultSettingsViewModel @Inject constructor(
|
||||
val environmentRepository: EnvironmentRepository,
|
||||
) : BaseViewModel<VaultSettingsState, VaultSettingsEvent, VaultSettingsAction>(
|
||||
initialState = run {
|
||||
VaultSettingsState(
|
||||
baseUrl = environmentRepository
|
||||
.environment
|
||||
.environmentUrlData
|
||||
.baseWebVaultUrlOrDefault,
|
||||
importUrl = environmentRepository
|
||||
.environment
|
||||
.environmentUrlData
|
||||
.toBaseWebVaultImportUrl,
|
||||
)
|
||||
},
|
||||
) {
|
||||
|
||||
override fun handleAction(action: VaultSettingsAction): Unit = when (action) {
|
||||
VaultSettingsAction.BackClick -> handleBackClicked()
|
||||
VaultSettingsAction.ExportVaultClick -> handleExportVaultClicked()
|
||||
@@ -32,11 +48,20 @@ class VaultSettingsViewModel @Inject constructor() :
|
||||
}
|
||||
|
||||
private fun handleImportItemsClicked() {
|
||||
// TODO BIT-972 implement import items functionality
|
||||
sendEvent(VaultSettingsEvent.ShowToast("Not yet implemented."))
|
||||
sendEvent(
|
||||
VaultSettingsEvent.NavigateToImportVault(state.importUrl),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Models the state for the VaultSettingScreen.
|
||||
*/
|
||||
data class VaultSettingsState(
|
||||
val baseUrl: String,
|
||||
val importUrl: String,
|
||||
)
|
||||
|
||||
/**
|
||||
* Models events for the vault screen.
|
||||
*/
|
||||
@@ -46,6 +71,11 @@ sealed class VaultSettingsEvent {
|
||||
*/
|
||||
data object NavigateBack : VaultSettingsEvent()
|
||||
|
||||
/**
|
||||
* Navigate to the import vault URL.
|
||||
*/
|
||||
data class NavigateToImportVault(val url: String) : VaultSettingsEvent()
|
||||
|
||||
/**
|
||||
* Navigate to the Export Vault screen.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user