diff options
| author | Clara Bayarri <clarabayarri@google.com> | 2015-08-12 19:46:47 +0100 |
|---|---|---|
| committer | Clara Bayarri <clarabayarri@google.com> | 2015-08-12 21:03:28 +0100 |
| commit | f95ed10d9da55c25013200fb35af63f0dac65cb4 (patch) | |
| tree | 3ad744cbb005d6719b56991891ea5e0f0dd369da | |
| parent | bf88205bef88f78ade5c6830e6203aa343387820 (diff) | |
| download | frameworks_base-f95ed10d9da55c25013200fb35af63f0dac65cb4.zip frameworks_base-f95ed10d9da55c25013200fb35af63f0dac65cb4.tar.gz frameworks_base-f95ed10d9da55c25013200fb35af63f0dac65cb4.tar.bz2 | |
Fix Insertion ActionMode not showing on RTL languages
When long pressing on an empty Text field with the system language set
to RTL, the "paste" popup was not showing up.
The Floating Toolbar requires a content rect to determine where the
text is and place itself close to it. In the case of an empty field,
we create a "fake" content rect by taking the placement of the cursor
+1 pixel to the right. In RTL languages, this +1 causes the content
rect to be considered off the bounds of the view, as the cursor is
aligned to the right, and hence the Floating Toolbar is hidden.
After making the rect a 0 width rect, we ran into the issue that
it was considered out of bounds due to the calculation ignoring rects
that simply touch the edge of the view's bounds.
BUG: 22540083
Change-Id: I29c79b701f586970b2611178233eff082b802ec1
| -rw-r--r-- | core/java/android/widget/Editor.java | 2 | ||||
| -rw-r--r-- | core/java/com/android/internal/view/FloatingActionMode.java | 12 |
2 files changed, 11 insertions, 3 deletions
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 010cb27..5b042c6 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -3308,7 +3308,7 @@ public class Editor { mSelectionBounds.set( primaryHorizontal, layout.getLineTop(line), - primaryHorizontal + 1, + primaryHorizontal, layout.getLineTop(line + 1) + mHandleHeight); } // Take TextView's padding and scroll into account. diff --git a/core/java/com/android/internal/view/FloatingActionMode.java b/core/java/com/android/internal/view/FloatingActionMode.java index 41628d0..9761661 100644 --- a/core/java/com/android/internal/view/FloatingActionMode.java +++ b/core/java/com/android/internal/view/FloatingActionMode.java @@ -194,8 +194,16 @@ public class FloatingActionMode extends ActionMode { mContext.getResources().getDisplayMetrics().widthPixels, mContext.getResources().getDisplayMetrics().heightPixels); - return Rect.intersects(mContentRectOnScreen, mScreenRect) - && Rect.intersects(mContentRectOnScreen, mViewRectOnScreen); + return intersectsClosed(mContentRectOnScreen, mScreenRect) + && intersectsClosed(mContentRectOnScreen, mViewRectOnScreen); + } + + /* + * Same as Rect.intersects, but includes cases where the rectangles touch. + */ + private static boolean intersectsClosed(Rect a, Rect b) { + return a.left <= b.right && b.left <= a.right + && a.top <= b.bottom && b.top <= a.bottom; } @Override |
