Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

View hierarchy with filtered entity selects crashes debug builds #6397

Open
seadowg opened this issue Sep 5, 2024 · 0 comments
Open

View hierarchy with filtered entity selects crashes debug builds #6397

seadowg opened this issue Sep 5, 2024 · 0 comments
Milestone

Comments

@seadowg
Copy link
Member

seadowg commented Sep 5, 2024

ODK Collect version

master (365128c) when using a debug build

Problem description

There's a StrictMode violation when viewing the hierarchy if there's a filtered entity select on screen (as the hierarchy loads select choices on the UI thread).

Steps to reproduce the problem

  1. Add a form with filtered selects that uses an entity instance
  2. Open the form and navigate to the hierarchy with that question

Expected behavior

The app shouldn't crash!

We'll probably want to add specific StrictMode calls to DatabaseEntitiesRepository (like we do with DatabaseInstancesRepository) to fix this as the real™️ fix of reworking the hierarchy is probably a focus for another release.

Other information

Stacktrace:

java.lang.RuntimeException: StrictMode ThreadPolicy violation
     	at android.os.StrictMode$AndroidBlockGuardPolicy.onThreadPolicyViolation(StrictMode.java:1876)
     	at android.os.StrictMode$AndroidBlockGuardPolicy.handleViolationWithTimingAttempt(StrictMode.java:1733)
     	at android.os.StrictMode$AndroidBlockGuardPolicy.startHandlingViolationException(StrictMode.java:1704)
     	at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1626)
     	at android.os.StrictMode.noteSlowCall(StrictMode.java:2694)
     	at org.odk.collect.db.sqlite.DatabaseConnection.getReadableDatabase(DatabaseConnection.kt:36)
     	at org.odk.collect.android.database.entities.DatabaseEntitiesRepository.listExists(DatabaseEntitiesRepository.kt:317)
     	at org.odk.collect.android.database.entities.DatabaseEntitiesRepository.getAllByProperty(DatabaseEntitiesRepository.kt:224)
     	at org.odk.collect.entities.javarosa.intance.LocalEntitiesInstanceAdapter.queryEq(LocalEntitiesInstanceAdapter.kt:57)
     	at org.odk.collect.entities.javarosa.filter.LocalEntitiesFilterStrategy.filter(LocalEntitiesFilterStrategy.kt:46)
     	at org.javarosa.core.model.condition.EvaluationContext.filterWithPredicate(EvaluationContext.java:382)
     	at org.javarosa.core.model.condition.EvaluationContext.filterWithPredicate(EvaluationContext.java:377)
     	at org.javarosa.core.model.condition.EvaluationContext.expandReferenceAccumulator(EvaluationContext.java:343)
     	at org.javarosa.core.model.condition.EvaluationContext.expandReference(EvaluationContext.java:250)
     	at org.javarosa.core.model.condition.EvaluationContext.expandReference(EvaluationContext.java:219)
     	at org.javarosa.xpath.expr.XPathPathExprEval.eval(XPathPathExprEval.java:34)
     	at org.javarosa.xpath.expr.XPathPathExpr.eval(XPathPathExpr.java:213)
     	at org.javarosa.xpath.XPathConditional.evalNodeset(XPathConditional.java:94)
     	at org.javarosa.core.model.ItemsetBinding.getChoices(ItemsetBinding.java:125)
     	at org.javarosa.form.api.FormEntryPrompt.getSelectChoices(FormEntryPrompt.java:222)
     	at org.javarosa.form.api.FormEntryPrompt.getAnswerValue(FormEntryPrompt.java:98)
     	at org.javarosa.form.api.FormEntryPrompt.getAnswerText(FormEntryPrompt.java:154)
     	at org.odk.collect.android.formhierarchy.QuestionAnswerProcessor.getQuestionAnswer(QuestionAnswerProcessor.kt:28)
     	at org.odk.collect.android.formhierarchy.FormHierarchyActivity.refreshView(FormHierarchyActivity.java:672)
     	at org.odk.collect.android.formhierarchy.FormHierarchyActivity.refreshView(FormHierarchyActivity.java:591)
     	at org.odk.collect.android.formhierarchy.FormHierarchyActivity.onCreate(FormHierarchyActivity.java:278)
     	at android.app.Activity.performCreate(Activity.java:8054)
     	at android.app.Activity.performCreate(Activity.java:8034)
     	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1341)
     	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3688)
     	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3864)
     	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
     	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
     	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
     	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253)
     	at android.os.Handler.dispatchMessage(Handler.java:106)
     	at android.os.Looper.loopOnce(Looper.java:201)
     	at android.os.Looper.loop(Looper.java:288)
     	at android.app.ActivityThread.main(ActivityThread.java:7870)
     	at java.lang.reflect.Method.invoke(Native Method)
     	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
     	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
     Caused by: android.os.strictmode.CustomViolation: Accessing readable DB
     	at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1626) 
     	at android.os.StrictMode.noteSlowCall(StrictMode.java:2694) 
     	at org.odk.collect.db.sqlite.DatabaseConnection.getReadableDatabase(DatabaseConnection.kt:36) 
     	at org.odk.collect.android.database.entities.DatabaseEntitiesRepository.listExists(DatabaseEntitiesRepository.kt:317) 
     	at org.odk.collect.android.database.entities.DatabaseEntitiesRepository.getAllByProperty(DatabaseEntitiesRepository.kt:224) 
     	at org.odk.collect.entities.javarosa.intance.LocalEntitiesInstanceAdapter.queryEq(LocalEntitiesInstanceAdapter.kt:57) 
     	at org.odk.collect.entities.javarosa.filter.LocalEntitiesFilterStrategy.filter(LocalEntitiesFilterStrategy.kt:46) 
     	at org.javarosa.core.model.condition.EvaluationContext.filterWithPredicate(EvaluationContext.java:382) 
     	at org.javarosa.core.model.condition.EvaluationContext.filterWithPredicate(EvaluationContext.java:377) 
     	at org.javarosa.core.model.condition.EvaluationContext.expandReferenceAccumulator(EvaluationContext.java:343) 
     	at org.javarosa.core.model.condition.EvaluationContext.expandReference(EvaluationContext.java:250) 
     	at org.javarosa.core.model.condition.EvaluationContext.expandReference(EvaluationContext.java:219) 
     	at org.javarosa.xpath.expr.XPathPathExprEval.eval(XPathPathExprEval.java:34) 
     	at org.javarosa.xpath.expr.XPathPathExpr.eval(XPathPathExpr.java:213) 
     	at org.javarosa.xpath.XPathConditional.evalNodeset(XPathConditional.java:94) 
     	at org.javarosa.core.model.ItemsetBinding.getChoices(ItemsetBinding.java:125) 
     	at org.javarosa.form.api.FormEntryPrompt.getSelectChoices(FormEntryPrompt.java:222) 
     	at org.javarosa.form.api.FormEntryPrompt.getAnswerValue(FormEntryPrompt.java:98) 
     	at org.javarosa.form.api.FormEntryPrompt.getAnswerText(FormEntryPrompt.java:154) 
     	at org.odk.collect.android.formhierarchy.QuestionAnswerProcessor.getQuestionAnswer(QuestionAnswerProcessor.kt:28) 
     	at org.odk.collect.android.formhierarchy.FormHierarchyActivity.refreshView(FormHierarchyActivity.java:672) 
     	at org.odk.collect.android.formhierarchy.FormHierarchyActivity.refreshView(FormHierarchyActivity.java:591) 
     	at org.odk.collect.android.formhierarchy.FormHierarchyActivity.onCreate(FormHierarchyActivity.java:278) 
     	at android.app.Activity.performCreate(Activity.java:8054) 
     	at android.app.Activity.performCreate(Activity.java:8034) 
     	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1341) 
     	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3688) 
     	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3864) 
     	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 
     	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
     	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
     	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253) 
     	at android.os.Handler.dispatchMessage(Handler.java:106) 
     	at android.os.Looper.loopOnce(Looper.java:201) 
     	at android.os.Looper.loop(Looper.java:288) 
     	at android.app.ActivityThread.main(ActivityThread.java:7870) 
     	at java.lang.reflect.Method.invoke(Native Method) 
     	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
     	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
@seadowg seadowg added this to the v2024.3 milestone Sep 5, 2024
@lognaturel lognaturel changed the title View hierarchy with filtered entity selects crashes the app View hierarchy with filtered entity selects crashes debug builds Sep 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: ready
Development

No branches or pull requests

1 participant