Commit Graph

1207 Commits

Author SHA1 Message Date
Siyamed Sinir
442c151b8d Fix EditText line spacing
DynamicLayout did not include the line spacing for the newly added
lines. This CL updates StaticLayout with a parameter to force addition
of line spacing to the last line, and updates DynamicLayout to use this
parameter. With this change the last line will have the line spacing
applied, and it will provide a consistent UX.

Test: Manual/Visual test
Test: bit -t FrameworksCoreTests:android.text.StaticLayoutTest
Test: bit -t FrameworksCoreTests:android.text.StaticLayoutTextMeasuringTest
Test: bit -t FrameworksCoreTests:android.text.StaticLayoutLineBreakingTest
Test: bit -t FrameworksCoreTests:android.text.DynamicLayoutTest
Test: bit -t FrameworksCoreTests:android.text.DynamicLayoutBlocksTest
Test: bit -t CtsTextTestCases:android.text.cts.StaticLayoutTest
Test: bit -t CtsTextTestCases:android.text.cts.DynamicLayoutTest

Bug: 25194907
Change-Id: I52497fbd108538729758e842072f3ce87c6bbfdd
2017-07-26 15:32:04 -07:00
Siyamed Sinir
337d92e06e Fix bullet span vertical positioning
Test: bit CtsTextTestCases:android.text.style.cts.BulletSpanTest
Bug: 33138492
Change-Id: I2fd787190d7125591fb0fc823f6ead532c859829
2017-07-26 11:26:21 -07:00
Siyamed Sinir
c94801f816 Merge "Store line extra in layouts" 2017-07-26 18:09:50 +00:00
Siyamed Sinir
d25760c660 Merge "Fix StaticLayout.mDirections array size" 2017-07-26 16:14:24 +00:00
Siyamed Sinir
af39851b2a Fix StaticLayout.mDirections array size
mLineDirections variable needs to keep a Directions object for each line
of text. Therefore at any time array of line count is required. However
currently mLineDirections is initialized and grown in the size of mLines
array, which makes the size around mColumns*line count.

This CL removes that extra allocation.

Test: Manual test to check if device boots and displays
Test: bit -t CtsTextTestCases:*
Test: bit -t FrameworksCoreTests:android.text.
Test: bit -t FrameworksCoreTests:android.widget.TextViewTest
Test: bit -t FrameworksCoreTests:android.widget.EditorCursorTest
Test: bit -t CtsWidgetTestCases:android.widget.cts.TextViewTest
Test: bit -t CtsWidgetTestCases:android.widget.cts.EditTextTest

Bug: 64038460
Bug: 62889232
Change-Id: If9bda040b98efcf16c3cdcba5bc27667775ce1fc
2017-07-25 19:09:53 -07:00
Siyamed Sinir
0fa89d6f62 Store line extra in layouts
StaticLayout and Dynamic layout changes the values of line bottom and
descent according to linespacing modification attributes. This loses
information of the real line descent and bottom, which causes some
utilities not to be able to draw themselves in correct positions.
Examples are cursor drawing to the empty space, BulletSpan not being
able to vertically center itself in the line, and DynamicLayout not
being able to calculate the last line height properly.

This CL stores the extra added to bottom and descent values so that it
can be used later.

Test: bit CtsTextTestCases:android.text.cts.LayoutTest
Test: bit CtsTextTestCases:android.text.cts.StaticLayoutTest
Test: bit CtsTextTestCases:android.text.cts.DynamicLayoutTest
Test: bit FrameworksCoreTests:android.text.LayoutTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutTest
Test: bit FrameworksCoreTests:android.text.DynamicLayoutTest
Test: bit FrameworksCoreTests:android.text.DynamicLayoutBlocksTest

Bug: 30870806
Bug: 33138492
Bug: 25194907
Change-Id: I7a1039e71e4999c75b5f26122fe6239e3ee24868
2017-07-25 18:31:47 -07:00
Roozbeh Pournader
6ba82998e2 Merge "Refactor ellipsis attributes and methods" 2017-07-26 00:14:06 +00:00
Roozbeh Pournader
9ea756fa70 Refactor ellipsis attributes and methods
Mostly changed to avoid repetition of code and remove the assumptions
about ellipsis being one code unit. The code for multi-code unit
ellipsis is not triggered yet, but is done in preparation for
potential future locale-dependent cases.

