From 98c58a00fda1bf1e54ae2681a87ea92b3d337faa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Mendes=20Freire?= Date: Wed, 30 Nov 2022 19:03:22 +0000 Subject: [PATCH] Fix settings crash on users page on config change The background task loses the reference to the Activity once it is destroyed and recreated after a config change (such as screen rotation). This resulted in getContext() returning null and openUserDetails() crashing. To fix this, we simply store the context before dispatching the background worker. Bug: 256021119 Test: manually tested Change-Id: I3399fa5586de0cb5fc159204166f92902dd42de0 --- src/com/android/settings/users/UserSettings.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index d8835873db8..c7312fbe776 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -590,6 +590,7 @@ public class UserSettings extends SettingsPreferenceFragment } private void onAddGuestClicked() { + Context context = getContext(); final UserCreatingDialog guestCreatingDialog = new UserCreatingDialog(getActivity(), /* isGuest= */ true); guestCreatingDialog.show(); @@ -597,18 +598,18 @@ public class UserSettings extends SettingsPreferenceFragment ThreadUtils.postOnBackgroundThread(() -> { mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_USER_GUEST_ADD); Trace.beginSection("UserSettings.addGuest"); - final UserInfo guest = mUserManager.createGuest(getContext()); + final UserInfo guest = mUserManager.createGuest(context); Trace.endSection(); ThreadUtils.postOnMainThread(() -> { guestCreatingDialog.dismiss(); if (guest == null) { - Toast.makeText(getContext(), + Toast.makeText(context, com.android.settingslib.R.string.add_guest_failed, Toast.LENGTH_SHORT).show(); return; } - openUserDetails(guest, true); + openUserDetails(guest, true, context); }); }); } @@ -646,11 +647,15 @@ public class UserSettings extends SettingsPreferenceFragment } private void openUserDetails(UserInfo userInfo, boolean newUser) { + openUserDetails(userInfo, newUser, getContext()); + } + + private void openUserDetails(UserInfo userInfo, boolean newUser, Context context) { Bundle extras = new Bundle(); extras.putInt(UserDetailsSettings.EXTRA_USER_ID, userInfo.id); extras.putBoolean(AppRestrictionsFragment.EXTRA_NEW_USER, newUser); - SubSettingLauncher launcher = new SubSettingLauncher(getContext()) + SubSettingLauncher launcher = new SubSettingLauncher(context) .setDestination(UserDetailsSettings.class.getName()) .setArguments(extras) .setTitleText(userInfo.name)