diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 53861ab0e..f783db266 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,7 +16,7 @@ + android:required="false" /> diff --git a/app/src/main/java/protect/card_locker/ScanActivity.java b/app/src/main/java/protect/card_locker/ScanActivity.java index 9679751bb..977439ad2 100644 --- a/app/src/main/java/protect/card_locker/ScanActivity.java +++ b/app/src/main/java/protect/card_locker/ScanActivity.java @@ -178,9 +178,14 @@ public class ScanActivity extends CatimaAppCompatActivity { capture.onResume(); } - if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { - showCameraPermissionMissingText(false); + if (!Utils.deviceHasCamera(this)) { + showCameraError(R.string.noCameraFoundGuideText, false); + } else if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { + showCameraPermissionMissingText(); + } else { + hideCameraError(); } + scaleScreen(); } @@ -402,12 +407,26 @@ public class ScanActivity extends CatimaAppCompatActivity { } } - private void showCameraPermissionMissingText(boolean show) { - customBarcodeScannerBinding.cameraPermissionDeniedLayout.cameraPermissionDeniedClickableArea.setOnClickListener(show ? v -> { + private void showCameraPermissionMissingText() { + showCameraError(R.string.noCameraPermissionDirectToSystemSetting, true); + } + + private void showCameraError(int message, boolean setOnClick) { + customBarcodeScannerBinding.cameraPermissionDeniedLayout.cameraPermissionDeniedMessage.setText(message); + + setCameraErrorState(true, setOnClick); + } + + private void hideCameraError() { + setCameraErrorState(false, false); + } + + private void setCameraErrorState(boolean visible, boolean setOnClick) { + customBarcodeScannerBinding.cameraPermissionDeniedLayout.cameraPermissionDeniedClickableArea.setOnClickListener(visible && setOnClick ? v -> { navigateToSystemPermissionSetting(); } : null); - customBarcodeScannerBinding.cardInputContainer.setBackgroundColor(show ? obtainThemeAttribute(com.google.android.material.R.attr.colorSurface) : Color.TRANSPARENT); - customBarcodeScannerBinding.cameraPermissionDeniedLayout.getRoot().setVisibility(show ? View.VISIBLE : View.GONE); + customBarcodeScannerBinding.cardInputContainer.setBackgroundColor(visible ? obtainThemeAttribute(com.google.android.material.R.attr.colorSurface) : Color.TRANSPARENT); + customBarcodeScannerBinding.cameraPermissionDeniedLayout.getRoot().setVisibility(visible ? View.VISIBLE : View.GONE); } private void scaleScreen() { @@ -444,7 +463,11 @@ public class ScanActivity extends CatimaAppCompatActivity { boolean granted = grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED; if (requestCode == CaptureManager.getCameraPermissionReqCode()) { - showCameraPermissionMissingText(!granted); + if (granted) { + hideCameraError(); + } else { + showCameraPermissionMissingText(); + } } else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE || requestCode == PERMISSION_SCAN_ADD_FROM_PDF) { if (granted) { if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE) { diff --git a/app/src/main/java/protect/card_locker/Utils.java b/app/src/main/java/protect/card_locker/Utils.java index 7402468b9..eb3ef6bf1 100644 --- a/app/src/main/java/protect/card_locker/Utils.java +++ b/app/src/main/java/protect/card_locker/Utils.java @@ -13,6 +13,8 @@ import android.graphics.Color; import android.graphics.ImageDecoder; import android.graphics.Matrix; import android.graphics.pdf.PdfRenderer; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraManager; import android.net.Uri; import android.os.Build; import android.os.ParcelFileDescriptor; @@ -1015,4 +1017,12 @@ public class Utils { return false; }); } + + public static boolean deviceHasCamera(Context context) { + try { + return ((CameraManager) context.getSystemService(Context.CAMERA_SERVICE)).getCameraIdList().length > 0; + } catch (CameraAccessException e) { + return false; + } + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0c6473e25..1fd701487 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -346,4 +346,5 @@ Could not find a supported file manager Which of the found barcodes do you want to use? Page %d + Your device does not seem to have a camera. If it does, try rebooting the device. Otherwise, use the "More options" button below to add a barcode another way.