Test: bit CtsTextTestCases:*
Test: bit CtsWidgetTestCases:android.widget.cts.TextViewTest
Test: bit CtsWidgetTestCases:android.widget.cts.EditTextTest
Test: bit CtsWidgetTestCases:android.widget.cts.CheckedTextViewTest
Test: bit CtsWidgetTestCases:android.widget.cts.AutoCompleteTextViewTest
Test: bit CtsWidgetTestCases:android.widget.cts.MultiAutoCompleteTextViewTest
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner

Change-Id: Id1dfdc503f87fabed2447d55ab2107eee0eccd08
2017-07-25 14:50:18 -07:00
Siyamed Sinir
1e0f03da5f Merge "Make BulletSpan work with lineSpacing" 2017-07-21 18:08:46 +00:00
Siyamed Sinir
967805ca47 Merge "Handle long text for share/cut/copy operations." 2017-07-21 18:07:07 +00:00
Siyamed Sinir
b097553b78 Merge "Add BoringLayout constructor API docs" 2017-07-21 18:03:25 +00:00
TreeHugger Robot
89e4c1ce17 Merge "Refactor TextUtils.join() and add documentation" 2017-07-21 08:08:31 +00:00
TreeHugger Robot
c71c832a9e Merge "Use the Context's locale in DateFormat" 2017-07-21 01:01:41 +00:00
Roozbeh Pournader
42673c33ee Refactor TextUtils.join() and add documentation
Added documentation to clarify what happens in the case of null or
empty arguments.

Change-Id: I694dc0f6a6d95ab6ca7ed95b51d81938618eb75f
Fixes: 36861796
Test: bit CtsTextTestCases:*
Test: bit CtsGraphicsTestCases:android.graphics.cts.FontVariationAxisTest
2017-07-20 17:22:30 -07:00
Siyamed Sinir
e827a0910e Make BulletSpan work with lineSpacing
Test: bit FrameworksCoreTests:android.widget.BulletSpanTest
Test: Manual sample app test

Bug: 33138492
Change-Id: I311ceab156c03c8b3174b2b4e875e172f01cd6c5
2017-07-20 15:16:28 -07:00
Siyamed Sinir
08fac62bc9 Add BoringLayout constructor API docs
Test: none
Bug: 30508784
Change-Id: Id9d739c2e09cebfd5482d83e4481dfaec5e178eb
2017-07-20 15:04:49 -07:00
Siyamed Sinir
ce3b05abc0 Handle long text for share/cut/copy operations.
When TextView or EditText contains text that is larger than the
total parcelable limit, some of the FloatingToolbar operations would
crash.

This CL changes the behavior as follows:
- Show a toast message if cut or copy operation fails because it cannot
  set the primary clip.
- Trim the text for share and process_text actions
- A simple app with an EditText and a long text in it, would not open
since Autofill value was being sent over IPC. Trimmed the text that is
sent for Autofill feature.
- Trim the value send to accessibility services

Test: bit CtsWidgetTestCases:.TextViewTest
Test: bit FrameworksCoreTests:android.widget.TextViewTest
Test: bit FrameworksCoreTests:android.text.TextUtilsTest
Test: Manual sample app test

Bug: 8013261
Change-Id: Ia0df6b4eb4c13071a1bf75cedac7241c7239663c
2017-07-20 15:01:18 -07:00
Roozbeh Pournader
3150434f49 Use the Context's locale in DateFormat
Previously, a mix and match of the default locale and the context's
locale were used in DateFormat methods that took a Context as a
parameter. Now we consistently use the Context's locale.

Also refactored the methods is24HourFormat() and hasDesignator() for
simpler and more readable code.

Change-Id: I418c1dcb710cdf2daf14684b258b97bfabe61d8c
Fixes: 62871956
Test: bit CtsTextTestCases:android.text.format.cts.DateFormatTest
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
2017-07-20 12:34:06 -07:00
Seigo Nonaka
c49ee3bde9 Support font resource in TextAppearanceSpan
To be able to parcel/unparcel Typeface, keep it in static context.

