2013-01-21 09:46:16 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2013 The Android Open Source Project
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package com.android.inputmethod.keyboard.internal;
|
|
|
|
|
|
|
|
import android.content.res.TypedArray;
|
|
|
|
import android.graphics.Canvas;
|
2013-01-24 07:08:33 +00:00
|
|
|
import android.graphics.Paint;
|
|
|
|
import android.graphics.Path;
|
2013-01-21 09:46:16 +00:00
|
|
|
import android.view.View;
|
|
|
|
|
|
|
|
import com.android.inputmethod.keyboard.PointerTracker;
|
2013-01-24 07:08:33 +00:00
|
|
|
import com.android.inputmethod.latin.R;
|
2013-06-23 16:11:32 +00:00
|
|
|
import com.android.inputmethod.latin.utils.CoordinateUtils;
|
2013-01-21 09:46:16 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Draw rubber band preview graphics during sliding key input.
|
|
|
|
*/
|
|
|
|
public final class SlidingKeyInputPreview extends AbstractDrawingPreview {
|
2013-04-16 07:44:23 +00:00
|
|
|
private final float mPreviewBodyRadius;
|
2013-01-24 07:08:33 +00:00
|
|
|
|
2013-01-21 09:46:16 +00:00
|
|
|
private boolean mShowSlidingKeyInputPreview;
|
2013-01-24 07:08:33 +00:00
|
|
|
private final int[] mPreviewFrom = CoordinateUtils.newInstance();
|
|
|
|
private final int[] mPreviewTo = CoordinateUtils.newInstance();
|
|
|
|
|
|
|
|
// TODO: Finalize the rubber band preview implementation.
|
|
|
|
private final RoundedLine mRoundedLine = new RoundedLine();
|
|
|
|
private final Paint mPaint = new Paint();
|
2013-01-21 09:46:16 +00:00
|
|
|
|
|
|
|
public SlidingKeyInputPreview(final View drawingView, final TypedArray mainKeyboardViewAttr) {
|
|
|
|
super(drawingView);
|
2013-01-24 07:08:33 +00:00
|
|
|
final int previewColor = mainKeyboardViewAttr.getColor(
|
|
|
|
R.styleable.MainKeyboardView_slidingKeyInputPreviewColor, 0);
|
2013-04-16 07:44:23 +00:00
|
|
|
final float previewRadius = mainKeyboardViewAttr.getDimension(
|
|
|
|
R.styleable.MainKeyboardView_slidingKeyInputPreviewWidth, 0) / 2.0f;
|
|
|
|
final int PERCENTAGE_INT = 100;
|
|
|
|
final float previewBodyRatio = (float)mainKeyboardViewAttr.getInt(
|
|
|
|
R.styleable.MainKeyboardView_slidingKeyInputPreviewBodyRatio, PERCENTAGE_INT)
|
|
|
|
/ (float)PERCENTAGE_INT;
|
|
|
|
mPreviewBodyRadius = previewRadius * previewBodyRatio;
|
|
|
|
final int previewShadowRatioInt = mainKeyboardViewAttr.getInt(
|
|
|
|
R.styleable.MainKeyboardView_slidingKeyInputPreviewShadowRatio, 0);
|
|
|
|
if (previewShadowRatioInt > 0) {
|
|
|
|
final float previewShadowRatio = (float)previewShadowRatioInt / (float)PERCENTAGE_INT;
|
|
|
|
final float shadowRadius = previewRadius * previewShadowRatio;
|
|
|
|
mPaint.setShadowLayer(shadowRadius, 0.0f, 0.0f, previewColor);
|
|
|
|
}
|
2013-01-24 07:08:33 +00:00
|
|
|
mPaint.setColor(previewColor);
|
2013-01-21 09:46:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void dismissSlidingKeyInputPreview() {
|
|
|
|
mShowSlidingKeyInputPreview = false;
|
2013-01-24 07:08:33 +00:00
|
|
|
getDrawingView().invalidate();
|
2013-01-21 09:46:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Draws the preview
|
|
|
|
* @param canvas The canvas where the preview is drawn.
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public void drawPreview(final Canvas canvas) {
|
2013-01-24 07:08:33 +00:00
|
|
|
if (!isPreviewEnabled() || !mShowSlidingKeyInputPreview) {
|
2013-01-21 09:46:16 +00:00
|
|
|
return;
|
|
|
|
}
|
2013-01-24 07:08:33 +00:00
|
|
|
|
|
|
|
// TODO: Finalize the rubber band preview implementation.
|
2013-04-16 07:44:23 +00:00
|
|
|
final float radius = mPreviewBodyRadius;
|
2013-01-24 07:08:33 +00:00
|
|
|
final Path path = mRoundedLine.makePath(
|
|
|
|
CoordinateUtils.x(mPreviewFrom), CoordinateUtils.y(mPreviewFrom), radius,
|
|
|
|
CoordinateUtils.x(mPreviewTo), CoordinateUtils.y(mPreviewTo), radius);
|
|
|
|
canvas.drawPath(path, mPaint);
|
2013-01-21 09:46:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the position of the preview.
|
|
|
|
* @param tracker The new location of the preview is based on the points in PointerTracker.
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public void setPreviewPosition(final PointerTracker tracker) {
|
|
|
|
if (!tracker.isInSlidingKeyInputFromModifier()) {
|
|
|
|
mShowSlidingKeyInputPreview = false;
|
|
|
|
return;
|
|
|
|
}
|
2013-01-24 07:08:33 +00:00
|
|
|
tracker.getDownCoordinates(mPreviewFrom);
|
|
|
|
tracker.getLastCoordinates(mPreviewTo);
|
2013-01-21 09:46:16 +00:00
|
|
|
mShowSlidingKeyInputPreview = true;
|
|
|
|
getDrawingView().invalidate();
|
|
|
|
}
|
|
|
|
}
|