From 9367eb1a4994738e8d42645c50cca74d44020759 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Mon, 6 Mar 2023 12:59:47 +0100 Subject: [PATCH] Avoid NPE for voice message recording Exception java.lang.NullPointerException: at com.nextcloud.talk.controllers.ChatController$onViewBound$11.onTouch (ChatController.kt:867) at android.view.View.dispatchTouchEvent (View.java:15540) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3316) at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2990) at com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:1112) at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1971) at android.app.Activity.dispatchTouchEvent (Activity.java:4388) at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:70) at com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:1070) at android.view.View.dispatchPointerEvent (View.java:15803) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:8153) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:7877) at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:7213) at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:7270) at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:7236) at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:7434) at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:7244) at android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:7491) at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:7217) at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:7270) at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:7236) at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:7244) at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:7217) at android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:10788) at android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:10676) at android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:10632) at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:10926) at android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:285) at android.os.MessageQueue.nativePollOnce at android.os.MessageQueue.next (MessageQueue.java:335) at android.os.Looper.loopOnce (Looper.java:186) at android.os.Looper.loop (Looper.java:313) at android.app.ActivityThread.main (ActivityThread.java:8757) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:571) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1067) Signed-off-by: Marcel Hibbe --- .../talk/controllers/ChatController.kt | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index d69539d35..746b7a564 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -858,30 +858,31 @@ class ChatController(args: Bundle) : showRecordAudioUi(true) - binding?.messageInputView?.slideToCancelDescription?.x?.let { - if (sliderInitX == 0.0F) { - sliderInitX = it - } - } - val movedX: Float = event.x deltaX = movedX - downX // only allow slide to left - if (binding?.messageInputView?.slideToCancelDescription?.x!! > sliderInitX) { - binding?.messageInputView?.slideToCancelDescription?.x = sliderInitX + binding?.messageInputView?.slideToCancelDescription?.x?.let { + if (sliderInitX == 0.0F) { + sliderInitX = it + } + + if (it > sliderInitX) { + binding?.messageInputView?.slideToCancelDescription?.x = sliderInitX + } } - if (binding?.messageInputView?.slideToCancelDescription?.x!! < VOICE_RECORD_CANCEL_SLIDER_X) { - Log.d(TAG, "stopping recording because slider was moved to left") - stopAndDiscardAudioRecording() - showRecordAudioUi(false) - binding?.messageInputView?.slideToCancelDescription?.x = sliderInitX - return true - } else { - binding?.messageInputView?.slideToCancelDescription?.x = - binding?.messageInputView?.slideToCancelDescription?.x!! + deltaX - downX = movedX + binding?.messageInputView?.slideToCancelDescription?.x?.let { + if (it < VOICE_RECORD_CANCEL_SLIDER_X) { + Log.d(TAG, "stopping recording because slider was moved to left") + stopAndDiscardAudioRecording() + showRecordAudioUi(false) + binding?.messageInputView?.slideToCancelDescription?.x = sliderInitX + return true + } else { + binding?.messageInputView?.slideToCancelDescription?.x = it + deltaX + downX = movedX + } } } }