Bug: 62850669
Test: Manually done
Test: bit CtsTextTestCases:android.text.style.cts.TextAppearanceSpanTest
Change-Id: I408cd33b98d8bb13776560231d1eeaac0a7c6bf8
2017-07-20 12:01:05 -07:00
Clara Bayarri
6c66f86778 Make up/down movement of multilength lines remember position
Test: Separate CTS CL being submitted along this one, see topic
Bug: 25486843
Change-Id: I463c126b07db05b1c4a26e870cde5c5567471da0
2017-07-18 15:59:28 +01:00
Roozbeh Pournader
e2393ae726 Merge "Make strike-through respect kerning at boundaries" 2017-07-14 02:17:43 +00:00
TreeHugger Robot
b4dfcca0ab Merge "Switch file size formatters to use ICU's MeasureFormat" 2017-07-13 23:11:47 +00:00
Roozbeh Pournader
1378a9d72c Make strike-through respect kerning at boundaries
Also clean up lower-level drawing of strike-through in Cavas.cpp.

We still cannot use the strike-through information from the font
since Skia doesn't provide it, so we are going with the default
values.

Test: Manual
Test: bit CtsTextTestCases:*
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Bug: 32907446
Change-Id: Iee6f8102a35eba0ff4127dbbef189529ab573e6d
2017-07-13 13:21:00 -07:00
Roozbeh Pournader
4e5b71f084 Switch file size formatters to use ICU's MeasureFormat
Use ICU's MeasureFormat to the degree possible for formatting file
sizes.

Bug: 36994779
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Test: bit CtsTextTestCases:*
Change-Id: I4ad3b568ae7585b6ff56fddb79ded7c5b2118176
2017-07-13 11:11:55 -07:00
Seigo Nonaka
0d253e46aa Implement family fallback.
Introduce new attribute "fallbackFor" to font element.
By specifying name of the family to this attribute, that font is used
when the developer specifies the font family.
For example, if fonts.xml has the following family entry,
  <family lang="ja">
    <font fallbackFor="serif">NotoSerifJP-Regular.ttf</font>
    <font>NotoSansJP-Regular.ttf</font>
  </family>
the Japanese text is rendered by NotoSansJP-Regular.ttf by default.
Then, if developer specifies fontFamily="serif" in TextView, the Japanese
text is rendered by NotoSerifJP-Regular.ttf.

Bug: 37328609
Bug: 31491668
Test: bit FrameworksCoreTests:android.graphics.TypefaceSystemFallbackTest

Change-Id: I2744db7384c8056795e841c88b387545434131f4
2017-07-13 10:47:48 -07:00
TreeHugger Robot
ec8c01d767 Merge "Switch formatElapsedTime to use ICU's MeasureFormat" 2017-06-23 21:51:31 +00:00
Roozbeh Pournader
2ee9075462 Switch formatElapsedTime to use ICU's MeasureFormat
Previously, localizable strings were used instead, causing various
difficulties and inconsistencies. The formatting code also
hard-coded the pluralization rules for English and used it for all
locales.

Now we use ICU's MeasureFormat. There are some small formatting
differences with the previous code, but they are not important,
especially since the old strings were not necessarily well-thought.

Bug: 36994779
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Change-Id: Ie8cb119a76e89e2ee971353761fbd54e0d9a556c
2017-06-20 16:50:01 -07:00
Roozbeh Pournader
ef7cfa17e7 Pass all locale information down to Minikin
Previously, locale lists and LocaleSpans were ignored in deciding line
breaking and hyphenation in layouts.

Now, we pass both changing locale information and the whole locale
list to Minikin.

Fixes: 21571721
Bug: 25122192
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Change-Id: Ia93b0b7cbe54de65bb0ec4937e65cc7993559a6f
2017-06-20 14:19:24 -07:00
Roozbeh Pournader
dc8f3ef561 Make Linkify use the SIM card's country for phone numbers
Previously, it was using the locale's country code, which doesn't
make sense, since the locale's country code means which dialect of
the language the system should function in.  We should use the SIM
card's country code instead.

Change-Id: Ib942f92f3218c943669fc6150d6cc6b4e340b451
Fixes: 30000652
Test: cts-tradefed run cts-dev --module CtsTextTestCases
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Test: Manual
2017-06-13 16:39:10 -07:00
Roozbeh Pournader
aa8380fa22 Merge "Internationalize InputFilter.AllCaps" 2017-06-09 22:23:52 +00:00
Roozbeh Pournader
554585e08d Merge "Get underline position and thickness from the font" 2017-06-09 21:44:59 +00:00
Roozbeh Pournader
205a993928 Internationalize InputFilter.AllCaps
The new code support non-BMP characters, as well as locale-specific
uppercasing and fine-grained span copying.

The modern capitalization code in AllCapsTransformationMethod is
moved to TextUtils now, so InputFilter.AllCaps can share it.

