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

Commit 12e582c7 authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Fix 2146178: On-screen keyboard is wider than screen

Sometimes the keyboard is getting confused about it's width when switching
between hard keyboard open and close state and portrait-forced home. Force
creation of keyboard layouts after a configuration change to fix the
inconsistent state.

Don't force create when just switching between input fields, too expensive.

Also fixes the problem of keyboard not changing layout after a locale change,
unless there's an orientation change.
parent 56f96fe0
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -70,14 +70,15 @@ public class KeyboardSwitcher {
        mInputView = inputView;
    }
    
    void makeKeyboards() {
    void makeKeyboards(boolean forceCreate) {
        if (forceCreate) mKeyboards.clear();
        // Configuration change is coming after the keyboard gets recreated. So don't rely on that.
        // If keyboards have already been made, check if we have a screen width change and 
        // create the keyboard layouts again at the correct orientation
        int displayWidth = mContext.getMaxWidth();
        if (displayWidth == mLastDisplayWidth) return;
        mLastDisplayWidth = displayWidth;
        mKeyboards.clear();
        if (!forceCreate) mKeyboards.clear();
        mSymbolsId = new KeyboardId(R.xml.kbd_symbols);
        mSymbolsShiftedId = new KeyboardId(R.xml.kbd_symbols_shift);
    }
+7 −7
Original line number Diff line number Diff line
@@ -210,16 +210,16 @@ public class LatinIME extends InputMethodService
    public void onConfigurationChanged(Configuration conf) {
        if (!TextUtils.equals(conf.locale.toString(), mLocale)) {
            initSuggest(conf.locale.toString());
            if (mKeyboardSwitcher == null) {
                mKeyboardSwitcher = new KeyboardSwitcher(this);
            }
            mKeyboardSwitcher.makeKeyboards();
        }
        // If orientation changed while predicting, commit the change
        if (conf.orientation != mOrientation) {
            commitTyped(getCurrentInputConnection());
            mOrientation = conf.orientation;
        }
        if (mKeyboardSwitcher == null) {
            mKeyboardSwitcher = new KeyboardSwitcher(this);
        }
        mKeyboardSwitcher.makeKeyboards(true);
        super.onConfigurationChanged(conf);
    }

@@ -228,7 +228,7 @@ public class LatinIME extends InputMethodService
        mInputView = (LatinKeyboardView) getLayoutInflater().inflate(
                R.layout.input, null);
        mKeyboardSwitcher.setInputView(mInputView);
        mKeyboardSwitcher.makeKeyboards();
        mKeyboardSwitcher.makeKeyboards(true);
        mInputView.setOnKeyboardActionListener(this);
        mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT, 0);
        return mInputView;
@@ -236,7 +236,7 @@ public class LatinIME extends InputMethodService

    @Override
    public View onCreateCandidatesView() {
        mKeyboardSwitcher.makeKeyboards();
        mKeyboardSwitcher.makeKeyboards(true);
        mCandidateViewContainer = (CandidateViewContainer) getLayoutInflater().inflate(
                R.layout.candidates, null);
        mCandidateViewContainer.initViews();
@@ -253,7 +253,7 @@ public class LatinIME extends InputMethodService
            return;
        }

        mKeyboardSwitcher.makeKeyboards();
        mKeyboardSwitcher.makeKeyboards(false);

        TextEntryState.newSession(this);