diff --git a/src/com/android/settings/dashboard/DashboardData.java b/src/com/android/settings/dashboard/DashboardData.java index 0fac0a2248d..1fd181ff544 100644 --- a/src/com/android/settings/dashboard/DashboardData.java +++ b/src/com/android/settings/dashboard/DashboardData.java @@ -460,6 +460,17 @@ public class DashboardData { // Only check title and summary for dashboard tile return TextUtils.equals(localTile.title, targetTile.title) && TextUtils.equals(localTile.summary, targetTile.summary); + case TYPE_SUGGESTION_CONDITION_CONTAINER: + // If entity is suggestion and contains remote view, force refresh + final List entities = (List) entity; + if (!entities.isEmpty()) { + Object firstEntity = entities.get(0); + if (firstEntity instanceof Tile + && ((Tile) firstEntity).remoteViews != null) { + return false; + } + } + // Otherwise Fall through to default default: return entity == null ? targetItem.entity == null : entity.equals(targetItem.entity); diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java b/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java index 45396807f87..2c9da4124b1 100644 --- a/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java +++ b/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java @@ -29,6 +29,8 @@ import com.android.settings.dashboard.DashboardAdapter.DashboardItemHolder; import com.android.settings.dashboard.DashboardAdapter.IconCache; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.drawer.Tile; +import com.android.settingslib.drawer.TileUtils; + import java.util.List; import java.util.Objects; @@ -73,6 +75,7 @@ public class SuggestionAdapter extends RecyclerView.Adapter mSuggestionsShownLogged.add(suggestionId); } if (suggestion.remoteViews != null) { + TileUtils.updateTileUsingSummaryUri(mContext, suggestion); final ViewGroup itemView = (ViewGroup) holder.itemView; itemView.removeAllViews(); itemView.addView(suggestion.remoteViews.apply(itemView.getContext(), itemView)); diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java index 77213f54cfe..68d33545bc1 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java @@ -19,6 +19,7 @@ package com.android.settings.dashboard; import android.support.annotation.NonNull; import android.support.v7.util.DiffUtil; import android.support.v7.util.ListUpdateCallback; +import android.widget.RemoteViews; import com.android.settings.TestConfig; import com.android.settings.dashboard.conditional.AirplaneModeCondition; @@ -35,6 +36,7 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -224,6 +226,28 @@ public class DashboardDataTest { testDiffUtil(mDashboardDataWithOneConditions, mDashboardDataWithNoItems, testResultData); } + @Test + public void testDiffUtil_typeSuggestedContainer_ResultDataNothingChanged() { + //Build testResultData + final List testResultData = new ArrayList<>(); + testResultData.add(new ListUpdateResult.ResultData( + ListUpdateResult.ResultData.TYPE_OPERATION_CHANGE, 0, 1)); + Tile tile = new Tile(); + tile.remoteViews = mock(RemoteViews.class); + + DashboardData prevData = new DashboardData.Builder() + .setConditions(null) + .setCategory(null) + .setSuggestions(Arrays.asList(tile)) + .build(); + DashboardData currentData = new DashboardData.Builder() + .setConditions(null) + .setCategory(null) + .setSuggestions(Arrays.asList(tile)) + .build(); + testDiffUtil(prevData, currentData, testResultData); + } + /** * Test when using the * {@link com.android.settings.dashboard.DashboardData.ItemsDataDiffCallback}