Commit Graph

462 Commits

Author SHA1 Message Date
Gilles Debunne
eca5b7385a Basic renaming refactoring in Layout
Change-Id: I79f5444a097f1e2b2a81ececf1f0a14b6d7d5179
2012-04-25 18:48:42 -07:00
Gilles Debunne
97c03cac4d Merge "Do not notify text watchers when replace is a no-op" 2012-04-24 18:26:43 -07:00
Gilles Debunne
9177947741 Merge "Fixed SSB. Correct broadcast of removed spans' positions" 2012-04-23 18:17:30 -07:00
Gilles Debunne
157aafcbee TextView's sub display lists have tighten bounds
An editable TextView caches text rendering inside an adaptive
number of sub display lists. The bounds of these use to be those
of the entire View.

This CL creates block display lists with tighten bounds, so that
(a still-to-be-implemented) quick rejection can occur.

Also cleaned-up the contradictory translations that were used to
handle the TextView's internal scroll and removed the invalidation
of display lists in that case.

TODO: When internal scroll sets a tighter clipping rect, quick
reject the creation and display of the clipped display lists.

Also renamed blockEnds to a more explicit blockEndLines.

Change-Id: I7d79bea78d06d19b6935aef75ff7aa7df2594050
2012-04-19 18:06:46 -07:00
Gilles Debunne
d60da058c6 Do not notify text watchers when replace is a no-op
Bug 6344997

The early exit we used to do when both replaced and replacement
strings were empty has been added back.

Only this time it correctly also makes sure no spans from the
replacement string would get added with a 0-length.

Change-Id: Ifc38a7e3619c57aa7647c0a8e63d7627d86f1036
2012-04-18 15:12:22 -07:00
Gilles Debunne
9098528644 Fixed SSB. Correct broadcast of removed spans' positions
Found while tracking bug 6326750

A bug in the SpannableStringBuilderSpanTest JUnit CTS test was hiding
this problem.

Also removed the instanceof test on SpanWatcher. All spans, including
those implementing this interface should be copied.

Change-Id: I5233818fb0c08ab56477720db932a5be453e88ee
2012-04-18 13:39:07 -07:00
Dianne Hackborn
acb69bb909 Add direct support for HTML formatted text in ClipData etc.
When using the clipboard, ACTION_SEND, etc., you can now supply
HTML formatted text as one of the representations.  This is exposed
as a set of methods on ClipData for building items with HTML
formatted text, and retrieving and coercing to HTML (and styled)
text.  In addtion, there is a new EXTRA_HTML_TEXT for interoperating
with the old ACTION_SEND protocol.

Change-Id: I8846520a480c8a5f829ec1e693aeebd425ac170d
2012-04-13 15:36:06 -07:00
Gilles Debunne
174c44c6cf SpannableStringBuilder correctly broadcast span changes during replace
Bug 6331765

A call to replace was previously not sending any span modification to the
attached span watchers.

Change-Id: Ic9e4a8ac0210e422961adfb18e205d80531889fe
2012-04-12 14:50:31 -07:00
Gilles Debunne
34ec2b54da Removed exception from SpannableStringBuilder
Bug 6312196

Change-Id: I9cece36b40d8948e0e85bd433954818991009ad5
2012-04-10 13:31:11 -07:00
Gilles Debunne
0249b43f6c Faster and simpler replace in SSB, take two
This is a new version of CL 179343 which had to be reverted.

This problem of the previous CL is that the ComposingSpan that
was part of the replacement text was correctly added during the
replace but was immediately removed because it had a zero-length
size.

Swapping the add and remove blocks solves the problem.

The new non-zero length enforcement also revealed a bug in the
spell checker where we were creating useless range spans.

Change-Id: I59cebd4708af3becc7ab625ae41bc36837f1a1cf
2012-04-09 16:08:37 -07:00
Gilles Debunne
425c726ae0 Merge "More minor refactoring in SpannableStringBuilder" 2012-04-09 13:27:11 -07:00
Gilles Debunne
bc6862300f Revert "Faster and simpler replace in SSB"
Bug 6300658

