diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c3db457e..2f3c1c4c5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -44,6 +44,7 @@ + LUMINANCE_MIDPOINT; } + static public BarcodeValues retrieveBarcodeFromImage(Context context, Uri uri) { + Log.i(TAG, "Received image file with possible barcode"); + + if (uri == null) { + Log.e(TAG, "Uri did not contain any data"); + Toast.makeText(context, R.string.errorReadingImage, Toast.LENGTH_LONG).show(); + return new BarcodeValues(null, null); + } + + Bitmap bitmap; + try { + bitmap = retrieveImageFromUri(context, uri); + } catch (IOException e) { + Log.e(TAG, "Error getting data from image file"); + e.printStackTrace(); + Toast.makeText(context, R.string.errorReadingImage, Toast.LENGTH_LONG).show(); + return new BarcodeValues(null, null); + } + + BarcodeValues barcodeFromBitmap = getBarcodeFromBitmap(bitmap); + + if (barcodeFromBitmap.isEmpty()) { + Log.i(TAG, "No barcode found in image file"); + Toast.makeText(context, R.string.noBarcodeFound, Toast.LENGTH_LONG).show(); + } + + Log.i(TAG, "Read barcode id: " + barcodeFromBitmap.content()); + Log.i(TAG, "Read format: " + barcodeFromBitmap.format()); + + return barcodeFromBitmap; + } + + static public BarcodeValues retrieveBarcodeFromPdf(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 BarcodeValues(null, null); + } + + ParcelFileDescriptor parcelFileDescriptor; + PdfRenderer renderer; + try { + parcelFileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r"); + renderer = new PdfRenderer(parcelFileDescriptor); + } catch (IOException e) { + Log.e(TAG, "Could not read file in uri"); + Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show(); + return new BarcodeValues(null, null); + } + + // Loop over all pages to find a barcode + BarcodeValues barcodeFromBitmap; + 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(); + + barcodeFromBitmap = getBarcodeFromBitmap(renderedPage); + + if (!barcodeFromBitmap.isEmpty()) { + // We found a barcode, stop scanning + renderer.close(); + return barcodeFromBitmap; + } + } + renderer.close(); + + Log.i(TAG, "No barcode found in image file"); + Toast.makeText(context, R.string.noBarcodeFound, Toast.LENGTH_LONG).show(); + + return new BarcodeValues(null, null); + } + /** * Returns the Barcode format and content based on the result of an activity. * It shows toasts to notify the end-user as needed itself and will return an empty @@ -154,82 +231,11 @@ public class Utils { } if (requestCode == Utils.BARCODE_IMPORT_FROM_IMAGE_FILE) { - Log.i(TAG, "Received image file with possible barcode"); - - Uri data = intent.getData(); - if (data == null) { - Log.e(TAG, "Intent did not contain any data"); - Toast.makeText(context, R.string.errorReadingImage, Toast.LENGTH_LONG).show(); - return new BarcodeValues(null, null); - } - - Bitmap bitmap; - try { - bitmap = retrieveImageFromUri(context, data); - } catch (IOException e) { - Log.e(TAG, "Error getting data from image file"); - e.printStackTrace(); - Toast.makeText(context, R.string.errorReadingImage, Toast.LENGTH_LONG).show(); - return new BarcodeValues(null, null); - } - - BarcodeValues barcodeFromBitmap = getBarcodeFromBitmap(bitmap); - - if (barcodeFromBitmap.isEmpty()) { - Log.i(TAG, "No barcode found in image file"); - Toast.makeText(context, R.string.noBarcodeFound, Toast.LENGTH_LONG).show(); - } - - Log.i(TAG, "Read barcode id: " + barcodeFromBitmap.content()); - Log.i(TAG, "Read format: " + barcodeFromBitmap.format()); - - return barcodeFromBitmap; + return retrieveBarcodeFromImage(context, intent.getData()); } if (requestCode == Utils.BARCODE_IMPORT_FROM_PDF_FILE) { - Log.i(TAG, "Received PDF file with possible barcode"); - - Uri data = intent.getData(); - if (data == null) { - Log.e(TAG, "Intent did not contain any data"); - Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show(); - return new BarcodeValues(null, null); - } - - ParcelFileDescriptor parcelFileDescriptor; - PdfRenderer renderer; - try { - parcelFileDescriptor = context.getContentResolver().openFileDescriptor(data, "r"); - renderer = new PdfRenderer(parcelFileDescriptor); - } catch (IOException e) { - Log.e(TAG, "Could not read file in intent"); - Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show(); - return new BarcodeValues(null, null); - } - - // Loop over all pages to find a barcode - BarcodeValues barcodeFromBitmap; - 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(); - - barcodeFromBitmap = getBarcodeFromBitmap(renderedPage); - - if (!barcodeFromBitmap.isEmpty()) { - // We found a barcode, stop scanning - renderer.close(); - return barcodeFromBitmap; - } - } - renderer.close(); - - Log.i(TAG, "No barcode found in image file"); - Toast.makeText(context, R.string.noBarcodeFound, Toast.LENGTH_LONG).show(); - - return new BarcodeValues(null, null); + return retrieveBarcodeFromPdf(context, intent.getData()); } if (requestCode == Utils.BARCODE_SCAN || requestCode == Utils.SELECT_BARCODE_REQUEST) {