From bdff59e6282f039ea98727e9c121993007060c72 Mon Sep 17 00:00:00 2001 From: Dimitrios Papathanasiou <116485010+dimitriospapathanasiou@users.noreply.github.com> Date: Sun, 31 Mar 2024 13:08:21 +0300 Subject: [PATCH] Minor cleanups in PDF barcode retrieval (#1807) --- .../main/java/protect/card_locker/Utils.java | 61 +++++++++++-------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/protect/card_locker/Utils.java b/app/src/main/java/protect/card_locker/Utils.java index f3df29134..53cafe8a4 100644 --- a/app/src/main/java/protect/card_locker/Utils.java +++ b/app/src/main/java/protect/card_locker/Utils.java @@ -169,46 +169,57 @@ public class Utils { static public List retrieveBarcodesFromPdf(Context context, Uri uri) { Log.i(TAG, "Received PDF file with possible barcode"); - if (uri == null) { Log.e(TAG, "Uri did not contain any data"); Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show(); return new ArrayList<>(); } - - ParcelFileDescriptor parcelFileDescriptor; - PdfRenderer renderer; + + ParcelFileDescriptor parcelFileDescriptor = null; + PdfRenderer renderer = null; + List barcodesFromPdfPages = new ArrayList<>(); + try { parcelFileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r"); - renderer = new PdfRenderer(parcelFileDescriptor); + if (parcelFileDescriptor != null) { + renderer = new PdfRenderer(parcelFileDescriptor); + + // Loop over all pages to find barcodes + Bitmap renderedPage; + for (int i = 0; i < renderer.getPageCount(); i++) { + PdfRenderer.Page page = renderer.openPage(i); + renderedPage = Bitmap.createBitmap(page.getWidth(), page.getHeight(), Bitmap.Config.ARGB_8888); + page.render(renderedPage, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); + page.close(); + + List barcodesFromPage = getBarcodesFromBitmap(renderedPage); + for (BarcodeValues barcodeValues : barcodesFromPage) { + barcodeValues.setNote(String.format(context.getString(R.string.pageWithNumber), i+1)); + barcodesFromPdfPages.add(barcodeValues); + } + } + } } catch (IOException e) { - Log.e(TAG, "Could not read file in uri"); + Log.e(TAG, "Error reading PDF file", e); Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show(); - return new ArrayList<>(); - } - - // Loop over all pages to find barcodes - List barcodesFromPdfPages = new ArrayList<>(); - Bitmap renderedPage; - for (int i = 0; i < renderer.getPageCount(); i++) { - PdfRenderer.Page page = renderer.openPage(i); - renderedPage = Bitmap.createBitmap(page.getWidth(), page.getHeight(), Bitmap.Config.ARGB_8888); - page.render(renderedPage, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY); - page.close(); - - List barcodesFromPage = getBarcodesFromBitmap(renderedPage); - for (BarcodeValues barcodeValues : barcodesFromPage) { - barcodeValues.setNote(String.format(context.getString(R.string.pageWithNumber), i+1)); - barcodesFromPdfPages.add(barcodeValues); + } finally { + // Resource handling + if (renderer != null) { + renderer.close(); + } + if (parcelFileDescriptor != null) { + try { + parcelFileDescriptor.close(); + } catch (IOException e) { + Log.e(TAG, "Error closing ParcelFileDescriptor", e); + } } } - renderer.close(); - + if (barcodesFromPdfPages.isEmpty()) { Log.i(TAG, "No barcode found in pdf file"); Toast.makeText(context, R.string.noBarcodeFound, Toast.LENGTH_LONG).show(); } - return barcodesFromPdfPages; }