Merge "Fix crash on expanding settings conditions." into oc-dr1-dev

am: 77a34f69c6

Change-Id: Ibfd77b5c2ab16dbc55f0874350bd6025fee463f7
This commit is contained in:
Doris Ling
2017-07-14 22:23:36 +00:00
committed by android-build-merger
2 changed files with 45 additions and 7 deletions

View File

@@ -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_SUGGESTION_LIST = "suggestion_list";
private static final String STATE_CATEGORY_LIST = "category_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_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 @VisibleForTesting
static final int SUGGESTION_CONDITION_HEADER_POSITION = 0; static final int SUGGESTION_CONDITION_HEADER_POSITION = 0;
@@ -446,8 +447,9 @@ public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.Dash
int position) { int position) {
// If there is suggestions to show, it will be at position 0 as we don't show the suggestion // If there is suggestions to show, it will be at position 0 as we don't show the suggestion
// header anymore. // header anymore.
if (position == (SUGGESTION_CONDITION_HEADER_POSITION) final List<Tile> suggestions = mDashboardData.getSuggestions();
&& mDashboardData.getSuggestions() != null) { if (position == SUGGESTION_CONDITION_HEADER_POSITION
&& suggestions != null && suggestions.size() > 0) {
mSuggestionAdapter = new SuggestionAdapter(mContext, (List<Tile>) mSuggestionAdapter = new SuggestionAdapter(mContext, (List<Tile>)
mDashboardData.getItemEntityByPosition(position), mSuggestionsShownLogged); mDashboardData.getItemEntityByPosition(position), mSuggestionsShownLogged);
mSuggestionDismissHandler = new SuggestionDismissController(mContext, mSuggestionDismissHandler = new SuggestionDismissController(mContext,

View File

@@ -36,6 +36,7 @@ import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Icon; import android.graphics.drawable.Icon;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@@ -48,6 +49,7 @@ import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.dashboard.conditional.Condition; 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.dashboard.suggestions.SuggestionAdapter;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -97,6 +99,7 @@ public class DashboardAdapterTest {
private DashboardAdapter mDashboardAdapter; private DashboardAdapter mDashboardAdapter;
private DashboardAdapter.SuggestionAndConditionHeaderHolder mSuggestionHolder; private DashboardAdapter.SuggestionAndConditionHeaderHolder mSuggestionHolder;
private DashboardData.SuggestionConditionHeaderData mSuggestionHeaderData; private DashboardData.SuggestionConditionHeaderData mSuggestionHeaderData;
private List<Condition> mConditionList;
@Before @Before
public void setUp() { public void setUp() {
@@ -115,10 +118,11 @@ public class DashboardAdapterTest {
when(mResources.getQuantityString(any(int.class), any(int.class), any())) when(mResources.getQuantityString(any(int.class), any(int.class), any()))
.thenReturn(""); .thenReturn("");
List<Condition> conditions = new ArrayList<>(); mConditionList = new ArrayList<>();
conditions.add(mCondition); mConditionList.add(mCondition);
mDashboardAdapter = new DashboardAdapter(mContext, null, conditions, null, null); when(mCondition.shouldShow()).thenReturn(true);
mSuggestionHeaderData = new DashboardData.SuggestionConditionHeaderData(conditions, 1); mDashboardAdapter = new DashboardAdapter(mContext, null, mConditionList, null, null);
mSuggestionHeaderData = new DashboardData.SuggestionConditionHeaderData(mConditionList, 1);
when(mView.getTag()).thenReturn(mCondition); when(mView.getTag()).thenReturn(mCondition);
} }
@@ -392,6 +396,38 @@ public class DashboardAdapterTest {
// should not crash // 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) { private List<Tile> makeSuggestions(String... pkgNames) {
final List<Tile> suggestions = new ArrayList<>(); final List<Tile> suggestions = new ArrayList<>();
for (String pkgName : pkgNames) { for (String pkgName : pkgNames) {