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

Commit 81f5cee2 authored by Luca Zuccarini's avatar Luca Zuccarini
Browse files

Fix IME sync flicker with 3-button navigation.

With keyboard sync, the dismissal is handled by the animator. Calling
hideKeyboard() on top of that causes the two signals to conflict with
each other, resulting in the visible flicker and extra delayed hiding
animation.

Fixes: 251185052
Test: manual, see videos in the bug

Change-Id: Ic12ad304ef9e4b6a51279ce18d6c09ba93bd59be
parent 8d3241b3
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -482,6 +482,9 @@ public class Launcher extends StatefulActivity<LauncherState>

        mOnboardingPrefs = createOnboardingPrefs(mSharedPrefs);

        // TODO: move the SearchConfig to SearchState when new LauncherState is created.
        mBaseSearchConfig = new BaseSearchConfig();

        mAppWidgetManager = new WidgetManagerHelper(this);
        mAppWidgetHolder = createAppWidgetHolder();
        mAppWidgetHolder.startListening();
@@ -548,9 +551,6 @@ public class Launcher extends StatefulActivity<LauncherState>
            getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
        }
        setTitle(R.string.home_screen);

        // TODO: move the SearchConfig to SearchState when new LauncherState is created.
        mBaseSearchConfig = new BaseSearchConfig();
    }

    protected LauncherOverlayManager getDefaultOverlay() {
@@ -1598,7 +1598,6 @@ public class Launcher extends StatefulActivity<LauncherState>
                && AbstractFloatingView.getTopOpenView(this) == null;
        boolean isActionMain = Intent.ACTION_MAIN.equals(intent.getAction());
        boolean internalStateHandled = ACTIVITY_TRACKER.handleNewIntent(this);
        hideKeyboard();

        if (isActionMain) {
            if (!internalStateHandled) {
+10 −3
Original line number Diff line number Diff line
@@ -141,6 +141,9 @@ public class AllAppsTransitionController
    private final Launcher mLauncher;
    private boolean mIsVerticalLayout;

    // Whether this class should take care of closing the keyboard.
    private boolean mShouldControlKeyboard;

    // Animation in this class is controlled by a single variable {@link mProgress}.
    // Visually, it represents top y coordinate of the all apps container if multiplied with
    // {@link mShiftRange}.
@@ -238,7 +241,7 @@ public class AllAppsTransitionController
            StateAnimationConfig config, PendingAnimation builder) {
        if (mLauncher.isInState(ALL_APPS) && !ALL_APPS.equals(toState)) {
            // For atomic animations, we close the keyboard immediately.
            if (!config.userControlled && !mLauncher.getSearchConfig().isKeyboardSyncEnabled()) {
            if (!config.userControlled && mShouldControlKeyboard) {
                mLauncher.getAppsView().getSearchUiManager().getEditText().hideKeyboard();
            }

@@ -252,7 +255,7 @@ public class AllAppsTransitionController
                // the keyboard open and then changes their mind and swipes back up, we want the
                // keyboard to remain open. However an onCancel signal is sent to the listeners
                // (success = false), so we need to check for that.
                if (config.userControlled && success) {
                if (config.userControlled && success && mShouldControlKeyboard) {
                    mLauncher.getAppsView().getSearchUiManager().getEditText().hideKeyboard();
                }
            });
@@ -317,6 +320,8 @@ public class AllAppsTransitionController
        mAppsViewAlpha.setUpdateVisibility(true);
        mAppsViewTranslationY = new MultiPropertyFactory<>(
                mAppsView, VIEW_TRANSLATE_Y, APPS_VIEW_INDEX_COUNT, Float::sum);

        mShouldControlKeyboard = !mLauncher.getSearchConfig().isKeyboardSyncEnabled();
    }

    /**
@@ -333,7 +338,9 @@ public class AllAppsTransitionController
    private void onProgressAnimationEnd() {
        if (Float.compare(mProgress, 1f) == 0) {
            mAppsView.reset(false /* animate */);
            if (mShouldControlKeyboard) {
                mLauncher.getAppsView().getSearchUiManager().getEditText().hideKeyboard();
            }
        }
    }
}