From 25d5b6cf27790150f98df194ddb5b6d214a16483 Mon Sep 17 00:00:00 2001 From: Tetiana Meronyk Date: Tue, 30 May 2023 16:30:51 +0000 Subject: [PATCH] Update dialog to edit user info This CL includes replacing AlertDialog used in EditUserInfoController class with dialog from CustomDialogHelper class that has an updated layout. Tests are updated to comply with new layout of the dialog. Minor changes made to code to better work with this update. Bug: 280568195 Test: atest EditUserInfoController Change-Id: Ic93887eebf85757e50b4ccdcf2ba24f338763ae8 --- .../res/layout/dialog_with_icon.xml | 1 - .../layout/edit_user_info_dialog_content.xml | 88 ++++++++----------- .../users/CreateUserDialogController.java | 7 +- .../users/EditUserInfoController.java | 41 ++++----- .../settingslib/utils/CustomDialogHelper.java | 8 ++ .../users/CreateUserDialogControllerTest.java | 6 +- .../users/EditUserInfoControllerTest.java | 35 ++++---- 7 files changed, 88 insertions(+), 98 deletions(-) diff --git a/packages/SettingsLib/res/layout/dialog_with_icon.xml b/packages/SettingsLib/res/layout/dialog_with_icon.xml index 54f8096b87bfe..55d12ebe8553d 100644 --- a/packages/SettingsLib/res/layout/dialog_with_icon.xml +++ b/packages/SettingsLib/res/layout/dialog_with_icon.xml @@ -41,7 +41,6 @@ android:id="@+id/dialog_with_icon_message" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:padding="10dp" android:gravity="center" style="@style/TextAppearanceSmall"/> diff --git a/packages/SettingsLib/res/layout/edit_user_info_dialog_content.xml b/packages/SettingsLib/res/layout/edit_user_info_dialog_content.xml index 4ffaf1b0c3e49..2ded3c6e82eb0 100644 --- a/packages/SettingsLib/res/layout/edit_user_info_dialog_content.xml +++ b/packages/SettingsLib/res/layout/edit_user_info_dialog_content.xml @@ -14,62 +14,48 @@ limitations under the License. --> - - - + - - - - - + android:layout_gravity="center"> + + + - + - + - diff --git a/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java b/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java index e61c8f5ab152c..997d1f432a82c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java +++ b/packages/SettingsLib/src/com/android/settingslib/users/CreateUserDialogController.java @@ -59,6 +59,7 @@ public class CreateUserDialogController { private static final String KEY_IS_ADMIN = "admin_status"; private static final String KEY_ADD_USER_LONG_MESSAGE_DISPLAYED = "key_add_user_long_message_displayed"; + public static final int MESSAGE_PADDING = 10; @Retention(RetentionPolicy.SOURCE) @IntDef({EXIT_DIALOG, INITIAL_DIALOG, GRANT_ADMIN_DIALOG, @@ -191,6 +192,7 @@ public class CreateUserDialogController { cancelCallback.run(); clear(); }); + mCustomDialogHelper.setMessagePadding(MESSAGE_PADDING); mUserCreationDialog.setCanceledOnTouchOutside(true); return mUserCreationDialog; } @@ -212,7 +214,6 @@ public class CreateUserDialogController { } updateLayout(); }); - return; } private void updateLayout() { @@ -234,7 +235,6 @@ public class CreateUserDialogController { } Drawable icon = mActivity.getDrawable(R.drawable.ic_person_add); mCustomDialogHelper.setVisibility(mCustomDialogHelper.ICON, true) - .setVisibility(mCustomDialogHelper.TITLE, true) .setVisibility(mCustomDialogHelper.MESSAGE, true) .setIcon(icon) .setButtonEnabled(true) @@ -248,7 +248,6 @@ public class CreateUserDialogController { mGrantAdminView.setVisibility(View.VISIBLE); mCustomDialogHelper .setVisibility(mCustomDialogHelper.ICON, true) - .setVisibility(mCustomDialogHelper.TITLE, true) .setVisibility(mCustomDialogHelper.MESSAGE, true) .setIcon(mActivity.getDrawable(R.drawable.ic_admin_panel_settings)) .setTitle(R.string.user_grant_admin_title) @@ -262,8 +261,8 @@ public class CreateUserDialogController { case EDIT_NAME_DIALOG: mCustomDialogHelper .setVisibility(mCustomDialogHelper.ICON, false) - .setVisibility(mCustomDialogHelper.TITLE, false) .setVisibility(mCustomDialogHelper.MESSAGE, false) + .setTitle(R.string.user_info_settings_title) .setNegativeButtonText(R.string.back) .setPositiveButtonText(R.string.done); mEditUserInfoView.setVisibility(View.VISIBLE); diff --git a/packages/SettingsLib/src/com/android/settingslib/users/EditUserInfoController.java b/packages/SettingsLib/src/com/android/settingslib/users/EditUserInfoController.java index e55d7eac34df9..cd5f59731e7fb 100644 --- a/packages/SettingsLib/src/com/android/settingslib/users/EditUserInfoController.java +++ b/packages/SettingsLib/src/com/android/settingslib/users/EditUserInfoController.java @@ -17,7 +17,6 @@ package com.android.settingslib.users; import android.app.Activity; -import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.Intent; @@ -31,7 +30,6 @@ import android.view.View; import android.view.WindowManager; import android.widget.EditText; import android.widget.ImageView; -import android.widget.ScrollView; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; @@ -41,6 +39,7 @@ import com.android.settingslib.R; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.drawable.CircleFramedDrawable; +import com.android.settingslib.utils.CustomDialogHelper; import java.io.File; import java.util.function.BiConsumer; @@ -128,7 +127,7 @@ public class EditUserInfoController { * codes to take photo/choose photo/crop photo. */ public Dialog createDialog(Activity activity, ActivityStarter activityStarter, - @Nullable Drawable oldUserIcon, String defaultUserName, String title, + @Nullable Drawable oldUserIcon, String defaultUserName, BiConsumer successCallback, Runnable cancelCallback) { LayoutInflater inflater = LayoutInflater.from(activity); View content = inflater.inflate(R.layout.edit_user_info_dialog_content, null); @@ -160,10 +159,8 @@ public class EditUserInfoController { userPhotoView); } } - ScrollView scrollView = content.findViewById(R.id.user_info_scroll); - scrollView.setClipToOutline(true); mEditUserInfoDialog = buildDialog(activity, content, userNameView, oldUserIcon, - defaultUserName, title, successCallback, cancelCallback); + defaultUserName, successCallback, cancelCallback); // Make sure the IME is up. mEditUserInfoDialog.getWindow() @@ -181,12 +178,13 @@ public class EditUserInfoController { } private Dialog buildDialog(Activity activity, View content, EditText userNameView, - @Nullable Drawable oldUserIcon, String defaultUserName, String title, + @Nullable Drawable oldUserIcon, String defaultUserName, BiConsumer successCallback, Runnable cancelCallback) { - return new AlertDialog.Builder(activity) - .setView(content) - .setCancelable(true) - .setPositiveButton(android.R.string.ok, (dialog, which) -> { + CustomDialogHelper dialogHelper = new CustomDialogHelper(activity); + dialogHelper + .setTitle(R.string.user_info_settings_title) + .addCustomView(content) + .setPositiveButton(android.R.string.ok, view -> { Drawable newUserIcon = mEditUserPhotoController != null ? mEditUserPhotoController.getNewUserPhotoDrawable() : null; @@ -201,20 +199,23 @@ public class EditUserInfoController { if (successCallback != null) { successCallback.accept(userName, userIcon); } + dialogHelper.getDialog().dismiss(); }) - .setNegativeButton(android.R.string.cancel, (dialog, which) -> { + .setBackButton(android.R.string.cancel, view -> { clear(); if (cancelCallback != null) { cancelCallback.run(); } - }) - .setOnCancelListener(dialog -> { - clear(); - if (cancelCallback != null) { - cancelCallback.run(); - } - }) - .create(); + dialogHelper.getDialog().dismiss(); + }); + dialogHelper.getDialog().setOnCancelListener(dialog -> { + clear(); + if (cancelCallback != null) { + cancelCallback.run(); + } + dialogHelper.getDialog().dismiss(); + }); + return dialogHelper.getDialog(); } @VisibleForTesting diff --git a/packages/SettingsLib/src/com/android/settingslib/utils/CustomDialogHelper.java b/packages/SettingsLib/src/com/android/settingslib/utils/CustomDialogHelper.java index de488144be6c3..5201b3ddc6065 100644 --- a/packages/SettingsLib/src/com/android/settingslib/utils/CustomDialogHelper.java +++ b/packages/SettingsLib/src/com/android/settingslib/utils/CustomDialogHelper.java @@ -192,6 +192,14 @@ public class CustomDialogHelper { return this; } + /** + * Sets message padding of the dialog. + */ + public CustomDialogHelper setMessagePadding(int dp) { + mDialogMessage.setPadding(dp, dp, dp, dp); + return this; + } + /** * Sets icon of the dialog. */ 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 e989ed27508bd..b53807744516c 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 @@ -111,13 +111,13 @@ public class CreateUserDialogControllerTest { mActivityStarter, true, null, cancelCallback); dialog.show(); - assertThat(dialog.findViewById(R.id.user_info_scroll).getVisibility()).isEqualTo(View.GONE); + assertThat(dialog.findViewById(R.id.user_info_editor).getVisibility()).isEqualTo(View.GONE); Button next = dialog.findViewById(R.id.button_ok); next.performClick(); ((RadioButton) dialog.findViewById(R.id.grant_admin_yes)).setChecked(true); - assertThat(dialog.findViewById(R.id.user_info_scroll).getVisibility()).isEqualTo(View.GONE); + assertThat(dialog.findViewById(R.id.user_info_editor).getVisibility()).isEqualTo(View.GONE); next.performClick(); - assertThat(dialog.findViewById(R.id.user_info_scroll).getVisibility()) + assertThat(dialog.findViewById(R.id.user_info_editor).getVisibility()) .isEqualTo(View.VISIBLE); dialog.dismiss(); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/users/EditUserInfoControllerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/users/EditUserInfoControllerTest.java index f760032e4a404..f595cd3341057 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/users/EditUserInfoControllerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/users/EditUserInfoControllerTest.java @@ -27,7 +27,6 @@ import static org.mockito.Mockito.when; import android.app.Activity; import android.app.AlertDialog; -import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; @@ -108,7 +107,7 @@ public class EditUserInfoControllerTest { @Test public void photoControllerOnActivityResult_whenWaiting_isCalled() { mController.createDialog(mActivity, mActivityStarter, mCurrentIcon, "test user", - "title", null, null); + null, null); mController.startingActivityForResult(); Intent resultData = new Intent(); mController.onActivityResult(0, 0, resultData); @@ -126,9 +125,7 @@ public class EditUserInfoControllerTest { () -> String.valueOf('A')).limit(200).collect(Collectors.joining()); final AlertDialog dialog = (AlertDialog) mController.createDialog(mActivity, - mActivityStarter, mCurrentIcon, - "test user", "title", null, - null); + mActivityStarter, mCurrentIcon, "test user", null, null); dialog.show(); final EditText userNameEditText = dialog.findViewById(R.id.user_name); userNameEditText.setText(longName); @@ -143,7 +140,7 @@ public class EditUserInfoControllerTest { AlertDialog dialog = (AlertDialog) mController.createDialog( mActivity, mActivityStarter, mCurrentIcon, "test", - "title", successCallback, cancelCallback); + successCallback, cancelCallback); dialog.show(); dialog.cancel(); @@ -159,9 +156,9 @@ public class EditUserInfoControllerTest { AlertDialog dialog = (AlertDialog) mController.createDialog( mActivity, mActivityStarter, mCurrentIcon, "test", - "title", successCallback, cancelCallback); + successCallback, cancelCallback); dialog.show(); - dialog.getButton(Dialog.BUTTON_NEGATIVE).performClick(); + dialog.findViewById(R.id.button_back).performClick(); verifyNoInteractions(successCallback); verify(cancelCallback, times(1)) @@ -176,11 +173,11 @@ public class EditUserInfoControllerTest { Drawable oldUserIcon = mCurrentIcon; AlertDialog dialog = (AlertDialog) mController.createDialog( mActivity, mActivityStarter, oldUserIcon, "test", - "title", successCallback, cancelCallback); + successCallback, cancelCallback); // No change to the photo. when(mController.getPhotoController().getNewUserPhotoDrawable()).thenReturn(null); dialog.show(); - dialog.getButton(Dialog.BUTTON_POSITIVE).performClick(); + dialog.findViewById(R.id.button_ok).performClick(); verify(successCallback, times(1)) .accept("test", oldUserIcon); @@ -194,11 +191,11 @@ public class EditUserInfoControllerTest { AlertDialog dialog = (AlertDialog) mController.createDialog( mActivity, mActivityStarter, null, "test", - "title", successCallback, cancelCallback); + successCallback, cancelCallback); // No change to the photo. when(mController.getPhotoController().getNewUserPhotoDrawable()).thenReturn(null); dialog.show(); - dialog.getButton(Dialog.BUTTON_POSITIVE).performClick(); + dialog.findViewById(R.id.button_ok).performClick(); verify(successCallback, times(1)) .accept("test", null); @@ -212,14 +209,14 @@ public class EditUserInfoControllerTest { AlertDialog dialog = (AlertDialog) mController.createDialog( mActivity, mActivityStarter, mCurrentIcon, "test", - "title", successCallback, cancelCallback); + successCallback, cancelCallback); // No change to the photo. when(mController.getPhotoController().getNewUserPhotoDrawable()).thenReturn(null); dialog.show(); String expectedNewName = "new test user"; EditText editText = (EditText) dialog.findViewById(R.id.user_name); editText.setText(expectedNewName); - dialog.getButton(Dialog.BUTTON_POSITIVE).performClick(); + dialog.findViewById(R.id.button_ok).performClick(); verify(successCallback, times(1)) .accept(expectedNewName, mCurrentIcon); @@ -233,12 +230,12 @@ public class EditUserInfoControllerTest { AlertDialog dialog = (AlertDialog) mController.createDialog( mActivity, mActivityStarter, mCurrentIcon, "test", - "title", successCallback, cancelCallback); + successCallback, cancelCallback); // A different drawable. Drawable newPhoto = mock(Drawable.class); when(mController.getPhotoController().getNewUserPhotoDrawable()).thenReturn(newPhoto); dialog.show(); - dialog.getButton(Dialog.BUTTON_POSITIVE).performClick(); + dialog.findViewById(R.id.button_ok).performClick(); verify(successCallback, times(1)) .accept("test", newPhoto); @@ -252,12 +249,12 @@ public class EditUserInfoControllerTest { AlertDialog dialog = (AlertDialog) mController.createDialog( mActivity, mActivityStarter, null, "test", - "title", successCallback, cancelCallback); + successCallback, cancelCallback); // A different drawable. Drawable newPhoto = mock(Drawable.class); when(mController.getPhotoController().getNewUserPhotoDrawable()).thenReturn(newPhoto); dialog.show(); - dialog.getButton(Dialog.BUTTON_POSITIVE).performClick(); + dialog.findViewById(R.id.button_ok).performClick(); verify(successCallback, times(1)) .accept("test", newPhoto); @@ -269,7 +266,7 @@ public class EditUserInfoControllerTest { mPhotoRestrictedByBase = true; mController.createDialog(mActivity, mActivityStarter, mCurrentIcon, - "test", "title", null, null); + "test", null, null); assertThat(mController.mPhotoController).isNull(); }