Loading src/com/android/settings/slices/SlicePreferenceController.java +12 −5 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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); } } } tests/robotests/src/com/android/settings/slices/SlicePreferenceControllerTest.java +23 −1 Original line number Diff line number Diff line Loading @@ -18,8 +18,10 @@ package com.android.settings.slices; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.net.Uri; Loading @@ -43,11 +45,11 @@ public class SlicePreferenceControllerTest { private LiveData<Slice> mLiveData; @Mock private SlicePreference mSlicePreference; private Context mContext; private SlicePreferenceController mController; private Uri mUri; @Before public void setUp() { MockitoAnnotations.initMocks(this); Loading Loading @@ -78,10 +80,30 @@ public class SlicePreferenceControllerTest { @Test public void onStop_unregisterObserver() { when(mLiveData.hasActiveObservers()).thenReturn(true); mController.onStart(); mController.onStop(); verify(mLiveData).removeObserver(mController); } @Test public void onStop_noActiveObservers_notUnregisterObserver() { when(mLiveData.hasActiveObservers()).thenReturn(false); mController.onStart(); mController.onStop(); verify(mLiveData, never()).removeObserver(mController); } @Test public void onStop_notRegisterObserver_notUnregisterObserver() { when(mLiveData.hasActiveObservers()).thenReturn(true); mController.onStop(); verify(mLiveData, never()).removeObserver(mController); } @Test public void onChanged_nullSlice_updateSlice() { mController.onChanged(null); Loading Loading
src/com/android/settings/slices/SlicePreferenceController.java +12 −5 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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); } } }
tests/robotests/src/com/android/settings/slices/SlicePreferenceControllerTest.java +23 −1 Original line number Diff line number Diff line Loading @@ -18,8 +18,10 @@ package com.android.settings.slices; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.net.Uri; Loading @@ -43,11 +45,11 @@ public class SlicePreferenceControllerTest { private LiveData<Slice> mLiveData; @Mock private SlicePreference mSlicePreference; private Context mContext; private SlicePreferenceController mController; private Uri mUri; @Before public void setUp() { MockitoAnnotations.initMocks(this); Loading Loading @@ -78,10 +80,30 @@ public class SlicePreferenceControllerTest { @Test public void onStop_unregisterObserver() { when(mLiveData.hasActiveObservers()).thenReturn(true); mController.onStart(); mController.onStop(); verify(mLiveData).removeObserver(mController); } @Test public void onStop_noActiveObservers_notUnregisterObserver() { when(mLiveData.hasActiveObservers()).thenReturn(false); mController.onStart(); mController.onStop(); verify(mLiveData, never()).removeObserver(mController); } @Test public void onStop_notRegisterObserver_notUnregisterObserver() { when(mLiveData.hasActiveObservers()).thenReturn(true); mController.onStop(); verify(mLiveData, never()).removeObserver(mController); } @Test public void onChanged_nullSlice_updateSlice() { mController.onChanged(null); Loading