From 705df16043d4d8116fa77da66a0413ac46262b97 Mon Sep 17 00:00:00 2001 From: codeworkx Date: Sat, 28 Jan 2017 14:56:35 +0100 Subject: Snap: Detect and use Camera2 if available Author: codeworkx Date: Sat Jan 28 14:56:35 2017 +0100 Snap: detect and use Camera2 if available Also add overlay option to enable support for Camera2 to retain current behaviour. Change-Id: I20939e33f4bb687e4abea11bbcdb9bf246b156e4 Author: codeworkx Date: Sun Aug 13 12:22:05 2017 +0200 Snap: Add missing null check on isCamera2Supported Change-Id: I61c04c7cb8d344573ab7fb11f7114f09aaf24fb7 Change-Id: I339ead08d10ddff5dad491987d94367354a4b3f3 --- src/com/android/camera/CameraActivity.java | 23 ++++++++++++++++----- src/com/android/camera/util/CameraUtil.java | 31 ++++++++++++++++++++++++++++ src/com/android/camera/util/PersistUtil.java | 6 ------ 3 files changed, 49 insertions(+), 11 deletions(-) (limited to 'src/com') diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index 3629eb7d6..d1ee7754a 100755 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -193,11 +193,15 @@ public class CameraActivity extends Activity private static boolean PIE_MENU_ENABLED = false; private boolean mDeveloperMenuEnabled = false; + private boolean mCamera2supported = false; + private boolean mCamera2enabled = false; + /** This data adapter is used by FilmStripView. */ private LocalDataAdapter mDataAdapter; /** This data adapter represents the real local camera data. */ private LocalDataAdapter mWrappedDataAdapter; + private Context mContext; private PanoramaStitchingManager mPanoramaManager; private PlaceholderManager mPlaceholderManager; private int mCurrentModuleIndex; @@ -1497,6 +1501,9 @@ public class CameraActivity extends Activity } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } + + mContext = getApplicationContext(); + // Check if this is in the secure camera mode. Intent intent = getIntent(); String action = intent.getAction(); @@ -1573,9 +1580,16 @@ public class CameraActivity extends Activity } } - boolean cam2on = PersistUtil.getCamera2Mode(); - CameraHolder.setCamera2Mode(this, cam2on); - if (cam2on && (moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX || + // Check if the device supports Camera API 2 + mCamera2supported = CameraUtil.isCamera2Supported(mContext); + Log.d(TAG, "Camera API 2 supported: " + mCamera2supported); + + mCamera2enabled = mCamera2supported && + mContext.getResources().getBoolean(R.bool.support_camera_api_v2); + Log.d(TAG, "Camera API 2 enabled: " + mCamera2enabled); + + CameraHolder.setCamera2Mode(this, mCamera2enabled); + if (mCamera2enabled && (moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX || moduleIndex == ModuleSwitcher.VIDEO_MODULE_INDEX)) moduleIndex = ModuleSwitcher.CAPTURE_MODULE_INDEX; @@ -2158,9 +2172,8 @@ public class CameraActivity extends Activity @Override public void onModuleSelected(int moduleIndex) { - boolean cam2on = PersistUtil.getCamera2Mode(); mForceReleaseCamera = moduleIndex == ModuleSwitcher.CAPTURE_MODULE_INDEX || - (cam2on && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX); + (mCamera2enabled && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX); if (mForceReleaseCamera) { moduleIndex = ModuleSwitcher.CAPTURE_MODULE_INDEX; } diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java index 3de5c4119..1813b11a7 100755 --- a/src/com/android/camera/util/CameraUtil.java +++ b/src/com/android/camera/util/CameraUtil.java @@ -409,6 +409,37 @@ public class CameraUtil { } } + public static boolean isCamera2Supported(Context context) { + android.hardware.camera2.CameraManager manager = (android.hardware.camera2.CameraManager) + context.getSystemService(Context.CAMERA_SERVICE); + + try { + String[] cameraIds = manager.getCameraIdList(); + + if (cameraIds != null && cameraIds.length > 0) { + CameraCharacteristics characteristics = + manager.getCameraCharacteristics(cameraIds[0]); + int deviceLevel = + characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); + + switch (deviceLevel) { + case CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED: + return true; + case CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL: + return true; + case CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_3: + return true; + default: + return false; + } + } + } catch(CameraAccessException | NumberFormatException e) { + Log.e(TAG, "exception trying to get camera characteristics"); + } + + return false; + } + public static CameraManager.CameraProxy openCamera( Activity activity, final int cameraId, Handler handler, final CameraManager.CameraOpenErrorCallback cb) { diff --git a/src/com/android/camera/util/PersistUtil.java b/src/com/android/camera/util/PersistUtil.java index 32b76d1e9..baba03cfa 100644 --- a/src/com/android/camera/util/PersistUtil.java +++ b/src/com/android/camera/util/PersistUtil.java @@ -52,8 +52,6 @@ public class PersistUtil { SystemProperties.get("persist.sys.camera.preview.size", ""); private static final String PERSIST_CAMERA_VIDEO_SIZE = SystemProperties.get("persist.sys.camera.video.size", ""); - private static final boolean PERSIST_CAMERA_CAMERA2 = - SystemProperties.getBoolean("persist.sys.camera.camera2", true); private static final boolean PERSIST_CAMERA_ZSL = SystemProperties.getBoolean("persist.sys.camera.zsl.disabled", false); private static final int PERSIST_CAMERA_CANCEL_TOUCHFOCUS_DELAY = @@ -163,10 +161,6 @@ public class PersistUtil { return result; } - public static boolean getCamera2Mode() { - return PERSIST_CAMERA_CAMERA2; - } - public static boolean getCameraZSLDisabled() { return PERSIST_CAMERA_ZSL; } -- cgit v1.2.3