Skip to content

Commit

Permalink
[SVN] r3136 twister-lib-android in /Libraries/twister-lib-android/
Browse files Browse the repository at this point in the history
[FIX] Hide Flash button if it's not supported to prevent this crash:
[COM] java.lang.RuntimeException: 
[COM]   at android.hardware.Camera.native_setParameters (Camera.java)
[COM]   at android.hardware.Camera.setParameters (Camera.java:2118)
[COM]   at net.twisterrob.android.view.CameraPreview.setFlash (CameraPreview.java:333)
[COM]   at net.twisterrob.android.activity.CaptureImage$2.onCheckedChanged (CaptureImage.java:175)
  • Loading branch information
TWiStErRob committed Apr 23, 2020
1 parent f0dc785 commit aaa4ef3
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,13 @@ public class CaptureImage extends Activity implements ActivityCompat.OnRequestPe

mPreview.setListener(new CameraPreviewListener() {
@Override public void onCreate(CameraPreview preview) {
mBtnFlash.setChecked(getInitialFlashEnabled()); // calls setOnCheckedChangeListener
if (Boolean.TRUE.equals(preview.isFlashSupported())) {
// calls setOnCheckedChangeListener
mBtnFlash.setVisibility(View.VISIBLE);
mBtnFlash.setChecked(getInitialFlashEnabled());
} else {
mBtnFlash.setVisibility(View.GONE);
}
}
@Override public void onResume(CameraPreview preview) {
cameraControls.setVisibility(View.VISIBLE);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.twisterrob.android.view;

import java.io.IOException;
import java.util.Locale;
import java.util.*;

import org.slf4j.*;

Expand Down Expand Up @@ -318,23 +318,35 @@ public void focus(final CameraPictureListener callback) {
}
}

public void setFlash(boolean flash) {
public Boolean isFlashSupported() {
if (cameraHolder == null) {
return null;
}
List<String> modes = cameraHolder.params.getSupportedFlashModes();
if (modes != null) {
return modes.contains(android.hardware.Camera.Parameters.FLASH_MODE_ON)
&& modes.contains(android.hardware.Camera.Parameters.FLASH_MODE_OFF);
} else {
// no flash support, e.g.
// Samsung Galaxy Tab A (gta3xlwifi), 3072MB RAM, Android 9
// Huawei HUAWEI MediaPad M5 Pro (HWCMR), 3840MB RAM, Android 9
// LGE Qua tab PX (b3), 2048MB RAM, Android 7.0
return false;
}
}

/**
* @see #isFlashSupported() as a guard, {@code setFlashMode} crashes otherwise.
*/
public void setFlash(boolean flash) {
if (cameraHolder == null && !Boolean.TRUE.equals(isFlashSupported())) {
return;
}
String flashMode = flash
? android.hardware.Camera.Parameters.FLASH_MODE_ON
: android.hardware.Camera.Parameters.FLASH_MODE_OFF;
cameraHolder.params.setFlashMode(flashMode);
try {
cameraHolder.camera.setParameters(cameraHolder.params);
} catch(RuntimeException ex) {
// TODO pre-check and hide flash button
// E/Camera2-Parameters: set: Requested flash mode "on" is not supported: No flash on device
// java.lang.RuntimeException: setParameters failed
// at android.hardware.Camera.native_setParameters(Native Method)
// at android.hardware.Camera.setParameters(Camera.java:2102)
}
cameraHolder.camera.setParameters(cameraHolder.params);
}

private static class CameraHolder {
Expand Down

0 comments on commit aaa4ef3

Please sign in to comment.