Fix general upload tab file selection
- Implement URI to File conversion using FileController.saveContentUriToFile() - Properly extract filename from URI using ContentResolver - Store actual File object instead of null, enabling uploads to work
This commit is contained in:
@@ -233,14 +233,22 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
fun handleFileSelection(uri: Uri) {
|
fun handleFileSelection(uri: Uri) {
|
||||||
viewModelScope.launch(Dispatchers.IO) {
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
try {
|
try {
|
||||||
// TODO: Convert URI to File using FileController
|
// Get filename from URI
|
||||||
// For now, store URI info
|
val fileName = getFileNameFromUri(uri)
|
||||||
val fileName = uri.lastPathSegment ?: "Unknown file"
|
Log.d(TAG, "File selected from URI: $fileName")
|
||||||
|
|
||||||
|
// Convert URI to File using FileController
|
||||||
|
val file = FileController.saveContentUriToFile(
|
||||||
|
getApplication(),
|
||||||
|
uri,
|
||||||
|
fileName
|
||||||
|
)
|
||||||
|
|
||||||
_uiState.value = _uiState.value.copy(
|
_uiState.value = _uiState.value.copy(
|
||||||
selectedFileName = fileName,
|
selectedFileName = fileName,
|
||||||
selectedFile = null // Will need to implement URI to File conversion
|
selectedFile = file
|
||||||
)
|
)
|
||||||
Log.d(TAG, "File selected: $fileName")
|
Log.d(TAG, "File saved to cache: ${file.absolutePath}, size: ${file.length()} bytes")
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "Error handling file selection", e)
|
Log.e(TAG, "Error handling file selection", e)
|
||||||
_uiState.value = _uiState.value.copy(
|
_uiState.value = _uiState.value.copy(
|
||||||
@@ -250,6 +258,33 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get filename from URI using ContentResolver
|
||||||
|
*/
|
||||||
|
private fun getFileNameFromUri(uri: Uri): String {
|
||||||
|
var fileName = "selected_file_${System.currentTimeMillis()}"
|
||||||
|
|
||||||
|
// Try to get the display name from the content resolver
|
||||||
|
try {
|
||||||
|
getApplication<Application>().contentResolver.query(
|
||||||
|
uri, null, null, null, null
|
||||||
|
)?.use { cursor ->
|
||||||
|
if (cursor.moveToFirst()) {
|
||||||
|
val nameIndex = cursor.getColumnIndex(android.provider.OpenableColumns.DISPLAY_NAME)
|
||||||
|
if (nameIndex != -1) {
|
||||||
|
fileName = cursor.getString(nameIndex) ?: fileName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.w(TAG, "Could not get filename from URI, using default", e)
|
||||||
|
// Fall back to using last path segment if available
|
||||||
|
fileName = uri.lastPathSegment ?: fileName
|
||||||
|
}
|
||||||
|
|
||||||
|
return fileName
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toggle dumpstate file selection
|
* Toggle dumpstate file selection
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user