From ab07989b979d03e67aa39a0bdc3cc931b6ec35d1 Mon Sep 17 00:00:00 2001 From: Ajay Nadathur Date: Thu, 31 Aug 2017 11:37:32 -0700 Subject: [PATCH] Set title in remote views if present in bundle - Title set if defined in the Bundle returned by summaryUri's content provider. - summaryUri invoked inline with onBindView call bug: 62713030 Test: Manually tested, verified that title and summary are retrieved when settings app is resumed Change-Id: Id82531eec5ec11ec3492f033fb34ec65a5437a48 --- .../settings/dashboard/DashboardData.java | 11 +++++++++ .../suggestions/SuggestionAdapter.java | 3 +++ .../settings/dashboard/DashboardDataTest.java | 24 +++++++++++++++++++ 3 files changed, 38 insertions(+) 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}