From ff0ff6cedc455e45b69823b98e1ad3d4a661a0d7 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 30 May 2022 18:21:54 +0200 Subject: [PATCH] Fix some crashes --- .../android/helper/SpannableHelper.java | 33 +++++++++++-------- .../android/ui/drawer/ComposeAdapter.java | 10 ++++-- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java b/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java index 2b5a92bd5..bb0f29911 100644 --- a/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java +++ b/app/src/main/java/app/fedilab/android/helper/SpannableHelper.java @@ -139,10 +139,11 @@ public class SpannableHelper { apngDrawable.setBounds(0, 0, (int) convertDpToPixel(20, context), (int) convertDpToPixel(20, context)); apngDrawable.setVisible(true, true); imageSpan = new ImageSpan(apngDrawable); - content.setSpan( - imageSpan, startPosition, - endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); - + if (endPosition <= content.length()) { + content.setSpan( + imageSpan, startPosition, + endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } } catch (Exception ignored) { } } else if (GifParser.isGif(file.getAbsolutePath())) { @@ -151,9 +152,11 @@ public class SpannableHelper { gifDrawable.setBounds(0, 0, (int) convertDpToPixel(20, context), (int) convertDpToPixel(20, context)); gifDrawable.setVisible(true, true); imageSpan = new ImageSpan(gifDrawable); - content.setSpan( - imageSpan, startPosition, - endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + if (endPosition <= content.length()) { + content.setSpan( + imageSpan, startPosition, + endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } } catch (Exception ignored) { } } else { @@ -162,9 +165,11 @@ public class SpannableHelper { drawable.setBounds(0, 0, (int) convertDpToPixel(20, context), (int) convertDpToPixel(20, context)); drawable.setVisible(true, true); imageSpan = new ImageSpan(drawable); - content.setSpan( - imageSpan, startPosition, - endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + if (endPosition <= content.length()) { + content.setSpan( + imageSpan, startPosition, + endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } } catch (Exception ignored) { } } @@ -682,9 +687,11 @@ public class SpannableHelper { drawable.setBounds(0, 0, (int) convertDpToPixel(20, context), (int) convertDpToPixel(20, context)); drawable.setVisible(true, true); imageSpan = new ImageSpan(drawable); - content.setSpan( - imageSpan, startPosition, - endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + if (endPosition <= content.length()) { + content.setSpan( + imageSpan, startPosition, + endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } } catch (Exception ignored) { } } diff --git a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java index 456a57b4b..3c1cfc2dc 100644 --- a/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java +++ b/app/src/main/java/app/fedilab/android/ui/drawer/ComposeAdapter.java @@ -656,9 +656,15 @@ public class ComposeAdapter extends RecyclerView.Adapter instanceInfo.configuration.statusesConf.max_characters + 1) { - holder.binding.content.setText(s.delete(instanceInfo.configuration.statusesConf.max_characters - holder.binding.contentSpoiler.getText().length(), (currentLength - holder.binding.contentSpoiler.getText().length()))); + int from = instanceInfo.configuration.statusesConf.max_characters - holder.binding.contentSpoiler.getText().length(); + int to = (currentLength - holder.binding.contentSpoiler.getText().length()); + if (to <= s.length()) { + holder.binding.content.setText(s.delete(from, to)); + } } else if (currentLength > instanceInfo.configuration.statusesConf.max_characters) { - holder.binding.content.setText(s.delete(cPosition, cPosition + 1)); + if (cPosition + 1 <= s.length()) { + holder.binding.content.setText(s.delete(cPosition, cPosition + 1)); + } } statusList.get(holder.getAdapterPosition()).text = s.toString(); if (s.toString().trim().length() < 2) {