diff options
| author | Tarandeep Singh <tarandeep@google.com> | 2018-05-18 13:53:53 -0700 |
|---|---|---|
| committer | Tarandeep Singh <tarandeep@google.com> | 2018-05-22 19:10:20 +0000 |
| commit | d59c695a7875b22a9ac374dff10c62e91e534d81 (patch) | |
| tree | 92c89f5b14c6fe8c46d9098f0978a64961e31886 /core/java/android/inputmethodservice/KeyboardView.java | |
| parent | 52ecba88d181e64da8bd16f7e2d771812bd8a25b (diff) | |
Stop using unsupported Canvas operations in IME
KeyboardView relies on deprecated Canvas#clipRect(Rect, Op.REPLACE).
This method is now unsupported and throws runtime exception.
Operations other than Difference and Intersect are unsupported.
This method call can be replaced by saving initial Canvas and calling
intersect operation of Canvas#clipRect(Rect).
Saving initial state can be achieved using Canvas.save() and
Canvas.restore().
Fixes: 79777033
Test: Manually verified with SoftKeyboard (which uses KeyboardView)
1. m SoftKeyboard
2. Set current keyboard to SoftKeyboard
3. SoftKeyboard runs fine
Test: Tested Canvas.getClipBounds() is consistent across save() &
.restore() operations
Change-Id: Id34c289f152b2ec06f37fffa9f940a909153447c
Diffstat (limited to 'core/java/android/inputmethodservice/KeyboardView.java')
| -rw-r--r-- | core/java/android/inputmethodservice/KeyboardView.java | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java index 2306e5fa3dc1..16c1f6d59ca3 100644 --- a/core/java/android/inputmethodservice/KeyboardView.java +++ b/core/java/android/inputmethodservice/KeyboardView.java @@ -21,18 +21,15 @@ import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.Paint.Align; import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.Typeface; -import android.graphics.Paint.Align; -import android.graphics.Region.Op; import android.graphics.drawable.Drawable; import android.inputmethodservice.Keyboard.Key; import android.media.AudioManager; import android.os.Handler; import android.os.Message; -import android.os.UserHandle; -import android.provider.Settings; import android.util.AttributeSet; import android.util.TypedValue; import android.view.GestureDetector; @@ -662,11 +659,13 @@ public class KeyboardView extends View implements View.OnClickListener { invalidateAllKeys(); mKeyboardChanged = false; } - final Canvas canvas = mCanvas; - canvas.clipRect(mDirtyRect, Op.REPLACE); if (mKeyboard == null) return; + mCanvas.save(); + final Canvas canvas = mCanvas; + canvas.clipRect(mDirtyRect); + final Paint paint = mPaint; final Drawable keyBackground = mKeyBackground; final Rect clipRegion = mClipRegion; @@ -758,7 +757,7 @@ public class KeyboardView extends View implements View.OnClickListener { paint.setColor(0xFF00FF00); canvas.drawCircle((mStartX + mLastX) / 2, (mStartY + mLastY) / 2, 2, paint); } - + mCanvas.restore(); mDrawPending = false; mDirtyRect.setEmpty(); } |