This change reveals a weird race condition where sometimes the
text is entered twice. Adding a debugger slows down everything,
and the problem is no longer reproducable. Reverting for now.

This reverts commit ebd9a23817.
2012-04-06 14:37:46 -07:00
Gilles Debunne
7c5f670bd6 More minor refactoring in SpannableStringBuilder
No change in the functionnalities.

Change-Id: I009acc75b4f70e65a810cdc67505bc0b13e627b2
2012-04-05 17:17:53 -07:00
Gilles Debunne
ebd9a23817 Faster and simpler replace in SSB
The original method was adding a suspicious space that was eventually
removed with a series of 3 calls to change.

This should not be necessary. I have tested this with various gap
positions and lengths, for all replace cases I could think of.

The test can not be added to the CTS as it would need to expose the
internal resizeFor and moveGapTo methods.

Change-Id: I194457fbcfd758fa69a7f380665cfd5ae4d3f1d4
2012-04-04 15:52:38 -07:00
Gilles Debunne
b51036f72a Refactoring SpannableStringBuilder
Made TextWatcher notification process clearer by moving it to
a single place, with methods renamed.

Also reverts CL 177544: we cannot broadcast span chages just yet,
the layout has not been reflown. A future CL will change this
behavior to make sure span changes are correctly broadcasted.

Change-Id: I9ef88dce91dff5f5f45e2845d5b3f18f1c853de3
2012-04-02 11:33:22 -07:00
Gilles Debunne
fc1190b8f1 Spans added during a text change are broadcasted
More consistent with the SpanWatcher design.

Change-Id: I3a1e4d92fb422f4cc689dabcdef1473d93fef5ad
2012-03-30 13:43:37 -07:00
Gilles Debunne
1e130b2abc Added a unit test for DynamicLayout#updateBlocks
Change-Id: I1824ebeae2bbb5c60a65de36fe1696bf003347c9
2012-03-26 16:39:25 -07:00
Romain Guy
cde6adf45c Fix the build
Change-Id: I6de62c7bfaecd85810178f58707157466291eca3
2012-03-15 17:04:47 -07:00
Gilles Debunne
33b7de85b6 Multiple display lists for editable text
Bug 5763685

Long text in a ScrollView (not when the View's internal
scroll is used) is cached as a unique display list when hardware
rendering is on.

As a result, each time the text is edited, the entire display
list has to be updated, which takes a significant amount of
time (up to 500ms for a few thousand lines), proportional to the
size of the text.

This CL splits the text into multiple display lists as the
text is edited. The boundaries of the display list are aligned
with paragraphs.

There is still an issue when the number of lines changes: onLayout()
is called which invalidates all the display list. When the source
of that change is line wrapping and not a change in the view's
dimensions, we should be able to simply shift down the previous DL
instead of re-creating everything.

Change-Id: I7de49a1e5637cdfc9ef06b64b1ec4b61d9ea2415
2012-03-15 11:32:50 -07:00
Gilles Debunne
60e3b3fa60 Use SpanSet to accelerate Layout.drawBackground
The main performance improvement should come from the fact
that we entirely skip the loop (which calls getLineStart, getLineTop
and getLineDescent on each line) in the frequent case where there
are no LineBackgroundSpans.

Change-Id: Ie2d3168521e88d43f1a4236da2b3e8447606df1e
2012-03-13 15:58:33 -07:00
Gilles Debunne
4ffb879f48 New SpanSet class extracted from TextLine.
Change-Id: I424dbd7ff0693fd465b6c83ebabba221b2eca6fe
2012-03-13 14:58:37 -07:00
Ken Wakasa
f76a50ce8f Fix obvious typos under frameworks/base/core
Change-Id: Ia5fc3db1bb51824e7523885553be926bcc42d736
2012-03-09 22:48:43 +09:00
Gilles Debunne
957c800ac0 Merge "Ellipsize avoids spaces and starts right after text" 2012-03-06 13:57:16 -08:00
Gilles Debunne
6c488de023 EditText caches only text in its internal display list.
Decorelate background and text in layout display. This allows
to only store the text in the editable TextView's display list.

