|
@@ -222,6 +222,12 @@ public class MainActivity extends WpadActivity {
|
|
|
|
|
|
private static final int REQUEST_EXTERNAL_STORAGE = 100;
|
|
|
|
|
|
+ // 20220707 yjyoon
|
|
|
+ // 현관카메라가 FRONTCAMERATYPE.SMART_DW 인 경우 녹화 시 처음 올라오는 깨지는 영상 노출을 피하고자 MediaRecorder.start 를 4초 뒤에 실행.(MainActivity > mFrontCamOpenCheckHandler > msg.what == 3)
|
|
|
+ // 이 때, MediaRecorder.start 하기 전 먼저 활성화된 종료 또는 홈을 누르면 MediaRecorder 에서 에러(E/MediaRecorder: stop called in an invalid state: 8)가 발생. WallPadCall 앱이 비정상적으로 종료.
|
|
|
+ // MediaRecorder.start 상태가 아니면 MediaRecorder.stop 을 진행하지 않도록 MediaRecorder.start 상태변수 추가.
|
|
|
+ private boolean bMediaRecorder = false;
|
|
|
+
|
|
|
// Top
|
|
|
private WpadImageView TopBackground;
|
|
|
private WpadTextView TopTitle;
|
|
@@ -337,7 +343,8 @@ public class MainActivity extends WpadActivity {
|
|
|
public boolean bLCDReverse = false;
|
|
|
|
|
|
public static boolean bRecordingStatus = false; // 거동수상자 녹화중 판별 플래그
|
|
|
- public static boolean bRecordingStopAndNewCall = false; // yjyoon
|
|
|
+ public static boolean bRecordingStopAndNewCall = false; // yjyoon.
|
|
|
+ public static boolean bReadyToRecord = false; // yjyoon. 거동수상자 녹화모드 준비 완료 상태값 저장 변수.
|
|
|
|
|
|
public static boolean bFrontCallUse, bLobbyCallUse, bGuardCallUse, bResiCallUse, bPSTNCallUse, bCallHistoryUse, bVisitorPicUse;
|
|
|
|
|
@@ -3811,6 +3818,7 @@ public class MainActivity extends WpadActivity {
|
|
|
|
|
|
mFrontCamera.unlock();
|
|
|
|
|
|
+ bMediaRecorder = false;
|
|
|
|
|
|
mMediaRecorder = new MediaRecorder();
|
|
|
mMediaRecorder.setCamera(mFrontCamera);
|
|
@@ -3875,11 +3883,22 @@ public class MainActivity extends WpadActivity {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
if (mMediaRecorder != null) {
|
|
|
+ Log.d(TAG, "[mFrontCamOpenCheckHandler] m_mediaRecorder.start");
|
|
|
mMediaRecorder.start();
|
|
|
+ bMediaRecorder = true;
|
|
|
}
|
|
|
}
|
|
|
}, iPlayTime);
|
|
|
|
|
|
+ // yjyoon. 거동수상자 녹화 준비 완료.
|
|
|
+ Log.v("yjyoon", "MainActivity > mFrontCamOpenCheckHandler: bReadyToRecord = true");
|
|
|
+ bReadyToRecord = true;
|
|
|
+
|
|
|
+ Log.v("yjyoon", "Ready to Recording.");
|
|
|
+ Intent newIntent = new Intent(); // 녹화 종료 BR 전송
|
|
|
+ newIntent.setAction(ACNAME_MAIN_NOTI);
|
|
|
+ newIntent.putExtra("KIND", /**Common.BR_MAIN_NOTI.READY_TO_RECORDING*/1028);
|
|
|
+ getContext().sendBroadcast(newIntent);
|
|
|
|
|
|
} catch (IllegalStateException e) {
|
|
|
Log.e(TAG, "[IllegalStateException] mFrontCamOpenCheckHandler.start");
|
|
@@ -4634,10 +4653,17 @@ public class MainActivity extends WpadActivity {
|
|
|
try {
|
|
|
Log.d(TAG, "[mediaStartRecord]");
|
|
|
if (mMediaRecorder != null) {
|
|
|
- mMediaRecorder.stop();
|
|
|
+ if (bMediaRecorder) {
|
|
|
+ Log.d(TAG, "[mediaStartRecord] mMediaRecorder.stop");
|
|
|
+ mMediaRecorder.stop();
|
|
|
+ bMediaRecorder = false;
|
|
|
+ } else {
|
|
|
+ Log.d(TAG, "[mediaStartRecord] Skip mMediaRecorder.stop");
|
|
|
+ }
|
|
|
mMediaRecorder.reset();
|
|
|
mMediaRecorder.release();
|
|
|
mMediaRecorder = null;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
mFrontCamOpenCheckHandler.sendEmptyMessage(2); // camera open check 이후 녹화 시작
|
|
@@ -4645,7 +4671,7 @@ public class MainActivity extends WpadActivity {
|
|
|
// yjyoon.
|
|
|
// 거동수상자 녹화 -> 콜 수신. 녹화 중지 (Common.bWallPadRecoder = false)
|
|
|
// -> 통화완료 후 앱 종료 대기 중 거동수상자 감지. 녹화 시작. (이 때 Common.bWallPadRecoder 값이 변경되지 않음) -> 현관 버튼 클릭(동작하지 않음)
|
|
|
- Log.v("yjyoon", "Call MainActivity ###Common.BR_MAIN_NOTI.STOP_RECORDING");
|
|
|
+ Log.v("yjyoon", "Call MainActivity ###Common.BR_MAIN_NOTI.ACCEPT_RECORDING");
|
|
|
Intent newIntent = new Intent(); // 녹화 종료 BR 전송
|
|
|
newIntent.setAction(ACNAME_MAIN_NOTI);
|
|
|
newIntent.putExtra("KIND", /**Common.BR_MAIN_NOTI.ACCEPT_RECORDING*/1023);
|
|
@@ -4669,7 +4695,13 @@ public class MainActivity extends WpadActivity {
|
|
|
bRecordingStatus = false; // 녹화 종료
|
|
|
resetRecordTimer();
|
|
|
if (mMediaRecorder != null) {
|
|
|
- mMediaRecorder.stop();
|
|
|
+ if (bMediaRecorder) {
|
|
|
+ Log.d(TAG, "[mediaStopRecord] mMediaRecorder.stop");
|
|
|
+ mMediaRecorder.stop();
|
|
|
+ bMediaRecorder = false;
|
|
|
+ } else {
|
|
|
+ Log.d(TAG, "[mediaStopRecord] Skip mMediaRecorder.stop");
|
|
|
+ }
|
|
|
mMediaRecorder.reset();
|
|
|
mMediaRecorder.release();
|
|
|
mMediaRecorder = null;
|
|
@@ -4680,6 +4712,9 @@ public class MainActivity extends WpadActivity {
|
|
|
showFrontVideo(false);
|
|
|
if (bDel) ScreenLayout.removeView(FrontVideoSurface);
|
|
|
|
|
|
+ Log.v("yjyoon", "Mainactivity > mediaStopRecord: bReadyToRecord = false");
|
|
|
+ bReadyToRecord = false;
|
|
|
+
|
|
|
// yjyoon. WallPadMain으로 녹화 종료 이벤트 발생. Common.bWallPadRecoder 값 변경.
|
|
|
Log.v("yjyoon", "Call MainActivity ###Common.BR_MAIN_NOTI.STOP_RECORDING");
|
|
|
Intent newIntent = new Intent(); // 녹화 종료 BR 전송
|
|
@@ -4930,6 +4965,8 @@ public class MainActivity extends WpadActivity {
|
|
|
if (mMediaRecorder != null) {
|
|
|
mMediaRecorder.release();
|
|
|
mMediaRecorder = null;
|
|
|
+ if (bMediaRecorder)
|
|
|
+ bMediaRecorder = false;
|
|
|
}
|
|
|
resetRecordTimer();
|
|
|
bRecordingStatus = false;
|