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.