MoreSuggestionsView.java revision 3d8848e5cb709fb47b450e7ede5a2926d99c957d
1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.inputmethod.latin.suggestions;
18
19import android.content.Context;
20import android.util.AttributeSet;
21import android.util.Log;
22
23import com.android.inputmethod.accessibility.AccessibilityUtils;
24import com.android.inputmethod.accessibility.MoreSuggestionsAccessibilityDelegate;
25import com.android.inputmethod.keyboard.Key;
26import com.android.inputmethod.keyboard.Keyboard;
27import com.android.inputmethod.keyboard.KeyboardActionListener;
28import com.android.inputmethod.keyboard.MoreKeysKeyboardView;
29import com.android.inputmethod.latin.R;
30import com.android.inputmethod.latin.SuggestedWords;
31import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
32import com.android.inputmethod.latin.suggestions.MoreSuggestions.MoreSuggestionKey;
33
34/**
35 * A view that renders a virtual {@link MoreSuggestions}. It handles rendering of keys and detecting
36 * key presses and touch movements.
37 */
38public final class MoreSuggestionsView extends MoreKeysKeyboardView {
39    private static final String TAG = MoreSuggestionsView.class.getSimpleName();
40
41    public static abstract class MoreSuggestionsListener extends KeyboardActionListener.Adapter {
42        public abstract void onSuggestionSelected(final int index, final SuggestedWordInfo info);
43    }
44
45    public MoreSuggestionsView(final Context context, final AttributeSet attrs) {
46        this(context, attrs, R.attr.moreKeysKeyboardViewStyle);
47    }
48
49    public MoreSuggestionsView(final Context context, final AttributeSet attrs,
50            final int defStyle) {
51        super(context, attrs, defStyle);
52    }
53
54    // TODO: Remove redundant override method.
55    @Override
56    public void setKeyboard(final Keyboard keyboard) {
57        super.setKeyboard(keyboard);
58        // With accessibility mode off, {@link #mAccessibilityDelegate} is set to null at the
59        // above {@link MoreKeysKeyboardView#setKeyboard(Keyboard)} call.
60        // With accessibility mode on, {@link #mAccessibilityDelegate} is set to a
61        // {@link MoreKeysKeyboardAccessibilityDelegate} object at the above
62        // {@link MoreKeysKeyboardView#setKeyboard(Keyboard)} call. And the object has to be
63        // overwritten by a {@link MoreSuggestionsAccessibilityDelegate} object here.
64        if (AccessibilityUtils.getInstance().isAccessibilityEnabled()) {
65            if (!(mAccessibilityDelegate instanceof MoreSuggestionsAccessibilityDelegate)) {
66                mAccessibilityDelegate = new MoreSuggestionsAccessibilityDelegate(
67                        this, mKeyDetector);
68                mAccessibilityDelegate.setOpenAnnounce(R.string.spoken_open_more_suggestions);
69                mAccessibilityDelegate.setCloseAnnounce(R.string.spoken_close_more_suggestions);
70            }
71            mAccessibilityDelegate.setKeyboard(keyboard);
72        }
73    }
74
75    @Override
76    protected int getDefaultCoordX() {
77        final MoreSuggestions pane = (MoreSuggestions)getKeyboard();
78        return pane.mOccupiedWidth / 2;
79    }
80
81    public void updateKeyboardGeometry(final int keyHeight) {
82        updateKeyDrawParams(keyHeight);
83    }
84
85    public void adjustVerticalCorrectionForModalMode() {
86        // Set vertical correction to zero (Reset more keys keyboard sliding allowance
87        // {@link R#dimen.config_more_keys_keyboard_slide_allowance}).
88        mKeyDetector.setKeyboard(getKeyboard(), -getPaddingLeft(), -getPaddingTop());
89    }
90
91    @Override
92    protected void onKeyInput(final Key key, final int x, final int y) {
93        if (!(key instanceof MoreSuggestionKey)) {
94            Log.e(TAG, "Expected key is MoreSuggestionKey, but found "
95                    + key.getClass().getName());
96            return;
97        }
98        final Keyboard keyboard = getKeyboard();
99        if (!(keyboard instanceof MoreSuggestions)) {
100            Log.e(TAG, "Expected keyboard is MoreSuggestions, but found "
101                    + keyboard.getClass().getName());
102            return;
103        }
104        final SuggestedWords suggestedWords = ((MoreSuggestions)keyboard).mSuggestedWords;
105        final int index = ((MoreSuggestionKey)key).mSuggestedWordIndex;
106        if (index < 0 || index >= suggestedWords.size()) {
107            Log.e(TAG, "Selected suggestion has an illegal index: " + index);
108            return;
109        }
110        if (!(mListener instanceof MoreSuggestionsListener)) {
111            Log.e(TAG, "Expected mListener is MoreSuggestionsListener, but found "
112                    + mListener.getClass().getName());
113            return;
114        }
115        ((MoreSuggestionsListener)mListener).onSuggestionSelected(
116                index, suggestedWords.getInfo(index));
117    }
118}
119