From 2ecce111a556ecd0204610929c912f37aa9dc907 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Wed, 27 Aug 2025 15:55:48 +0200 Subject: [PATCH] PDF export: ensure the file always have a pdf extension --- app/src/main/java/org/fairscan/app/MainViewModel.kt | 3 ++- app/src/main/java/org/fairscan/app/PdfFileManager.kt | 9 +++++++++ .../org/fairscan/app/view/PdfGenerationBottomSheet.kt | 2 +- app/src/test/java/org/fairscan/app/PdfFileManagerTest.kt | 8 ++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/fairscan/app/MainViewModel.kt b/app/src/main/java/org/fairscan/app/MainViewModel.kt index 3666521..88ffd1c 100644 --- a/app/src/main/java/org/fairscan/app/MainViewModel.kt +++ b/app/src/main/java/org/fairscan/app/MainViewModel.kt @@ -295,7 +295,8 @@ class MainViewModel( fun getFinalPdf(): GeneratedPdf? { val tempPdf = _pdfUiState.value.generatedPdf ?: return null val tempFile = tempPdf.file - val newFile = File(tempFile.parentFile, desiredFilename) + val fileName = PdfFileManager.addExtensionIfMissing(desiredFilename) + val newFile = File(tempFile.parentFile, fileName) if (tempFile.absolutePath != newFile.absolutePath) { if (newFile.exists()) newFile.delete() val success = tempFile.renameTo(newFile) diff --git a/app/src/main/java/org/fairscan/app/PdfFileManager.kt b/app/src/main/java/org/fairscan/app/PdfFileManager.kt index c167a24..76bd8ee 100644 --- a/app/src/main/java/org/fairscan/app/PdfFileManager.kt +++ b/app/src/main/java/org/fairscan/app/PdfFileManager.kt @@ -27,6 +27,15 @@ class PdfFileManager( private val externalDir: File, private val pdfWriter: PdfWriter ) { + companion object { + fun addExtensionIfMissing(fileName: String): String { + return if (fileName.lowercase().endsWith(".pdf")) + fileName + else + "$fileName.pdf" + } + } + fun generatePdf(jpegs: Sequence): GeneratedPdf { pdfDir.mkdirs() require(pdfDir.exists() && pdfDir.isDirectory) { "Invalid pdfDir: $pdfDir" } diff --git a/app/src/main/java/org/fairscan/app/view/PdfGenerationBottomSheet.kt b/app/src/main/java/org/fairscan/app/view/PdfGenerationBottomSheet.kt index b0a4d3d..ffa656a 100644 --- a/app/src/main/java/org/fairscan/app/view/PdfGenerationBottomSheet.kt +++ b/app/src/main/java/org/fairscan/app/view/PdfGenerationBottomSheet.kt @@ -260,7 +260,7 @@ private fun CloseButton(onDismiss: () -> Unit) { fun defaultFilename(): String { val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) - return "scan_$timestamp.pdf" + return "scan_$timestamp" } fun formatFileSize(sizeInBytes: Long?, context: Context): String { diff --git a/app/src/test/java/org/fairscan/app/PdfFileManagerTest.kt b/app/src/test/java/org/fairscan/app/PdfFileManagerTest.kt index 6e978f9..0172a42 100644 --- a/app/src/test/java/org/fairscan/app/PdfFileManagerTest.kt +++ b/app/src/test/java/org/fairscan/app/PdfFileManagerTest.kt @@ -84,4 +84,12 @@ class PdfFileManagerTest { assertThat(pdf.file.readBytes()).isEqualTo(byteArrayOf(0x01, 0x02, 0x11)) assertThat(pdf.file.name).endsWith(".pdf") } + + @Test + fun addExtensionIfMissing() { + assertThat(PdfFileManager.addExtensionIfMissing("f1.pdf")).isEqualTo("f1.pdf") + assertThat(PdfFileManager.addExtensionIfMissing("f2.PDF")).isEqualTo("f2.PDF") + assertThat(PdfFileManager.addExtensionIfMissing("f3")).isEqualTo("f3.pdf") + assertThat(PdfFileManager.addExtensionIfMissing("f4.txt")).isEqualTo("f4.txt.pdf") + } }