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

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

Merge "Refactor drawing preview classes"

parents d801b6ee 7fb630b2
Loading
Loading
Loading
Loading
+6 −8
Original line number Original line Diff line number Diff line
@@ -236,16 +236,14 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
                R.styleable.MainKeyboardView_gestureFloatingPreviewTextLingerTimeout, 0);
                R.styleable.MainKeyboardView_gestureFloatingPreviewTextLingerTimeout, 0);


        mGestureFloatingTextDrawingPreview = new GestureFloatingTextDrawingPreview(
        mGestureFloatingTextDrawingPreview = new GestureFloatingTextDrawingPreview(
                mDrawingPreviewPlacerView, mainKeyboardViewAttr);
                mainKeyboardViewAttr);
        mDrawingPreviewPlacerView.addPreview(mGestureFloatingTextDrawingPreview);
        mGestureFloatingTextDrawingPreview.setDrawingView(mDrawingPreviewPlacerView);


        mGestureTrailsDrawingPreview = new GestureTrailsDrawingPreview(
        mGestureTrailsDrawingPreview = new GestureTrailsDrawingPreview(mainKeyboardViewAttr);
                mDrawingPreviewPlacerView, mainKeyboardViewAttr);
        mGestureTrailsDrawingPreview.setDrawingView(mDrawingPreviewPlacerView);
        mDrawingPreviewPlacerView.addPreview(mGestureTrailsDrawingPreview);


        mSlidingKeyInputDrawingPreview = new SlidingKeyInputDrawingPreview(
        mSlidingKeyInputDrawingPreview = new SlidingKeyInputDrawingPreview(mainKeyboardViewAttr);
                mDrawingPreviewPlacerView, mainKeyboardViewAttr);
        mSlidingKeyInputDrawingPreview.setDrawingView(mDrawingPreviewPlacerView);
        mDrawingPreviewPlacerView.addPreview(mSlidingKeyInputDrawingPreview);
        mainKeyboardViewAttr.recycle();
        mainKeyboardViewAttr.recycle();


        mMoreKeysKeyboardContainer = LayoutInflater.from(getContext())
        mMoreKeysKeyboardContainer = LayoutInflater.from(getContext())
+7 −4
Original line number Original line Diff line number Diff line
@@ -27,16 +27,19 @@ import com.android.inputmethod.keyboard.PointerTracker;
 * SlidingKeyInputDrawingPreview.
 * SlidingKeyInputDrawingPreview.
 */
 */
public abstract class AbstractDrawingPreview {
public abstract class AbstractDrawingPreview {
    private final View mDrawingView;
    private View mDrawingView;
    private boolean mPreviewEnabled;
    private boolean mPreviewEnabled;
    private boolean mHasValidGeometry;
    private boolean mHasValidGeometry;


    protected AbstractDrawingPreview(final View drawingView) {
    public void setDrawingView(final DrawingPreviewPlacerView drawingView) {
        mDrawingView = drawingView;
        mDrawingView = drawingView;
        drawingView.addPreview(this);
    }
    }


    protected final View getDrawingView() {
    protected void invalidateDrawingView() {
        return mDrawingView;
        if (mDrawingView != null) {
            mDrawingView.invalidate();
        }
    }
    }


