Merge "Fix crash on expanding settings conditions." into oc-dr1-dev
am: 77a34f69c6
Change-Id: Ibfd77b5c2ab16dbc55f0874350bd6025fee463f7
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_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,
|
||||||
|
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user