Merge "[Settings] Avoid to unregister wrong observer" into udc-dev am: 0af8c60342 am: 77e126db56

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/23162866

Change-Id: Ic32dc15740c5295a939c76f67dde7ee77444063d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Tom Hsu
2023-05-12 06:44:01 +00:00
committed by Automerger Merge Worker
2 changed files with 35 additions and 6 deletions

View File

@@ -44,6 +44,7 @@ public class SlicePreferenceController extends BasePreferenceController implemen
LiveData<Slice> mLiveData;
@VisibleForTesting
SlicePreference mSlicePreference;
private boolean mIsObservering = false;
private Uri mUri;
public SlicePreferenceController(Context context, String preferenceKey) {
@@ -68,25 +69,31 @@ public class SlicePreferenceController extends BasePreferenceController implemen
});
//TODO(b/120803703): figure out why we need to remove observer first
mLiveData.removeObserver(this);
removeLiveDataObserver();
}
@Override
public void onStart() {
if (mLiveData != null) {
if (mLiveData != null && !mIsObservering) {
mIsObservering = true;
mLiveData.observeForever(this);
}
}
@Override
public void onStop() {
if (mLiveData != null) {
mLiveData.removeObserver(this);
}
removeLiveDataObserver();
}
@Override
public void onChanged(Slice slice) {
mSlicePreference.onSliceUpdated(slice);
}
private void removeLiveDataObserver() {
if (mLiveData != null && mIsObservering && mLiveData.hasActiveObservers()) {
mIsObservering = false;
mLiveData.removeObserver(this);
}
}
}