diff options
-rw-r--r-- | AndroidManifest.xml | 10 | ||||
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 8 | ||||
-rw-r--r-- | src/com/android/camera/CaptureModule.java | 76 | ||||
-rw-r--r-- | src/com/android/camera/PermissionsActivity.java | 4 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 21 | ||||
-rw-r--r-- | src/com/android/camera/PhotoUI.java | 14 | ||||
-rw-r--r-- | src/com/android/camera/SettingsManager.java | 5 | ||||
-rw-r--r-- | src/com/android/camera/VideoModule.java | 12 | ||||
-rw-r--r-- | src/com/android/camera/WideAnglePanoramaModule.java | 12 | ||||
-rw-r--r-- | src/com/android/camera/app/CameraApp.java | 2 | ||||
-rw-r--r-- | src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java | 10 |
11 files changed, 106 insertions, 68 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 12a86bb9b..53ebaa39d 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -13,20 +13,10 @@ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> - <uses-permission android:name="android.permission.BIND_WALLPAPER" /> <uses-permission android:name="android.permission.CAMERA" /> - <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> - <uses-permission android:name="android.permission.GET_ACCOUNTS" /> - <uses-permission android:name="android.permission.INTERNET" /> - <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <uses-permission android:name="android.permission.NFC" /> <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" /> - <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> - <uses-permission android:name="android.permission.SET_WALLPAPER" /> - <uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_READ" /> - <uses-permission android:name="android.permission.SUBSCRIBED_FEEDS_WRITE" /> - <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java index 7768cdb1a..e3b4573d1 100644 --- a/src/com/android/camera/CameraActivity.java +++ b/src/com/android/camera/CameraActivity.java @@ -1649,12 +1649,11 @@ public class CameraActivity extends Activity if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED && - checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { + checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { mHasCriticalPermissions = true; } else { mHasCriticalPermissions = false; } - if ((checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) || !mHasCriticalPermissions) { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); @@ -1745,7 +1744,10 @@ public class CameraActivity extends Activity mWakeLock.release(); Log.d(TAG, "wake lock release"); } - SettingsManager.getInstance().destroyInstance(); + SettingsManager settingsMngr = SettingsManager.getInstance(); + if (settingsMngr != null) { + settingsMngr.destroyInstance(); + } if (mCursor != null) { getContentResolver().unregisterContentObserver(mLocalImagesObserver); getContentResolver().unregisterContentObserver(mLocalVideosObserver); diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index ba50ceca6..336e7b410 100644 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -165,6 +165,12 @@ public class CaptureModule implements CameraModule, PhotoController, CaptureRequest.Key<Integer> BayerMonoLinkSessionIdKey = new CaptureRequest.Key<>("org.codeaurora.qcamera3.dualcam_link_meta_data" + ".related_camera_id", Integer.class); + public static CaptureRequest.Key<Byte> JpegCropEnableKey = + new CaptureRequest.Key<>("org.codeaurora.qcamera3.jpeg_encode_crop.enable", + Byte.class); + public static CaptureRequest.Key<int[]> JpegCropRectKey = + new CaptureRequest.Key<>("org.codeaurora.qcamera3.jpeg_encode_crop.rect", + int[].class); public static CameraCharacteristics.Key<Byte> MetaDataMonoOnlyKey = new CameraCharacteristics.Key<>("org.codeaurora.qcamera3.sensor_meta_data.is_mono_only", Byte.class); @@ -176,7 +182,6 @@ public class CaptureModule implements CameraModule, PhotoController, private boolean mAutoExposureRegionSupported; // The degrees of the device rotated clockwise from its natural orientation. private int mOrientation = OrientationEventListener.ORIENTATION_UNKNOWN; - private int mJpegQuality; private boolean mFirstTimeInitialized; private boolean mInitialized = false; private boolean mIsLinked = false; @@ -1223,34 +1228,44 @@ public class CaptureModule implements CameraModule, PhotoController, */ private void closeCamera() { Log.d(TAG, "closeCamera"); - try { - mCameraOpenCloseLock.acquire(); - if(mPostProcessor != null) { - mPostProcessor.onClose(); - } - if(mFrameProcessor != null) { - mFrameProcessor.onClose(); - } - for (int i = 0; i < MAX_NUM_CAM; i++) { - if (null != mCaptureSession[i]) { - if (mIsLinked) { - unLinkBayerMono(i); - try { - mCaptureSession[i].capture(mPreviewRequestBuilder[i].build(), null, - mCameraHandler); - } catch (CameraAccessException e) { - e.printStackTrace(); - } + if(mPostProcessor != null) { + mPostProcessor.onClose(); + } + + if(mFrameProcessor != null) { + mFrameProcessor.onClose(); + } + + for (int i = 0; i < MAX_NUM_CAM; i++) { + if (null != mCaptureSession[i]) { + if (mIsLinked) { + unLinkBayerMono(i); + try { + mCaptureSession[i].capture(mPreviewRequestBuilder[i].build(), null, + mCameraHandler); + } catch (CameraAccessException e) { + e.printStackTrace(); } - mCaptureSession[i].close(); - mCaptureSession[i] = null; } + mCaptureSession[i].close(); + mCaptureSession[i] = null; + } - if (null != mImageReader[i]) { - mImageReader[i].close(); - mImageReader[i] = null; - } + if (null != mImageReader[i]) { + mImageReader[i].close(); + mImageReader[i] = null; + } + } + /* no need to set this in the callback and handle asynchronously. This is the same + reason as why we release the semaphore here, not in camera close callback function + as we don't have to protect the case where camera open() gets called during camera + close(). The low level framework/HAL handles the synchronization for open() + happens after close() */ + mIsLinked = false; + try { + mCameraOpenCloseLock.acquire(); + for (int i = 0; i < MAX_NUM_CAM; i++) { if (null != mCameraDevice[i]) { mCameraDevice[i].close(); mCameraDevice[i] = null; @@ -1261,12 +1276,6 @@ public class CaptureModule implements CameraModule, PhotoController, mMediaRecorder = null; } } - /* no need to set this in the callback and handle asynchronously. This is the same - reason as why we release the semaphore here, not in camera close callback function - as we don't have to protect the case where camera open() gets called during camera - close(). The low level framework/HAL handles the synchronization for open() - happens after close() */ - mIsLinked = false; } catch (InterruptedException e) { mCameraOpenCloseLock.release(); throw new RuntimeException("Interrupted while trying to lock camera closing.", e); @@ -2451,7 +2460,9 @@ public class CaptureModule implements CameraModule, PhotoController, } private void applyJpegQuality(CaptureRequest.Builder request) { - request.set(CaptureRequest.JPEG_QUALITY, (byte) mJpegQuality); + String value = mSettingsManager.getValue(SettingsManager.KEY_JPEG_QUALITY); + int jpegQuality = getQualityNumber(value); + request.set(CaptureRequest.JPEG_QUALITY, (byte) jpegQuality); } private void applyAFRegions(CaptureRequest.Builder request, int id) { @@ -2672,7 +2683,6 @@ public class CaptureModule implements CameraModule, PhotoController, mActivity.updateStorageSpaceAndHint(); continue; case SettingsManager.KEY_JPEG_QUALITY: - mJpegQuality = getQualityNumber(value); estimateJpegFileSize(); continue; case SettingsManager.KEY_VIDEO_DURATION: diff --git a/src/com/android/camera/PermissionsActivity.java b/src/com/android/camera/PermissionsActivity.java index 1d6219195..2b5901a58 100644 --- a/src/com/android/camera/PermissionsActivity.java +++ b/src/com/android/camera/PermissionsActivity.java @@ -67,7 +67,7 @@ public class PermissionsActivity extends Activity { mFlagHasMicrophonePermission = true; } - if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) + if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { mNumPermissionsToRequest++; mShouldRequestStoragePermission = true; @@ -103,7 +103,7 @@ public class PermissionsActivity extends Activity { permissionsRequestIndex++; } if (mShouldRequestStoragePermission) { - permissionsToRequest[permissionsRequestIndex] = Manifest.permission.READ_EXTERNAL_STORAGE; + permissionsToRequest[permissionsRequestIndex] = Manifest.permission.WRITE_EXTERNAL_STORAGE; mIndexPermissionRequestStorage = permissionsRequestIndex; permissionsRequestIndex++; } diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index d6caf7eb8..6f116ab24 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -544,7 +544,10 @@ public class PhotoModule } public void reinit() { - mPreferences = new ComboPreferences(mActivity); + mPreferences = ComboPreferences.get(mActivity); + if (mPreferences == null) { + mPreferences = new ComboPreferences(mActivity); + } CameraSettings.upgradeGlobalPreferences(mPreferences.getGlobal(), mActivity); mCameraId = getPreferredCameraId(mPreferences); mPreferences.setLocalId(mActivity, mCameraId); @@ -555,7 +558,11 @@ public class PhotoModule public void init(CameraActivity activity, View parent) { mActivity = activity; mRootView = parent; - mPreferences = new ComboPreferences(mActivity); + mPreferences = ComboPreferences.get(mActivity); + if (mPreferences == null) { + mPreferences = new ComboPreferences(mActivity); + } + CameraSettings.upgradeGlobalPreferences(mPreferences.getGlobal(), activity); mCameraId = getPreferredCameraId(mPreferences); @@ -3788,14 +3795,18 @@ public class PhotoModule if (refocusOn.equals(mSceneMode)) { try { mSceneMode = Parameters.SCENE_MODE_AUTO; - mUI.setPreference(CameraSettings.KEY_ADVANCED_FEATURES, refocusOn); - mUI.showRefocusDialog(); + if (mHandler.getLooper() == Looper.myLooper()) { + mUI.setPreference(CameraSettings.KEY_ADVANCED_FEATURES, refocusOn); + mUI.showRefocusDialog(); + } } catch (NullPointerException e) { } } else if (optizoomOn.equals(mSceneMode)) { try { mSceneMode = Parameters.SCENE_MODE_AUTO; - mUI.setPreference(CameraSettings.KEY_ADVANCED_FEATURES, optizoomOn); + if (mHandler.getLooper() == Looper.myLooper()) { + mUI.setPreference(CameraSettings.KEY_ADVANCED_FEATURES, optizoomOn); + } } catch (NullPointerException e) { } } else if (mSceneMode == null) { diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index 09e24a710..7c715d9fd 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -1445,16 +1445,12 @@ public class PhotoUI implements PieListener, AlertDialog dialog = new AlertDialog.Builder(mActivity) .setTitle(R.string.refocus_prompt_title) .setMessage(R.string.refocus_prompt_message) - .setPositiveButton(R.string.dialog_ok, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int arg1) { - SharedPreferences.Editor editor = prefs.edit(); - editor.putInt(CameraSettings.KEY_REFOCUS_PROMPT, 0); - editor.apply(); - } - }) + .setPositiveButton(R.string.dialog_ok, null) .show(); + SharedPreferences.Editor editor = prefs.edit(); + editor.putInt(CameraSettings.KEY_REFOCUS_PROMPT, 0); + editor.apply(); + } } diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java index ad13f6063..7909541ae 100644 --- a/src/com/android/camera/SettingsManager.java +++ b/src/com/android/camera/SettingsManager.java @@ -121,7 +121,10 @@ public class SettingsManager implements ListMenu.SettingsListener { mListeners = new ArrayList<>(); mCharacteristics = new ArrayList<>(); mContext = context; - mPreferences = new ComboPreferences(mContext); + mPreferences = ComboPreferences.get(mContext); + if (mPreferences == null) { + mPreferences = new ComboPreferences(mContext); + } CameraSettings.upgradeGlobalPreferences(mPreferences.getGlobal(), mContext); CameraManager manager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE); diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java index 96423044f..9cb48eb0f 100644 --- a/src/com/android/camera/VideoModule.java +++ b/src/com/android/camera/VideoModule.java @@ -453,7 +453,11 @@ public class VideoModule implements CameraModule, } public void reinit() { - mPreferences = new ComboPreferences(mActivity); + mPreferences = ComboPreferences.get(mActivity); + if (mPreferences == null) { + mPreferences = new ComboPreferences(mActivity); + } + CameraSettings.upgradeGlobalPreferences(mPreferences.getGlobal(), mActivity); mCameraId = getPreferredCameraId(mPreferences); mPreferences.setLocalId(mActivity, mCameraId); @@ -464,7 +468,11 @@ public class VideoModule implements CameraModule, public void init(CameraActivity activity, View root) { mActivity = activity; mUI = new VideoUI(activity, this, root); - mPreferences = new ComboPreferences(mActivity); + mPreferences = ComboPreferences.get(mActivity); + if (mPreferences == null) { + mPreferences = new ComboPreferences(mActivity); + } + CameraSettings.upgradeGlobalPreferences(mPreferences.getGlobal(), activity); mCameraId = getPreferredCameraId(mPreferences); diff --git a/src/com/android/camera/WideAnglePanoramaModule.java b/src/com/android/camera/WideAnglePanoramaModule.java index 9a0e9ce7e..3f825dd39 100644 --- a/src/com/android/camera/WideAnglePanoramaModule.java +++ b/src/com/android/camera/WideAnglePanoramaModule.java @@ -301,7 +301,11 @@ public class WideAnglePanoramaModule mDialogPanoramaFailedString = appRes.getString(R.string.pano_dialog_panorama_failed); mDialogWaitingPreviousString = appRes.getString(R.string.pano_dialog_waiting_previous); - mPreferences = new ComboPreferences(mActivity); + mPreferences = ComboPreferences.get(mActivity); + if (mPreferences == null) { + mPreferences = new ComboPreferences(mActivity); + } + mPreferences.setLocalId(mActivity, getPreferredCameraId(mPreferences)); CameraSettings.upgradeGlobalPreferences(mPreferences.getGlobal(), activity); mLocationManager = new LocationManager(mActivity, null); @@ -960,7 +964,11 @@ public class WideAnglePanoramaModule @Override public void onResumeBeforeSuper() { mPaused = false; - mPreferences = new ComboPreferences(mActivity); + mPreferences = ComboPreferences.get(mActivity); + if (mPreferences == null) { + mPreferences = new ComboPreferences(mActivity); + } + CameraSettings.upgradeGlobalPreferences(mPreferences.getGlobal(), mActivity); mPreferences.setLocalId(mActivity, getPreferredCameraId(mPreferences)); CameraSettings.upgradeLocalPreferences(mPreferences.getLocal()); diff --git a/src/com/android/camera/app/CameraApp.java b/src/com/android/camera/app/CameraApp.java index 831ed974c..b46d615b0 100644 --- a/src/com/android/camera/app/CameraApp.java +++ b/src/com/android/camera/app/CameraApp.java @@ -26,7 +26,7 @@ import com.android.camera.util.UsageStatistics; public class CameraApp extends Application { private static long mMaxSystemMemory; public static boolean mIsLowMemoryDevice = false; - private static final int LOW_MEMORY_DEVICE_THRESHOLD = 1024*1024*1024; + private static final long LOW_MEMORY_DEVICE_THRESHOLD = 2L*1024*1024*1024; @Override public void onCreate() { super.onCreate(); diff --git a/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java b/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java index bafbbb8eb..c64a0de2a 100644 --- a/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java +++ b/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java @@ -64,6 +64,7 @@ import android.os.SystemProperties; import android.util.Log; import android.view.Surface; +import com.android.camera.CaptureModule; import com.android.camera.MediaSaveService; import com.android.camera.MediaSaveService.OnMediaSavedListener; import com.android.camera.PhotoModule.NamedImages; @@ -712,6 +713,15 @@ public class ClearSightImageProcessor { reprocRequest.set(CaptureRequest.NOISE_REDUCTION_MODE, CaptureRequest.NOISE_REDUCTION_MODE_OFF); + Rect cropRect = image.mImage.getCropRect(); + if(cropRect != null && + !cropRect.isEmpty()) { + // has crop rect. apply to jpeg request + reprocRequest.set(CaptureModule.JpegCropEnableKey, (byte)1); + reprocRequest.set(CaptureModule.JpegCropRectKey, + new int[] {cropRect.left, cropRect.top, cropRect.width(), cropRect.height()}); + } + mImageWriter[camType].queueInputImage(image.mImage); session.capture(reprocRequest.build(), |