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

Commit cdfcc2ce authored by Felix Stern's avatar Felix Stern Committed by Android (Google) Code Review
Browse files

Revert "Removed lock of showInputMethodMenu when showing the dialog"

This reverts commit 0eae6536.

Reason for revert: causes race condition
Fix: 285036609
Bug: 275450371

Change-Id: Ifa63dfc60179987ffea7cc1154802359553fb928
parent 0eae6536
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.server.inputmethod;
import static com.android.server.inputmethod.InputMethodManagerService.DEBUG;
import static com.android.server.inputmethod.InputMethodUtils.NOT_A_SUBTYPE_ID;

import android.annotation.Nullable;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -65,8 +66,8 @@ final class InputMethodMenuController {
    private boolean mShowImeWithHardKeyboard;

    @GuardedBy("ImfLock.class")
    private final InputMethodDialogWindowContext mDialogWindowContext =
            new InputMethodDialogWindowContext();
    @Nullable
    private InputMethodDialogWindowContext mDialogWindowContext;

    InputMethodMenuController(InputMethodManagerService service) {
        mService = service;
@@ -124,11 +125,13 @@ final class InputMethodMenuController {
                }
            }

            if (mDialogWindowContext == null) {
                mDialogWindowContext = new InputMethodDialogWindowContext();
            }
            final Context dialogWindowContext = mDialogWindowContext.get(displayId);
            mDialogBuilder = new AlertDialog.Builder(dialogWindowContext);
            mDialogBuilder.setOnCancelListener(dialog -> hideInputMethodMenu());

            // TODO(b/277061090): refactor UI components should not be created while holding a lock.
            final Context dialogContext = mDialogBuilder.getContext();
            final TypedArray a = dialogContext.obtainStyledAttributes(null,
                    com.android.internal.R.styleable.DialogPreference,
@@ -196,12 +199,11 @@ final class InputMethodMenuController {
            attrs.privateFlags |= WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
            attrs.setTitle("Select input method");
            w.setAttributes(attrs);
            // TODO(b/277062834) decouple/remove dependency on IMMS
            mService.updateSystemUiLocked();
            mService.sendOnNavButtonFlagsChangedLocked();
        }
            mSwitchingDialog.show();
        }
    }

    private boolean isScreenLocked() {
        return mWindowManagerInternal.isKeyguardLocked()
@@ -274,7 +276,6 @@ final class InputMethodMenuController {
        private final int mTextViewResourceId;
        private final List<ImeSubtypeListItem> mItemsList;
        public int mCheckedItem;

        private ImeSubtypeListAdapter(Context context, int textViewResourceId,
                List<ImeSubtypeListItem> itemsList, int checkedItem) {
            super(context, textViewResourceId, itemsList);