mirror of
https://github.com/bitwarden/android.git
synced 2026-04-28 03:48:14 -05:00
Move FileData to 'ui' module (#5644)
This commit is contained in:
@@ -11,8 +11,8 @@ import com.bitwarden.authenticator.data.authenticator.repository.model.TotpCodeR
|
||||
import com.bitwarden.authenticator.data.platform.manager.imports.model.ImportDataResult
|
||||
import com.bitwarden.authenticator.data.platform.manager.imports.model.ImportFileFormat
|
||||
import com.bitwarden.authenticator.ui.platform.feature.settings.export.model.ExportVaultFormat
|
||||
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
||||
import com.bitwarden.core.data.repository.model.DataState
|
||||
import com.bitwarden.ui.platform.model.FileData
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
@@ -82,7 +82,7 @@ interface AuthenticatorRepository {
|
||||
*/
|
||||
suspend fun importVaultData(
|
||||
format: ImportFileFormat,
|
||||
fileData: IntentManager.FileData,
|
||||
fileData: FileData,
|
||||
): ImportDataResult
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,13 +21,13 @@ import com.bitwarden.authenticator.data.platform.manager.imports.model.ImportDat
|
||||
import com.bitwarden.authenticator.data.platform.manager.imports.model.ImportFileFormat
|
||||
import com.bitwarden.authenticator.data.platform.repository.SettingsRepository
|
||||
import com.bitwarden.authenticator.ui.platform.feature.settings.export.model.ExportVaultFormat
|
||||
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
||||
import com.bitwarden.authenticatorbridge.manager.AuthenticatorBridgeManager
|
||||
import com.bitwarden.authenticatorbridge.manager.model.AccountSyncState
|
||||
import com.bitwarden.core.data.repository.model.DataState
|
||||
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
|
||||
import com.bitwarden.core.data.repository.util.map
|
||||
import com.bitwarden.data.manager.DispatcherManager
|
||||
import com.bitwarden.ui.platform.model.FileData
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
@@ -248,7 +248,7 @@ class AuthenticatorRepositoryImpl @Inject constructor(
|
||||
|
||||
override suspend fun importVaultData(
|
||||
format: ImportFileFormat,
|
||||
fileData: IntentManager.FileData,
|
||||
fileData: FileData,
|
||||
): ImportDataResult = fileManager.uriToByteArray(fileData.uri)
|
||||
.map {
|
||||
importManager
|
||||
|
||||
@@ -38,6 +38,7 @@ import com.bitwarden.authenticator.ui.platform.composition.LocalIntentManager
|
||||
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
||||
import com.bitwarden.authenticator.ui.platform.util.displayLabel
|
||||
import com.bitwarden.ui.platform.base.util.EventsEffect
|
||||
import com.bitwarden.ui.platform.model.FileData
|
||||
import com.bitwarden.ui.platform.resource.BitwardenDrawable
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
@@ -54,7 +55,7 @@ fun ImportingScreen(
|
||||
onNavigateBack: () -> Unit,
|
||||
) {
|
||||
val state by viewModel.stateFlow.collectAsStateWithLifecycle()
|
||||
val importLocationReceive: (IntentManager.FileData) -> Unit = remember {
|
||||
val importLocationReceive: (FileData) -> Unit = remember {
|
||||
{
|
||||
viewModel.trySendAction(ImportAction.ImportLocationReceive(it))
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@ import androidx.lifecycle.viewModelScope
|
||||
import com.bitwarden.authenticator.data.authenticator.repository.AuthenticatorRepository
|
||||
import com.bitwarden.authenticator.data.platform.manager.imports.model.ImportDataResult
|
||||
import com.bitwarden.authenticator.data.platform.manager.imports.model.ImportFileFormat
|
||||
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.model.FileData
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
@@ -202,7 +202,7 @@ sealed class ImportAction {
|
||||
/**
|
||||
* Indicates the user selected a file to import.
|
||||
*/
|
||||
data class ImportLocationReceive(val fileUri: IntentManager.FileData) : ImportAction()
|
||||
data class ImportLocationReceive(val fileUri: FileData) : ImportAction()
|
||||
|
||||
/**
|
||||
* Models actions the [ImportingScreen] itself may send.
|
||||
|
||||
@@ -2,12 +2,11 @@ package com.bitwarden.authenticator.ui.platform.manager.intent
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Parcelable
|
||||
import androidx.activity.compose.ManagedActivityResultLauncher
|
||||
import androidx.activity.result.ActivityResult
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.Immutable
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import com.bitwarden.ui.platform.model.FileData
|
||||
|
||||
/**
|
||||
* A manager class for simplifying the handling of Android Intents within a given context.
|
||||
@@ -58,14 +57,4 @@ interface IntentManager {
|
||||
* Creates an intent to use when selecting to save an item with [fileName] to disk.
|
||||
*/
|
||||
fun createDocumentIntent(fileName: String): Intent
|
||||
|
||||
/**
|
||||
* Represents file information.
|
||||
*/
|
||||
@Parcelize
|
||||
data class FileData(
|
||||
val fileName: String,
|
||||
val uri: Uri,
|
||||
val sizeBytes: Long,
|
||||
) : Parcelable
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.net.toUri
|
||||
import com.bitwarden.annotation.OmitFromCoverage
|
||||
import com.bitwarden.ui.platform.model.FileData
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
|
||||
/**
|
||||
@@ -45,7 +46,7 @@ class IntentManagerImpl(
|
||||
|
||||
override fun getFileDataFromActivityResult(
|
||||
activityResult: ActivityResult,
|
||||
): IntentManager.FileData? {
|
||||
): FileData? {
|
||||
if (activityResult.resultCode != Activity.RESULT_OK) return null
|
||||
val uri = activityResult.data?.data ?: return null
|
||||
return getLocalFileData(uri)
|
||||
@@ -66,9 +67,8 @@ class IntentManagerImpl(
|
||||
Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
|
||||
// Attempt to get the MIME type from the file extension
|
||||
val extension = MimeTypeMap.getFileExtensionFromUrl(fileName)
|
||||
type = extension?.let {
|
||||
MimeTypeMap.getSingleton().getMimeTypeFromExtension(it)
|
||||
}
|
||||
type = extension
|
||||
?.let { MimeTypeMap.getSingleton().getMimeTypeFromExtension(it) }
|
||||
?: "*/*"
|
||||
|
||||
addCategory(Intent.CATEGORY_OPENABLE)
|
||||
@@ -77,7 +77,7 @@ class IntentManagerImpl(
|
||||
|
||||
override fun startApplicationDetailsSettingsActivity() {
|
||||
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||
intent.data = Uri.parse("package:" + context.packageName)
|
||||
intent.data = "package:$context.packageName".toUri()
|
||||
startActivity(intent = intent)
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ class IntentManagerImpl(
|
||||
)
|
||||
}
|
||||
|
||||
private fun getLocalFileData(uri: Uri): IntentManager.FileData? =
|
||||
private fun getLocalFileData(uri: Uri): FileData? =
|
||||
context
|
||||
.contentResolver
|
||||
.query(
|
||||
@@ -120,12 +120,13 @@ class IntentManagerImpl(
|
||||
.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)
|
||||
.takeIf { it >= 0 }
|
||||
?.let { cursor.getString(it) }
|
||||
?: return@use null
|
||||
val fileSize = cursor
|
||||
.getColumnIndex(MediaStore.MediaColumns.SIZE)
|
||||
.takeIf { it >= 0 }
|
||||
?.let { cursor.getLong(it) }
|
||||
if (fileName == null || fileSize == null) return@use null
|
||||
IntentManager.FileData(
|
||||
?: return@use null
|
||||
FileData(
|
||||
fileName = fileName,
|
||||
uri = uri,
|
||||
sizeBytes = fileSize,
|
||||
|
||||
Reference in New Issue
Block a user