Fix dimming keyboard

Bug: 6354679
Change-Id: I03bb0554bc06f1aab7eaa6c69fd9241ef300318f
This commit is contained in:
Tadashi G. Takaoka 2012-04-18 14:54:40 +09:00
parent 18178fefdc
commit b3f0912fd1

View file

@ -109,7 +109,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
// Drawing // Drawing
/** True if the entire keyboard needs to be dimmed. */ /** True if the entire keyboard needs to be dimmed. */
private boolean mNeedsToDimBackground; private boolean mNeedsToDimEntireKeyboard;
/** Whether the keyboard bitmap buffer needs to be redrawn before it's blitted. **/ /** Whether the keyboard bitmap buffer needs to be redrawn before it's blitted. **/
private boolean mBufferNeedsUpdate; private boolean mBufferNeedsUpdate;
/** True if all keys should be drawn */ /** True if all keys should be drawn */
@ -455,13 +455,16 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
final KeyDrawParams params = mKeyDrawParams; final KeyDrawParams params = mKeyDrawParams;
if (mInvalidateAllKeys || mInvalidatedKeys.isEmpty()) { if (mInvalidateAllKeys || mInvalidatedKeys.isEmpty()) {
mInvalidatedKeysRect.set(0, 0, getWidth(), getHeight()); mInvalidatedKeysRect.set(0, 0, width, height);
canvas.clipRect(mInvalidatedKeysRect, Op.REPLACE); canvas.clipRect(mInvalidatedKeysRect, Op.REPLACE);
canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR); canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
// Draw all keys. // Draw all keys.
for (final Key key : mKeyboard.mKeys) { for (final Key key : mKeyboard.mKeys) {
onDrawKey(key, canvas, paint, params); onDrawKey(key, canvas, paint, params);
} }
if (mNeedsToDimEntireKeyboard) {
drawDimRectangle(canvas, mInvalidatedKeysRect, mBackgroundDimAlpha, paint);
}
} else { } else {
// Draw invalidated keys. // Draw invalidated keys.
for (final Key key : mInvalidatedKeys) { for (final Key key : mInvalidatedKeys) {
@ -471,24 +474,20 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
canvas.clipRect(mInvalidatedKeysRect, Op.REPLACE); canvas.clipRect(mInvalidatedKeysRect, Op.REPLACE);
canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR); canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
onDrawKey(key, canvas, paint, params); onDrawKey(key, canvas, paint, params);
if (mNeedsToDimEntireKeyboard) {
drawDimRectangle(canvas, mInvalidatedKeysRect, mBackgroundDimAlpha, paint);
}
} }
} }
// Overlay a dark rectangle to dim the entire keyboard
if (mNeedsToDimBackground) {
paint.setColor(Color.BLACK);
paint.setAlpha(mBackgroundDimAlpha);
canvas.drawRect(0, 0, width, height, paint);
}
mInvalidatedKeys.clear(); mInvalidatedKeys.clear();
mInvalidatedKeysRect.setEmpty(); mInvalidatedKeysRect.setEmpty();
mInvalidateAllKeys = false; mInvalidateAllKeys = false;
} }
public void dimEntireKeyboard(boolean dimmed) { public void dimEntireKeyboard(boolean dimmed) {
final boolean needsRedrawing = mNeedsToDimBackground != dimmed; final boolean needsRedrawing = mNeedsToDimEntireKeyboard != dimmed;
mNeedsToDimBackground = dimmed; mNeedsToDimEntireKeyboard = dimmed;
if (needsRedrawing) { if (needsRedrawing) {
invalidateAllKeys(); invalidateAllKeys();
} }
@ -809,6 +808,13 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
canvas.translate(-x, -y); canvas.translate(-x, -y);
} }
// Overlay a dark rectangle to dim.
private static void drawDimRectangle(Canvas canvas, Rect rect, int alpha, Paint paint) {
paint.setColor(Color.BLACK);
paint.setAlpha(alpha);
canvas.drawRect(rect, paint);
}
public Paint newDefaultLabelPaint() { public Paint newDefaultLabelPaint() {
final Paint paint = new Paint(); final Paint paint = new Paint();
paint.setAntiAlias(true); paint.setAntiAlias(true);