Selection and cursor changes no longer need to invalidate the
display list, leading to faster rendering.

Change-Id: I3af3a98846e1bfe2d9ec6c42590e71bf3704595e
2012-03-05 14:22:20 -08:00
Fabrice Di Meglio
81c4350a89 Merge "Fix bug #3389545 android:ellipsize="end" doesn't work without using android:singleLine="true" which is deprecated" 2012-02-29 18:45:54 -08:00
Fabrice Di Meglio
34a126e51a Fix bug #3389545 android:ellipsize="end" doesn't work without using android:singleLine="true" which is deprecated
- take care of single line case too

Change-Id: I73c3dcb96f22241b35d7cbaf43cd9bd46a4abcaa
2012-02-29 18:43:14 -08:00
Fabrice Di Meglio
c97f9c14a5 Merge "Fix bug #5217606 LocaleUtils constants TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE and TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE should be renamed" 2012-02-29 12:37:13 -08:00
Fabrice Di Meglio
cd4161b134 Fix bug #5371909 Hebrew & Arabic mails are sent as LTR intead of RTL
- make paragraphs aware of text direction

Change-Id: I0b0cf5a47c7da870dea836cb6150aa83e9de0e90
2012-02-29 11:15:07 -08:00
Fabrice Di Meglio
3fb824bae3 Fix bug #5217606 LocaleUtils constants TEXT_LAYOUT_DIRECTION_LTR_DO_NOT_USE and TEXT_LAYOUT_DIRECTION_RTL_DO_NOT_USE should be renamed
- replace them by the View constants

Change-Id: I7c2bf0213319247d3db369b6f7c36771fdf3e509
2012-02-28 18:08:11 -08:00
Gilles Debunne
c70e7a0b8a Ellipsize avoids spaces and starts right after text
Bug 5509226

Change ellipsize bounds to take spaces into account

The hardcoded ' ' character may be problematic with other langages.

Note that a different ellipsize logic also exists in StaticLayout.
Created 6062415 to track this.

Change-Id: I3406ec23a592f952bf3e0ca68f0838ee807baba0
2012-02-23 18:05:59 -08:00
Fabrice Di Meglio
d7c845c39a Merge "Make textDirection API public" 2012-02-14 14:45:51 -08:00
Gilles Debunne
07ba2a2131 Minor typo fixes
Change-Id: I8cd9500cc50b7a484bf387e6a6a0c9b4ffb175a4
2012-02-13 18:13:44 -08:00
Fabrice Di Meglio
e7beae3f4c Make textDirection API public
Change-Id: I2d5a0e3a990b9a5b78a3bbc8df7f655702743e4b
2012-02-13 17:21:05 -08:00
Marc Blank
f4832da16a Use ' for apostrophe in HTML encoding
* We were using ' which is not correct

Change-Id: I4872da7d5e19f18ecd570dbcaac295020d66681c
2012-02-13 10:11:50 -08:00
Alon Albert
815af1ff59 Merge "Throw NPE if s is null" 2012-01-26 17:05:58 -08:00
Alon Albert
11afa8a466 Throw NPE if s is null
Bug: 5926510
Change-Id: I3d0a38d31695a8b103b3d153d90d83474f56990e
2012-01-26 14:25:19 -08:00
Gilles Debunne
6e0b22bea9 Modified algorithm to remove duplicated suggestions
Bug 5916225

Duplicates were removed when received from SpellChecker, in a way
that could move the top candidates lower in the list.

Moved that code to the part that creates the actual suggestion list,
to make it more generic. The order of the first SuggestionSpan is
guaranteed to be respected.

Also mentionned non null suggestions and fixed a problem in SuggestionSpan
constructor.

Change-Id: Iaa3b1b84ae512451e439e5c5e63448c2a19145b5
2012-01-25 15:07:50 -08:00
Gilles Debunne
ba3634f355 Fix for AOOB in MeasuredText
Bug 5707593

Change-Id: I3c21343b2938119d7ae9d7892733dc83a209c991
2012-01-23 16:36:35 -08:00
Gilles Debunne
004b02d626 Touch moves cursor in text refactored
Code was moved back from the movement method to the touch event code in TextView.

