Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 273a0eab authored by Ahaan Ugale's avatar Ahaan Ugale
Browse files

Fix OOB crash in ContentCapture for translated views

When a view is partially visible on the screen, ContentCapture reports
only the visible portion (+ a few additional lines). The offsets
calculated for this can be out of bounds if the view's displayed text
is longer from the original text.

Fix: 196414491
Test: manual - translate app to lang with more characters and trigger
 a relayout (by scrolling for an app with ListView)
Test: atest CtsContentCaptureServiceTestCases
Change-Id: Iae98133c48cc67a0b00f1b0ab8b93e5adb293423
parent 23ee1b87
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -11857,6 +11857,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                if (text != null) {
                    if (expandedTopChar > 0 || expandedBottomChar < text.length()) {
                        // Cap the offsets to avoid an OOB exception. That can happen if the
                        // displayed/layout text, on which these offsets are calculated, is longer
                        // than the original text (such as when the view is translated by the
                        // platform intelligence).
                        // TODO(b/196433694): Figure out how to better handle the offset
                        // calculations for this case (so we don't unnecessarily cutoff the original
                        // text, for example).
                        expandedTopChar = Math.min(expandedTopChar, text.length());
                        expandedBottomChar = Math.min(expandedBottomChar, text.length());
                        text = text.subSequence(expandedTopChar, expandedBottomChar);
                    }