From c6f198750de04374862ff8e1221a61768b843694 Mon Sep 17 00:00:00 2001 From: Tetiana Meronyk Date: Fri, 21 Jul 2023 12:18:01 +0000 Subject: [PATCH] Fix keyboard showing after dialog dismissed When dialog for creating user was dismissed with keyboard being displayed, the keyboard stayed on the screen and could not be released due to incorrect list of methods called on dialog dismissal. This CL topic fixes onDismiss() behaviour of this dialog. Videos of current behaviour and behaviour after fixed are attached to the bug. Bug: 291865725 Test: atest CreateUserDialogControllerTest Change-Id: I732d47039b317c14a04c2324589c023f7bcdc6cc --- .../users/CreateUserDialogController.java | 36 ++++++++++++------- .../users/CreateUserDialogControllerTest.java | 2 ++ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java b/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java index 997d1f432a82c..3011d3164290d 100644 --- a/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java +++ b/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java @@ -80,6 +80,8 @@ public class CreateUserDialogController { private Bitmap mSavedPhoto; private String mSavedName; private Drawable mSavedDrawable; + private String mUserName; + private Drawable mNewUserIcon; private Boolean mIsAdmin; private Dialog mUserCreationDialog; private View mGrantAdminView; @@ -89,6 +91,7 @@ public class CreateUserDialogController { private ActivityStarter mActivityStarter; private boolean mWaitingForActivityResult; private NewUserData mSuccessCallback; + private Runnable mCancelCallback; private final String mFileAuthority; @@ -113,6 +116,7 @@ public class CreateUserDialogController { mEditUserInfoView = null; mUserNameView = null; mSuccessCallback = null; + mCancelCallback = null; mCurrentState = INITIAL_DIALOG; } @@ -184,14 +188,12 @@ public class CreateUserDialogController { mActivity = activity; mCustomDialogHelper = new CustomDialogHelper(activity); mSuccessCallback = successCallback; + mCancelCallback = cancelCallback; mActivityStarter = activityStarter; addCustomViews(isMultipleAdminEnabled); mUserCreationDialog = mCustomDialogHelper.getDialog(); updateLayout(); - mUserCreationDialog.setOnDismissListener(view -> { - cancelCallback.run(); - clear(); - }); + mUserCreationDialog.setOnDismissListener(view -> finish()); mCustomDialogHelper.setMessagePadding(MESSAGE_PADDING); mUserCreationDialog.setCanceledOnTouchOutside(true); return mUserCreationDialog; @@ -269,20 +271,14 @@ public class CreateUserDialogController { mGrantAdminView.setVisibility(View.GONE); break; case CREATE_USER_AND_CLOSE: - Drawable newUserIcon = mEditUserPhotoController != null + mNewUserIcon = mEditUserPhotoController != null ? mEditUserPhotoController.getNewUserPhotoDrawable() : null; String newName = mUserNameView.getText().toString().trim(); String defaultName = mActivity.getString(R.string.user_new_user_name); - String userName = !newName.isEmpty() ? newName : defaultName; - - if (mSuccessCallback != null) { - mSuccessCallback.onSuccess(userName, newUserIcon, - Boolean.TRUE.equals(mIsAdmin)); - } + mUserName = !newName.isEmpty() ? newName : defaultName; mCustomDialogHelper.getDialog().dismiss(); - clear(); break; case EXIT_DIALOG: mCustomDialogHelper.getDialog().dismiss(); @@ -384,4 +380,20 @@ public class CreateUserDialogController { public boolean isActive() { return mCustomDialogHelper != null && mCustomDialogHelper.getDialog() != null; } + + /** + * Runs callback and clears saved values after dialog is dismissed. + */ + public void finish() { + if (mCurrentState == CREATE_USER_AND_CLOSE) { + if (mSuccessCallback != null) { + mSuccessCallback.onSuccess(mUserName, mNewUserIcon, Boolean.TRUE.equals(mIsAdmin)); + } + } else { + if (mCancelCallback != null) { + mCancelCallback.run(); + } + } + clear(); + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/users/CreateUserDialogControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/users/CreateUserDialogControllerTest.java index b53807744516c..66a2ea69559b4 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/users/CreateUserDialogControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/users/CreateUserDialogControllerTest.java @@ -212,6 +212,7 @@ public class CreateUserDialogControllerTest { next.performClick(); verify(successCallback, times(1)) .onSuccess(expectedNewName, null, true); + verifyNoInteractions(cancelCallback); } @Test @@ -233,6 +234,7 @@ public class CreateUserDialogControllerTest { next.performClick(); verify(successCallback, times(1)) .onSuccess(expectedNewName, null, false); + verifyNoInteractions(cancelCallback); } private class TestCreateUserDialogController extends CreateUserDialogController {