Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6242564c authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka Committed by Android (Google) Code Review
Browse files

Merge "Using hardware accelerated drawing" into jb-mr1-dev

parents 1d8a246e 622d6a5b
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -349,7 +349,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions {
        return mKeyboardView;
    }

    public View onCreateInputView() {
    public View onCreateInputView(boolean isHardwareAcceleratedDrawingEnabled) {
        if (mKeyboardView != null) {
            mKeyboardView.closing();
        }
@@ -372,6 +372,10 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions {
        }

        mKeyboardView = (MainKeyboardView) mCurrentInputView.findViewById(R.id.keyboard_view);
        if (isHardwareAcceleratedDrawingEnabled) {
            mKeyboardView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
            // TODO: Should use LAYER_TYPE_SOFTWARE when hardware acceleration is off?
        }
        mKeyboardView.setKeyboardActionListener(mLatinIME);
        if (mForceNonDistinctMultitouch) {
            mKeyboardView.setDistinctMultitouch(false);
+47 −25
Original line number Diff line number Diff line
@@ -123,6 +123,8 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
    /** The working rectangle variable */
    private final Rect mWorkingRect = new Rect();
    /** The keyboard bitmap buffer for faster updates */
    /** The clip region to draw keys */
    private final Region mClipRegion = new Region();
    private Bitmap mOffscreenBuffer;
    /** The canvas for the above mutable keyboard bitmap */
    private Canvas mOffscreenCanvas;
@@ -457,10 +459,15 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (canvas.isHardwareAccelerated()) {
            onDrawKeyboard(canvas);
            return;
        }
        if (mBufferNeedsUpdate || mOffscreenBuffer == null) {
            mBufferNeedsUpdate = false;
            if (maybeAllocateOffscreenBuffer()) {
                mInvalidateAllKeys = true;
                // TODO: Stop using the offscreen canvas even when in software rendering
                if (mOffscreenCanvas != null) {
                    mOffscreenCanvas.setBitmap(mOffscreenBuffer);
                } else {
@@ -502,35 +509,57 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
        final Paint paint = mPaint;
        final KeyDrawParams params = mKeyDrawParams;

        if (mInvalidateAllKeys || mInvalidatedKeys.isEmpty()) {
            mWorkingRect.set(0, 0, width, height);
            canvas.clipRect(mWorkingRect, Region.Op.REPLACE);
        // Calculate clip region and set.
        final boolean drawAllKeys = mInvalidateAllKeys || mInvalidatedKeys.isEmpty();
        final boolean isHardwareAccelerated = canvas.isHardwareAccelerated();
        // TODO: Confirm if it's really required to draw all keys when hardware acceleration is on.
        if (drawAllKeys || isHardwareAccelerated) {
            mClipRegion.set(0, 0, width, height);
        } else {
            mClipRegion.setEmpty();
            for (final Key key : mInvalidatedKeys) {
                if (mKeyboard.hasKey(key)) {
                    final int x = key.mX + getPaddingLeft();
                    final int y = key.mY + getPaddingTop();
                    mWorkingRect.set(x, y, x + key.mWidth, y + key.mHeight);
                    mClipRegion.union(mWorkingRect);
                }
            }
        }
        if (!isHardwareAccelerated) {
            canvas.clipRegion(mClipRegion, Region.Op.REPLACE);
        }

        // Draw keyboard background.
        canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
        final Drawable background = getBackground();
        if (background != null) {
            background.draw(canvas);
        }

        // TODO: Confirm if it's really required to draw all keys when hardware acceleration is on.
        if (drawAllKeys || isHardwareAccelerated) {
            // Draw all keys.
            for (final Key key : mKeyboard.mKeys) {
                onDrawKey(key, canvas, paint, params);
            }
            if (mNeedsToDimEntireKeyboard) {
                drawDimRectangle(canvas, mWorkingRect, mBackgroundDimAlpha, paint);
            }
        } else {
            // Draw invalidated keys.
            for (final Key key : mInvalidatedKeys) {
                if (!mKeyboard.hasKey(key)) {
                    continue;
                }
                final int x = key.mX + getPaddingLeft();
                final int y = key.mY + getPaddingTop();
                mWorkingRect.set(x, y, x + key.mWidth, y + key.mHeight);
                canvas.clipRect(mWorkingRect, Region.Op.REPLACE);
                canvas.drawColor(Color.BLACK, PorterDuff.Mode.CLEAR);
                if (mKeyboard.hasKey(key)) {
                    onDrawKey(key, canvas, paint, params);
                if (mNeedsToDimEntireKeyboard) {
                    drawDimRectangle(canvas, mWorkingRect, mBackgroundDimAlpha, paint);
                }
            }
        }

        // Overlay a dark rectangle to dim.
        if (mNeedsToDimEntireKeyboard) {
            paint.setColor(Color.BLACK);
            paint.setAlpha(mBackgroundDimAlpha);
            // Note: clipRegion() above is in effect if it was called.
            canvas.drawRect(0, 0, width, height, paint);
        }

        // ResearchLogging indicator.
        // TODO: Reimplement using a keyboard background image specific to the ResearchLogger,
        // and remove this call.
@@ -863,13 +892,6 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
        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() {
        final Paint paint = new Paint();
        paint.setAntiAlias(true);
+1 −1
Original line number Diff line number Diff line
@@ -553,7 +553,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen

    @Override
    public View onCreateInputView() {
        return mKeyboardSwitcher.onCreateInputView();
        return mKeyboardSwitcher.onCreateInputView(mIsHardwareAcceleratedDrawingEnabled);
    }

    @Override