diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 02e8eeb3b..4975d6540 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -119,6 +119,7 @@ + @@ -128,6 +129,8 @@ + + diff --git a/java/res/values/config.xml b/java/res/values/config.xml index e5575e7ae..54a6687a3 100644 --- a/java/res/values/config.xml +++ b/java/res/values/config.xml @@ -49,6 +49,7 @@ Configuration for KeyboardView --> 70 + 200 diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 955a27631..ae67c4369 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -77,6 +77,7 @@ @dimen/gesture_floating_preview_text_shadow_border @android:color/white @dimen/gesture_floating_preview_text_connector_width + @integer/config_gesture_floating_preview_text_linger_timeout @android:color/holo_blue_light @dimen/gesture_preview_trail_width diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java index dc84763c1..10f651ad1 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java @@ -267,7 +267,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions { // Implements {@link KeyboardState.SwitchActions}. @Override public void startDoubleTapTimer() { - final MainKeyboardView keyboardView = getKeyboardView(); + final MainKeyboardView keyboardView = getMainKeyboardView(); if (keyboardView != null) { final TimerProxy timer = keyboardView.getTimerProxy(); timer.startDoubleTapTimer(); @@ -277,7 +277,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions { // Implements {@link KeyboardState.SwitchActions}. @Override public void cancelDoubleTapTimer() { - final MainKeyboardView keyboardView = getKeyboardView(); + final MainKeyboardView keyboardView = getMainKeyboardView(); if (keyboardView != null) { final TimerProxy timer = keyboardView.getTimerProxy(); timer.cancelDoubleTapTimer(); @@ -287,7 +287,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions { // Implements {@link KeyboardState.SwitchActions}. @Override public boolean isInDoubleTapTimeout() { - final MainKeyboardView keyboardView = getKeyboardView(); + final MainKeyboardView keyboardView = getMainKeyboardView(); return (keyboardView != null) ? keyboardView.getTimerProxy().isInDoubleTapTimeout() : false; } @@ -295,7 +295,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions { // Implements {@link KeyboardState.SwitchActions}. @Override public void startLongPressTimer(int code) { - final MainKeyboardView keyboardView = getKeyboardView(); + final MainKeyboardView keyboardView = getMainKeyboardView(); if (keyboardView != null) { final TimerProxy timer = keyboardView.getTimerProxy(); timer.startLongPressTimer(code); @@ -305,7 +305,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions { // Implements {@link KeyboardState.SwitchActions}. @Override public void cancelLongPressTimer() { - final MainKeyboardView keyboardView = getKeyboardView(); + final MainKeyboardView keyboardView = getMainKeyboardView(); if (keyboardView != null) { final TimerProxy timer = keyboardView.getTimerProxy(); timer.cancelLongPressTimer(); @@ -345,7 +345,7 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions { mState.onCodeInput(code, isSinglePointer(), mLatinIME.getCurrentAutoCapsState()); } - public MainKeyboardView getKeyboardView() { + public MainKeyboardView getMainKeyboardView() { return mKeyboardView; } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index 69e4d9805..0e6de7032 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -140,7 +140,7 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { private final DrawingHandler mDrawingHandler = new DrawingHandler(this); public static class DrawingHandler extends StaticInnerHandlerWrapper { - private static final int MSG_DISMISS_KEY_PREVIEW = 1; + private static final int MSG_DISMISS_KEY_PREVIEW = 0; public DrawingHandler(KeyboardView outerInstance) { super(outerInstance); @@ -902,6 +902,9 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { public void cancelAllMessages() { mDrawingHandler.cancelAllMessages(); + if (mPreviewPlacerView != null) { + mPreviewPlacerView.cancelAllMessages(); + } } // Called by {@link PointerTracker} constructor to create a TextView. @@ -943,6 +946,11 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy { mPreviewPlacerView.setGestureFloatingPreviewText(gestureFloatingPreviewText); } + public void dismissGestureFloatingPreviewText() { + locatePreviewPlacerView(); + mPreviewPlacerView.dismissGestureFloatingPreviewText(); + } + @Override public void showGestureTrail(PointerTracker tracker) { locatePreviewPlacerView(); diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java index 79459083f..fe9cb9415 100644 --- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java @@ -122,10 +122,10 @@ public class MainKeyboardView extends KeyboardView implements PointerTracker.Key private static class KeyTimerHandler extends StaticInnerHandlerWrapper implements TimerProxy { + private static final int MSG_TYPING_STATE_EXPIRED = 0; private static final int MSG_REPEAT_KEY = 1; private static final int MSG_LONGPRESS_KEY = 2; private static final int MSG_DOUBLE_TAP = 3; - private static final int MSG_TYPING_STATE_EXPIRED = 4; private final KeyTimerParams mParams; @@ -139,6 +139,9 @@ public class MainKeyboardView extends KeyboardView implements PointerTracker.Key final MainKeyboardView keyboardView = getOuterInstance(); final PointerTracker tracker = (PointerTracker) msg.obj; switch (msg.what) { + case MSG_TYPING_STATE_EXPIRED: + startWhileTypingFadeinAnimation(keyboardView); + break; case MSG_REPEAT_KEY: final Key currentKey = tracker.getKey(); if (currentKey != null && currentKey.mCode == msg.arg1) { @@ -153,9 +156,6 @@ public class MainKeyboardView extends KeyboardView implements PointerTracker.Key KeyboardSwitcher.getInstance().onLongPressTimeout(msg.arg1); } break; - case MSG_TYPING_STATE_EXPIRED: - startWhileTypingFadeinAnimation(keyboardView); - break; } } diff --git a/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java b/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java index c38febf49..d0fecf060 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java +++ b/java/src/com/android/inputmethod/keyboard/internal/PreviewPlacerView.java @@ -21,12 +21,14 @@ import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Align; +import android.os.Message; import android.text.TextUtils; import android.util.SparseArray; import android.widget.RelativeLayout; import com.android.inputmethod.keyboard.PointerTracker; import com.android.inputmethod.latin.R; +import com.android.inputmethod.latin.StaticInnerHandlerWrapper; public class PreviewPlacerView extends RelativeLayout { private final Paint mGesturePaint; @@ -39,6 +41,7 @@ public class PreviewPlacerView extends RelativeLayout { private final int mGestureFloatingPreviewTextShadingBorder; private final int mGestureFloatingPreviewTextConnectorColor; private final int mGestureFloatingPreviewTextConnectorWidth; + /* package */ final int mGestureFloatingPreviewTextLingerTimeout; private int mXOrigin; private int mYOrigin; @@ -49,6 +52,43 @@ public class PreviewPlacerView extends RelativeLayout { private boolean mDrawsGesturePreviewTrail; private boolean mDrawsGestureFloatingPreviewText; + private final DrawingHandler mDrawingHandler = new DrawingHandler(this); + + private static class DrawingHandler extends StaticInnerHandlerWrapper { + private static final int MSG_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT = 0; + + public DrawingHandler(PreviewPlacerView outerInstance) { + super(outerInstance); + } + + @Override + public void handleMessage(Message msg) { + final PreviewPlacerView placerView = getOuterInstance(); + if (placerView == null) return; + switch (msg.what) { + case MSG_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT: + placerView.setGestureFloatingPreviewText(null); + break; + } + } + + private void cancelDismissGestureFloatingPreviewText() { + removeMessages(MSG_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT); + } + + public void dismissGestureFloatingPreviewText() { + cancelDismissGestureFloatingPreviewText(); + final PreviewPlacerView placerView = getOuterInstance(); + sendMessageDelayed( + obtainMessage(MSG_DISMISS_GESTURE_FLOATING_PREVIEW_TEXT), + placerView.mGestureFloatingPreviewTextLingerTimeout); + } + + public void cancelAllMessages() { + cancelDismissGestureFloatingPreviewText(); + } + } + public PreviewPlacerView(Context context, TypedArray keyboardViewAttr) { super(context); setWillNotDraw(false); @@ -71,6 +111,8 @@ public class PreviewPlacerView extends RelativeLayout { R.styleable.KeyboardView_gestureFloatingPreviewTextConnectorColor, 0); mGestureFloatingPreviewTextConnectorWidth = keyboardViewAttr.getDimensionPixelSize( R.styleable.KeyboardView_gestureFloatingPreviewTextConnectorWidth, 0); + mGestureFloatingPreviewTextLingerTimeout = keyboardViewAttr.getInt( + R.styleable.KeyboardView_gestureFloatingPreviewTextLingerTimeout, 0); final int gesturePreviewTrailColor = keyboardViewAttr.getColor( R.styleable.KeyboardView_gesturePreviewTrailColor, 0); final int gesturePreviewTrailWidth = keyboardViewAttr.getDimensionPixelSize( @@ -136,6 +178,14 @@ public class PreviewPlacerView extends RelativeLayout { invalidate(); } + public void dismissGestureFloatingPreviewText() { + mDrawingHandler.dismissGestureFloatingPreviewText(); + } + + public void cancelAllMessages() { + mDrawingHandler.cancelAllMessages(); + } + private void drawGestureFloatingPreviewText(Canvas canvas, PointerTracker tracker, String gestureFloatingPreviewText) { if (TextUtils.isEmpty(gestureFloatingPreviewText)) { diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 1e700f525..455086015 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -181,9 +181,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen public final UIHandler mHandler = new UIHandler(this); public static class UIHandler extends StaticInnerHandlerWrapper { - private static final int MSG_UPDATE_SHIFT_STATE = 1; - private static final int MSG_PENDING_IMS_CALLBACK = 6; - private static final int MSG_UPDATE_SUGGESTION_STRIP = 7; + private static final int MSG_UPDATE_SHIFT_STATE = 0; + private static final int MSG_PENDING_IMS_CALLBACK = 1; + private static final int MSG_UPDATE_SUGGESTION_STRIP = 2; private int mDelayUpdateSuggestions; private int mDelayUpdateShiftState; @@ -613,7 +613,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private void onStartInputViewInternal(EditorInfo editorInfo, boolean restarting) { super.onStartInputView(editorInfo, restarting); final KeyboardSwitcher switcher = mKeyboardSwitcher; - MainKeyboardView inputView = switcher.getKeyboardView(); + final MainKeyboardView mainKeyboardView = switcher.getMainKeyboardView(); if (editorInfo == null) { Log.e(TAG, "Null EditorInfo in onStartInputView()"); @@ -656,7 +656,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen LatinImeLogger.onStartInputView(editorInfo); // In landscape mode, this method gets called without the input view being created. - if (inputView == null) { + if (mainKeyboardView == null) { return; } @@ -693,7 +693,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } if (!restarting) { - inputView.closing(); + mainKeyboardView.closing(); loadSettings(); if (mSuggest != null && mCurrentSettings.mCorrectionEnabled) { @@ -719,7 +719,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen mHandler.cancelUpdateSuggestionStrip(); mHandler.cancelDoubleSpacesTimer(); - inputView.setKeyPreviewPopupEnabled(mCurrentSettings.mKeyPreviewPopupOn, + mainKeyboardView.setKeyPreviewPopupEnabled(mCurrentSettings.mKeyPreviewPopupOn, mCurrentSettings.mKeyPreviewPopupDismissDelay); if (TRACE) Debug.startMethodTracing("/data/trace/latinime"); @@ -738,8 +738,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen getCurrentInputConnection()); } super.onWindowHidden(); - KeyboardView inputView = mKeyboardSwitcher.getKeyboardView(); - if (inputView != null) inputView.closing(); + final KeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); + if (mainKeyboardView != null) { + mainKeyboardView.closing(); + } } private void onFinishInputInternal() { @@ -750,15 +752,19 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen ResearchLogger.getInstance().latinIME_onFinishInputInternal(); } - KeyboardView inputView = mKeyboardSwitcher.getKeyboardView(); - if (inputView != null) inputView.closing(); + final KeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); + if (mainKeyboardView != null) { + mainKeyboardView.closing(); + } } private void onFinishInputViewInternal(boolean finishingInput) { super.onFinishInputView(finishingInput); mKeyboardSwitcher.onFinishInputView(); - KeyboardView inputView = mKeyboardSwitcher.getKeyboardView(); - if (inputView != null) inputView.cancelAllMessages(); + final KeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); + if (mainKeyboardView != null) { + mainKeyboardView.cancelAllMessages(); + } // Remove pending messages related to update suggestions mHandler.cancelUpdateSuggestionStrip(); } @@ -925,8 +931,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private void setSuggestionStripShownInternal(boolean shown, boolean needsInputViewShown) { // TODO: Modify this if we support suggestions with hard keyboard if (onEvaluateInputViewShown() && mSuggestionsContainer != null) { - final MainKeyboardView keyboardView = mKeyboardSwitcher.getKeyboardView(); - final boolean inputViewShown = (keyboardView != null) ? keyboardView.isShown() : false; + final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); + final boolean inputViewShown = (mainKeyboardView != null) + ? mainKeyboardView.isShown() : false; final boolean shouldShowSuggestions = shown && (needsInputViewShown ? inputViewShown : true); if (isFullscreenMode()) { @@ -949,11 +956,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen return currentHeight; } - final KeyboardView keyboardView = mKeyboardSwitcher.getKeyboardView(); - if (keyboardView == null) { + final KeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); + if (mainKeyboardView == null) { return 0; } - final int keyboardHeight = keyboardView.getHeight(); + final int keyboardHeight = mainKeyboardView.getHeight(); final int suggestionsHeight = mSuggestionsContainer.getHeight(); final int displayHeight = mResources.getDisplayMetrics().heightPixels; final Rect rect = new Rect(); @@ -971,9 +978,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen @Override public void onComputeInsets(InputMethodService.Insets outInsets) { super.onComputeInsets(outInsets); - final KeyboardView inputView = mKeyboardSwitcher.getKeyboardView(); - if (inputView == null || mSuggestionsContainer == null) + final KeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); + if (mainKeyboardView == null || mSuggestionsContainer == null) { return; + } final int adjustedBackingHeight = getAdjustedBackingViewHeight(); final boolean backingGone = (mKeyPreviewBackingView.getVisibility() == View.GONE); final int backingHeight = backingGone ? 0 : adjustedBackingHeight; @@ -986,13 +994,12 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final int extraHeight = extractHeight + backingHeight + suggestionsHeight; int touchY = extraHeight; // Need to set touchable region only if input view is being shown - final MainKeyboardView keyboardView = mKeyboardSwitcher.getKeyboardView(); - if (keyboardView != null && keyboardView.isShown()) { + if (mainKeyboardView.isShown()) { if (mSuggestionsContainer.getVisibility() == View.VISIBLE) { touchY -= suggestionsHeight; } - final int touchWidth = inputView.getWidth(); - final int touchHeight = inputView.getHeight() + extraHeight + final int touchWidth = mainKeyboardView.getWidth(); + final int touchHeight = mainKeyboardView.getHeight() + extraHeight // Extend touchable region below the keyboard. + EXTENDED_TOUCHABLE_REGION_HEIGHT; outInsets.touchableInsets = InputMethodService.Insets.TOUCHABLE_INSETS_REGION; @@ -1372,7 +1379,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen showSuggestionStrip(suggestedWords, null); final String gestureFloatingPreviewText = (suggestedWords.size() > 0) ? suggestedWords.getWord(0) : null; - mKeyboardSwitcher.getKeyboardView() + mKeyboardSwitcher.getMainKeyboardView() .showGestureFloatingPreviewText(gestureFloatingPreviewText); } @@ -1381,7 +1388,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen mWordComposer.setBatchInputPointers(batchPointers); final SuggestedWords suggestedWords = getSuggestedWords(); showSuggestionStrip(suggestedWords, null); - mKeyboardSwitcher.getKeyboardView().showGestureFloatingPreviewText(null); + final String gestureFloatingPreviewText = (suggestedWords.size() > 0) + ? suggestedWords.getWord(0) : null; + final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); + mainKeyboardView.showGestureFloatingPreviewText(gestureFloatingPreviewText); + mainKeyboardView.dismissGestureFloatingPreviewText(); if (suggestedWords == null || suggestedWords.size() == 0) { return; } @@ -1586,7 +1597,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen keyY = y; } else { final KeyDetector keyDetector = - mKeyboardSwitcher.getKeyboardView().getKeyDetector(); + mKeyboardSwitcher.getMainKeyboardView().getKeyDetector(); keyX = keyDetector.getTouchX(x); keyY = keyDetector.getTouchY(y); } @@ -1688,9 +1699,9 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private void handleClose() { commitTyped(LastComposedWord.NOT_A_SEPARATOR); requestHideSelf(0); - MainKeyboardView inputView = mKeyboardSwitcher.getKeyboardView(); - if (inputView != null) { - inputView.closing(); + final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); + if (mainKeyboardView != null) { + mainKeyboardView.closing(); } } @@ -2089,7 +2100,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // onConfigurationChanged before SoftInputWindow is shown. initSuggest(); loadSettings(); - if (mKeyboardSwitcher.getKeyboardView() != null) { + if (mKeyboardSwitcher.getMainKeyboardView() != null) { // Reload keyboard because the current language has been changed. mKeyboardSwitcher.loadKeyboard(getCurrentInputEditorInfo(), mCurrentSettings); updateKeyboardViewGestureHandlingModeByMainDictionaryAvailability(); @@ -2101,11 +2112,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } private void updateKeyboardViewGestureHandlingModeByMainDictionaryAvailability() { - final MainKeyboardView keyboardView = mKeyboardSwitcher.getKeyboardView(); - if (keyboardView != null) { + final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); + if (mainKeyboardView != null) { final boolean shouldHandleGesture = mCurrentSettings.mGestureInputEnabled && mIsMainDictionaryAvailable; - keyboardView.setGestureHandlingMode(shouldHandleGesture, + mainKeyboardView.setGestureHandlingMode(shouldHandleGesture, mCurrentSettings.mGesturePreviewTrailEnabled, mCurrentSettings.mGestureFloatingPreviewTextEnabled); } @@ -2114,7 +2125,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // TODO: Remove this method from {@link LatinIME} and move {@link FeedbackManager} to // {@link KeyboardSwitcher}. Called from KeyboardSwitcher public void hapticAndAudioFeedback(final int primaryCode) { - mFeedbackManager.hapticAndAudioFeedback(primaryCode, mKeyboardSwitcher.getKeyboardView()); + mFeedbackManager.hapticAndAudioFeedback( + primaryCode, mKeyboardSwitcher.getMainKeyboardView()); } // Callback called by PointerTracker through the KeyboardActionListener. This is called when a @@ -2225,8 +2237,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } public void showOptionDialog(AlertDialog dialog) { - final IBinder windowToken = mKeyboardSwitcher.getKeyboardView().getWindowToken(); - if (windowToken == null) return; + final IBinder windowToken = mKeyboardSwitcher.getMainKeyboardView().getWindowToken(); + if (windowToken == null) { + return; + } dialog.setCancelable(true); dialog.setCanceledOnTouchOutside(true); diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java index 68bd98a23..cf6f31a0a 100644 --- a/java/src/com/android/inputmethod/research/ResearchLogger.java +++ b/java/src/com/android/inputmethod/research/ResearchLogger.java @@ -209,7 +209,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang if (mSplashDialog != null && mSplashDialog.isShowing()) { return; } - final IBinder windowToken = mKeyboardSwitcher.getKeyboardView().getWindowToken(); + final IBinder windowToken = mKeyboardSwitcher.getMainKeyboardView().getWindowToken(); if (windowToken == null) { return; } @@ -540,11 +540,11 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang if (mKeyboardSwitcher == null) { return; } - final KeyboardView keyboardView = mKeyboardSwitcher.getKeyboardView(); - if (keyboardView == null) { + final KeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); + if (mainKeyboardView == null) { return; } - keyboardView.invalidateAllKeys(); + mainKeyboardView.invalidateAllKeys(); }