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

🔍 Searching leads to crash 🐞 💥 #1833

Closed
stefan-niedermann opened this issue Jun 27, 2023 · 9 comments · Fixed by #1856
Closed

🔍 Searching leads to crash 🐞 💥 #1833

stefan-niedermann opened this issue Jun 27, 2023 · 9 comments · Fixed by #1856
Labels

Comments

@stefan-niedermann
Copy link
Member

Please use GitHub reactions 👍 to show that you are affected by the same issue. Please don't comment if you have no relevant information to add!

Describe the bug
Using the global search bar crashes the application

To Reproduce
Steps to reproduce the behavior:

  1. Open the Notes App
  2. Click on the top search bar (not the in-note-search)
  3. See error

Smartphone (please complete the following information):

  • Nextcloud Notes-Version (android app): 4.1.0 RC1
  • F-Droid or Play Store: F-Droid
  • Android-Version: LineageOS 13
  • Device: Alioth (Poco F3)

Additional Notes

  • Theme: System default
  • View mode: List (not card)

Stacktrace

App Version: 4.1.0 RC1
App Version Code: 40010051
App Flavor: fdroid

Files App Version Code: 30250090 (PROD)

---

OS Version: 4.19.282-lineageos+(0484c57c1b)
OS API Level: 33
Device: alioth
Manufacturer: Xiaomi
Model (and Product): M2012K11AG (lineage_alioth)

---

java.lang.IndexOutOfBoundsException: setSpan (22 ... 10) has end before start
 at android.text.SpannableStringInternal.checkRange(SpannableStringInternal.java:485)
 at android.text.SpannableStringInternal.setSpan(SpannableStringInternal.java:199)
 at android.text.SpannableStringInternal.setSpan(SpannableStringInternal.java:186)
 at android.text.SpannableString.setSpan(SpannableString.java:60)
 at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.spanText(AndroidViewThemeUtils.kt:584)
 at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.highlightText(AndroidViewThemeUtils.kt:562)
 at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.access$highlightText(AndroidViewThemeUtils.kt:75)
 at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils$highlightText$1.invoke(AndroidViewThemeUtils.kt:548)
 at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils$highlightText$1.invoke(AndroidViewThemeUtils.kt:547)
 at com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase.withScheme(ViewThemeUtilsBase.kt:49)
 at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.highlightText(AndroidViewThemeUtils.kt:547)
 at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.highlightText$default(AndroidViewThemeUtils.kt:541)
 at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.highlightText(Unknown Source:23)
 at it.niedermann.owncloud.notes.main.items.NoteViewHolder.bindSearchableContent(NoteViewHolder.java:98)
 at it.niedermann.owncloud.notes.main.items.list.NoteViewHolderWithExcerpt.bind(NoteViewHolderWithExcerpt.java:40)
 at it.niedermann.owncloud.notes.main.items.ItemAdapter.onBindViewHolder(ItemAdapter.java:154)
 at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7678)
 at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7761)
 at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6582)
 at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6848)
 at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6688)
 at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6684)
 at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2362)
 at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1662)
 at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1622)
 at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:687)
 at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4604)
 at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3981)
 at android.view.View.measure(View.java:26380)
 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
 at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
 at android.view.View.measure(View.java:26380)
 at androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onMeasure(SwipeRefreshLayout.java:705)
 at android.view.View.measure(View.java:26380)
 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
 at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1608)
 at android.widget.LinearLayout.measureVertical(LinearLayout.java:878)
 at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
 at android.view.View.measure(View.java:26380)
 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
 at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:760)
 at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:833)
 at android.view.View.measure(View.java:26380)
 at androidx.drawerlayout.widget.DrawerLayout.onMeasure(DrawerLayout.java:1156)
 at android.view.View.measure(View.java:26380)
 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
 at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
 at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145)
 at android.view.View.measure(View.java:26380)
 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
 at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
 at android.view.View.measure(View.java:26380)
 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
 at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
 at android.view.View.measure(View.java:26380)
 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
 at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1608)
 at android.widget.LinearLayout.measureVertical(LinearLayout.java:878)
 at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
 at android.view.View.measure(View.java:26380)
 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
 at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
 at com.android.internal.policy.DecorView.onMeasure(DecorView.java:760)
 at android.view.View.measure(View.java:26380)
 at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:4021)
 at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2637)
 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2943)
 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2350)
 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9194)
 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1231)
 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239)
 at android.view.Choreographer.doCallbacks(Choreographer.java:899)
 at android.view.Choreographer.doFrame(Choreographer.java:832)
 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214)
 at android.os.Handler.handleCallback(Handler.java:942)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loopOnce(Looper.java:201)
 at android.os.Looper.loop(Looper.java:288)
 at android.app.ActivityThread.main(ActivityThread.java:7884)
 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:936)
