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
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user