From f129b8238576943c49ac63b736acbd13b12a7696 Mon Sep 17 00:00:00 2001 From: Matt Pietal Date: Fri, 8 Jan 2021 15:30:46 -0500 Subject: [PATCH] Controls - Fix bouncing dialog IME for alertdialogs may jump up and down on open. Make sure the IME gets properly dismissed. Fixes: 159309083 Test: manual, mock service with Locks to test dialogs Change-Id: I4700e2d34cec3b1d925095f87369c027e139e9a9 --- .../systemui/controls/ui/ChallengeDialogs.kt | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt index 6c28d11df6559..ff55b76d4db79 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ChallengeDialogs.kt @@ -26,7 +26,9 @@ import android.service.controls.actions.FloatAction import android.service.controls.actions.ModeAction import android.text.InputType import android.util.Log +import android.view.LayoutInflater import android.view.WindowManager +import android.view.inputmethod.InputMethodManager import android.widget.CheckBox import android.widget.EditText @@ -71,11 +73,21 @@ object ChallengeDialogs { R.string.controls_pin_instructions ) } - val builder = AlertDialog.Builder(cvh.context, STYLE).apply { + return object : AlertDialog(cvh.context, STYLE) { + override fun dismiss() { + window?.decorView?.let { + // workaround for b/159309083 + it.context.getSystemService(InputMethodManager::class.java) + ?.hideSoftInputFromWindow(it.windowToken, 0) + } + super.dismiss() + } + }.apply { setTitle(title) - setView(R.layout.controls_dialog_pin) - setPositiveButton( - android.R.string.ok, + setView(LayoutInflater.from(context).inflate(R.layout.controls_dialog_pin, null)) + setButton( + DialogInterface.BUTTON_POSITIVE, + context.getText(android.R.string.ok), DialogInterface.OnClickListener { dialog, _ -> if (dialog is Dialog) { dialog.requireViewById(R.id.controls_pin_input) @@ -85,15 +97,15 @@ object ChallengeDialogs { dialog.dismiss() } }) - setNegativeButton( - android.R.string.cancel, + setButton( + DialogInterface.BUTTON_NEGATIVE, + context.getText(android.R.string.cancel), DialogInterface.OnClickListener { dialog, _ -> onCancel.invoke() dialog.cancel() } ) - } - return builder.create().apply { + getWindow().apply { setType(WINDOW_TYPE) setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)