@stefan-niedermann
Copy link
Member Author

Crash happens when the content contains the search term directly next to each other, for example:

Content: aBBcdef
Search term: B

@MattRC7

This comment was marked as duplicate.

@jimbolaya

This comment was marked as duplicate.

@87113

This comment was marked as duplicate.

@rugk

This comment was marked as duplicate.

@rugk

This comment was marked as duplicate.

@stefan-niedermann
Copy link
Member Author

Fix is on its way, special thanks to @Unpublished !

@rugk
Copy link

rugk commented Aug 9, 2023

Still got this:

App Version: 4.1.0 RC1
App Version Code: 40010051
App Flavor: fdroid

Files App Version Code: 30250090 (PROD)

---

OS Version: 4.19.288-perf(23411030)
OS API Level: 33
Device: FP4
Manufacturer: Fairphone
Model (and Product): FP4 (FP4eea)

---

java.lang.IndexOutOfBoundsException: setSpan (51 ... 7) has end before start
	at android.text.SpannableStringInternal.checkRange(SpannableStringInternal.java:485)
	at android.text.SpannableStringInternal.setSpan(SpannableStringInternal.java:199)
	at android.text.SpannableStringInternal.setSpan(SpannableStringInternal.java:186)
	at android.text.SpannableString.setSpan(SpannableString.java:60)
	at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.spanText(AndroidViewThemeUtils.kt:584)
	at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.highlightText(AndroidViewThemeUtils.kt:562)
	at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.access$highlightText(AndroidViewThemeUtils.kt:75)
	at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils$highlightText$1.invoke(AndroidViewThemeUtils.kt:548)
	at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils$highlightText$1.invoke(AndroidViewThemeUtils.kt:547)
	at com.nextcloud.android.common.ui.theme.ViewThemeUtilsBase.withScheme(ViewThemeUtilsBase.kt:49)
	at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.highlightText(AndroidViewThemeUtils.kt:547)
	at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.highlightText$default(AndroidViewThemeUtils.kt:541)
	at com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils.highlightText(Unknown Source:23)
	at it.niedermann.owncloud.notes.main.items.NoteViewHolder.bindSearchableContent(NoteViewHolder.java:98)
	at it.niedermann.owncloud.notes.main.items.list.NoteViewHolderWithExcerpt.bind(NoteViewHolderWithExcerpt.java:41)
	at it.niedermann.owncloud.notes.main.items.ItemAdapter.onBindViewHolder(ItemAdapter.java:154)
	at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7678)
	at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7761)
	at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6582)
	at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6848)
	at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6688)
	at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6684)
	at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2362)
	at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1662)
	at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1622)
	at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:687)
	at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4604)
	at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3981)
	at android.view.View.measure(View.java:26496)
	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
	at android.view.View.measure(View.java:26496)
	at androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onMeasure(SwipeRefreshLayout.java:705)
	at android.view.View.measure(View.java:26496)
	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
	at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1608)
	at android.widget.LinearLayout.measureVertical(LinearLayout.java:878)
	at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
	at android.view.View.measure(View.java:26496)
	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
	at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:760)
	at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:833)
	at android.view.View.measure(View.java:26496)
	at androidx.drawerlayout.widget.DrawerLayout.onMeasure(DrawerLayout.java:1156)
	at android.view.View.measure(View.java:26496)
	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
	at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:145)
	at android.view.View.measure(View.java:26496)
	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
	at android.view.View.measure(View.java:26496)
	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
	at android.view.View.measure(View.java:26496)
	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
	at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1608)
	at android.widget.LinearLayout.measureVertical(LinearLayout.java:878)
	at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
	at android.view.View.measure(View.java:26496)
	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6981)
	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
	at com.android.internal.policy.DecorView.onMeasure(DecorView.java:760)
	at android.view.View.measure(View.java:26496)
	at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:4042)
	at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2658)
	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2964)
	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2371)
	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9297)
	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1231)
	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239)
	at android.view.Choreographer.doCallbacks(Choreographer.java:899)
	at android.view.Choreographer.doFrame(Choreographer.java:832)
	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214)
	at android.os.Handler.handleCallback(Handler.java:942)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7918)
	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:936)

@stefan-niedermann
Copy link
Member Author

The issue has been fixed in the code. You won't get the error after the next version has been released (#1832).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment