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

Commit 863ebce7 authored by Hyunyoung Song's avatar Hyunyoung Song Committed by Automerger Merge Worker
Browse files

Merge "Fix IME hiding animation being delayed after unlocking the device" into...

Merge "Fix IME hiding animation being delayed after unlocking the device" into tm-dev am: d4a79eb9 am: fb5d602a

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/18725729



Change-Id: If4d9e903a2911ccad62a91b7bed9942e22deb707
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 5b765189 fb5d602a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ public class ExtendedEditText extends EditText {

    public void hideKeyboard() {
        hideKeyboardAsync(ActivityContext.lookupContext(getContext()), getWindowToken());
        clearFocus();
    }

    private boolean showSoftInput() {
+28 −1
Original line number Diff line number Diff line
@@ -25,9 +25,13 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.WindowInsets;
import android.view.WindowInsetsController;
import android.view.inputmethod.InputMethodManager;

import com.android.launcher3.Utilities;
import com.android.launcher3.views.ActivityContext;

/**
@@ -48,6 +52,29 @@ public class UiThreadHelper {
    public static void hideKeyboardAsync(ActivityContext activityContext, IBinder token) {
        View root = activityContext.getDragLayer();

        if (Utilities.ATLEAST_R) {
            Preconditions.assertUIThread();
            //  Hide keyboard with WindowInsetsController if could. In case
            //  hideSoftInputFromWindow may get ignored by input connection being finished
            //  when the screen is off.
            //
            // In addition, inside IMF, the keyboards are closed asynchronously that launcher no
            // longer need to post to the message queue.
            final WindowInsetsController wic = root.getWindowInsetsController();
            WindowInsets insets = root.getRootWindowInsets();
            boolean isImeShown = insets != null && insets.isVisible(WindowInsets.Type.ime());
            if (wic != null && isImeShown) {
                // this method cannot be called cross threads
                wic.hide(WindowInsets.Type.ime());
                activityContext.getStatsLogManager().logger()
                        .log(LAUNCHER_ALLAPPS_KEYBOARD_CLOSED);
                return;
            } else {
                // print which stack trace failed.
                Log.e("Launcher", "hideKeyboard ignored.", new Exception());
                // Then attempt to use the old logic.
            }
        }
        // Since the launcher context cannot be accessed directly from callback, adding secondary
        // message to log keyboard close event asynchronously.
        Bundle mHideKeyboardLoggerMsg = new Bundle();
@@ -55,7 +82,7 @@ public class UiThreadHelper {
                STATS_LOGGER_KEY,
                Message.obtain(
                        HANDLER.get(root.getContext()),
                        () -> ActivityContext.lookupContext(root.getContext())
                        () -> activityContext
                                .getStatsLogManager()
                                .logger()
                                .log(LAUNCHER_ALLAPPS_KEYBOARD_CLOSED)