Open seanlip opened 3 months ago
This is caused by ImeOptions. We don't have many screens that implement that, but the focus should be on the ones that set IME_ACTION_NEXT(pin creation) because they likely try to automove to next edittext, while the softkeyboard is still showing.
I'm having some trouble reproducing this bug, can anyone assist? This is what I've investigated so far:
My understanding of how the bug can be reproduced is as follows:
Given a TextInputEditText with imeOptions set to actionNext Given another view below it that is not focusable, not visible, or disabled When a user focuses on TextInputEditText, bringing up the soft keyboard, and presses the '|->' action button in the bottom right corner of the keyboard Then the exception is thrown since the system attempts to jump to the other view which cannot be focused
Based on a code search query android:imeOptions="actionNext", I've identified 4 potential activities where this bug can take place:
I didn't find anything suspect in the profile reset PIN and admin PIN activities, and they seem configured properly (each screen has two TextInputEditTexts; the one on top of the other has the "actionNext" attribute, and the one directly below it has "actionDone"). There also doesn't seem to be a way to make a view unfocusable on these activities.
I suspected Add profile activity would be the culprit because there's a checkbox that sets the visibility of two TextInputEditText fields, but I wasn't able to reproduce the error with these steps (on Android 14 emulator):
The enter PIN password activity seems to be misconfigured as the screen contains a single TextInputEditText view, but the imeOption is still set to "actionNext." However, there doesn't seem to be any side effect of this either, and I can't reproduce the bug here.
Any next steps from here? I'm new to Android development, so I'm not sure what else I should be looking for to get a reproduction.
@elin4046, thanks for looking into this. Some reasons why a view may not be focussable are: Non-focusable Views: The view you are trying to focus on is not focusable. This can happen if the view’s focusable attribute is set to false or if the view is not focusable in touch mode.
Given that you have already investigated the first 3, and I tried looking a bit into Focus Order Issues, it maybe one of the other two. But those are situational and would be really difficult to reproduce, e.g if a device is low on storage or memory, then the app might slow down/freeze.
This indicates that this issue would rarely occur, and we can put off trying to fix it for now. If however, we receive more crash reports, then we can investigate further.
Would you like to select another issue, or would you like me to assign you something else?
Hi @adhiamboperes, thanks for the info, makes sense to depriortize this effort then. You can assign this issue to me, https://github.com/oppia/oppia-android/issues/4312, and I'll take a stab at it
Hi @adhiamboperes, I have tried but I wasn't able to reproduce the error.
In a ConstraintLayout, the arrangement and constraints of views can sometimes result in unexpected focus behavior. By using android:nextFocusForward="@+id/next_view_id", pressing the "Next" button on the soft keyboard moves the focus to the view specified by @+id/next_view_id.
However, in the pin_password_activity, there is no need to use the actionNext because there are no other views to focus on next. Instead, we can use actionDone.
If this solution makes sense, you could assign it to me. Thank you!
Describe the bug
We are seeing this crash in Crashlytics after the release of 0.13-beta.
This issue has 1 crash event affecting 1 user in the span of 1 day.
Full stacktrace
``` Fatal Exception: java.lang.IllegalStateException: focus search returned a view that wasn't able to take focus! at android.widget.TextView.onKeyUp(TextView.java:10199) at android.view.KeyEvent.dispatch(KeyEvent.java:3522) at android.view.View.dispatchKeyEvent(View.java:16061) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1988) at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:764) at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1957) at android.app.Activity.dispatchKeyEvent(Activity.java:4474) at androidx.core.app.ComponentActivity.a(SourceFile:122) at B.m.a(SourceFile:84) at androidx.core.app.ComponentActivity.dispatchKeyEvent(SourceFile:140) at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(SourceFile:569) at f.n.dispatchKeyEvent(SourceFile:59) at androidx.appcompat.app.N.dispatchKeyEvent(SourceFile:3054) at f.n.dispatchKeyEvent(SourceFile:59) at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:678) at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:8377) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:8237) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7570) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7627) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7593) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7796) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7601) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7853) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7574) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7627) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7593) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7601) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7574) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:11103) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10985) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10941) at android.view.ViewRootImpl$ViewRootHandler.handleMessageImpl(ViewRootImpl.java:7185) at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:7050) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:230) at android.os.Looper.loop(Looper.java:319) at android.app.ActivityThread.main(ActivityThread.java:8893) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103) AsyncTask #29: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.SynchronousQueue$TransferStack$SNode.block(SynchronousQueue.java:288) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:397) at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:886) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) Queue: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at dk.m.a(SourceFile:1197) at dk.m.take(SourceFile:3065) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) Queue: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at dk.m.a(SourceFile:1197) at dk.m.take(SourceFile:3065) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) Queue: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at dk.m.a(SourceFile:1197) at dk.m.take(SourceFile:3065) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) awaitEvenIfOnMainThread task continuation executor1: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at cf.ao.a(SourceFile:60) at cf.d.run(SourceFile:27) at java.lang.Thread.run(Thread.java:1012) GoogleApiHandler: at android.os.MessageQueue.nativePollOnce(MessageQueue.java) at android.os.MessageQueue.next(MessageQueue.java:335) at android.os.Looper.loopOnce(Looper.java:187) at android.os.Looper.loop(Looper.java:319) at android.os.HandlerThread.run(HandlerThread.java:67) pool-10-thread-1: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) ReferenceQueueDaemon: at java.lang.Object.wait(Object.java) at java.lang.Object.wait(Object.java:386) at java.lang.Object.wait(Object.java:524) at java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:239) at java.lang.Daemons$Daemon.run(Daemons.java:145) at java.lang.Thread.run(Thread.java:1012) glide-active-resources: at java.lang.Object.wait(Object.java) at java.lang.Object.wait(Object.java:386) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:210) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:231) at aj.a.a(SourceFile:128) at aj.d.run(SourceFile:61) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at aj.c.run(SourceFile:43) at java.lang.Thread.run(Thread.java:1012) InteractionJankMonitor-Worker: at android.os.MessageQueue.nativePollOnce(MessageQueue.java) at android.os.MessageQueue.next(MessageQueue.java:335) at android.os.Looper.loopOnce(Looper.java:187) at android.os.Looper.loop(Looper.java:319) at android.os.HandlerThread.run(HandlerThread.java:67) Queue: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at dk.m.a(SourceFile:1197) at dk.m.take(SourceFile:3065) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) FinalizerWatchdogDaemon: at java.lang.Object.wait(Object.java) at java.lang.Object.wait(Object.java:386) at java.lang.Object.wait(Object.java:524) at java.lang.Daemons$FinalizerWatchdogDaemon.sleepUntilNeeded(Daemons.java:428) at java.lang.Daemons$FinalizerWatchdogDaemon.runInternal(Daemons.java:408) at java.lang.Daemons$Daemon.run(Daemons.java:145) at java.lang.Thread.run(Thread.java:1012) Queue: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at dk.m.a(SourceFile:1197) at dk.m.take(SourceFile:3065) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) Queue: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at dk.m.a(SourceFile:1197) at dk.m.take(SourceFile:3065) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) Crashlytics Exception Handler1: at dalvik.system.VMStack.getThreadStackTrace(VMStack.java) at java.lang.Thread.getStackTrace(Thread.java:1841) at java.lang.Thread.getAllStackTraces(Thread.java:1909) at cf.ae.a(SourceFile:1260) at cf.av.a(SourceFile:218) at cf.av.a(SourceFile:122) at cf.H.call(SourceFile:1395) at cf.m.a(SourceFile:106) at bt.r.run(SourceFile:1) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at cf.ao.a(SourceFile:60) at cf.d.run(SourceFile:27) at java.lang.Thread.run(Thread.java:1012) FinalizerDaemon: at java.lang.Object.wait(Object.java) at java.lang.Object.wait(Object.java:386) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:210) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:231) at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:309) at java.lang.Daemons$Daemon.run(Daemons.java:145) at java.lang.Thread.run(Thread.java:1012) Queue: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at dk.m.a(SourceFile:1197) at dk.m.take(SourceFile:3065) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) com.google.firebase.crashlytics.startup1: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at cf.ao.a(SourceFile:60) at cf.d.run(SourceFile:27) at java.lang.Thread.run(Thread.java:1012) kotlinx.coroutines.DefaultExecutor: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) at kotlinx.coroutines.ac.run(SourceFile:121) at java.lang.Thread.run(Thread.java:1012) ScionFrontendApi: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1672) at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:460) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) pool-15-thread-1: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) firebase-installations-executor-٥: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1672) at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:460) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) Measurement Worker: at java.lang.Object.wait(Object.java) at java.lang.Object.wait(Object.java:386) at m.ky.run(:com.google.android.gms.dynamite_measurementdynamite@242334036@24.23.34 (190300-0):71) pool-15-thread-3: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) glide-source-thread-0: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) at am.d.run(SourceFile:393) Answers Events Handler1: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1176) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:905) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at dj.v.a(SourceFile:75) at dj.k.run(SourceFile:30) at java.lang.Thread.run(Thread.java:1012) InsetsAnimations: at android.os.MessageQueue.nativePollOnce(MessageQueue.java) at android.os.MessageQueue.next(MessageQueue.java:335) at android.os.Looper.loopOnce(Looper.java:187) at android.os.Looper.loop(Looper.java:319) at android.os.HandlerThread.run(HandlerThread.java:67) glide-source-thread-2: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) at am.d.run(SourceFile:393) queued-work-looper-data: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) glide-source-thread-3: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) at am.d.run(SourceFile:393) pool-15-thread-2: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) Queue: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at dk.m.a(SourceFile:1197) at dk.m.take(SourceFile:3065) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) Crashlytics Exception Handler1: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at dj.v.a(SourceFile:75) at dj.k.run(SourceFile:30) at java.lang.Thread.run(Thread.java:1012) Okio Watchdog: at java.lang.Object.wait(Object.java) at java.lang.Object.wait(Object.java:386) at java.lang.Object.wait(Object.java:524) at com.android.okhttp.okio.AsyncTimeout.awaitTimeout(AsyncTimeout.java:313) at com.android.okhttp.okio.AsyncTimeout.access$000(AsyncTimeout.java:42) at com.android.okhttp.okio.AsyncTimeout$Watchdog.run(AsyncTimeout.java:288) Queue: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at dk.m.a(SourceFile:1197) at dk.m.take(SourceFile:3065) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) queued-work-looper: at android.os.MessageQueue.nativePollOnce(MessageQueue.java) at android.os.MessageQueue.next(MessageQueue.java:335) at android.os.Looper.loopOnce(Looper.java:187) at android.os.Looper.loop(Looper.java:319) at android.os.HandlerThread.run(HandlerThread.java:67) glide-source-thread-1: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) at am.d.run(SourceFile:393) SurfaceSyncGroupTimer: at android.os.MessageQueue.nativePollOnce(MessageQueue.java) at android.os.MessageQueue.next(MessageQueue.java:335) at android.os.Looper.loopOnce(Looper.java:187) at android.os.Looper.loop(Looper.java:319) at android.os.HandlerThread.run(HandlerThread.java:67) GmsDynamite: at java.lang.Object.wait(Object.java) at java.lang.Object.wait(Object.java:386) at java.lang.Object.wait(Object.java:524) at com.google.android.gms.dynamite.e.run(SourceFile:2) OkHttp ConnectionPool: at java.lang.Object.wait(Object.java) at com.android.okhttp.ConnectionPool$1.run(ConnectionPool.java:106) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) glide-disk-cache-thread-0: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.PriorityBlockingQueue.take(PriorityBlockingQueue.java:538) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) at am.d.run(SourceFile:393) pool-16-thread-1: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) pool-15-thread-4: at jdk.internal.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) at java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3466) at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3437) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1623) at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1071) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1131) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) at java.lang.Thread.run(Thread.java:1012) ```Steps To Reproduce
Not sure; this happened in production.
Expected Behavior
The crash should not happen.
Screenshots/Videos
No response
What device/emulator are you using?
Samsung Galaxy A13
Which Android version is your device/emulator running?
Android 14
Which version of the Oppia Android app are you using?
0.13-beta-dcde7b359e
Additional Context
No response