diff options
| author | Gilles Debunne <debunne@google.com> | 2011-06-09 16:56:31 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-06-09 16:56:31 -0700 |
| commit | aab49b40e8dd78aca67db160f5d0c787379c8f7f (patch) | |
| tree | 5b11fb0ded38ad33960e51db6ab470c0db6f3e03 /core/java | |
| parent | 680e0a4782a2b8012343794a36e8e7debcb2305c (diff) | |
| parent | ed6741817a6c075a306b5e9c63e6c08abc5b8dc6 (diff) | |
| download | frameworks_base-aab49b40e8dd78aca67db160f5d0c787379c8f7f.zip frameworks_base-aab49b40e8dd78aca67db160f5d0c787379c8f7f.tar.gz frameworks_base-aab49b40e8dd78aca67db160f5d0c787379c8f7f.tar.bz2 | |
Merge "Text selection on phone"
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/widget/TextView.java | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index eba9d37..9a5977a 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -8738,10 +8738,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener return false; } - boolean currentWordSelected = selectCurrentWord(); - if (!currentWordSelected) { - // No word found under cursor or text selection not permitted. - return false; + if (!hasSelection()) { + // There may already be a selection on device rotation + boolean currentWordSelected = selectCurrentWord(); + if (!currentWordSelected) { + // No word found under cursor or text selection not permitted. + return false; + } } ActionMode.Callback actionModeCallback = new SelectionActionModeCallback(); @@ -9057,6 +9060,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private int mContainerPositionX, mContainerPositionY; // Visible or not (scrolled off screen), whether or not this handle should be visible private boolean mIsActive = false; + // Used to detect that setFrame was called + private boolean mNeedsUpdate = true; public HandleView() { super(TextView.this.mContext); @@ -9074,6 +9079,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mIdealVerticalOffset = 0.7f * handleHeight; } + @Override + protected boolean setFrame(int left, int top, int right, int bottom) { + boolean changed = super.setFrame(left, top, right, bottom); + // onPreDraw is called for PhoneWindow before the layout of this view is + // performed. Make sure to update position, even if container didn't move. + if (changed) mNeedsUpdate = true; + return changed; + } + protected abstract void initDrawable(); // Touch-up filter: number of previous positions remembered @@ -9222,7 +9236,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mPositionY += viewportToContentVerticalOffset(); } - protected boolean updateContainerPosition() { + private void checkForContainerPositionChange() { positionAtCursorOffset(getCurrentCursorOffset()); final int previousContainerPositionX = mContainerPositionX; @@ -9232,12 +9246,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener mContainerPositionX = mTempCoords[0] + mPositionX; mContainerPositionY = mTempCoords[1] + mPositionY; - return (previousContainerPositionX != mContainerPositionX || - previousContainerPositionY != mContainerPositionY); + mNeedsUpdate |= previousContainerPositionX != mContainerPositionX; + mNeedsUpdate |= previousContainerPositionY != mContainerPositionY; } public boolean onPreDraw() { - if (updateContainerPosition()) { + checkForContainerPositionChange(); + if (mNeedsUpdate) { if (mIsDragging) { if (mTempCoords[0] != mLastParentX || mTempCoords[1] != mLastParentY) { mTouchToWindowOffsetX += mTempCoords[0] - mLastParentX; @@ -9261,6 +9276,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener dismiss(); } } + mNeedsUpdate = false; } return true; } |