Change-Id: I7dc0d957554ddce08e810d20e0385f98802ef1a4
2012-01-19 14:18:17 -08:00
Gilles Debunne
78efa026c7 am 0d3a5e4c: am 67d54ac0: Merge "NPE in GMail / TextLine" into ics-mr1
* commit '0d3a5e4cbddc9a6a0a551698b5152c815842952a':
  NPE in GMail / TextLine
2011-12-13 13:42:07 -08:00
Gilles Debunne
fc997b4f78 NPE in GMail / TextLine
Bug 5753061

https://android-git.corp.google.com/g/#/c/154756/1 revealed an
other bug in SpanSet. The fitered (non empty) spans were added
in their original position instead of being indexed by count.

The nullation on recycle hence left null holes in the array.

Change-Id: If5c1435cee9a2cb88a608aa8e5f4f2f23382154c
2011-12-13 12:37:02 -08:00
Gilles Debunne
ba36428502 am 8e22ec9b: am a1277de3: Merge "Prevent a memory leak in TextLine." into ics-mr1
* commit '8e22ec9bc6c59d9e54a6b48f1133881be97af1a7':
  Prevent a memory leak in TextLine.
2011-12-12 17:49:31 -08:00
Gilles Debunne
c3fb7a11ad Prevent a memory leak in TextLine.
Bug 5740435

The new SpanSet cached objects should be recycled when the TextLine is
recycled to prevent a reference to their span, which may lead to the
entire activity.

Change-Id: I4469e418a228bd71eb8be1d43ed86de49baba165
2011-12-12 14:03:40 -08:00
Gilles Debunne
e495cc3fd9 am e912a16b: am 316ca505: Merge "Re-use SpanSets in TextLine" into ics-mr1
* commit 'e912a16ba2a6e913b47893bc99c9a846d7ce80a9':
  Re-use SpanSets in TextLine
2011-12-12 13:15:46 -08:00
Joe Malin
c789b60076 am 8e94d912: am 556e4ca5: am 0a9005ed: Merge "DOC CHANGE: Package text and Formatter javadoc" into ics-mr0
* commit '8e94d912c6e0fc3c6d5e992b6559a0efc20372be':
  DOC CHANGE: Package text and Formatter javadoc
2011-12-12 13:15:36 -08:00
Gilles Debunne
2afcfa4239 resolved conflicts for merge of 5371a165 to master
Change-Id: I61830ec96c277ebba9db3e40842597b9c98d53c7
2011-12-09 18:06:34 -08:00
Gilles Debunne
47a4b78eb7 am 9f4b70c7: am 89f2e8a0: Merge "Prevent NPE in SuggestionSpan" into ics-mr1
* commit '9f4b70c72508077f39a71bb17df265eb883c7a20':
  Prevent NPE in SuggestionSpan
2011-12-09 14:25:53 -08:00
Gilles Debunne
316ca5059e Merge "Re-use SpanSets in TextLine" into ics-mr1 2011-12-08 17:58:24 -08:00
Joe Malin
556e4ca541 am 0a9005ed: Merge "DOC CHANGE: Package text and Formatter javadoc" into ics-mr0
* commit '0a9005ed58d3a6173e8fffbd72933f7646c6fdba':
  DOC CHANGE: Package text and Formatter javadoc
2011-12-08 17:44:34 -08:00
Gilles Debunne
c1f4483080 Re-use SpanSets in TextLine
TextLine objects are already stored in a pool to limit allocation.

Associate SpanSet objects to each TextLine to further limit the
allocation of these and re-use their internal arrays (re-sized if needed).

Drastically reduces new objects allocation during rendering.

Priority code removed in init: priorities are already handled by getSpans.

This is a duplicate of the already accepted
https://android-git.corp.google.com/g/#/c/153970/
but without the dependency on an other CL.

Change-Id: Iaa7e2f7a8ea4337c8d60c3a9a620e9e3e60caf12
2011-12-08 16:03:00 -08:00