Fixes: 37222101
Test: New CTS and core tests are added.
Test: cts-tradefed run cts-dev --module CtsTextTestCases
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner

Change-Id: I021ff2a97a60396fb1b6e4940d91d3cd6ccb6196
2017-06-08 15:38:28 -07:00
Roozbeh Pournader
ca8a04a366 Get underline position and thickness from the font
Previously, font underline position and thickness were fixed in Android.
Although a custom font may have specified a different value, such a value
would never be used. Now we use the values from the font if they are
provided and fall back to the old default values only if needed.

Bug: 62353930

Test: adb shell am instrument -w -e package android.graphics com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Test: cts-tradefed run cts-dev --module CtsTextTestCases
Test: Manual
Change-Id: I6bf21000dd69a2780c894b231638bc0c122e41f4
2017-06-08 14:13:57 -07:00
TreeHugger Robot
e5d6838e0a Merge "Early exit if there are no spans affecting display" 2017-06-07 22:25:59 +00:00
Roozbeh Pournader
08836d4ca5 Early exit if there are no spans affecting display
In TextLine#handleRun(), exit early and shape the text as one whole
if there were spans, but none of them were a subclass of
MetricAffectingSpan or CharacterStyle.

Change-Id: I859c896ddb9c4828bfddf200e913e98262da6ea3
Fixes: 30985144
Test: cts-tradefed run cts-dev --module CtsTextTestCases
Test: adb shell am instrument -w -e package android.text com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
2017-06-07 12:12:30 -07:00
Roozbeh Pournader
fd8c22d513 Move underline thickness and position computation to Paint
Also, in TextLine, fix underline color and thickness to come from the
underline info rather than the TextPaint object.

Bug: 32907446
Bug: 62353930
Test: Manual
Test: cts-tradefed run cts-dev --module CtsTextTestCases
Test: cts-tradefed run cts-dev --module CtsWidgetTestCases
Change-Id: I259e9cf635a7056ccd367baa77c03100c69e3b98
2017-06-05 15:57:14 -07:00
Roozbeh Pournader
538de5bb3b Make underlining spans independent of actual class
Previously, we had singled out UnderlineSpan for special treatment
for proper kerning at span boundaries. That had the limitation that
any other span that used underlining, or even subclasses of
UnderlineSpan were not getting the fix.

With this CL, we actually look at all the effects of applying a
span's updateDrawState() and if the changes were only in underlining,
we merge the pieces and call handleText() on the merged chunk of
text.

Change-Id: I829162c758192b80594f164d1105699224b627ba
Bug: 32907446
Test: cts-tradefed run cts-dev --module CtsTextTestCases
Test: cts-tradefed run cts-dev --module CtsWidgetTestCases
Test: manual
2017-06-01 16:45:33 -07:00
Roozbeh Pournader
6f4b6fa44d Merge "Revert "Don't let UnderlineSpans affect text width"" 2017-06-01 18:33:07 +00:00
Siyamed Sinir
702c9f92fc Revert "Don't let UnderlineSpans affect text width"
This reverts commit 203ffaa103.

Bug: 62234081
Change-Id: I8dd95dba52f268fb57f55e315431cedbc5128adc
2017-06-01 18:25:40 +00:00
Roozbeh Pournader
931ed4dab9 Merge "Don't let UnderlineSpans affect text width" 2017-05-30 21:42:24 +00:00
Roozbeh Pournader
203ffaa103 Don't let UnderlineSpans affect text width
Previously, text that was partially annotated with an UnderlineSpan
could have a different width than text without it, since underlined
text was separated into a separate piece of text and was measured
separately, causing kerning at the span boundaries to disappear.

Change-Id: I118de8524c500fb6a4b05b1bf65fe93dc67f204c
Bug: 32907446
Test: cts-tradefed run cts-dev --module CtsTextTestCases
Test: manual
2017-05-24 13:35:19 -07:00
Roozbeh Pournader
fc77869ee0 Set up empty lines for DynamicLayout#updateBlocks() tests
The changes in I666da5eeb39f780c341597f347bfcba21eb34295 introduced
the concept of lines that need to be always redrawn, but it broke
tests for DynamicLayout#updateBlocks() that didn't need to set up the
actual lines.

Now, during the test setup, we insert empty lines to match the number
of lines needed.

