diff options
| author | Mihai Popa <popam@google.com> | 2018-03-23 17:39:04 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-03-23 17:39:04 +0000 |
| commit | 14372aaabcebec33c1b8f0a19b665bf65503c758 (patch) | |
| tree | 3c3b2102648e613e2fafd6265dac96f1ba510cde /core/java/android/widget | |
| parent | 600f3bb4fb8dbf2566436e708ecf590b468072a7 (diff) | |
| parent | 953b134f2da8817898e9927b035445e40af0332b (diff) | |
Merge "[Magnifier-34] Keep magnifier inside its surface" into pi-dev
Diffstat (limited to 'core/java/android/widget')
| -rw-r--r-- | core/java/android/widget/Magnifier.java | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/core/java/android/widget/Magnifier.java b/core/java/android/widget/Magnifier.java index e2601dcb91ac..df04bebee52c 100644 --- a/core/java/android/widget/Magnifier.java +++ b/core/java/android/widget/Magnifier.java @@ -215,6 +215,10 @@ public final class Magnifier { mWindow.destroy(); mWindow = null; } + mPrevPosInView.x = NONEXISTENT_PREVIOUS_CONFIG_VALUE; + mPrevPosInView.y = NONEXISTENT_PREVIOUS_CONFIG_VALUE; + mPrevStartCoordsInSurface.x = NONEXISTENT_PREVIOUS_CONFIG_VALUE; + mPrevStartCoordsInSurface.y = NONEXISTENT_PREVIOUS_CONFIG_VALUE; } } @@ -321,19 +325,24 @@ public final class Magnifier { // Clamp copy coordinates inside the surface to avoid displaying distorted content. final int clampedStartXInSurface = Math.max(0, - Math.min(startXInSurface, surfaceWidth - mWindowWidth)); + Math.min(startXInSurface, surfaceWidth - mBitmapWidth)); final int clampedStartYInSurface = Math.max(0, - Math.min(startYInSurface, surfaceHeight - mWindowHeight)); + Math.min(startYInSurface, surfaceHeight - mBitmapHeight)); + + // Clamp window coordinates inside the parent surface, to avoid displaying + // the magnifier out of screen or overlapping with system insets. + final Rect insets = mView.getRootWindowInsets().getSystemWindowInsets(); + final int windowCoordsX = Math.max(insets.left, + Math.min(surfaceWidth - mWindowWidth - insets.right, mWindowCoords.x)); + final int windowCoordsY = Math.max(insets.top, + Math.min(surfaceHeight - mWindowHeight - insets.bottom, mWindowCoords.y)); // Perform the pixel copy. mPixelCopyRequestRect.set(clampedStartXInSurface, clampedStartYInSurface, clampedStartXInSurface + mBitmapWidth, clampedStartYInSurface + mBitmapHeight); - final int windowCoordsX = mWindowCoords.x; - final int windowCoordsY = mWindowCoords.y; final InternalPopupWindow currentWindowInstance = mWindow; - final Bitmap bitmap = Bitmap.createBitmap(mBitmapWidth, mBitmapHeight, Bitmap.Config.ARGB_8888); PixelCopy.request(surface, mPixelCopyRequestRect, bitmap, |
