Merge "[Settings] Fix about phone crash no leave"

This commit is contained in:
Bonian Chen
2023-02-02 09:06:36 +00:00
committed by Android (Google) Code Review

View File

@@ -24,6 +24,8 @@ import android.text.TextUtils;
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
@@ -44,6 +46,7 @@ public class SimStatusPreferenceController extends BasePreferenceController {
private Fragment mFragment;
private SlotSimStatus mSlotSimStatus;
private Observer<LifecycleOwner> mLifecycleOwnerObserver;
private Observer mSimChangeObserver;
public SimStatusPreferenceController(Context context, String prefKey) {
@@ -112,13 +115,25 @@ public class SimStatusPreferenceController extends BasePreferenceController {
if (mFragment == null) {
return;
}
final int simSlot = getSimSlotIndex();
if (mSimChangeObserver == null) {
mSimChangeObserver = x -> updateStateBySlot(preference, simSlot);
mFragment.getViewLifecycleOwnerLiveData().observeForever(lifecycleOwner -> {
mSlotSimStatus.observe(lifecycleOwner, mSimChangeObserver);
});
} else {
if (mLifecycleOwnerObserver == null) {
final LiveData<LifecycleOwner> dataLifecycleOwner
= mFragment.getViewLifecycleOwnerLiveData();
mLifecycleOwnerObserver = owner -> {
if (owner != null) {
final int simSlot = getSimSlotIndex();
mSimChangeObserver = x -> updateStateBySlot(preference, simSlot);
mSlotSimStatus.observe(owner, mSimChangeObserver);
} else {
if (mSimChangeObserver != null) {
mSlotSimStatus.removeObserver(mSimChangeObserver);
mSimChangeObserver = null;
}
dataLifecycleOwner.removeObserver(mLifecycleOwnerObserver);
}
};
dataLifecycleOwner.observeForever(mLifecycleOwnerObserver);
} else if (mSimChangeObserver != null) {
final int simSlot = getSimSlotIndex();
updateStateBySlot(preference, simSlot);
}
}