Test: adb shell am instrument -w -e class android.text.DynamicLayoutBlocksTest com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Test: adb shell am instrument -w -e class android.text.DynamicLayoutTest#testGetBlocksAlwaysNeedToBeRedrawn_thai com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Test: adb shell am instrument -w -e class android.text.DynamicLayoutTest#testGetBlocksAlwaysNeedToBeRedrawn_en com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner
Test: cts-tradefed run cts-dev --module CtsTextTestCases
Change-Id: I4bfc82db4beef1b740433a25a3ae29201f54d9d3
Fixes: 38029583
2017-05-23 16:18:58 -07:00
Eugene Susla
4a34f9c2f6 Print A11yEv. Content Change Types in DEBUG toString
Test: Enable debug, and ensure changeTypes are properly displayed
Change-Id: I1bf6a9f56a72e867a0bc967a5e3527eb4dc83952
2017-05-17 11:13:05 -07:00
Abodunrinwa Toki
3de110bbb7 Remove redundant TextClassificationService
Text classification is now being done entirely in the app's proccess.
See android.view.textclassifier.TextClassificationManager
Reverts Ic428d00f291e268211866b3fc6b7acbc3eb04e1e

Test: bit FrameworksCoreTests:android.view.textclassifier.TextClassificationManagerTest
Fixes: 36852122
Change-Id: Iffff3ab6e7d3b761576eb6bdcd5032db34b7a1b2
2017-05-09 13:51:03 +01:00
TreeHugger Robot
4972daf992 Merge "Don't crash in TextUtil.concat() with paragraph spans" into oc-dev 2017-05-06 01:41:03 +00:00
Roozbeh Pournader
e57886e659 Don't crash in TextUtil.concat() with paragraph spans
This switches TextUtils.concat() to use SpannableStringBuilder
if there are any spans in the input strings. As a result, we can
avoid crashes when concatenating two CharSequences can result in
paragraph spans that now don't happen to be at paragraph boundaries.

Also document the exact behavior of the method for edge cases based
on the previous implementation.

Change-Id: I9caffbe95ed729b9c10d63a9e7d22b1e8c7185a3
Fixes: 28271770
Test: CTS tests added and old CTS tests continue to pass.
Test: cts-tradefed run cts-dev --module CtsTextTestCases --test android.text.cts.TextUtilsTest
2017-05-05 11:04:29 -07:00
Felipe Leme
a8fce3b29e Don't copy NoCopySpans for assist and autofill
For AssistStructure, and AutofillValue, create a copy of the text in 
setText and forText methods if it is a Spanned.

Fixes: 36838999
Test: cts-tradefed run cts -m CtsAutoFillServiceTestCases
Test: cts-tradefed run cts -m CtsAssistTestCases
Test: cts-tradefed run cts --test android.widget.cts.TextViewTest -m \
      CtsWidgetTestCases

Change-Id: I52e780fa9baa17c375d3945dc714171f41fd7db5
2017-05-02 13:33:07 -07:00
Abodunrinwa Toki
ea6cb1215e Add "Paste as plain text" in TextView's toolbar.
Test: bit FrameworksCoreTests:android.widget.TextViewActivityTest
Bug: 36179795
Change-Id: Iee0502678adcfb9de58c107b9247a528718b2c40
2017-05-02 15:16:26 +01:00
Abodunrinwa Toki
3f3354e087 Undeprecate WebView.findAddress
Reverts I772961bd20bff4817a060f14a843abeceb55ac92
Until we bring back TextClassifier.getLinks
See I275a9d055ef0ab68f3ca339c37ee939257c4bd54

Test: none
Bug: 22362008
Bug: 37565246
Change-Id: I2948f22cf4c3462491f47376af48624697703969
2017-04-24 14:41:14 +00:00
Phil Weaver
23161e7170 Make a11y clickable span work after node recycle
Services recycle nodes when gathering possible actions
for users to take. It's very confusing for them if they
can't recycle the node without breaking their ability
to activate a clickable span inside it.

Making ClickableSpans used for accessibility independent
of their parent nodes.

Also adjusting the value used for invalid window ids to
come from AccessibilityWindowInfo. I must have missed this
in an earlier cleanup. I needed the value for the spans,
so I figured I might as well use the correct one.

Bug: 37004527
Test: Now recycling the node in the a11y cts test.
Change-Id: I6de4e98a182dd43c4fcd0430a3c082fcc8e458c7
2017-04-19 14:08:34 -07:00