Loading src/com/android/settings/dashboard/DashboardAdapter.java +13 −7 Original line number Diff line number Diff line Loading @@ -67,6 +67,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash private static final String STATE_SUGGESTIONS_SHOWN_LOGGED = "suggestions_shown_logged"; private static final String STATE_SUGGESTION_CONDITION_MODE = "suggestion_condition_mode"; @VisibleForTesting static final int SUGGESTION_CONDITION_HEADER_POSITION = 0; private final IconCache mCache; private final Context mContext; private final MetricsFeatureProvider mMetricsFeatureProvider; Loading Loading @@ -364,7 +367,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash 2. SuggestionCondition header - the header that shows the summary info for the suggestion/condition that is currently hidden. It has the expand button to expand the section. */ if (mDashboardData.getDisplayableSuggestionCount() > 0 && position == 1 if (mDashboardData.getDisplayableSuggestionCount() > 0 && position == SUGGESTION_CONDITION_HEADER_POSITION && mDashboardData.getSuggestionConditionMode() != DashboardData.HEADER_MODE_COLLAPSED) { onBindSuggestionHeader((SuggestionAndConditionHeaderHolder) holder); Loading @@ -382,7 +386,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash mDashboardData = new DashboardData.Builder(prevData).setSuggestionConditionMode( DashboardData.HEADER_MODE_COLLAPSED).build(); notifyDashboardDataChanged(prevData); mRecyclerView.scrollToPosition(1); mRecyclerView.scrollToPosition(SUGGESTION_CONDITION_HEADER_POSITION); }); break; } Loading Loading @@ -616,17 +620,19 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash .setSuggestionConditionMode(nextMode).build(); notifyDashboardDataChanged(prevData); if (wasCollapsed) { mRecyclerView.scrollToPosition(1); mRecyclerView.scrollToPosition(SUGGESTION_CONDITION_HEADER_POSITION); } }); } private void onBindConditionAndSuggestion(final SuggestionAndConditionContainerHolder holder, @VisibleForTesting void onBindConditionAndSuggestion(final SuggestionAndConditionContainerHolder holder, int position) { RecyclerView.Adapter<DashboardItemHolder> 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<Tile>) mDashboardData.getItemEntityByPosition(position), mSuggestionsShownLogged); adapter = mSuggestionAdapter; Loading tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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<Tile> suggestions = makeSuggestions("pkg1"); final List<DashboardCategory> categories = new ArrayList<>(); final DashboardCategory category = mock(DashboardCategory.class); final List<Tile> 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<Tile> makeSuggestions(String... pkgNames) { final List<Tile> suggestions = new ArrayList<>(); for (String pkgName : pkgNames) { Loading Loading
src/com/android/settings/dashboard/DashboardAdapter.java +13 −7 Original line number Diff line number Diff line Loading @@ -67,6 +67,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash private static final String STATE_SUGGESTIONS_SHOWN_LOGGED = "suggestions_shown_logged"; private static final String STATE_SUGGESTION_CONDITION_MODE = "suggestion_condition_mode"; @VisibleForTesting static final int SUGGESTION_CONDITION_HEADER_POSITION = 0; private final IconCache mCache; private final Context mContext; private final MetricsFeatureProvider mMetricsFeatureProvider; Loading Loading @@ -364,7 +367,8 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash 2. SuggestionCondition header - the header that shows the summary info for the suggestion/condition that is currently hidden. It has the expand button to expand the section. */ if (mDashboardData.getDisplayableSuggestionCount() > 0 && position == 1 if (mDashboardData.getDisplayableSuggestionCount() > 0 && position == SUGGESTION_CONDITION_HEADER_POSITION && mDashboardData.getSuggestionConditionMode() != DashboardData.HEADER_MODE_COLLAPSED) { onBindSuggestionHeader((SuggestionAndConditionHeaderHolder) holder); Loading @@ -382,7 +386,7 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash mDashboardData = new DashboardData.Builder(prevData).setSuggestionConditionMode( DashboardData.HEADER_MODE_COLLAPSED).build(); notifyDashboardDataChanged(prevData); mRecyclerView.scrollToPosition(1); mRecyclerView.scrollToPosition(SUGGESTION_CONDITION_HEADER_POSITION); }); break; } Loading Loading @@ -616,17 +620,19 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash .setSuggestionConditionMode(nextMode).build(); notifyDashboardDataChanged(prevData); if (wasCollapsed) { mRecyclerView.scrollToPosition(1); mRecyclerView.scrollToPosition(SUGGESTION_CONDITION_HEADER_POSITION); } }); } private void onBindConditionAndSuggestion(final SuggestionAndConditionContainerHolder holder, @VisibleForTesting void onBindConditionAndSuggestion(final SuggestionAndConditionContainerHolder holder, int position) { RecyclerView.Adapter<DashboardItemHolder> 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<Tile>) mDashboardData.getItemEntityByPosition(position), mSuggestionsShownLogged); adapter = mSuggestionAdapter; Loading
tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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<Tile> suggestions = makeSuggestions("pkg1"); final List<DashboardCategory> categories = new ArrayList<>(); final DashboardCategory category = mock(DashboardCategory.class); final List<Tile> 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<Tile> makeSuggestions(String... pkgNames) { final List<Tile> suggestions = new ArrayList<>(); for (String pkgName : pkgNames) { Loading