From 8164c64edcd6c3305417c910f00a7c6ec676cefc Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Tue, 27 Dec 2016 10:15:27 -0800 Subject: [PATCH] Add NPE check for method assignDefaultPhoto in Utils.java When user press back button while adding user, app may crash because of null context. In this cl, I add NPE check for context in method assignDefaultPhoto and change this method to return boolean value. If the return value is false, then stop the following steps(e.g. creating a dialog after pressing button may also cause crash.) Bug: 33829308 Test: make -j40 RunSettingsRoboTests Change-Id: I811b92c268fb20f8c43ab3b0a9ceebe76f5d83be --- src/com/android/settings/Utils.java | 13 ++++++++++++- src/com/android/settings/users/UserSettings.java | 8 +++++--- .../src/com/android/settings/UtilsTest.java | 6 ++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index 1dbd471bd62..248358c6901 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -368,10 +368,21 @@ public final class Utils extends com.android.settingslib.Utils { } catch (IOException ioe) { } } - public static void assignDefaultPhoto(Context context, int userId) { + /** + * Assign the default photo to user with {@paramref userId} + * @param context used to get the {@link UserManager} + * @param userId used to get the icon bitmap + * @return true if assign photo successfully, false if failed + */ + public static boolean assignDefaultPhoto(Context context, int userId) { + if (context == null) { + return false; + } UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); Bitmap bitmap = getDefaultUserIconAsBitmap(userId); um.setUserIcon(userId, bitmap); + + return true; } public static String getMeProfileName(Context context, boolean full) { diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index aa25f75cde7..567ae95103b 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -415,14 +415,16 @@ public class UserSettings extends SettingsPreferenceFragment private UserInfo createRestrictedProfile() { UserInfo newUserInfo = mUserManager.createRestrictedProfile(mAddingUserName); - Utils.assignDefaultPhoto(getActivity(), newUserInfo.id); + if (newUserInfo != null && !Utils.assignDefaultPhoto(getActivity(), newUserInfo.id)) { + return null; + } return newUserInfo; } private UserInfo createTrustedUser() { UserInfo newUserInfo = mUserManager.createUser(mAddingUserName, 0); - if (newUserInfo != null) { - Utils.assignDefaultPhoto(getActivity(), newUserInfo.id); + if (newUserInfo != null && !Utils.assignDefaultPhoto(getActivity(), newUserInfo.id)) { + return null; } return newUserInfo; } diff --git a/tests/robotests/src/com/android/settings/UtilsTest.java b/tests/robotests/src/com/android/settings/UtilsTest.java index dacd303070f..05e0a64f59b 100644 --- a/tests/robotests/src/com/android/settings/UtilsTest.java +++ b/tests/robotests/src/com/android/settings/UtilsTest.java @@ -65,4 +65,10 @@ public class UtilsTest { assertThat(Utils.getWifiIpAddresses(mContext)).isNull(); } + + @Test + public void testAssignDefaultPhoto_ContextNull_ReturnFalseAndNotCrash() { + // Should not crash here + assertThat(Utils.assignDefaultPhoto(null, 0)).isFalse(); + } }