Move FileData to 'ui' module (#5644)

This commit is contained in:
David Perez
2025-08-05 13:01:36 -05:00
committed by GitHub
parent f4c4e06dcc
commit 337e751c05
19 changed files with 74 additions and 78 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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