Commit Graph

1234 Commits

Author SHA1 Message Date
Seigo Nonaka
ae1912b62f Improve ellipsize performance
Instead of iterate all ellipsized characters, only iterate the necessary
ranges for copying.

Bug: 188913943
Test: atest CtsTextTestCases CtsGraphicsTestCases CtsWidgetTestCases
Change-Id: I3d03b1e3897e427c23fbe51315f412c57a4ce9e9
Merged-In: I3d03b1e3897e427c23fbe51315f412c57a4ce9e9
2021-06-08 20:38:08 -07:00
Seigo Nonaka
709e9e6855 RESTRICT AUTOMERGE Revive runLimit check logic am: b730f1984f
am: 2af4f537ff

Change-Id: Ia671d3f5a7fa62c80dd3c2468d199ce66fe734f1
2019-10-16 17:26:09 -07:00
Seigo Nonaka
2af4f537ff RESTRICT AUTOMERGE Revive runLimit check logic
am: b730f1984f

Change-Id: I329515d36c12ee5e12a63262ff7db8daff350832
2019-10-16 17:14:15 -07:00
Seigo Nonaka
b730f1984f RESTRICT AUTOMERGE
Revive runLimit check logic

The runLimit check logic was accidentally removed by
I7089ed9b711dddd7de2b27c9c2fa0fb4cb53a735

Bug: 142134328
Bug: 140632678
Test: Manually done with reported step
Test: StaticLayoutTest passes
Change-Id: Ib1d5efdcb9adcc18a6a43370dc016ea464f48148
2019-10-16 22:12:04 +00:00
Seigo Nonaka
af62f3a7b3 RESTRICT AUTOMERGE Do not compute outside given range in TextLine am: 4ce901e405
am: b51c7bb175

Change-Id: I6770f4b1a884020c374a75f67eb762b2c2bfd538
2019-10-02 09:59:45 -07:00
Seigo Nonaka
b51c7bb175 RESTRICT AUTOMERGE Do not compute outside given range in TextLine
am: 4ce901e405

Change-Id: I739746d80a8dd29998a67c1d9aaa2d3f804ac57c
2019-10-02 09:33:53 -07:00
Seigo Nonaka
4ce901e405 RESTRICT AUTOMERGE
Do not compute outside given range in TextLine

This is second attempt of I646851973b3816bf9ba32dfe26748c0345a5a081
which breaks various layout test on application.
The empty string must be also handled by the TextLine since it
retrieves the default line height from the empty string.

Bug: 140632678
Test: StaticLayoutTest
Test: Manually done
Change-Id: I7089ed9b711dddd7de2b27c9c2fa0fb4cb53a735
2019-09-30 17:33:07 +00:00
Mihai Popa
09bfff78dd [automerger] Fix Layout.primaryIsTrailingPreviousAllLineOffsets am: 2778b1e49d am: 77b7393e7d am: 126189263d
am: 29534f6c57

Change-Id: Id615c055975d251f45ec995c389e4acbe1274cd8
2019-07-10 14:56:38 -07:00
Android Build Merger (Role)
29534f6c57 [automerger] Fix Layout.primaryIsTrailingPreviousAllLineOffsets am: 2778b1e49d am: 77b7393e7d am: 126189263d
Change-Id: If52ab20b7cd84d02518bdfcd46987e329b654e2d
2019-07-10 18:02:37 +00:00
Android Build Merger (Role)
126189263d [automerger] Fix Layout.primaryIsTrailingPreviousAllLineOffsets am: 2778b1e49d am: 77b7393e7d
Change-Id: I2a5373fa2ea348adde8e5592a5a9fa489c7fe12b
2019-07-10 18:02:32 +00:00
Mihai Popa
2778b1e49d Fix Layout.primaryIsTrailingPreviousAllLineOffsets
The CL fixes a crash in Layout.primaryIsTrailingPreviousAllLineOffsets.
The crash was happening when the method was called for a line beginning
with an empty bidi run. This could happen, for example, for empty text -
I was unable to find any other case. The CL improves the existing test
for the method with this case, which was previously crashing.

The CL also fixes a potential crash in getLineHorizontals. However, this
bug could never happen as in the current code path clamped is always
false (and kept as parameter for parity with getHorizontal).

