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

Commit c6f19875 authored by Tetiana Meronyk's avatar Tetiana Meronyk
Browse files

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
parent 3490e6fb
Loading
Loading
Loading
Loading
+24 −12
Original line number Diff line number Diff line
@@ -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();
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -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 {