diff options
author | codeworkx <daniel.hillenbrand@codeworkx.de> | 2017-01-28 14:56:35 +0100 |
---|---|---|
committer | codeworkx <daniel.hillenbrand@codeworkx.de> | 2017-02-17 21:14:30 +0100 |
commit | b8af8f18c0f7c6f26b6529adbe23ec51f97ce27a (patch) | |
tree | 3ab9ee3856e750edff69fed69d63aec70e9a59cb /src | |
parent | 198d1f827cf09c2b06680a14ffde2ccc4d85b185 (diff) | |
download | android_packages_apps_Snap-b8af8f18c0f7c6f26b6529adbe23ec51f97ce27a.tar.gz android_packages_apps_Snap-b8af8f18c0f7c6f26b6529adbe23ec51f97ce27a.tar.bz2 android_packages_apps_Snap-b8af8f18c0f7c6f26b6529adbe23ec51f97ce27a.zip |
Snap: detect and use Camera2 if available
Also add overlay option to enable support for Camera2 to retain current behaviour.
Change-Id: I20939e33f4bb687e4abea11bbcdb9bf246b156e4
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 25 | ||||
-rw-r--r-- | src/com/android/camera/util/CameraUtil.java | 26 |
2 files changed, 44 insertions, 7 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index cce365ebc..1bd452b18 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -189,11 +189,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 = -1; @@ -1428,6 +1432,9 @@ public class CameraActivity extends Activity finish(); return; } + + mContext = getApplicationContext(); + // Check if this is in the secure camera mode. Intent intent = getIntent(); String action = intent.getAction(); @@ -1502,8 +1509,14 @@ public class CameraActivity extends Activity } } - boolean cam2on = mSettingsManager.isCamera2On(); - 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); + + if (mCamera2enabled && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX) moduleIndex = ModuleSwitcher.CAPTURE_MODULE_INDEX; mOrientationListener = new MyOrientationEventListener(this); @@ -1613,12 +1626,11 @@ public class CameraActivity extends Activity registerSDcardMountedReceiver(); if (!Glide.isSetup()) { - Context context = getApplicationContext(); - Glide.setup(new GlideBuilder(context) + Glide.setup(new GlideBuilder(mContext) .setDecodeFormat(DecodeFormat.ALWAYS_ARGB_8888) .setResizeService(new FifoPriorityThreadPoolExecutor(2))); - Glide glide = Glide.get(context); + Glide glide = Glide.get(mContext); // As a camera we will use a large amount of memory // for displaying images. @@ -2047,9 +2059,8 @@ public class CameraActivity extends Activity @Override public void onModuleSelected(int moduleIndex, final Point hotspot) { - boolean cam2on = mSettingsManager.isCamera2On(); 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 bda83a1d9..9ae37080e 100644 --- a/src/com/android/camera/util/CameraUtil.java +++ b/src/com/android/camera/util/CameraUtil.java @@ -35,6 +35,8 @@ import android.hardware.Camera; import android.hardware.Camera.CameraInfo; import android.hardware.Camera.Parameters; import android.hardware.Camera.Size; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraCharacteristics; import android.location.Location; import android.media.MediaRecorder; import android.net.Uri; @@ -377,6 +379,30 @@ public class CameraUtil { } } + public static boolean isCamera2Supported(Context context) { + android.hardware.camera2.CameraManager manager = (android.hardware.camera2.CameraManager)context.getSystemService(Context.CAMERA_SERVICE); + + try { + CameraCharacteristics characteristics = manager.getCameraCharacteristics(manager.getCameraIdList()[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) { |