Bug: 135444178
Bug: 78464361
Test: atest FrameworksCoreTests:android.text.LayoutTest\#testPrimaryIsTrailingPrevious
Change-Id: I47157abe1d74675884734e3810628a566e40c1b4
(cherry picked from commit 7ad499d007)
2019-07-10 18:02:25 +00:00
Mihai Popa
42a6af7a11 Fix Layout.primaryIsTrailingPreviousAllLineOffsets
The CL fixes a crash in Layout.primaryIsTrailingPreviousAllLineOffsets.
The crash was happening when the method was called for a line beginning
with an empty bidi run. This could happen, for example, for empty text -
I was unable to find any other case. The CL improves the existing test
for the method with this case, which was previously crashing.

The CL also fixes a potential crash in getLineHorizontals. However, this
bug could never happen as in the current code path clamped is always
false (and kept as parameter for parity with getHorizontal).

Bug: 135444178
Bug: 78464361
Test: atest FrameworksCoreTests:android.text.LayoutTest\#testPrimaryIsTrailingPrevious
Change-Id: I47157abe1d74675884734e3810628a566e40c1b4
(cherry picked from commit 7ad499d007)
2019-07-10 18:01:49 +00:00
Tony Mak
3f552669e3 RESTRICT AUTOMERGE Do not linkify text with RLO/LRO characters.
am: d9e75a497e

Change-Id: Id1b62f552f29ef9a20d78bb7487201452dfda601
2019-01-08 02:50:57 -08:00
Abodunrinwa Toki
4e3507d544 RESTRICT AUTOMERGE Do not linkify text with RLO/LRO characters.
Also don't show smart actions for selections in text with unsupported
characters.

Bug: 116321860
Test: runtest -x cts/tests/tests/text/src/android/text/util/cts/LinkifyTest.java
Change-Id: Ib2ee544b5783234fba8ee2f93adf0b36b039520f
2019-01-04 17:30:28 +00:00
Tony Mak
d9e75a497e RESTRICT AUTOMERGE Do not linkify text with RLO/LRO characters.
Also don't show smart actions for selections in text with unsupported
characters.

Bug: 116321860
Test: runtest -x cts/tests/tests/text/src/android/text/util/cts/LinkifyTest.java
Change-Id: Ib2ee544b5783234fba8ee2f93adf0b36b039520f
Merged-In: Ib2ee544b5783234fba8ee2f93adf0b36b039520f
2019-01-03 17:10:46 +00:00
Android Build Merger (Role)
3823545fee [automerger] RESTRICT AUTOMERGE Do not linkify text with RLO/LRO characters. am: 73f398d306 am: 363e47e676 am: efb165f557 am: b2b98a008b
Change-Id: I29c3f97af12987c8a1dd8a69529641d32d2dd172
2019-01-03 14:07:59 +00:00
Android Build Merger (Role)
efb165f557 [automerger] RESTRICT AUTOMERGE Do not linkify text with RLO/LRO characters. am: 73f398d306 am: 363e47e676
Change-Id: I828e0c99ab41935d20033c970b5131f2fcbf9085
2019-01-03 14:07:43 +00:00
Android Build Merger (Role)
363e47e676 [automerger] RESTRICT AUTOMERGE Do not linkify text with RLO/LRO characters. am: 73f398d306
Change-Id: I423ddd8df74bee8dbf7cd96009bbdffebf81b93a
2019-01-03 14:07:33 +00:00
Tony Mak
73f398d306 RESTRICT AUTOMERGE Do not linkify text with RLO/LRO characters.
Also don't show smart actions for selections in text with unsupported
characters.

Bug: 116321860
Test: runtest -x cts/tests/tests/text/src/android/text/util/cts/LinkifyTest.java

Change-Id: Id271cab8aef6b9b13ef17f1a8654c7616f75cf13
2019-01-03 14:07:30 +00:00
Mihai Popa
06829a62b1 Merge "Fix crash during cursor moving on BiDi text" into oc-dev
am: e385255db4

Change-Id: Ib094039b1c515af77fcc3c051352de5cb15861cb
2018-08-15 12:43:55 -07:00
Android Build Merger (Role)
8f85f5ffd2 [automerger] Fix crash during cursor moving on BiDi text am: 82c84d5fbb am: 12baaa2bc3 am: 99e3f649b4 am: a959ee227a
Change-Id: I7cb6623befc84f76e783b8800aa18ce28a8cc2b7
2018-08-15 19:13:10 +00:00
Android Build Merger (Role)
99e3f649b4 [automerger] Fix crash during cursor moving on BiDi text am: 82c84d5fbb am: 12baaa2bc3
Change-Id: Iaf0aded3004f33fdb52dd0c19779329991b24746
2018-08-15 19:12:59 +00:00
Android Build Merger (Role)
12baaa2bc3 [automerger] Fix crash during cursor moving on BiDi text am: 82c84d5fbb
Change-Id: I221d974ba9402c088235d5bdb3c94e91cf4167ba
2018-08-15 19:12:52 +00:00
Seigo Nonaka
82c84d5fbb Fix crash during cursor moving on BiDi text
The crash was introduced by Ib66ef392c19c937718e7101f6d48fac3abe51ad0
The root cause of the crashing is requesting out-of-line access for the
horizontal width. This invalid access is silently ignored by
TextLine#measure() method but new implementation end up with out of
bounds access.

