Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0657b969 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Update gesture mode state when dictionary gets available

Bug: 6860204
Change-Id: I840b7bf1983ab92fa4e0b180129176539e96409f
parent 42208100
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -74,7 +74,6 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions {
    private MainKeyboardView mKeyboardView;
    private LatinIME mLatinIME;
    private Resources mResources;
    private SettingsValues mCurrentSettingsValues;

    private KeyboardState mState;

@@ -136,7 +135,6 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions {
    }

    public void loadKeyboard(EditorInfo editorInfo, SettingsValues settingsValues) {
        mCurrentSettingsValues = settingsValues;
        final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(
                mThemeContext, editorInfo);
        builder.setScreenGeometry(mThemeContext.getResources().getConfiguration().orientation,
@@ -171,20 +169,20 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions {
    }

    private void setKeyboard(final Keyboard keyboard) {
        final Keyboard oldKeyboard = mKeyboardView.getKeyboard();
        mKeyboardView.setGestureInputEnabled(mCurrentSettingsValues.mGestureInputEnabled);
        mKeyboardView.setKeyboard(keyboard);
        final MainKeyboardView keyboardView = mKeyboardView;
        final Keyboard oldKeyboard = keyboardView.getKeyboard();
        keyboardView.setKeyboard(keyboard);
        mCurrentInputView.setKeyboardGeometry(keyboard.mTopPadding);
        mKeyboardView.setKeyPreviewPopupEnabled(
        keyboardView.setKeyPreviewPopupEnabled(
                SettingsValues.isKeyPreviewPopupEnabled(mPrefs, mResources),
                SettingsValues.getKeyPreviewPopupDismissDelay(mPrefs, mResources));
        mKeyboardView.updateAutoCorrectionState(mIsAutoCorrectionActive);
        mKeyboardView.updateShortcutKey(mSubtypeSwitcher.isShortcutImeReady());
        keyboardView.updateAutoCorrectionState(mIsAutoCorrectionActive);
        keyboardView.updateShortcutKey(mSubtypeSwitcher.isShortcutImeReady());
        final boolean subtypeChanged = (oldKeyboard == null)
                || !keyboard.mId.mLocale.equals(oldKeyboard.mId.mLocale);
        final boolean needsToDisplayLanguage = mSubtypeSwitcher.needsToDisplayLanguage(
                keyboard.mId.mLocale);
        mKeyboardView.startDisplayLanguageOnSpacebar(subtypeChanged, needsToDisplayLanguage,
        keyboardView.startDisplayLanguageOnSpacebar(subtypeChanged, needsToDisplayLanguage,
                ImfUtils.hasMultipleEnabledIMEsOrSubtypes(mLatinIME, true));
    }

+4 −4
Original line number Diff line number Diff line
@@ -111,8 +111,8 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
    private int mDelayAfterPreview;
    private ViewGroup mPreviewPlacer;

    /** True if the gesture input is enabled. */
    protected boolean mGestureInputEnabled;
    /** True if {@link KeyboardView} should handle gesture events. */
    protected boolean mShouldHandleGesture;

    // Drawing
    /** True if the entire keyboard needs to be dimmed. */
@@ -443,8 +443,8 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
        return mShowKeyPreviewPopup;
    }

    public void setGestureInputEnabled(boolean gestureInputEnabled) {
        mGestureInputEnabled = gestureInputEnabled;
    public void setGestureHandlingMode(boolean shouldHandleGesture) {
        mShouldHandleGesture = shouldHandleGesture;
    }

    @Override
+7 −1
Original line number Diff line number Diff line
@@ -461,7 +461,7 @@ public class MainKeyboardView extends KeyboardView implements PointerTracker.Key
        super.setKeyboard(keyboard);
        mKeyDetector.setKeyboard(
                keyboard, -getPaddingLeft(), -getPaddingTop() + mVerticalCorrection);
        PointerTracker.setKeyDetector(mKeyDetector, mGestureInputEnabled);
        PointerTracker.setKeyDetector(mKeyDetector, mShouldHandleGesture);
        mTouchScreenRegulator.setKeyboard(keyboard);
        mMoreKeysPanelCache.clear();

@@ -479,6 +479,12 @@ public class MainKeyboardView extends KeyboardView implements PointerTracker.Key
        AccessibleKeyboardViewProxy.getInstance().setKeyboard(keyboard);
    }

    @Override
    public void setGestureHandlingMode(final boolean shouldHandleGesture) {
        super.setGestureHandlingMode(shouldHandleGesture);
        PointerTracker.setKeyDetector(mKeyDetector, shouldHandleGesture);
    }

    /**
     * Returns whether the device has distinct multi-touch panel.
     * @return true if the device has distinct multi-touch panel.
+12 −13
Original line number Diff line number Diff line
@@ -42,8 +42,8 @@ public class PointerTracker {
    private static final boolean DEBUG_LISTENER = false;
    private static boolean DEBUG_MODE = LatinImeLogger.sDBG;

    // TODO: There should be an option to turn on/off the gesture input.
    private static boolean sIsGestureEnabled = true;
    /** True if {@link PointerTracker}s should handle gesture events. */
    private static boolean sShouldHandleGesture = false;

    private static final int MIN_GESTURE_RECOGNITION_TIME = 100; // msec

@@ -199,7 +199,7 @@ public class PointerTracker {
        sNeedsPhantomSuddenMoveEventHack = needsPhantomSuddenMoveEventHack;

        setParameters(MainKeyboardView.PointerTrackerParams.DEFAULT);
        updateGestureInputEnabledState(null, false /* gestureInputEnabled */);
        updateGestureHandlingMode(null, false /* shouldHandleGesture */);
    }

    public static void setParameters(MainKeyboardView.PointerTrackerParams params) {
@@ -208,14 +208,13 @@ public class PointerTracker {
                params.mTouchNoiseThresholdDistance * params.mTouchNoiseThresholdDistance);
    }

    private static void updateGestureInputEnabledState(Keyboard keyboard,
            boolean gestureInputEnabled) {
        if (!gestureInputEnabled
    private static void updateGestureHandlingMode(Keyboard keyboard, boolean shouldHandleGesture) {
        if (!shouldHandleGesture
                || AccessibilityUtils.getInstance().isTouchExplorationEnabled()
                || (keyboard != null && keyboard.mId.passwordInput())) {
            sIsGestureEnabled = false;
            sShouldHandleGesture = false;
        } else {
            sIsGestureEnabled = true;
            sShouldHandleGesture = true;
        }
    }

@@ -243,7 +242,7 @@ public class PointerTracker {
        }
    }

    public static void setKeyDetector(KeyDetector keyDetector, boolean gestureInputEnabledByUser) {
    public static void setKeyDetector(KeyDetector keyDetector, boolean shouldHandleGesture) {
        final int trackersSize = sTrackers.size();
        for (int i = 0; i < trackersSize; ++i) {
            final PointerTracker tracker = sTrackers.get(i);
@@ -252,7 +251,7 @@ public class PointerTracker {
            tracker.mKeyboardLayoutHasBeenChanged = true;
        }
        final Keyboard keyboard = keyDetector.getKeyboard();
        updateGestureInputEnabledState(keyboard, gestureInputEnabledByUser);
        updateGestureHandlingMode(keyboard, shouldHandleGesture);
    }

    public static void dismissAllKeyPreviews() {
@@ -669,8 +668,8 @@ public class PointerTracker {
        if (queue != null && queue.size() == 1) {
            mIsPossibleGesture = false;
            // A gesture should start only from the letter key.
            if (sIsGestureEnabled && mIsAlphabetKeyboard && !mIsShowingMoreKeysPanel && key != null
                    && Keyboard.isLetterCode(key.mCode)) {
            if (sShouldHandleGesture && mIsAlphabetKeyboard && !mIsShowingMoreKeysPanel
                    && key != null && Keyboard.isLetterCode(key.mCode)) {
                mIsPossibleGesture = true;
                // TODO: pointer times should be relative to first down even in entire batch input
                // instead of resetting to 0 for each new down event.
@@ -714,7 +713,7 @@ public class PointerTracker {
    private void onGestureMoveEvent(PointerTracker tracker, int x, int y, long eventTime,
            boolean isHistorical, Key key) {
        final int gestureTime = (int)(eventTime - tracker.getDownTime());
        if (sIsGestureEnabled && mIsPossibleGesture) {
        if (sShouldHandleGesture && mIsPossibleGesture) {
            final GestureStroke stroke = mGestureStroke;
            stroke.addPoint(x, y, gestureTime, isHistorical);
            if (!mInGesture && stroke.isStartOfAGesture(gestureTime, sWasInGesture)) {
+14 −3
Original line number Diff line number Diff line
@@ -430,7 +430,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    @Override
    public void onUpdateMainDictionaryAvailability(boolean isMainDictionaryAvailable) {
        mIsMainDictionaryAvailable = isMainDictionaryAvailable;
        // TODO: Update gesture input enable state.
        updateKeyboardViewGestureHandlingModeByMainDictionaryAvailability();
    }

    private void initSuggest() {
@@ -681,6 +681,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        }

        switcher.loadKeyboard(editorInfo, mCurrentSettings);
        updateKeyboardViewGestureHandlingModeByMainDictionaryAvailability();

        if (mSuggestionStripView != null)
            mSuggestionStripView.clear();
@@ -2052,18 +2053,28 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    public void onRefreshKeyboard() {
        // When the device locale is changed in SetupWizard etc., this method may get called via
        // onConfigurationChanged before SoftInputWindow is shown.
        initSuggest();
        loadSettings();
        if (mKeyboardSwitcher.getKeyboardView() != null) {
            // Reload keyboard because the current language has been changed.
            mKeyboardSwitcher.loadKeyboard(getCurrentInputEditorInfo(), mCurrentSettings);
            updateKeyboardViewGestureHandlingModeByMainDictionaryAvailability();
        }
        initSuggest();
        loadSettings();
        // Since we just changed languages, we should re-evaluate suggestions with whatever word
        // we are currently composing. If we are not composing anything, we may want to display
        // predictions or punctuation signs (which is done by the updateSuggestionStrip anyway).
        mHandler.postUpdateSuggestionStrip();
    }

    private void updateKeyboardViewGestureHandlingModeByMainDictionaryAvailability() {
        final MainKeyboardView keyboardView = mKeyboardSwitcher.getKeyboardView();
        if (keyboardView != null) {
            final boolean shouldHandleGesture = mCurrentSettings.mGestureInputEnabled
                    && mIsMainDictionaryAvailable;
            keyboardView.setGestureHandlingMode(shouldHandleGesture);
        }
    }

    // TODO: Remove this method from {@link LatinIME} and move {@link FeedbackManager} to
    // {@link KeyboardSwitcher}. Called from KeyboardSwitcher
    public void hapticAndAudioFeedback(final int primaryCode) {