Fix crash on expanding settings conditions.
Check for non-empty suggestions instead of non-null suggestions when trying to determine whether to show conditions or suggestions list. Change-Id: Icdb8ad485af436f5d84ce0a746081fc59bd613db Merged-In: Icdb8ad485af436f5d84ce0a746081fc59bd613db Fix: 63674269 Test: make RunSettingsRoboTests
This commit is contained in:
@@ -62,8 +62,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
|
||||
private static final String STATE_SUGGESTION_LIST = "suggestion_list";
|
||||
private static final String STATE_CATEGORY_LIST = "category_list";
|
||||
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 String STATE_SUGGESTION_CONDITION_MODE = "suggestion_condition_mode";
|
||||
@VisibleForTesting
|
||||
static final int SUGGESTION_CONDITION_HEADER_POSITION = 0;
|
||||
|
||||
@@ -446,8 +447,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
|
||||
int position) {
|
||||
// If there is suggestions to show, it will be at position 0 as we don't show the suggestion
|
||||
// header anymore.
|
||||
if (position == (SUGGESTION_CONDITION_HEADER_POSITION)
|
||||
&& mDashboardData.getSuggestions() != null) {
|
||||
final List<Tile> suggestions = mDashboardData.getSuggestions();
|
||||
if (position == SUGGESTION_CONDITION_HEADER_POSITION
|
||||
&& suggestions != null && suggestions.size() > 0) {
|
||||
mSuggestionAdapter = new SuggestionAdapter(mContext, (List<Tile>)
|
||||
mDashboardData.getItemEntityByPosition(position), mSuggestionsShownLogged);
|
||||
mSuggestionDismissHandler = new SuggestionDismissController(mContext,
|
||||
|
@@ -36,6 +36,7 @@ import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -48,6 +49,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.conditional.ConditionAdapter;
|
||||
import com.android.settings.dashboard.suggestions.SuggestionAdapter;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
@@ -97,6 +99,7 @@ public class DashboardAdapterTest {
|
||||
private DashboardAdapter mDashboardAdapter;
|
||||
private DashboardAdapter.SuggestionAndConditionHeaderHolder mSuggestionHolder;
|
||||
private DashboardData.SuggestionConditionHeaderData mSuggestionHeaderData;
|
||||
private List<Condition> mConditionList;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -115,10 +118,11 @@ public class DashboardAdapterTest {
|
||||
when(mResources.getQuantityString(any(int.class), any(int.class), any()))
|
||||
.thenReturn("");
|
||||
|
||||
List<Condition> conditions = new ArrayList<>();
|
||||
conditions.add(mCondition);
|
||||
mDashboardAdapter = new DashboardAdapter(mContext, null, conditions, null, null);
|
||||
mSuggestionHeaderData = new DashboardData.SuggestionConditionHeaderData(conditions, 1);
|
||||
mConditionList = new ArrayList<>();
|
||||
mConditionList.add(mCondition);
|
||||
when(mCondition.shouldShow()).thenReturn(true);
|
||||
mDashboardAdapter = new DashboardAdapter(mContext, null, mConditionList, null, null);
|
||||
mSuggestionHeaderData = new DashboardData.SuggestionConditionHeaderData(mConditionList, 1);
|
||||
when(mView.getTag()).thenReturn(mCondition);
|
||||
}
|
||||
|
||||
@@ -392,6 +396,38 @@ public class DashboardAdapterTest {
|
||||
// should not crash
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBindConditionAndSuggestion_emptySuggestion_shouldSetConditionAdapter() {
|
||||
final Bundle savedInstance = new Bundle();
|
||||
savedInstance.putInt(DashboardAdapter.STATE_SUGGESTION_CONDITION_MODE,
|
||||
DashboardData.HEADER_MODE_FULLY_EXPANDED);
|
||||
mDashboardAdapter = new DashboardAdapter(mContext, savedInstance, mConditionList,
|
||||
null /* SuggestionParser */, null /* SuggestionDismissController.Callback */);
|
||||
|
||||
final List<Tile> suggestions = new ArrayList<>();
|
||||
final List<DashboardCategory> categories = new ArrayList<>();
|
||||
final DashboardCategory category = mock(DashboardCategory.class);
|
||||
categories.add(category);
|
||||
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);
|
||||
|
||||
verify(data).setAdapter(any(ConditionAdapter.class));
|
||||
}
|
||||
|
||||
private List<Tile> makeSuggestions(String... pkgNames) {
|
||||
final List<Tile> suggestions = new ArrayList<>();
|
||||
for (String pkgName : pkgNames) {
|
||||
|
Reference in New Issue
Block a user