To makes behavior as old implementation, calling getHorizontal instead
of accessing measured result array.

Bug: 78464361, 111580019
Test: Manually done
Change-Id: I5c5778718f6b397adbb1e4f2cf95e9f635f6e5c8
(cherry picked from commit 960647d582)
Merged-In: I5c5778718f6b397adbb1e4f2cf95e9f635f6e5c8
2018-08-15 19:12:50 +00:00
Seigo Nonaka
d30c55e3cc Fix crash during cursor moving on BiDi text
The crash was introduced by Ib66ef392c19c937718e7101f6d48fac3abe51ad0
The root cause of the crashing is requesting out-of-line access for the
horizontal width. This invalid access is silently ignored by
TextLine#measure() method but new implementation end up with out of
bounds access.

To makes behavior as old implementation, calling getHorizontal instead
of accessing measured result array.

Bug: 78464361, 111580019
Test: Manually done
Change-Id: I5c5778718f6b397adbb1e4f2cf95e9f635f6e5c8
(cherry picked from commit 960647d582)
Merged-In: I5c5778718f6b397adbb1e4f2cf95e9f635f6e5c8
2018-08-15 19:12:43 +00:00
Seigo Nonaka
f496a7cdc6 Fix crash during cursor moving on BiDi text
The crash was introduced by Ib66ef392c19c937718e7101f6d48fac3abe51ad0
The root cause of the crashing is requesting out-of-line access for the
horizontal width. This invalid access is silently ignored by
TextLine#measure() method but new implementation end up with out of
bounds access.

To makes behavior as old implementation, calling getHorizontal instead
of accessing measured result array.

Bug: 78464361, 111580019
Test: Manually done
Change-Id: I5c5778718f6b397adbb1e4f2cf95e9f635f6e5c8
(cherry picked from commit 960647d582)
Merged-In: I5c5778718f6b397adbb1e4f2cf95e9f635f6e5c8
2018-08-15 19:12:27 +00:00
Android Build Merger (Role)
94bc67f03c [automerger] Optimise the hit test algorithm am: 71ecf5bd5c am: 42eaa8f932 am: a72cb45f89 am: f5d69aa775
Change-Id: Ic2d4d3ead4926ff0f8021725e28aee4ebfc369f3
Merged-In: Ib66ef392c19c937718e7101f6d48fac3abe51ad0
2018-06-05 13:12:31 +00:00
Mihai Popa
0348259446 Merge "Optimise the hit test algorithm" into oc-dev
am: 6064d8fd4c

