From 0cb47e92d4bc1cf386e44dedadfe7d6b65e8f057 Mon Sep 17 00:00:00 2001 From: Adam Bookatz Date: Wed, 31 Mar 2021 13:41:02 -0700 Subject: [PATCH] Don't always change username when adding account During Setup Wizard for a new user, if an account is added, the user's name gets updated to match their account's name. Recently, however, the user can actually type in a name before even reaching the Setup Wizard. If they elect to do so, we shouldn't overwrite their name with their account name, so this cl makes sure to only use the account name if the original name wasn't manually entered. Bug: 171255493 Test: manual verification (create new user and enter account during SUW. Do both with and without entering initial user name.) Change-Id: I443648dafc0d83a71750f7f6472bbea4e2ee23bb --- .../settings/users/ProfileUpdateReceiver.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/users/ProfileUpdateReceiver.java b/src/com/android/settings/users/ProfileUpdateReceiver.java index 80fa10aea9d..f80233cce0e 100644 --- a/src/com/android/settings/users/ProfileUpdateReceiver.java +++ b/src/com/android/settings/users/ProfileUpdateReceiver.java @@ -50,14 +50,23 @@ public class ProfileUpdateReceiver extends BroadcastReceiver { return; } - int userId = UserHandle.myUserId(); - UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); - String profileName = Utils.getMeProfileName(context, false /* partial name */); - if (profileName != null && profileName.length() > 0) { - um.setUserName(userId, profileName); + final int userId = UserHandle.myUserId(); + final UserManager um = context.getSystemService(UserManager.class); + final String newName = Utils.getMeProfileName(context, false /* partial name */); + if (newName != null && newName.length() > 0 && !isCurrentNameInteresting(context, um)) { + um.setUserName(userId, newName); // Flag that we've written the profile one time at least. No need to do it in the // future. prefs.edit().putBoolean(KEY_PROFILE_NAME_COPIED_ONCE, true).commit(); } } + + /** Returns whether the current user name is different from the default one. */ + private static boolean isCurrentNameInteresting(Context context, UserManager um) { + final String currentName = um.getUserName(); + final String defaultName = um.isRestrictedProfile() || um.isProfile() ? + context.getString(com.android.settingslib.R.string.user_new_profile_name) : + context.getString(com.android.settingslib.R.string.user_new_user_name); + return currentName != null && !currentName.equals(defaultName); + } }