    protected final boolean isPreviewEnabled() {
    protected final boolean isPreviewEnabled() {
+3 −1
Original line number Original line Diff line number Diff line
@@ -46,8 +46,10 @@ public final class DrawingPreviewPlacerView extends RelativeLayout {
    }
    }


    public void addPreview(final AbstractDrawingPreview preview) {
    public void addPreview(final AbstractDrawingPreview preview) {
        if (mPreviews.indexOf(preview) < 0) {
            mPreviews.add(preview);
            mPreviews.add(preview);
        }
        }
    }


    public void setKeyboardViewGeometry(final int[] originCoords, final int width,
    public void setKeyboardViewGeometry(final int[] originCoords, final int width,
            final int height) {
            final int height) {
+7 −8
Original line number Original line Diff line number Diff line
@@ -23,7 +23,6 @@ import android.graphics.Paint.Align;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.RectF;
import android.text.TextUtils;
import android.text.TextUtils;
import android.view.View;


import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.R;
@@ -49,6 +48,7 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
        public final float mGesturePreviewHorizontalPadding;
        public final float mGesturePreviewHorizontalPadding;
        public final float mGesturePreviewVerticalPadding;
        public final float mGesturePreviewVerticalPadding;
        public final float mGesturePreviewRoundRadius;
        public final float mGesturePreviewRoundRadius;
        public final int mDisplayWidth;


        private final int mGesturePreviewTextSize;
        private final int mGesturePreviewTextSize;
        private final int mGesturePreviewTextColor;
        private final int mGesturePreviewTextColor;
@@ -72,6 +72,7 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
                    R.styleable.MainKeyboardView_gestureFloatingPreviewVerticalPadding, 0.0f);
                    R.styleable.MainKeyboardView_gestureFloatingPreviewVerticalPadding, 0.0f);
            mGesturePreviewRoundRadius = mainKeyboardViewAttr.getDimension(
            mGesturePreviewRoundRadius = mainKeyboardViewAttr.getDimension(
                    R.styleable.MainKeyboardView_gestureFloatingPreviewRoundRadius, 0.0f);
                    R.styleable.MainKeyboardView_gestureFloatingPreviewRoundRadius, 0.0f);
            mDisplayWidth = mainKeyboardViewAttr.getResources().getDisplayMetrics().widthPixels;


            final Paint textPaint = getTextPaint();
            final Paint textPaint = getTextPaint();
            final Rect textRect = new Rect();
            final Rect textRect = new Rect();
@@ -100,9 +101,8 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
    private SuggestedWords mSuggestedWords = SuggestedWords.EMPTY;
    private SuggestedWords mSuggestedWords = SuggestedWords.EMPTY;
    private final int[] mLastPointerCoords = CoordinateUtils.newInstance();
    private final int[] mLastPointerCoords = CoordinateUtils.newInstance();


    public GestureFloatingTextDrawingPreview(final View drawingView, final TypedArray typedArray) {
    public GestureFloatingTextDrawingPreview(final TypedArray mainKeyboardViewAttr) {
        super(drawingView);
        mParams = new GesturePreviewTextParams(mainKeyboardViewAttr);
        mParams = new GesturePreviewTextParams(typedArray);
    }
    }


    @Override
    @Override
@@ -149,7 +149,7 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
     */
     */
    protected void updatePreviewPosition() {
    protected void updatePreviewPosition() {
        if (mSuggestedWords.isEmpty() || TextUtils.isEmpty(mSuggestedWords.getWord(0))) {
        if (mSuggestedWords.isEmpty() || TextUtils.isEmpty(mSuggestedWords.getWord(0))) {
            getDrawingView().invalidate();
            invalidateDrawingView();
            return;
            return;
        }
        }
        final String text = mSuggestedWords.getWord(0);
        final String text = mSuggestedWords.getWord(0);
@@ -163,10 +163,9 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
        final float rectWidth = textWidth + hPad * 2.0f;
        final float rectWidth = textWidth + hPad * 2.0f;
        final float rectHeight = textHeight + vPad * 2.0f;
        final float rectHeight = textHeight + vPad * 2.0f;


        final int displayWidth = getDrawingView().getResources().getDisplayMetrics().widthPixels;
        final float rectX = Math.min(
        final float rectX = Math.min(
                Math.max(CoordinateUtils.x(mLastPointerCoords) - rectWidth / 2.0f, 0.0f),
                Math.max(CoordinateUtils.x(mLastPointerCoords) - rectWidth / 2.0f, 0.0f),
                displayWidth - rectWidth);
                mParams.mDisplayWidth - rectWidth);
        final float rectY = CoordinateUtils.y(mLastPointerCoords)
        final float rectY = CoordinateUtils.y(mLastPointerCoords)
                - mParams.mGesturePreviewTextOffset - rectHeight;
                - mParams.mGesturePreviewTextOffset - rectHeight;
        rectangle.set(rectX, rectY, rectX + rectWidth, rectY + rectHeight);
        rectangle.set(rectX, rectY, rectX + rectWidth, rectY + rectHeight);
@@ -174,6 +173,6 @@ public class GestureFloatingTextDrawingPreview extends AbstractDrawingPreview {
        mPreviewTextX = (int)(rectX + hPad + textWidth / 2.0f);
        mPreviewTextX = (int)(rectX + hPad + textWidth / 2.0f);
        mPreviewTextY = (int)(rectY + vPad) + textHeight;
        mPreviewTextY = (int)(rectY + vPad) + textHeight;
        // TODO: Should narrow the invalidate region.
        // TODO: Should narrow the invalidate region.
        getDrawingView().invalidate();
        invalidateDrawingView();
    }
    }
}
}
+13 −43
Original line number Original line Diff line number Diff line
@@ -24,17 +24,15 @@ import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.Rect;
import android.os.Message;
import android.os.Handler;
import android.util.SparseArray;
import android.util.SparseArray;
import android.view.View;


import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.keyboard.PointerTracker;
import com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper;


/**
/**
 * Draw preview graphics of multiple gesture trails during gesture input.
 * Draw preview graphics of multiple gesture trails during gesture input.
 */
 */
public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview implements Runnable {
    private final SparseArray<GestureTrailDrawingPoints> mGestureTrails = new SparseArray<>();
    private final SparseArray<GestureTrailDrawingPoints> mGestureTrails = new SparseArray<>();
    private final GestureTrailDrawingParams mDrawingParams;
    private final GestureTrailDrawingParams mDrawingParams;
    private final Paint mGesturePaint;
    private final Paint mGesturePaint;
@@ -47,45 +45,10 @@ public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
    private final Rect mDirtyRect = new Rect();
    private final Rect mDirtyRect = new Rect();
    private final Rect mGestureTrailBoundsRect = new Rect(); // per trail
    private final Rect mGestureTrailBoundsRect = new Rect(); // per trail


    private final DrawingHandler mDrawingHandler;
    private final Handler mDrawingHandler = new Handler();


    private static final class DrawingHandler
    public GestureTrailsDrawingPreview(final TypedArray mainKeyboardViewAttr) {
            extends LeakGuardHandlerWrapper<GestureTrailsDrawingPreview> {
        private static final int MSG_UPDATE_GESTURE_TRAIL = 0;

        private final GestureTrailDrawingParams mDrawingParams;

        public DrawingHandler(final GestureTrailsDrawingPreview ownerInstance,
                final GestureTrailDrawingParams drawingParams) {
            super(ownerInstance);
            mDrawingParams = drawingParams;
        }

        @Override
        public void handleMessage(final Message msg) {
            final GestureTrailsDrawingPreview preview = getOwnerInstance();
            if (preview == null) {
                return;
            }
            switch (msg.what) {
            case MSG_UPDATE_GESTURE_TRAIL:
                preview.getDrawingView().invalidate();
                break;
            }
        }

        public void postUpdateGestureTrailPreview() {
            removeMessages(MSG_UPDATE_GESTURE_TRAIL);
            sendMessageDelayed(obtainMessage(MSG_UPDATE_GESTURE_TRAIL),
                    mDrawingParams.mUpdateInterval);
        }
    }

    public GestureTrailsDrawingPreview(final View drawingView,
            final TypedArray mainKeyboardViewAttr) {
        super(drawingView);
        mDrawingParams = new GestureTrailDrawingParams(mainKeyboardViewAttr);
        mDrawingParams = new GestureTrailDrawingParams(mainKeyboardViewAttr);
        mDrawingHandler = new DrawingHandler(this, mDrawingParams);
        final Paint gesturePaint = new Paint();
        final Paint gesturePaint = new Paint();
        gesturePaint.setAntiAlias(true);
        gesturePaint.setAntiAlias(true);
        gesturePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
        gesturePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
@@ -153,6 +116,12 @@ public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
        return needsUpdatingGestureTrail;
        return needsUpdatingGestureTrail;
    }
    }


    @Override
    public void run() {
        // Update preview.
        invalidateDrawingView();
    }

    /**
    /**
     * Draws the preview
     * Draws the preview
     * @param canvas The canvas where the preview is drawn.
     * @param canvas The canvas where the preview is drawn.
@@ -167,7 +136,8 @@ public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
        final boolean needsUpdatingGestureTrail = drawGestureTrails(
        final boolean needsUpdatingGestureTrail = drawGestureTrails(
                mOffscreenCanvas, mGesturePaint, mDirtyRect);
                mOffscreenCanvas, mGesturePaint, mDirtyRect);
        if (needsUpdatingGestureTrail) {
        if (needsUpdatingGestureTrail) {
            mDrawingHandler.postUpdateGestureTrailPreview();
            mDrawingHandler.removeCallbacks(this);
            mDrawingHandler.postDelayed(this, mDrawingParams.mUpdateInterval);
        }
        }
        // Transfer offscreen buffer to screen.
        // Transfer offscreen buffer to screen.
        if (!mDirtyRect.isEmpty()) {
        if (!mDirtyRect.isEmpty()) {
@@ -199,6 +169,6 @@ public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
        trail.addStroke(tracker.getGestureStrokeDrawingPoints(), tracker.getDownTime());
        trail.addStroke(tracker.getGestureStrokeDrawingPoints(), tracker.getDownTime());


        // TODO: Should narrow the invalidate region.
        // TODO: Should narrow the invalidate region.
        getDrawingView().invalidate();
        invalidateDrawingView();
    }
    }
}
}
Loading