Change-Id: I465c15edb18c3084e6b8cbf1f42c0c2c1ebea4eb
2018-06-05 04:39:29 -07:00
Android Build Merger (Role)
a72cb45f89 [automerger] Optimise the hit test algorithm am: 71ecf5bd5c am: 42eaa8f932
Change-Id: I2ac44759ff615b32724f5235d3e5e8dc8c9b4ced
2018-05-31 16:46:27 +00:00
Android Build Merger (Role)
42eaa8f932 [automerger] Optimise the hit test algorithm am: 71ecf5bd5c
Change-Id: If1c91f3bc1e785434f153c5bc0d14befbc75e6cb
2018-05-31 16:46:17 +00:00
Mihai Popa
71ecf5bd5c Optimise the hit test algorithm
Layout#getOffsetForHorizontal was running in O(n^2) time, where n is the
length of the current line. The method is used when a touch event
happens on a text line, to compute the cursor offset (and the character)
where it happened. Although this is not an issue in common usecases,
where the number of characters on a line is relatively small, this can
be very inefficient as a consequence of Unicode containing 0-width
(invisible) characters. Specifically, there are characters defining the
text direction (LTR or RTL), which cause our algorithm to touch the
worst case quadratic runtime. For example, a person is able to send a
message containing a few visible characters, and also a lot of these
direction changing invisible ones. When the receiver touches the message
(causing the Layout#getOffsetForHorizontal method to be called), the
receiver's application would become not responsive.

This CL optimizes the method to run in O(n) worst case. This is achieved
by computing the measurements of all line prefixes at first, which can
be done in a single pass. Then, all the prefix measurement queries will
be answered in O(1), rather than O(n) as it was happening before.

Bug: 79215201
Test: manual testing
Change-Id: Ib66ef392c19c937718e7101f6d48fac3abe51ad0
Merged-In: Ib66ef392c19c937718e7101f6d48fac3abe51ad0
2018-05-31 17:45:42 +01:00
Mihai Popa
69b589b21d Optimise the hit test algorithm
Layout#getOffsetForHorizontal was running in O(n^2) time, where n is the
length of the current line. The method is used when a touch event
happens on a text line, to compute the cursor offset (and the character)
where it happened. Although this is not an issue in common usecases,
where the number of characters on a line is relatively small, this can
be very inefficient as a consequence of Unicode containing 0-width
(invisible) characters. Specifically, there are characters defining the
text direction (LTR or RTL), which cause our algorithm to touch the
worst case quadratic runtime. For example, a person is able to send a
message containing a few visible characters, and also a lot of these
direction changing invisible ones. When the receiver touches the message
(causing the Layout#getOffsetForHorizontal method to be called), the
receiver's application would become not responsive.

This CL optimizes the method to run in O(n) worst case. This is achieved
by computing the measurements of all line prefixes at first, which can
be done in a single pass. Then, all the prefix measurement queries will
be answered in O(1), rather than O(n) as it was happening before.

Bug: 79215201
Test: manual testing
Change-Id: Ib66ef392c19c937718e7101f6d48fac3abe51ad0
Merged-In: Ib66ef392c19c937718e7101f6d48fac3abe51ad0
2018-05-31 16:19:15 +00:00
Mihai Popa
97c613bb2b Optimise the hit test algorithm
Layout#getOffsetForHorizontal was running in O(n^2) time, where n is the
length of the current line. The method is used when a touch event
happens on a text line, to compute the cursor offset (and the character)
where it happened. Although this is not an issue in common usecases,
where the number of characters on a line is relatively small, this can
be very inefficient as a consequence of Unicode containing 0-width
(invisible) characters. Specifically, there are characters defining the
text direction (LTR or RTL), which cause our algorithm to touch the
worst case quadratic runtime. For example, a person is able to send a
message containing a few visible characters, and also a lot of these
direction changing invisible ones. When the receiver touches the message
(causing the Layout#getOffsetForHorizontal method to be called), the
receiver's application would become not responsive.

This CL optimizes the method to run in O(n) worst case. This is achieved
by computing the measurements of all line prefixes at first, which can
be done in a single pass. Then, all the prefix measurement queries will
be answered in O(1), rather than O(n) as it was happening before.

Bug: 79215201
Test: manual testing
Change-Id: Ib66ef392c19c937718e7101f6d48fac3abe51ad0
Merged-In: Ib66ef392c19c937718e7101f6d48fac3abe51ad0
2018-05-31 17:16:52 +01:00
Joshua Baxter
eb5d2d96ad docs: fixed typo
Test: make ds-docs

Bug: 36944055
Change-Id: I52c6d6404340ada5a18b99fd37a2f1d75af00677
2018-03-27 10:28:05 -07:00
Joachim Sauer
2427d36d66 Remove use of MeasureUnit.internalGetInstance
MeasureUnit.internalGetUnit() is a method on ICU MeasureUnit which is
used to construct and register MeasureUnits. Calling it from non-ICU
code makes future calls to MeasureUnit.getAvailable(type) return the
newly-created MeasureUnit, but that MeasureUnit will not be fully
supported by ICU (no translations, ...).

This code creates a MeasureUnit by calling a constructor reflectively to
avoid the registration, which is a workaround.

The correct long-term fix is for ICU/CLDR to support petabyte correctly
(http://bugs.icu-project.org/trac/ticket/13355) and for us to just use
that instead.

Bug: 65632959
Test: bit CtsIcuTestCases:android.icu.dev.test.format.MeasureUnitTest
Test: coretests android.text.format.FormatterTest

(cherry picked from commit aa5629e608)

Change-Id: If18dd378668a59a700030856573e46917a1bd051
2017-09-18 11:40:46 +01:00
Yohei Yukawa
71803994a3 Fix conflicting JavaDoc of TYPE_TEXT_FLAG_NO_SUGGESTIONS
TYPE_TEXT_FLAG_NO_SUGGESTIONS is just a hint and does not mean
IME should never show a UI to display suggestions.

This CL makes that point clear in JavaDoc.

Test: checkbuild
Bug: 35875399
Bug: 38139781
Bug: 38184682
Fixes: 65693181
Change-Id: Id0c3b6bc05689a5f1c8b52637664f59d45850a60
2017-09-14 23:59:18 +00:00
Siyamed Sinir
261118009d StaticLayout capped height should be 0 when maxLines=0
Previously we added mMaxLineHeight to track the line height at the
maxLines value. However when maxLines is set to zero, mMaxLineHeight is
not calculated and remains 0. When maxLines is set to zero, the capped
height of the layout should be 0.

Test: Added a test case to coretests/StaticLayoutTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutTest
Test: bit FrameworksCoreTests:android.text.DynamicLayoutTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutLineBreakingTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutBidiTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutTextMeasuringTest
Test: bit FrameworksCoreTests:android.text.StaticLayoutDirectionsTest
Test: bit CtsTextTestCases:android.text.cts.StaticLayoutTest
Test: bit CtsTextTestCases:android.text.cts.DynamicLayoutTest
Test: bit CtsWidgetTestCases:android.widget.cts.TextViewTest

Bug: 64822158
Change-Id: Id9240ee7b893f8af9cd0d91329617c24da80c7d2
Merged-In: a8d982d6c8
(cherry picked from commit a8d982d6c8)
2017-08-21 19:22:58 -07:00
Siyamed Sinir
72093af5c2 Reset StaticLayout.mEllipsized during generate()
StaticLayout.mEllipsized and mMaxLineHeight was set for proper
calculation of static ellipsized text height. However, since
DynamicLayout uses a static instance of StaticLayout, and nobody reset
the mEllipsized, this caused configuration discrepancies for different
DynamicLayout instances.

Test: bit -t CtsTextTestCases:android.text.cts.DynamicLayoutTest
Test: bit -t CtsTextTestCases:android.text.cts.StaticLayoutTest
Bug: 64372088
Change-Id: I8ea6697d29da2ccbb433b64f17b4d1d6f254e8e1
Merged-In: a19cd51d2c
(cherry picked from commit a19cd51d2c)
2017-08-21 19:20:50 -07:00
Makoto Onuki
812d188afb Intern process names.
Bug: 62144301
Test: Boot and start random apps on a secondary user
Change-Id: I8a9b475410c52e1063cff5519b0297ad69dd7925
2017-08-08 14:58:48 -07:00
Roozbeh Pournader
4e5e15a6ea Make InputFilter.AllCaps constructor reject null locales
In I021ff2a97a60396fb1b6e4940d91d3cd6ccb6196, new API for
InputFilter.AllCaps was added. It accepted null as input. This CL
changes that so null locales would be rejected.

Test: bit CtsTextTestCases:android.text.cts.InputFilter_AllCapsTest
Fixes: 64261334
Bug: 37222101

Change-Id: Ic87942c3f341f71bc3c1c833b52ea3e751461e47
2017-08-02 10:37:07 -07:00
TreeHugger Robot
1c34ba15b5 Merge "Revert "Implement family fallback." DO NOT MERGE" into oc-mr1-dev 2017-08-01 17:29:35 +00:00
Seigo Nonaka
9b58ad6ce0 Stop font loading with restricted context.
Resources.getFont may load other package's font. Stop loading font
resources unless the developer allowed to do so.

Bug: 64115349
Bug: 35763094
Bug: 62813533
Test: bit CtsTextTestCases:android.text.style.cts.TextAppearanceSpanTest
Change-Id: Ifa1b57a70650ba086b38407c0ed5b4048983e7e5
2017-07-27 13:09:46 -07:00
Seigo Nonaka
065c59beaf Revert "Implement family fallback." DO NOT MERGE
This reverts commit 0d253e46aa.

The original CL changed Typeface internal methods and broke
TypefaceCompatApi26Impl in support library which uses reflections.
Ideally, TypefaceCompatApi26Impl must fall back to public API
implementation but due to lack of method availability check, it ended up
crashing the application.

The original patch didn't change any behaviors in MR1, so reverting
that change is the best solution for MR1.

Bug: 64033594
Change-Id: Ie86afeb1b809e57915d62c1db5a70c8d210d2354
Test: N/A
2017-07-26 22:21:14 +00:00
Seigo Nonaka
298bb2995b 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
(cherry picked from commit c49ee3bde9)
2017-07-20 23:40:44 +00: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