Loading src/com/android/settings/homepage/slices/SliceContextualCardRenderer.java +8 −6 Original line number Diff line number Diff line Loading @@ -91,13 +91,15 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, if (sliceLiveData == null) { sliceLiveData = SliceLiveData.fromUri(mContext, uri); mSliceLiveDataMap.put(uri.toString(), sliceLiveData); } sliceLiveData.removeObservers(mLifecycleOwner); sliceLiveData.observe(mLifecycleOwner, slice -> { if (slice == null) { Log.w(TAG, "Slice is null"); } cardHolder.sliceView.setSlice(slice); }); } // Set this listener so we can log the interaction users make on the slice cardHolder.sliceView.setOnSliceActionListener(this); Loading tests/robotests/src/com/android/settings/homepage/slices/SliceContextualCardRendererTest.java +17 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ package com.android.settings.homepage.slices; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import android.content.Context; import android.net.Uri; Loading @@ -26,8 +26,10 @@ import android.view.LayoutInflater; import android.view.View; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.slice.Slice; import com.android.settings.homepage.ContextualCard; import com.android.settings.homepage.PersonalSettingsFragment; Loading @@ -36,12 +38,16 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; @RunWith(SettingsRobolectricTestRunner.class) public class SliceContextualCardRendererTest { @Mock private LiveData<Slice> mSliceLiveData; private Context mContext; private SliceContextualCardRenderer mRenderer; private LifecycleOwner mLifecycleOwner; Loading Loading @@ -96,6 +102,16 @@ public class SliceContextualCardRendererTest { assertThat(mRenderer.mSliceLiveDataMap.get(sliceUri).hasObservers()).isTrue(); } @Test public void bindview_sliceLiveDataShouldRemoveObservers() { final String sliceUri = "content://com.android.settings.slices/action/flashlight"; mRenderer.mSliceLiveDataMap.put(sliceUri, mSliceLiveData); mRenderer.bindView(getSliceViewHolder(), buildContextualCard(sliceUri)); verify(mSliceLiveData).removeObservers(mLifecycleOwner); } private RecyclerView.ViewHolder getSliceViewHolder() { final int viewType = mRenderer.getViewType(); final RecyclerView recyclerView = new RecyclerView(mContext); Loading Loading
src/com/android/settings/homepage/slices/SliceContextualCardRenderer.java +8 −6 Original line number Diff line number Diff line Loading @@ -91,13 +91,15 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, if (sliceLiveData == null) { sliceLiveData = SliceLiveData.fromUri(mContext, uri); mSliceLiveDataMap.put(uri.toString(), sliceLiveData); } sliceLiveData.removeObservers(mLifecycleOwner); sliceLiveData.observe(mLifecycleOwner, slice -> { if (slice == null) { Log.w(TAG, "Slice is null"); } cardHolder.sliceView.setSlice(slice); }); } // Set this listener so we can log the interaction users make on the slice cardHolder.sliceView.setOnSliceActionListener(this); Loading
tests/robotests/src/com/android/settings/homepage/slices/SliceContextualCardRendererTest.java +17 −1 Original line number Diff line number Diff line Loading @@ -18,7 +18,7 @@ package com.android.settings.homepage.slices; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import android.content.Context; import android.net.Uri; Loading @@ -26,8 +26,10 @@ import android.view.LayoutInflater; import android.view.View; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.slice.Slice; import com.android.settings.homepage.ContextualCard; import com.android.settings.homepage.PersonalSettingsFragment; Loading @@ -36,12 +38,16 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; @RunWith(SettingsRobolectricTestRunner.class) public class SliceContextualCardRendererTest { @Mock private LiveData<Slice> mSliceLiveData; private Context mContext; private SliceContextualCardRenderer mRenderer; private LifecycleOwner mLifecycleOwner; Loading Loading @@ -96,6 +102,16 @@ public class SliceContextualCardRendererTest { assertThat(mRenderer.mSliceLiveDataMap.get(sliceUri).hasObservers()).isTrue(); } @Test public void bindview_sliceLiveDataShouldRemoveObservers() { final String sliceUri = "content://com.android.settings.slices/action/flashlight"; mRenderer.mSliceLiveDataMap.put(sliceUri, mSliceLiveData); mRenderer.bindView(getSliceViewHolder(), buildContextualCard(sliceUri)); verify(mSliceLiveData).removeObservers(mLifecycleOwner); } private RecyclerView.ViewHolder getSliceViewHolder() { final int viewType = mRenderer.getViewType(); final RecyclerView recyclerView = new RecyclerView(mContext); Loading