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() {
|
private void onAddGuestClicked() {
|
||||||
|
Context context = getContext();
|
||||||
final UserCreatingDialog guestCreatingDialog =
|
final UserCreatingDialog guestCreatingDialog =
|
||||||
new UserCreatingDialog(getActivity(), /* isGuest= */ true);
|
new UserCreatingDialog(getActivity(), /* isGuest= */ true);
|
||||||
guestCreatingDialog.show();
|
guestCreatingDialog.show();
|
||||||
@@ -597,18 +598,18 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
ThreadUtils.postOnBackgroundThread(() -> {
|
ThreadUtils.postOnBackgroundThread(() -> {
|
||||||
mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_USER_GUEST_ADD);
|
mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_USER_GUEST_ADD);
|
||||||
Trace.beginSection("UserSettings.addGuest");
|
Trace.beginSection("UserSettings.addGuest");
|
||||||
final UserInfo guest = mUserManager.createGuest(getContext());
|
final UserInfo guest = mUserManager.createGuest(context);
|
||||||
Trace.endSection();
|
Trace.endSection();
|
||||||
|
|
||||||
ThreadUtils.postOnMainThread(() -> {
|
ThreadUtils.postOnMainThread(() -> {
|
||||||
guestCreatingDialog.dismiss();
|
guestCreatingDialog.dismiss();
|
||||||
if (guest == null) {
|
if (guest == null) {
|
||||||
Toast.makeText(getContext(),
|
Toast.makeText(context,
|
||||||
com.android.settingslib.R.string.add_guest_failed,
|
com.android.settingslib.R.string.add_guest_failed,
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
openUserDetails(guest, true);
|
openUserDetails(guest, true, context);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -646,11 +647,15 @@ public class UserSettings extends SettingsPreferenceFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void openUserDetails(UserInfo userInfo, boolean newUser) {
|
private void openUserDetails(UserInfo userInfo, boolean newUser) {
|
||||||
|
openUserDetails(userInfo, newUser, getContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void openUserDetails(UserInfo userInfo, boolean newUser, Context context) {
|
||||||
Bundle extras = new Bundle();
|
Bundle extras = new Bundle();
|
||||||
extras.putInt(UserDetailsSettings.EXTRA_USER_ID, userInfo.id);
|
extras.putInt(UserDetailsSettings.EXTRA_USER_ID, userInfo.id);
|
||||||
extras.putBoolean(AppRestrictionsFragment.EXTRA_NEW_USER, newUser);
|
extras.putBoolean(AppRestrictionsFragment.EXTRA_NEW_USER, newUser);
|
||||||
|
|
||||||
SubSettingLauncher launcher = new SubSettingLauncher(getContext())
|
SubSettingLauncher launcher = new SubSettingLauncher(context)
|
||||||
.setDestination(UserDetailsSettings.class.getName())
|
.setDestination(UserDetailsSettings.class.getName())
|
||||||
.setArguments(extras)
|
.setArguments(extras)
|
||||||
.setTitleText(userInfo.name)
|
.setTitleText(userInfo.name)
|
||||||
|
Reference in New Issue
Block a user