From 64536b426e0b5ad1f27ba33dcc94640000c6d619 Mon Sep 17 00:00:00 2001 From: Ergyun Syuleyman Date: Fri, 29 May 2020 01:42:53 +0300 Subject: [PATCH] NY-10524: [AN]: Samsung App crash: NynjaCameraFragment.java line 284 com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment.fadeInBlurredView 2) java.lang.NullPointerException: Attempt to invoke virtual method 'void com.otaliastudios.cameraview.CameraView.start()' on a null object reference at com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment.lambda$null$7(NynjaCameraFragment.java:626) 3) Process: com.nynja.mobile.communicator, PID: 22611 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setEnabled(boolean)' on a null object reference at com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment.lambda$onImageCaptured$11(NynjaCameraFragment.java:836) at com.nynja.mobile.communicator.camera.camera.-$$Lambda$NynjaCameraFragment$bbUKKb8YMF6JlCgt61NtIqhyUPc.run(Unknown Source:2) 4) com.nynja.mobile.communicator E/AndroidRuntime: FATAL EXCEPTION: main Process: com.nynja.mobile.communicator, PID: 23303 java.lang.RuntimeException: setDataSource failed: status = 0x80000000 at android.media.MediaMetadataRetriever.setDataSource(Native Method) at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:69) at com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment.onVideoRecorded(NynjaCameraFragment.java:848) at com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment.onVideo(NynjaCameraFragment.java:444) at com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment.access$900(NynjaCameraFragment.java:76) at com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment$3.onVideoTaken(NynjaCameraFragment.java:244) at com.otaliastudios.cameraview.CameraView$Callbacks$7.run(CameraView.java:1620) 5) java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.ImageView.postDelayed(java.lang.Runnable, long)' on a null object reference at com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment.onImageCaptured(NynjaCameraFragment.java:847) at com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment.access$1400(NynjaCameraFragment.java:76) at com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment$SavePhotoTask.onPostExecute(NynjaCameraFragment.java:951) at com.nynja.mobile.communicator.camera.camera.NynjaCameraFragment$SavePhotoTask.onPostExecute(NynjaCameraFragment.java:915) at android.os.AsyncTask.finish(AsyncTask.java:727) --- .../camera/camera/NynjaCameraFragment.java | 92 ++++++++++++------- .../navigation/NynjaFragment.java | 4 +- 2 files changed, 59 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/nynja/mobile/communicator/camera/camera/NynjaCameraFragment.java b/app/src/main/java/com/nynja/mobile/communicator/camera/camera/NynjaCameraFragment.java index bfa584914b..fca00e1706 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/camera/camera/NynjaCameraFragment.java +++ b/app/src/main/java/com/nynja/mobile/communicator/camera/camera/NynjaCameraFragment.java @@ -124,6 +124,33 @@ public class NynjaCameraFragment extends BaseFragment private Handler mTypingHandler = new Handler(); private TakingMediaRunnable mTakingMediaRunnable = new TakingMediaRunnable(); + private CameraListener cameraListener = new CameraListener() { + + public void onCameraOpened(CameraOptions options) { + onOpened(); + } + + public void onPictureTaken(byte[] jpeg) { + Timber.d("Captured snapshot"); + if (isSnapshotCapturing) { + isSnapshotCapturing = false; + camera.setPlaySounds(true); + blurFrame(jpeg); + } else { + onPicture(jpeg); + } + } + + @Override public void onVideoTaken(File video) { + super.onVideoTaken(video); + onVideo(video); + } + + @Override public void onCameraError(@NonNull CameraException exception) { + camera.removeCameraListener(this); + Timber.e(exception); + } + }; private FrameProcessor mFrameProcessor = new FrameProcessor() { @Override public void process(@NonNull Frame frame) { @@ -222,33 +249,7 @@ public class NynjaCameraFragment extends BaseFragment if (mCurrentCameraType.equals(CameraHelper.CameraType.CHAT)) { mChooseModeTl.addTab(mChooseModeTl.newTab().setText(R.string.video), CameraPresenter.VIDEO); } - camera.addCameraListener(new CameraListener() { - - public void onCameraOpened(CameraOptions options) { - onOpened(); - } - - public void onPictureTaken(byte[] jpeg) { - Timber.d("Captured snapshot"); - if (isSnapshotCapturing) { - isSnapshotCapturing = false; - camera.setPlaySounds(true); - blurFrame(jpeg); - } else { - onPicture(jpeg); - } - } - - @Override public void onVideoTaken(File video) { - super.onVideoTaken(video); - onVideo(video); - } - - @Override public void onCameraError(@NonNull CameraException exception) { -// camera.removeCameraListener(this); - Timber.e(exception); - } - }); + camera.addCameraListener(cameraListener); camera.clearGesture(Gesture.SCROLL_HORIZONTAL); camera.setVideoCodec(VideoCodec.H_264); ArrayList formats = new ArrayList<>(); @@ -515,7 +516,9 @@ public class NynjaCameraFragment extends BaseFragment Bitmap blurredBitmap = BlurBuilder.blur(getActivity(), bitmap); bitmap.recycle(); mBlurredIv.post(() -> { - fadeInBlurredView(blurredBitmap); + if (mBlurredIv != null) { + fadeInBlurredView(blurredBitmap); + } if (onBlurredShownCallback != null) { onBlurredShownCallback.onShown(); } @@ -623,7 +626,11 @@ public class NynjaCameraFragment extends BaseFragment addDisposable(mRxPermissions.requestEachCombined(Manifest.permission.CAMERA) .subscribe(permission -> { if (permission.granted) { - camera.post(() -> camera.start()); + camera.post(() -> { + if (camera != null) { + camera.start(); + } + }); } else if (!permission.shouldShowRequestPermissionRationale) { PermissionHelper.getInstance().showPermissionDialog(getActivity(), mPresenter.getPermissionDialogListener(), Manifest.permission.CAMERA); @@ -653,8 +660,12 @@ public class NynjaCameraFragment extends BaseFragment // } @Override public void onDestroyView() { - camera.destroy(); + camera.clearFrameProcessors(); + camera.removeCameraListener(cameraListener); + camera.clearCameraListeners(); stopTimer(); + mTypingHandler.removeCallbacksAndMessages(null); + camera.destroy(); super.onDestroyView(); } @@ -833,7 +844,12 @@ public class NynjaCameraFragment extends BaseFragment } private void onImageCaptured(File imageFile) { - mRecordBtn.postDelayed(() -> mRecordBtn.setEnabled(true), 500); //to disallow take second photo during transition + if (getActivity() == null || !isAdded() || mRecordBtn== null) return; + mRecordBtn.postDelayed(() -> { + if (mRecordBtn != null) { + mRecordBtn.setEnabled(true); + } + }, 500); //to disallow take second photo during transition mPresenter.onMediaReady(imageFile, mCurrentCameraType, false); camera.stop(); recreatePictureFile(); @@ -844,9 +860,14 @@ public class NynjaCameraFragment extends BaseFragment if (videoFile == null || !videoFile.exists()) { return; } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(videoFile.getPath()); - String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); + String time = null; + try { + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(videoFile.getPath()); + time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); + } catch (Exception ex) { + Timber.e(ex); + } if (time == null) { return; } @@ -927,7 +948,8 @@ public class NynjaCameraFragment extends BaseFragment @Override protected void onPostExecute(String s) { super.onPostExecute(s); - if (mContextWeakReference != null && mContextWeakReference.get() != null) { + if (mContextWeakReference != null && + mContextWeakReference.get() != null ) { mContextWeakReference.get().onImageCaptured(mPictureFile); } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/navigation/NynjaFragment.java b/app/src/main/java/com/nynja/mobile/communicator/navigation/NynjaFragment.java index 4feca7b03d..60fe07a2c2 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/navigation/NynjaFragment.java +++ b/app/src/main/java/com/nynja/mobile/communicator/navigation/NynjaFragment.java @@ -88,7 +88,7 @@ public abstract class NynjaFragment extends BaseNynjaFragment implements View.On } @Override public void onFragmentDestroy() { - if (LIFECYCLE_LOG) Timber.d(this.getClass().getSimpleName() + ":onCreateView()"); + if (LIFECYCLE_LOG) Timber.d(this.getClass().getSimpleName() + ":onFragmentDestroy()"); super.onFragmentDestroy(); if (isCreated()) { getMvpDelegate().onDestroyView(); @@ -100,7 +100,7 @@ public abstract class NynjaFragment extends BaseNynjaFragment implements View.On } @java.lang.Deprecated public void onDestroyView() { - if (LIFECYCLE_LOG) Timber.d(this.getClass().getSimpleName() + ":onFragmentDestroy()"); + if (LIFECYCLE_LOG) Timber.d(this.getClass().getSimpleName() + ":onDestroyView()"); } -- GitLab