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