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

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

Make CreateUserDialogController fully responsible for dialog dismissal

In ag/30936343 dismissal of the dialog was moved from CreateUserDialogController to CreateUserActivity, which lead to potential NPE if the controller is used directly without being hosted within the activity. This change brings dismissal of the dialog back into CreateUserDialogController and makes it fully responsible for the dismissal of the dialog.

Bug: 398042304
Bug: 398767163
Test: atest UserSettingsTest && atest CreateUserActivityTest
Flag: android.multiuser.place_add_user_dialog_within_activity
Change-Id: I463fe89f09bfb6cd0866b37251c6cda6e2193075
parent a952ec62
Loading
Loading
Loading
Loading
+1 −11
Original line number Diff line number Diff line
@@ -93,18 +93,10 @@ public class CreateUserActivity extends Activity {

    @Override
    public boolean onTouchEvent(@Nullable MotionEvent event) {
        onBackInvoked();
        cancel();
        return super.onTouchEvent(event);
    }

    private void onBackInvoked() {
        if (mSetupUserDialog != null) {
            mSetupUserDialog.dismiss();
        }
        setResult(RESULT_CANCELED);
        finish();
    }

    @VisibleForTesting
    void setSuccessResult(String userName, Drawable userIcon, String path, Boolean isAdmin) {
        Intent intent = new Intent(this, CreateUserActivity.class);
@@ -112,14 +104,12 @@ public class CreateUserActivity extends Activity {
        intent.putExtra(EXTRA_IS_ADMIN, isAdmin);
        intent.putExtra(EXTRA_USER_ICON_PATH, path);

        mSetupUserDialog.dismiss();
        setResult(RESULT_OK, intent);
        finish();
    }

    @VisibleForTesting
    void cancel() {
        mSetupUserDialog.dismiss();
        setResult(RESULT_CANCELED);
        finish();
    }
+1 −1
Original line number Diff line number Diff line
@@ -282,7 +282,7 @@ public class CreateUserDialogController {
                mCustomDialogHelper.getDialog().dismiss();
                break;
            case EXIT_DIALOG:
                finish();
                mUserCreationDialog.dismiss();
                break;
            default:
                if (mCurrentState < EXIT_DIALOG) {
+6 −6
Original line number Diff line number Diff line
@@ -65,23 +65,23 @@ public class CreateUserActivityTest {
    }

    @Test
    public void onTouchEvent_dismissesDialogAndCancelsResult() {
    public void onTouchEvent_finishesActivityAndCancelsResult() {
        mCreateUserActivity.onTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0, 0,
                0));

        assertThat(mCreateUserActivity.mSetupUserDialog.isShowing()).isFalse();
        assertThat(mCreateUserActivity.isFinishing()).isTrue();
        assertThat(shadowOf(mCreateUserActivity).getResultCode())
                .isEqualTo(Activity.RESULT_CANCELED);
    }

    @Test
    public void setSuccessResult_dismissesDialogAndSetsSuccessResult() {
    public void setSuccessResult_finishesActivityAndSetsSuccessResult() {
        Drawable mockDrawable = mock(Drawable.class);

        mCreateUserActivity.setSuccessResult(TEST_USER_NAME, mockDrawable, TEST_USER_ICON_PATH,
                TEST_IS_ADMIN);

        assertThat(mCreateUserActivity.mSetupUserDialog.isShowing()).isFalse();
        assertThat(mCreateUserActivity.isFinishing()).isTrue();
        assertThat(shadowOf(mCreateUserActivity).getResultCode()).isEqualTo(Activity.RESULT_OK);

        Intent resultIntent = shadowOf(mCreateUserActivity).getResultIntent();
@@ -92,10 +92,10 @@ public class CreateUserActivityTest {
    }

    @Test
    public void cancel_dismissesDialogAndSetsCancelResult() {
    public void cancel_finishesActivityAndSetsCancelResult() {
        mCreateUserActivity.cancel();

        assertThat(mCreateUserActivity.mSetupUserDialog.isShowing()).isFalse();
        assertThat(mCreateUserActivity.isFinishing()).isTrue();
        assertThat(shadowOf(mCreateUserActivity).getResultCode())
                .isEqualTo(Activity.RESULT_CANCELED);
    }