summaryrefslogtreecommitdiff
path: root/src/com/android/camera/CaptureModule.java
diff options
context:
space:
mode:
authorJulian Veit <claymore1298@gmail.com>2022-03-20 00:06:45 +0100
committerJulian Veit <claymore1298@gmail.com>2022-03-20 00:06:45 +0100
commitd250e4a60f3b6219c6925534629eee12834a92b8 (patch)
tree52fb90369927e24dc962b6ec283f6a3f710f7a6c /src/com/android/camera/CaptureModule.java
parentef111dceb9e3fce395bff4f6a4ef1591c701e80c (diff)
parent8c444160bd565319468cce5bfdcfc11d20e8b7cb (diff)
Merge branch 'lineage-18.1' of https://github.com/LineageOS/android_packages_apps_Snap into HEADHEADs12.1
Change-Id: Ia09760085480a6a028c8969f16f503070ab816e5
Diffstat (limited to 'src/com/android/camera/CaptureModule.java')
-rwxr-xr-x[-rw-r--r--]src/com/android/camera/CaptureModule.java135
1 files changed, 104 insertions, 31 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index 7f546fdf7..b7773c873 100644..100755
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -30,6 +30,7 @@ import android.content.SharedPreferences;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
+import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.ImageFormat;
import android.graphics.Matrix;
@@ -133,6 +134,8 @@ import com.android.camera.util.VendorTagUtil;
import org.codeaurora.snapcam.R;
import org.codeaurora.snapcam.filter.ClearSightImageProcessor;
+import org.lineageos.quickreader.ScannerActivity;
+
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -557,7 +560,7 @@ public class CaptureModule implements CameraModule, PhotoController,
private boolean[] mCameraOpened = new boolean[MAX_NUM_CAM];
private CameraDevice[] mCameraDevice = new CameraDevice[MAX_NUM_CAM];
private String[] mCameraId = new String[MAX_NUM_CAM];
- private String[] mSelectableModes = {"Video", "HFR", "Photo", "Bokeh", "SAT", "ProMode"};
+ private String[] mSelectableModes = {"Video", "HFR", "Photo", "Bokeh", "SAT", "ProMode", "QR"};
private ArrayList<SceneModule> mSceneCameraIds = new ArrayList<>();
private SceneModule mCurrentSceneMode;
private int mNextModeIndex = 1;
@@ -570,7 +573,8 @@ public class CaptureModule implements CameraModule, PhotoController,
DEFAULT,
RTB,
SAT,
- PRO_MODE
+ PRO_MODE,
+ QR,
}
public enum MFNRSupportValues {
@@ -604,6 +608,7 @@ public class CaptureModule implements CameraModule, PhotoController,
private boolean mExistAECWarmTag = true;
private boolean mExistAECFrameControlTag = true;
+ private static final long SDCARD_SIZE_LIMIT = 4000 * 1024 * 1024L;
private static final String sTempCropFilename = "crop-temp";
private static final int REQUEST_CROP = 1000;
private int mIntentMode = INTENT_MODE_NORMAL;
@@ -954,22 +959,28 @@ public class CaptureModule implements CameraModule, PhotoController,
mPreviewCaptureResult = result;
}
updateCaptureStateMachine(id, result);
- Integer ssmStatus = result.get(ssmCaptureComplete);
- if (ssmStatus != null) {
- Log.d(TAG, "ssmStatus: CaptureComplete is " + ssmStatus);
- updateProgressBar(true);
- }
- Integer procComplete = result.get(ssmProcessingComplete);
- if (procComplete != null && ++mCaptureCompleteCount == 1) {
- Log.d(TAG, "ssmStatus: ProcessingComplete is " + procComplete);
- mCaptureCompleteCount = 0;
- mSSMCaptureCompleteFlag = true;
- mActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- stopRecordingVideo(getMainCameraId());
+ if (isSSMEnabled()) {
+ try {
+ Integer ssmStatus = result.get(ssmCaptureComplete);
+ if (ssmStatus != null) {
+ Log.d(TAG, "ssmStatus: CaptureComplete is " + ssmStatus);
+ updateProgressBar(true);
}
- });
+ Integer procComplete = result.get(ssmProcessingComplete);
+ if (procComplete != null && ++mCaptureCompleteCount == 1) {
+ Log.d(TAG, "ssmStatus: ProcessingComplete is " + procComplete);
+ mCaptureCompleteCount = 0;
+ mSSMCaptureCompleteFlag = true;
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ stopRecordingVideo(getMainCameraId());
+ }
+ });
+ }
+ } catch (IllegalArgumentException e) {
+ e.printStackTrace();
+ }
}
}
@@ -1818,6 +1829,10 @@ public class CaptureModule implements CameraModule, PhotoController,
if (!HFR_RATE.equals("")) {
mSettingsManager.setValue(SettingsManager.KEY_VIDEO_HIGH_FRAME_RATE, HFR_RATE);
}
+ if (!mSettingsManager.isHFRSupportedOnCurrentResolution()) {
+ Toast.makeText(mActivity, R.string.hfr_unsupported_current_resolution,
+ Toast.LENGTH_LONG).show();
+ }
createSessionForVideo(cameraId);
break;
default:
@@ -2334,11 +2349,20 @@ public class CaptureModule implements CameraModule, PhotoController,
mSettingsManager = SettingsManager.getInstance();
mSettingsManager.createCaptureModule(this);
mSettingsManager.registerListener(this);
- if (isBackCameraId()) {
- CURRENT_ID = BACK_MODE;
- } else {
- CURRENT_ID = FRONT_MODE;
+
+ SceneModule module;
+ for (int i = 0; i < mSelectableModes.length; i++) {
+ module = new SceneModule();
+ module.mode = CameraMode.values()[i];
+ mSceneCameraIds.add(module);
+ if (module.mode == CURRENT_MODE) {
+ mNextModeIndex = i;
+ mCurrentModeIndex = i;
+ }
}
+ mCurrentSceneMode = mSceneCameraIds.get(mCurrentModeIndex);
+ CURRENT_ID = mCurrentSceneMode.getNextCameraId(CURRENT_MODE);
+
mSettingsManager.init();
mFirstPreviewLoaded = false;
Log.d(TAG, "init");
@@ -2349,12 +2373,6 @@ public class CaptureModule implements CameraModule, PhotoController,
for (int i = 0; i < MAX_NUM_CAM; i++) {
mState[i] = STATE_PREVIEW;
}
- SceneModule module;
- for (int i = 0; i < mSelectableModes.length; i++) {
- module = new SceneModule();
- module.mode = CameraMode.values()[i];
- mSceneCameraIds.add(module);
- }
mPostProcessor = new PostProcessor(mActivity, this);
mFrameProcessor = new FrameProcessor(mActivity, this);
@@ -2430,6 +2448,7 @@ public class CaptureModule implements CameraModule, PhotoController,
removeList[CameraMode.DEFAULT.ordinal()] = false;
removeList[CameraMode.VIDEO.ordinal()] = false;
removeList[CameraMode.PRO_MODE.ordinal()] = false;
+ removeList[CameraMode.QR.ordinal()] = false;
if (facing == CameraCharacteristics.LENS_FACING_FRONT) {
CaptureModule.FRONT_ID = cameraId;
mSceneCameraIds.get(CameraMode.DEFAULT.ordinal()).frontCameraId = cameraId;
@@ -2445,6 +2464,7 @@ public class CaptureModule implements CameraModule, PhotoController,
mSceneCameraIds.get(CameraMode.DEFAULT.ordinal()).rearCameraId = cameraId;
mSceneCameraIds.get(CameraMode.VIDEO.ordinal()).rearCameraId = cameraId;
mSceneCameraIds.get(CameraMode.PRO_MODE.ordinal()).rearCameraId = cameraId;
+ mSceneCameraIds.get(CameraMode.QR.ordinal()).rearCameraId = cameraId;
if (mSettingsManager.isHFRSupported()) { // filter HFR mode
removeList[CameraMode.HFR.ordinal()] = false;
mSceneCameraIds.get(CameraMode.HFR.ordinal()).rearCameraId = cameraId;
@@ -4566,6 +4586,7 @@ public class CaptureModule implements CameraModule, PhotoController,
mSoundPlayer = SoundClips.getPlayer(mActivity);
}
+ updateSaveStorageState();
setDisplayOrientation();
if (!resumeFromRestartAll) {
startBackgroundThread();
@@ -4933,6 +4954,9 @@ public class CaptureModule implements CameraModule, PhotoController,
return;
}
Log.d(TAG, "onSingleTapUp " + x + " " + y);
+
+ mUI.closeModeSwitcher(true);
+
int currentId = mCurrentSceneMode.getCurrentId();
if(mLockAFAE) {
mLockAFAE = false;
@@ -5288,6 +5312,13 @@ public class CaptureModule implements CameraModule, PhotoController,
}
@Override
+ public void onSwitchSavePath() {
+ mSettingsManager.setValue(SettingsManager.KEY_CAMERA_SAVEPATH, "1");
+ RotateTextToast.makeText(mActivity, R.string.on_switch_save_path_to_sdcard,
+ Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
public void onShutterButtonFocus(boolean pressed) {
if (!pressed && mLongshotActive) {
Log.d(TAG, "Longshot button up");
@@ -6486,7 +6517,12 @@ public class CaptureModule implements CameraModule, PhotoController,
String title = createName(dateTaken);
String filename = title + CameraUtil.convertOutputFormatToFileExt(outputFileFormat);
String mime = CameraUtil.convertOutputFormatToMimeType(outputFileFormat);
- String path = Storage.DIRECTORY + '/' + filename;
+ String path;
+ if (Storage.isSaveSDCard() && SDCard.instance().isWriteable()) {
+ path = SDCard.instance().getDirectory() + '/' + filename;
+ } else {
+ path = Storage.DIRECTORY + '/' + filename;
+ }
mCurrentVideoValues = new ContentValues(9);
mCurrentVideoValues.put(MediaStore.Video.Media.TITLE, title);
mCurrentVideoValues.put(MediaStore.Video.Media.DISPLAY_NAME, filename);
@@ -6691,6 +6727,9 @@ public class CaptureModule implements CameraModule, PhotoController,
maxFileSize = requestedSizeLimit;
}
+ if (Storage.isSaveSDCard() && maxFileSize > SDCARD_SIZE_LIMIT) {
+ maxFileSize = SDCARD_SIZE_LIMIT;
+ }
Log.i(TAG, "MediaRecorder setMaxFileSize: " + maxFileSize);
try {
mMediaRecorder.setMaxFileSize(maxFileSize);
@@ -6788,6 +6827,8 @@ public class CaptureModule implements CameraModule, PhotoController,
Log.d(TAG,"onShutterButtonClick");
+ mUI.closeModeSwitcher(true);
+
if (mCurrentSceneMode.mode == CameraMode.HFR ||
mCurrentSceneMode.mode == CameraMode.VIDEO) {
if (mSettingsManager.isLiveshotSupported(mVideoSize,mSettingsManager.getVideoFPS())){
@@ -8178,6 +8219,10 @@ public class CaptureModule implements CameraModule, PhotoController,
}
Log.d(TAG, "CaptureModule onSettingsChanged, key = " + key);
switch (key) {
+ case SettingsManager.KEY_CAMERA_SAVEPATH:
+ Storage.setSaveSDCard(value.equals("1"));
+ mActivity.updateStorageSpaceAndHint();
+ continue;
case SettingsManager.KEY_JPEG_QUALITY:
estimateJpegFileSize();
continue;
@@ -8644,7 +8689,7 @@ public class CaptureModule implements CameraModule, PhotoController,
}
mUI.showUIafterRecording();
if (what == MediaRecorder.MEDIA_RECORDER_ERROR_UNKNOWN) {
- // We may have run out of storage space.
+ // We may have run out of space on the sdcard.
mActivity.updateStorageSpaceAndHint();
} else {
warningToast("MediaRecorder error. what=" + what + ". extra=" + extra);
@@ -8675,6 +8720,11 @@ public class CaptureModule implements CameraModule, PhotoController,
return bytes;
}
+ private void updateSaveStorageState() {
+ Storage.setSaveSDCard(mSettingsManager.getValue(SettingsManager
+ .KEY_CAMERA_SAVEPATH).equals("1"));
+ }
+
public void startPlayVideoActivity() {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(mCurrentVideoUri,
@@ -8943,6 +8993,13 @@ public class CaptureModule implements CameraModule, PhotoController,
if (mCurrentSceneMode.mode == mSceneCameraIds.get(mode).mode) {
return -1;
}
+ if (mSceneCameraIds.get(mode).mode == CameraMode.QR) {
+ mUI.closeModeSwitcher(true);
+ Intent intent = new Intent(mActivity, ScannerActivity.class);
+ mActivity.startActivity(intent);
+ // Don't change the selected item in modeswitcher
+ return -1;
+ }
setCameraModeSwitcherAllowed(false);
setNextSceneMode(mode);
SceneModule nextSceneMode = mSceneCameraIds.get(mode);
@@ -8952,12 +9009,16 @@ public class CaptureModule implements CameraModule, PhotoController,
nextSceneMode.mode == CameraMode.SAT ||
nextSceneMode.mode == CameraMode.PRO_MODE)) {
mSettingsManager.setValue(SettingsManager.KEY_FRONT_REAR_SWITCHER_VALUE, "rear");
+ mUI.setFrontBackSwitcherDrawable();
} else {
restartAll();
}
updateZoomSeekBarVisible();
mUI.updateZoomSeekBar(1.0f);
updateZoom();
+ mUI.closeModeSwitcher(true);
+ mUI.setCurrentModeIcon(mode);
+ mUI.setSwitcherAnimationNeeded(true);
return 1;
}
@@ -8995,6 +9056,16 @@ public class CaptureModule implements CameraModule, PhotoController,
return mSelectableModes;
}
+ public List<Integer> getCameraModeIconList() {
+ ArrayList<Integer> cameraModeIcons = new ArrayList<>();
+ TypedArray ic = mActivity.getResources()
+ .obtainTypedArray(R.array.camera_modes_back);
+ for (SceneModule sceneModule : mSceneCameraIds) {
+ cameraModeIcons.add(ic.getResourceId(sceneModule.mode.ordinal(), 0));
+ }
+ return cameraModeIcons;
+ }
+
private class SceneModule {
CameraMode mode = CameraMode.DEFAULT;
public int rearCameraId;
@@ -9005,7 +9076,8 @@ public class CaptureModule implements CameraModule, PhotoController,
int cameraId = isBackCamera() ? rearCameraId : frontCameraId;
cameraId = isForceAUXOn(this.mode) ? auxCameraId : cameraId;
if ((this.mode == CameraMode.DEFAULT || this.mode == CameraMode.VIDEO ||
- this.mode == CameraMode.HFR || this.mode == CameraMode.PRO_MODE)
+ this.mode == CameraMode.HFR || this.mode == CameraMode.PRO_MODE ||
+ this.mode == CameraMode.QR)
&& (mSettingsManager.isDeveloperEnabled() || swithCameraId != -1)) {
String value = mSettingsManager.getValue(SettingsManager.KEY_SWITCH_CAMERA);
if (value != null && !value.equals("-1")) {
@@ -9022,7 +9094,8 @@ public class CaptureModule implements CameraModule, PhotoController,
int cameraId = isBackCamera() ? rearCameraId : frontCameraId;
cameraId = isForceAUXOn(this.mode) ? auxCameraId : cameraId;
if ((this.mode == CameraMode.DEFAULT || this.mode == CameraMode.VIDEO ||
- this.mode == CameraMode.HFR || this.mode == CameraMode.PRO_MODE)
+ this.mode == CameraMode.HFR || this.mode == CameraMode.PRO_MODE ||
+ this.mode == CameraMode.QR)
&& (mSettingsManager.isDeveloperEnabled() || swithCameraId != -1)) {
final SharedPreferences pref = mActivity.getSharedPreferences(
ComboPreferences.getLocalSharedPreferencesName(mActivity,