Опциональное шифрование имён файлов
This commit is contained in:
@@ -19,6 +19,7 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.MoreVert
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
@@ -57,6 +58,7 @@ fun StorageTree(
|
||||
onClick: (Tree<IStorageInfo>) -> Unit,
|
||||
onRename: (Tree<IStorageInfo>, String) -> Unit,
|
||||
onRemove: (Tree<IStorageInfo>) -> Unit,
|
||||
onEncrypt: (Tree<IStorageInfo>) -> Unit,
|
||||
) {
|
||||
val cur = tree.value
|
||||
val available by cur.isAvailable.collectAsStateWithLifecycle()
|
||||
@@ -66,7 +68,9 @@ fun StorageTree(
|
||||
val borderColor =
|
||||
if (cur.isVirtualStorage) MaterialTheme.colorScheme.secondary else MaterialTheme.colorScheme.primary
|
||||
Column(modifier) {
|
||||
Box(modifier = Modifier.height(IntrinsicSize.Min).zIndex(100f)) {
|
||||
Box(modifier = Modifier
|
||||
.height(IntrinsicSize.Min)
|
||||
.zIndex(100f)) {
|
||||
val interactionSource = remember { MutableInteractionSource() }
|
||||
Box(
|
||||
modifier = Modifier
|
||||
@@ -171,6 +175,9 @@ fun StorageTree(
|
||||
}
|
||||
}
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
Button(onClick = { onEncrypt(tree) }, enabled = metaInfo.encInfo == null) {
|
||||
Text("Encrypt")
|
||||
}
|
||||
Text(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
@@ -190,7 +197,16 @@ fun StorageTree(
|
||||
}
|
||||
}
|
||||
for (i in tree.children ?: listOf()) {
|
||||
StorageTree(Modifier.padding(16.dp, 0.dp, 0.dp, 0.dp).offset(y = (-4).dp), i, onClick, onRename, onRemove)
|
||||
StorageTree(
|
||||
Modifier
|
||||
.padding(16.dp, 0.dp, 0.dp, 0.dp)
|
||||
.offset(y = (-4).dp),
|
||||
i,
|
||||
onClick,
|
||||
onRename,
|
||||
onRemove,
|
||||
onEncrypt
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,9 @@ fun LocalVaultScreen(
|
||||
},
|
||||
onRemove = { tree ->
|
||||
viewModel.remove(tree.value)
|
||||
},
|
||||
onEncrypt = { tree ->
|
||||
viewModel.enableEncryptionAndOpenStorage(tree.value)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -9,10 +9,11 @@ import com.github.nullptroma.wallenc.domain.interfaces.ILogger
|
||||
import com.github.nullptroma.wallenc.domain.interfaces.IStorageInfo
|
||||
import com.github.nullptroma.wallenc.domain.usecases.GetOpenedStoragesUseCase
|
||||
import com.github.nullptroma.wallenc.domain.usecases.ManageLocalVaultUseCase
|
||||
import com.github.nullptroma.wallenc.domain.usecases.ManageStoragesEncryptionUseCase
|
||||
import com.github.nullptroma.wallenc.domain.usecases.RenameStorageUseCase
|
||||
import com.github.nullptroma.wallenc.domain.usecases.StorageFileManagementUseCase
|
||||
import com.github.nullptroma.wallenc.presentation.extensions.toPrintable
|
||||
import com.github.nullptroma.wallenc.presentation.ViewModelBase
|
||||
import com.github.nullptroma.wallenc.presentation.extensions.toPrintable
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.combine
|
||||
@@ -25,6 +26,7 @@ class LocalVaultViewModel @Inject constructor(
|
||||
private val manageLocalVaultUseCase: ManageLocalVaultUseCase,
|
||||
private val getOpenedStoragesUseCase: GetOpenedStoragesUseCase,
|
||||
private val storageFileManagementUseCase: StorageFileManagementUseCase,
|
||||
private val manageStoragesEncryptionUseCase: ManageStoragesEncryptionUseCase,
|
||||
private val renameStorageUseCase: RenameStorageUseCase,
|
||||
private val logger: ILogger
|
||||
) : ViewModelBase<LocalVaultScreenState>(LocalVaultScreenState(listOf())) {
|
||||
@@ -50,6 +52,11 @@ class LocalVaultViewModel @Inject constructor(
|
||||
updateState(newState)
|
||||
}
|
||||
}
|
||||
viewModelScope.launch {
|
||||
getOpenedStoragesUseCase.openedStorages.collectLatest {
|
||||
logger.debug("ViewModel", "Collected opened: ${it?.size}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun printStorageInfoToLog(storage: IStorageInfo) {
|
||||
@@ -74,7 +81,24 @@ class LocalVaultViewModel @Inject constructor(
|
||||
|
||||
fun createStorage() {
|
||||
viewModelScope.launch {
|
||||
manageLocalVaultUseCase.createStorage(EncryptKey("Hello"))
|
||||
manageLocalVaultUseCase.createStorage()
|
||||
}
|
||||
}
|
||||
|
||||
private val runningStorages = mutableSetOf<IStorageInfo>()
|
||||
fun enableEncryptionAndOpenStorage(storage: IStorageInfo) {
|
||||
if(runningStorages.contains(storage))
|
||||
return
|
||||
runningStorages.add(storage)
|
||||
val key = EncryptKey("Hello")
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
manageStoragesEncryptionUseCase.enableEncryption(storage, key, false)
|
||||
manageStoragesEncryptionUseCase.openStorage(storage, key)
|
||||
}
|
||||
finally {
|
||||
runningStorages.remove(storage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user