diff --git a/Android.mk b/Android.mk index 349b79ce046..eeaad0c936a 100644 --- a/Android.mk +++ b/Android.mk @@ -22,9 +22,10 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_STATIC_ANDROID_LIBRARIES := \ android-support-v4 \ android-support-v13 \ - android-support-v7-recyclerview \ - android-support-v7-preference \ android-support-v7-appcompat \ + android-support-v7-cardview \ + android-support-v7-preference \ + android-support-v7-recyclerview \ android-support-v14-preference LOCAL_JAVA_LIBRARIES := \ diff --git a/res/layout/dashboard_header_spacer.xml b/res/layout/dashboard_header_spacer.xml new file mode 100644 index 00000000000..442ae48b54c --- /dev/null +++ b/res/layout/dashboard_header_spacer.xml @@ -0,0 +1,25 @@ + + + + + + diff --git a/res/layout/settings_main_dashboard.xml b/res/layout/settings_main_dashboard.xml index c10193cda90..1a3b1335dd8 100644 --- a/res/layout/settings_main_dashboard.xml +++ b/res/layout/settings_main_dashboard.xml @@ -18,7 +18,31 @@ --> + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_height="match_parent" + android:layout_width="match_parent"> + + + + + diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 5c6796c2de3..ad55b6244ce 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -139,6 +139,12 @@ 32dp 32dp + + 8dp + -8dp + 16dp 16dp diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index daa23d6d2e6..ca39b58d244 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -50,6 +50,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; +import android.widget.Toolbar; import com.android.internal.util.ArrayUtils; import com.android.settings.Settings.WifiSettingsActivity; @@ -62,6 +63,7 @@ import com.android.settings.dashboard.DashboardSummary; import com.android.settings.development.DevelopmentSettings; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.DynamicIndexableContentMonitor; +import com.android.settings.search.SearchActivity; import com.android.settings.search.SearchFeatureProvider; import com.android.settings.wfd.WifiDisplaySettings; import com.android.settings.widget.SwitchBar; @@ -75,7 +77,7 @@ import java.util.Set; public class SettingsActivity extends SettingsDrawerActivity implements PreferenceManager.OnPreferenceTreeClickListener, PreferenceFragment.OnPreferenceStartFragmentCallback, - ButtonBarHandler, FragmentManager.OnBackStackChangedListener { + ButtonBarHandler, FragmentManager.OnBackStackChangedListener, OnClickListener { private static final String LOG_TAG = "Settings"; @@ -345,6 +347,14 @@ public class SettingsActivity extends SettingsDrawerActivity launchSettingFragment(initialFragmentName, isSubSettings, intent); } + if (mIsShowingDashboard) { + findViewById(R.id.search_bar).setVisibility(View.VISIBLE); + findViewById(R.id.action_bar).setVisibility(View.GONE); + Toolbar toolbar = findViewById(R.id.search_action_bar); + toolbar.setOnClickListener(this); + setActionBar(toolbar); + } + mActionBar = getActionBar(); if (mActionBar != null) { mActionBar.setDisplayHomeAsUpEnabled(mDisplayHomeAsUpEnabled); @@ -432,10 +442,10 @@ public class SettingsActivity extends SettingsDrawerActivity switchToFragment(initialFragmentName, initialArguments, true, false, mInitialTitleResId, mInitialTitle, false); } else { - // No UP affordance if we are displaying the main Dashboard - mDisplayHomeAsUpEnabled = false; - // Show Search affordance - mDisplaySearch = true; + // Show search icon as up affordance if we are displaying the main Dashboard + mDisplayHomeAsUpEnabled = true; + // toolbar is search affordance so don't show search + mDisplaySearch = false; mInitialTitleResId = R.string.dashboard_title; switchToFragment(DashboardSummary.class.getName(), null /* args */, false, false, @@ -940,4 +950,10 @@ public class SettingsActivity extends SettingsDrawerActivity return bitmap; } -} \ No newline at end of file + + @Override + public void onClick(View v) { + Intent intent = new Intent(this, SearchActivity.class); + startActivity(intent); + } +} diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 2e7b8618def..eb746903244 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -15,6 +15,8 @@ */ package com.android.settings.dashboard; +import android.annotation.AttrRes; +import android.annotation.ColorInt; import android.app.Activity; import android.content.Context; import android.content.res.TypedArray; @@ -54,6 +56,7 @@ public class DashboardAdapter extends RecyclerView.Adapter (position + 1)) { + // The spacer that goes underneath the search bar needs to match the + // background of the first real view. That view is either a condition, + // a suggestion, or the dashboard item. + // + // If it's a dashboard item, set null background so it uses the parent's + // background like the other views. Otherwise, match the colors. + int nextType = mDashboardData.getItemTypeByPosition(position + 1); + int colorAttr = nextType == R.layout.suggestion_header + ? android.R.attr.colorSecondary + : nextType == R.layout.condition_card + ? android.R.attr.colorAccent + : DONT_SET_BACKGROUND_ATTR; + + if (colorAttr != DONT_SET_BACKGROUND_ATTR) { + TypedArray array = holder.itemView.getContext() + .obtainStyledAttributes(new int[]{colorAttr}); + @ColorInt int color = array.getColor(0, 0); + array.recycle(); + holder.itemView.setBackgroundColor(color); + } else { + holder.itemView.setBackground(null); + } + } + } + @VisibleForTesting void onBindSuggestionHeader(final DashboardItemHolder holder, DashboardData .SuggestionHeaderData data) { diff --git a/src/com/android/settings/dashboard/DashboardData.java b/src/com/android/settings/dashboard/DashboardData.java index 0a5ff354725..60d7d8da8b8 100644 --- a/src/com/android/settings/dashboard/DashboardData.java +++ b/src/com/android/settings/dashboard/DashboardData.java @@ -45,7 +45,8 @@ public class DashboardData { public static final int DEFAULT_SUGGESTION_COUNT = 2; // id namespace for different type of items. - private static final int NS_SPACER = 0; + private static final int NS_HEADER_SPACER = 0; + private static final int NS_SPACER = 1000; private static final int NS_ITEMS = 2000; private static final int NS_CONDITION = 3000; @@ -234,6 +235,9 @@ public class DashboardData { * and mIsShowingAll, mSuggestionMode flag. */ private void buildItemsData() { + // add the view that goes under the search bar + countItem(null, R.layout.dashboard_header_spacer, true, NS_HEADER_SPACER); + resetCount(); boolean hasConditions = false; for (int i = 0; mConditions != null && i < mConditions.size(); i++) { boolean shouldShow = mConditions.get(i).shouldShow(); diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java index 725a8ee9f66..8bb57c6c3d6 100644 --- a/src/com/android/settings/search/SearchFeatureProviderImpl.java +++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java @@ -51,13 +51,10 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider { String menuTitle = activity.getString(R.string.search_menu); MenuItem menuItem = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, menuTitle) .setIcon(R.drawable.ic_search_24dp) - .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - Intent intent = new Intent(activity, SearchActivity.class); - activity.startActivity(intent); - return true; - } + .setOnMenuItemClickListener(item -> { + Intent intent = new Intent(activity, SearchActivity.class); + activity.startActivity(intent); + return true; }); menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); diff --git a/tests/robotests/src/com/android/settings/SettingsActivityTest.java b/tests/robotests/src/com/android/settings/SettingsActivityTest.java index 2250090c9cf..75080ccb364 100644 --- a/tests/robotests/src/com/android/settings/SettingsActivityTest.java +++ b/tests/robotests/src/com/android/settings/SettingsActivityTest.java @@ -30,12 +30,14 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.FragmentManager; import android.app.FragmentTransaction; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.view.Menu; +import com.android.settings.search.SearchActivity; import com.android.settings.testutils.FakeFeatureFactory; import org.junit.Before; @@ -46,6 +48,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowApplication; import org.robolectric.util.ReflectionHelpers; @RunWith(SettingsRobolectricTestRunner.class) @@ -140,4 +143,15 @@ public class SettingsActivityTest { assertThat(mActivity.mDisplaySearch).isTrue(); } + + @Test + public void testOnClick() { + doReturn("com.android.settings").when(mActivity).getPackageName(); + + mActivity.onClick(null); + + Intent intent = ShadowApplication.getInstance().getNextStartedActivity(); + assertThat(intent.getComponent()).isEqualTo( + new ComponentName("com.android.settings", SearchActivity.class.getName())); + } } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java index 365ba5587a0..8eae8bcd4c9 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java @@ -24,17 +24,19 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.robolectric.RuntimeEnvironment.application; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.res.Resources; +import android.graphics.drawable.ColorDrawable; import android.view.ContextThemeWrapper; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.FrameLayout; +import android.widget.LinearLayout; import android.widget.RemoteViews; import android.widget.TextView; @@ -47,6 +49,7 @@ import com.android.settings.dashboard.conditional.Condition; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.ShadowDynamicIndexableContentMonitor; +import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.Tile; import org.junit.Before; @@ -58,6 +61,7 @@ import org.mockito.Captor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import org.robolectric.RuntimeEnvironment; import org.robolectric.shadows.ShadowApplication; import java.util.ArrayList; @@ -112,6 +116,53 @@ public class DashboardAdapterTest { when(mView.getTag()).thenReturn(mCondition); } + @Test + public void testOnBindViewHolder_spacer_noSuggestions_noConditions() { + makeCategory(); + DashboardAdapter.DashboardItemHolder holder = setupSpacer(); + + mDashboardAdapter.onBindViewHolder(holder, 0); + + assertThat(holder.itemView.getBackground()).isNull(); + } + + @Test + public void testOnBindViewHolder_spacer_suggestion_noConditions() { + setupSuggestions(makeSuggestions("pkg1")); + makeCategory(); + DashboardAdapter.DashboardItemHolder holder = setupSpacer(); + + mDashboardAdapter.onBindViewHolder(holder, 0); + + assertThat(holder.itemView.getBackground()).isNotNull(); + assertThat(holder.itemView.getBackground()).isInstanceOf(ColorDrawable.class); + } + + @Test + public void testOnBindViewHolder_spacer_noSuggestion_condition() { + makeCondition(); + makeCategory(); + DashboardAdapter.DashboardItemHolder holder = setupSpacer(); + + mDashboardAdapter.onBindViewHolder(holder, 0); + + assertThat(holder.itemView.getBackground()).isNotNull(); + assertThat(holder.itemView.getBackground()).isInstanceOf(ColorDrawable.class); + } + + @Test + public void testOnBindViewHolder_spacer_suggestion_condition() { + setupSuggestions(makeSuggestions("pkg1")); + makeCondition(); + makeCategory(); + DashboardAdapter.DashboardItemHolder holder = setupSpacer(); + + mDashboardAdapter.onBindViewHolder(holder, 0); + + assertThat(holder.itemView.getBackground()).isNotNull(); + assertThat(holder.itemView.getBackground()).isInstanceOf(ColorDrawable.class); + } + @Test public void testSetConditions_AfterSetConditions_ExpandedConditionNull() { mDashboardAdapter.onExpandClick(mView); @@ -122,7 +173,7 @@ public class DashboardAdapterTest { @Test public void testSuggestionsLogs_NotExpanded() { - setUpSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); + setupSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); verify(mFactory.metricsFeatureProvider, times(2)).action( any(Context.class), mActionCategoryCaptor.capture(), mActionPackageCaptor.capture()); @@ -137,7 +188,7 @@ public class DashboardAdapterTest { @Test public void testSuggestionsLogs_NotExpandedAndPaused() { - setUpSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); + setupSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); mDashboardAdapter.onPause(); verify(mFactory.metricsFeatureProvider, times(4)).action( any(Context.class), mActionCategoryCaptor.capture(), @@ -154,7 +205,7 @@ public class DashboardAdapterTest { @Test public void testSuggestionsLogs_Expanded() { - setUpSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); + setupSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); mDashboardAdapter.onBindSuggestionHeader( mSuggestionHolder, mSuggestionHeaderData); mSuggestionHolder.itemView.callOnClick(); @@ -173,7 +224,7 @@ public class DashboardAdapterTest { @Test public void testSuggestionsLogs_ExpandedAndPaused() { - setUpSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); + setupSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); mDashboardAdapter.onBindSuggestionHeader( mSuggestionHolder, mSuggestionHeaderData); mSuggestionHolder.itemView.callOnClick(); @@ -196,7 +247,7 @@ public class DashboardAdapterTest { @Test public void testSuggestionsLogs_ExpandedAfterPause() { - setUpSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); + setupSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); mDashboardAdapter.onPause(); mDashboardAdapter.onBindSuggestionHeader( mSuggestionHolder, mSuggestionHeaderData); @@ -221,7 +272,7 @@ public class DashboardAdapterTest { @Test public void testSuggestionsLogs_ExpandedAfterPauseAndPausedAgain() { - setUpSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); + setupSuggestions(makeSuggestions("pkg1", "pkg2", "pkg3")); mDashboardAdapter.onPause(); mDashboardAdapter.onBindSuggestionHeader( mSuggestionHolder, mSuggestionHeaderData); @@ -250,7 +301,7 @@ public class DashboardAdapterTest { @Test public void testSuggestionsLogs_ExpandedWithLessThanDefaultShown() { - setUpSuggestions(makeSuggestions("pkg1")); + setupSuggestions(makeSuggestions("pkg1")); mDashboardAdapter.onBindSuggestionHeader( mSuggestionHolder, mSuggestionHeaderData); mSuggestionHolder.itemView.callOnClick(); @@ -267,7 +318,7 @@ public class DashboardAdapterTest { @Test public void testSuggestionsLogs_ExpandedWithLessThanDefaultShownAndPaused() { - setUpSuggestions(makeSuggestions("pkg1")); + setupSuggestions(makeSuggestions("pkg1")); mDashboardAdapter.onBindSuggestionHeader( mSuggestionHolder, mSuggestionHeaderData); mSuggestionHolder.itemView.callOnClick(); @@ -286,7 +337,7 @@ public class DashboardAdapterTest { @Test public void testSuggestionsLogs_ExpandedWithLessThanDefaultShownAfterPause() { - setUpSuggestions(makeSuggestions("pkg1")); + setupSuggestions(makeSuggestions("pkg1")); mDashboardAdapter.onPause(); mDashboardAdapter.onBindSuggestionHeader( mSuggestionHolder, mSuggestionHeaderData); @@ -306,7 +357,7 @@ public class DashboardAdapterTest { @Test public void testSuggestionsLogs_ExpandedWithLessThanDefaultShownAfterPauseAndPausedAgain() { - setUpSuggestions(makeSuggestions("pkg1")); + setupSuggestions(makeSuggestions("pkg1")); mDashboardAdapter.onPause(); mDashboardAdapter.onBindSuggestionHeader( mSuggestionHolder, mSuggestionHeaderData); @@ -330,15 +381,15 @@ public class DashboardAdapterTest { public void testBindViewHolder_inflateRemoteView() { List packages = makeSuggestions("pkg1"); RemoteViews remoteViews = mock(RemoteViews.class); - TextView textView = new TextView(application); + TextView textView = new TextView(RuntimeEnvironment.application); doReturn(textView).when(remoteViews).apply(any(Context.class), any(ViewGroup.class)); packages.get(0).remoteViews = remoteViews; mDashboardAdapter.setCategoriesAndSuggestions(Collections.emptyList(), packages); mSuggestionHolder = mDashboardAdapter.onCreateViewHolder( - new FrameLayout(application), + new FrameLayout(RuntimeEnvironment.application), R.layout.suggestion_tile_card); - mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 1); + mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 2); assertThat(textView.getParent()).isSameAs(mSuggestionHolder.itemView); mSuggestionHolder.itemView.performClick(); @@ -347,7 +398,8 @@ public class DashboardAdapterTest { @Test public void testBindViewHolder_primaryViewHandlesClick() { - Context context = new ContextThemeWrapper(application, R.style.Theme_Settings); + Context context = + new ContextThemeWrapper(RuntimeEnvironment.application, R.style.Theme_Settings); List packages = makeSuggestions("pkg1"); RemoteViews remoteViews = mock(RemoteViews.class); @@ -362,7 +414,7 @@ public class DashboardAdapterTest { new FrameLayout(context), R.layout.suggestion_tile_card); - mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 1); + mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 2); mSuggestionHolder.itemView.performClick(); assertThat(ShadowApplication.getInstance().getNextStartedActivity()).isNull(); @@ -375,7 +427,8 @@ public class DashboardAdapterTest { @Test public void testBindViewHolder_viewsClearedOnRebind() { - Context context = new ContextThemeWrapper(application, R.style.Theme_Settings); + Context context = + new ContextThemeWrapper(RuntimeEnvironment.application, R.style.Theme_Settings); List packages = makeSuggestions("pkg1"); RemoteViews remoteViews = mock(RemoteViews.class); @@ -390,8 +443,8 @@ public class DashboardAdapterTest { new FrameLayout(context), R.layout.suggestion_tile_card); - mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 1); - mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 1); + mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 2); + mDashboardAdapter.onBindViewHolder(mSuggestionHolder, 2); ViewGroup itemView = (ViewGroup) mSuggestionHolder.itemView; assertThat(itemView.getChildCount()).isEqualTo(1); @@ -408,11 +461,31 @@ public class DashboardAdapterTest { return suggestions; } - private void setUpSuggestions(List suggestions) { + private void setupSuggestions(List suggestions) { mDashboardAdapter.setCategoriesAndSuggestions(new ArrayList<>(), suggestions); mSuggestionHolder = mDashboardAdapter.onCreateViewHolder( - new FrameLayout(application), - mDashboardAdapter.getItemViewType(0)); + new FrameLayout(RuntimeEnvironment.application), + mDashboardAdapter.getItemViewType(1)); } + private void makeCondition() { + final List conditions = new ArrayList<>(); + Condition condition = mock(Condition.class); + when(condition.shouldShow()).thenReturn(true); + conditions.add(condition); + mDashboardAdapter.setConditions(conditions); + } + + private void makeCategory() { + List categories = new ArrayList<>(); + categories.add(new DashboardCategory()); + mDashboardAdapter.setCategory(categories); + } + + private DashboardAdapter.DashboardItemHolder setupSpacer() { + Context context = RuntimeEnvironment.application; + final View view = LayoutInflater.from(context) + .inflate(R.layout.dashboard_header_spacer, new LinearLayout(context), false); + return new DashboardAdapter.DashboardItemHolder(view); + } } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java index abea5653482..8bbb15b3ba1 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java @@ -112,7 +112,7 @@ public class DashboardDataTest { public void testBuildItemsData_containsAllData() { final DashboardData.SuggestionHeaderData data = new DashboardData.SuggestionHeaderData(false, 1, 0); - final Object[] expectedObjects = {mTestCondition, null, data, mTestSuggestion, + final Object[] expectedObjects = {null, mTestCondition, null, data, mTestSuggestion, mDashboardCategory, mTestCategoryTile}; final int expectedSize = expectedObjects.length; @@ -171,7 +171,7 @@ public class DashboardDataTest { @Test public void testDiffUtil_DataEqual_noResultData() { List testResultData = new ArrayList<>(); - testDiffUtil(mDashboardDataWithOneConditions, + testDiffUtil(mDashboardDataWithOneConditions, mDashboardDataWithOneConditions, testResultData); } @@ -180,7 +180,7 @@ public class DashboardDataTest { //Build testResultData final List testResultData = new ArrayList<>(); testResultData.add(new ListUpdateResult.ResultData( - ListUpdateResult.ResultData.TYPE_OPERATION_INSERT, 1, 1)); + ListUpdateResult.ResultData.TYPE_OPERATION_INSERT, 2, 1)); testDiffUtil(mDashboardDataWithOneConditions, mDashboardDataWithTwoConditions, testResultData); @@ -191,7 +191,7 @@ public class DashboardDataTest { //Build testResultData final List testResultData = new ArrayList<>(); testResultData.add(new ListUpdateResult.ResultData( - ListUpdateResult.ResultData.TYPE_OPERATION_REMOVE, 0, 6)); + ListUpdateResult.ResultData.TYPE_OPERATION_REMOVE, 1, 6)); testDiffUtil(mDashboardDataWithOneConditions, mDashboardDataWithNoItems, testResultData); } @@ -203,8 +203,8 @@ public class DashboardDataTest { mDashboardDataWithOneConditions.getItemList(), mDashboardDataWithOneConditions.getItemList()); - // Item in position 0 is condition card, which payload should not be null - assertThat(callback.getChangePayload(0, 0)).isNotEqualTo(null); + // Item in position 1 is condition card, which payload should not be null + assertThat(callback.getChangePayload(1, 1)).isNotNull(); } @Test @@ -214,9 +214,9 @@ public class DashboardDataTest { mDashboardDataWithOneConditions.getItemList(), mDashboardDataWithOneConditions.getItemList()); - // Only item in position 0 is condition card, so others' payload should be null - for (int i = 1; i < mDashboardDataWithOneConditions.getItemList().size(); i++) { - assertThat(callback.getChangePayload(i, i)).isEqualTo(null); + // Position 0 is spacer, 1 is condition card, so others' payload should be null + for (int i = 2; i < mDashboardDataWithOneConditions.getItemList().size(); i++) { + assertThat(callback.getChangePayload(i, i)).isNull(); } } @@ -356,6 +356,11 @@ public class DashboardDataTest { return arg2 - resultData.arg2; } + + @Override + public String toString() { + return "op:" + operation + ",arg1:" + arg1 + ",arg2:" + arg2; + } } } }