Loading java/src/com/android/inputmethod/keyboard/MainKeyboardView.java +6 −8 Original line number Original line Diff line number Diff line Loading @@ -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()) Loading java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java +7 −4 Original line number Original line Diff line number Diff line Loading @@ -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() { Loading java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java +3 −1 Original line number Original line Diff line number Diff line Loading @@ -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) { Loading java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java +7 −8 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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(); Loading Loading @@ -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 Loading Loading @@ -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); Loading @@ -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); Loading @@ -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(); } } } } java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java +13 −43 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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)); Loading Loading @@ -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. Loading @@ -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()) { Loading Loading @@ -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
java/src/com/android/inputmethod/keyboard/MainKeyboardView.java +6 −8 Original line number Original line Diff line number Diff line Loading @@ -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()) Loading
java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java +7 −4 Original line number Original line Diff line number Diff line Loading @@ -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() { Loading
java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java +3 −1 Original line number Original line Diff line number Diff line Loading @@ -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) { Loading
java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java +7 −8 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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(); Loading Loading @@ -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 Loading Loading @@ -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); Loading @@ -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); Loading @@ -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(); } } } }
java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java +13 −43 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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)); Loading Loading @@ -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. Loading @@ -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()) { Loading Loading @@ -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(); } } } }