1d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi/*
2d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi * Copyright (C) 2012 The Android Open Source Project
3d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi *
48aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License");
58aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * you may not use this file except in compliance with the License.
68aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * You may obtain a copy of the License at
7d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi *
88aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka *      http://www.apache.org/licenses/LICENSE-2.0
9d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi *
10d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi * Unless required by applicable law or agreed to in writing, software
118aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS,
128aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * See the License for the specific language governing permissions and
148aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * limitations under the License.
15d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi */
16d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi
17d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bipackage com.android.inputmethod.keyboard.internal;
18d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi
19d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Biimport android.graphics.Canvas;
204987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaokaimport android.view.View;
21d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi
22d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Biimport com.android.inputmethod.keyboard.PointerTracker;
23d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi
24d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi/**
25cf915ddc878699909365dd599a0e154552e244e2Tadashi G. Takaoka * Abstract base class for previews that are drawn on DrawingPreviewPlacerView, e.g.,
26cf915ddc878699909365dd599a0e154552e244e2Tadashi G. Takaoka * GestureFloatingTextDrawingPreview, GestureTrailsDrawingPreview, and
27cf915ddc878699909365dd599a0e154552e244e2Tadashi G. Takaoka * SlidingKeyInputDrawingPreview.
28d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi */
29d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bipublic abstract class AbstractDrawingPreview {
307fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka    private View mDrawingView;
31d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi    private boolean mPreviewEnabled;
320c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka    private boolean mHasValidGeometry;
33d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi
347fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka    public void setDrawingView(final DrawingPreviewPlacerView drawingView) {
354987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka        mDrawingView = drawingView;
367fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka        drawingView.addPreview(this);
374987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka    }
384987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka
397fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka    protected void invalidateDrawingView() {
407fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka        if (mDrawingView != null) {
417fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka            mDrawingView.invalidate();
427fb630b2a83983ea42108969b82ca85886e19241Tadashi G. Takaoka        }
434987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka    }
444987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka
450c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka    protected final boolean isPreviewEnabled() {
460c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka        return mPreviewEnabled && mHasValidGeometry;
47d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi    }
48d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi
490c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka    public final void setPreviewEnabled(final boolean enabled) {
500c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka        mPreviewEnabled = enabled;
51d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi    }
52d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi
530c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka    /**
540c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka     * Set {@link MainKeyboardView} geometry and position in the {@link SoftInputWindow}.
550c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka     * The class that is overriding this method must call this super implementation.
560c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka     *
570c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka     * @param originCoords the top-left coordinates of the {@link MainKeyboardView} in
580c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka     *        {@link SoftInputWindow} coordinate-system. This is unused but has a point in an
590c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka     *        extended class, such as {@link GestureTrailsDrawingPreview}.
600c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka     * @param width the width of {@link MainKeyboardView}.
610c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka     * @param height the height of {@link MainKeyboardView}.
620c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka     */
630c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka    public void setKeyboardViewGeometry(final int[] originCoords, final int width,
640c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka            final int height) {
650c01fc6f1c01a2009546a2982818e68c08012ab3Tadashi G. Takaoka        mHasValidGeometry = (width > 0 && height > 0);
664987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka    }
674987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka
68afca1ddd233c03d79433931a0b6ba97ed22663edTadashi G. Takaoka    public abstract void onDeallocateMemory();
694987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka
70d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi    /**
71d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi     * Draws the preview
72d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi     * @param canvas The canvas where the preview is drawn.
73d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi     */
742ecbfe8e93f8d8fce0adc47659b5d2f52cb68849Tadashi G. Takaoka    public abstract void drawPreview(final Canvas canvas);
75d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi
76d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi    /**
77d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi     * Set the position of the preview.
784987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka     * @param tracker The new location of the preview is based on the points in PointerTracker.
79d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi     */
804987108f34c08825ccb1c859c971bf232438c4aaTadashi G. Takaoka    public abstract void setPreviewPosition(final PointerTracker tracker);
81d52730a2d7a6e98245719ce5c53bcf4b3a3ba1c9Xiaojun Bi}
82