diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 38c6a28499c..abbd68355ea 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -67,6 +67,9 @@ public class DashboardAdapter extends RecyclerView.Adapter 0 && position == 1 + if (mDashboardData.getDisplayableSuggestionCount() > 0 + && position == SUGGESTION_CONDITION_HEADER_POSITION && mDashboardData.getSuggestionConditionMode() != DashboardData.HEADER_MODE_COLLAPSED) { onBindSuggestionHeader((SuggestionAndConditionHeaderHolder) holder); @@ -386,7 +390,7 @@ public class DashboardAdapter extends RecyclerView.Adapter adapter; - // If there is suggestions to show, it will be at position 2 (position 0 = header spacer, - // position 1 is suggestion header. - if (position == 2 && mDashboardData.getSuggestions() != null) { + // If there is suggestions to show, it will be at position 1 + // position 0 is suggestion header. + if (position == (SUGGESTION_CONDITION_HEADER_POSITION + 1) + && mDashboardData.getSuggestions() != null) { mSuggestionAdapter = new SuggestionAdapter(mContext, (List) mDashboardData.getItemEntityByPosition(position), mSuggestionsShownLogged); adapter = mSuggestionAdapter; diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java index af355203fcd..66706cc9da3 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java @@ -36,6 +36,8 @@ import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Icon; +import android.support.v7.widget.RecyclerView; +import android.util.DisplayMetrics; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; @@ -51,6 +53,7 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; import com.android.settings.dashboard.conditional.Condition; +import com.android.settings.dashboard.suggestions.SuggestionAdapter; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.SettingsShadowResources; @@ -445,6 +448,34 @@ public class DashboardAdapterTest { verify(mockIcon).setTint(eq(0x89000000)); } + @Test + public void testBindConditionAndSuggestion_shouldSetSuggestionAdapterAndNoCrash() { + when(mFactory.dashboardFeatureProvider.combineSuggestionAndCondition()).thenReturn(true); + mDashboardAdapter = new DashboardAdapter(mContext, null, null); + final List suggestions = makeSuggestions("pkg1"); + final List categories = new ArrayList<>(); + final DashboardCategory category = mock(DashboardCategory.class); + final List tiles = new ArrayList<>(); + tiles.add(mock(Tile.class)); + category.tiles = tiles; + mDashboardAdapter.setCategoriesAndSuggestions(categories, suggestions); + + final RecyclerView data = mock(RecyclerView.class); + when(data.getResources()).thenReturn(mResources); + when(data.getContext()).thenReturn(mContext); + when(mResources.getDisplayMetrics()).thenReturn(mock(DisplayMetrics.class)); + final View itemView = mock(View.class); + when(itemView.findViewById(R.id.data)).thenReturn(data); + final DashboardAdapter.SuggestionAndConditionContainerHolder holder = + new DashboardAdapter.SuggestionAndConditionContainerHolder(itemView); + + mDashboardAdapter.onBindConditionAndSuggestion( + holder, DashboardAdapter.SUGGESTION_CONDITION_HEADER_POSITION + 1); + + verify(data).setAdapter(any(SuggestionAdapter.class)); + // should not crash + } + private List makeSuggestions(String... pkgNames) { final List suggestions = new ArrayList<>(); for (String pkgName : pkgNames) {