diff options
| author | 2017-09-08 05:09:26 +0000 | |
|---|---|---|
| committer | 2017-09-08 05:09:26 +0000 | |
| commit | 2c1192999e9d2bc10e7b81fd8e2a48f90a13ba40 (patch) | |
| tree | 136ac807fdab3b8db4e6c511c06e8a9095d35984 | |
| parent | a9910648ab4f92aef18881381ca6ecaaa830f4c5 (diff) | |
| parent | 00932ebb963272f9a6be6587d0e3409228549196 (diff) | |
Merge "Add method to update tile's remoteview using summaryUri"
| -rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java | 33 | ||||
| -rw-r--r-- | packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java | 97 |
2 files changed, 37 insertions, 93 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java index fc0a444915c3..713e9675cccd 100644 --- a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java @@ -428,15 +428,6 @@ public class TileUtils { if (metaData.containsKey(META_DATA_PREFERENCE_CUSTOM_VIEW)) { int layoutId = metaData.getInt(META_DATA_PREFERENCE_CUSTOM_VIEW); remoteViews = new RemoteViews(applicationInfo.packageName, layoutId); - if (metaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) { - String uriString = metaData.getString( - META_DATA_PREFERENCE_SUMMARY_URI); - String overrideSummary = getTextFromUri(context, uriString, providerMap, - META_DATA_PREFERENCE_SUMMARY); - if (overrideSummary != null) { - remoteViews.setTextViewText(android.R.id.summary, overrideSummary); - } - } } } } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) { @@ -543,6 +534,30 @@ public class TileUtils { } } + public static void updateTileUsingSummaryUri(Context context, Tile tile) { + if (tile == null || tile.metaData == null || + !tile.metaData.containsKey(META_DATA_PREFERENCE_SUMMARY_URI)) { + return; + } + + final Map<String, IContentProvider> providerMap = new HashMap<>(); + + final String uriString = tile.metaData.getString(META_DATA_PREFERENCE_SUMMARY_URI); + final Bundle bundle = getBundleFromUri(context, uriString, providerMap); + final String overrideSummary = getString(bundle, META_DATA_PREFERENCE_SUMMARY); + final String overrideTitle = getString(bundle, META_DATA_PREFERENCE_TITLE); + if (overrideSummary != null) { + tile.remoteViews.setTextViewText(android.R.id.summary, overrideSummary); + } + if (overrideTitle != null) { + tile.remoteViews.setTextViewText(android.R.id.title, overrideTitle); + } + } + + private static String getString(Bundle bundle, String key) { + return bundle == null ? null : bundle.getString(key); + } + private static IContentProvider getProviderFromUri(Context context, Uri uri, Map<String, IContentProvider> providerMap) { if (uri == null) { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java index 3e90435b21d7..88035e4fc600 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java @@ -22,10 +22,12 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.robolectric.RuntimeEnvironment.application; @@ -64,9 +66,6 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import org.robolectric.annotation.Implementation; -import org.robolectric.annotation.Implements; -import org.robolectric.internal.ShadowExtractor; import java.util.ArrayList; import java.util.Collections; @@ -75,8 +74,7 @@ import java.util.Map; @RunWith(RobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, - sdk = TestConfig.SDK_VERSION, - shadows = {TileUtilsTest.TileUtilsShadowRemoteViews.class}) + sdk = TestConfig.SDK_VERSION) public class TileUtilsTest { @Mock @@ -421,24 +419,12 @@ public class TileUtilsTest { } @Test - public void getTilesForIntent_summaryUriSpecified_shouldOverrideRemoteViewSummary() + public void updateTileUsingSummaryUri_summaryUriSpecified_shouldOverrideRemoteViewSummary() throws RemoteException { - Intent intent = new Intent(); - Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>(); - List<Tile> outTiles = new ArrayList<>(); - List<ResolveInfo> info = new ArrayList<>(); - ResolveInfo resolveInfo = newInfo(true, null /* category */, null, - null, URI_GET_SUMMARY); - resolveInfo.activityInfo.metaData.putInt("com.android.settings.custom_view", - R.layout.user_preference); - info.add(resolveInfo); - - when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt())) - .thenReturn(info); - // Mock the content provider interaction. Bundle bundle = new Bundle(); - bundle.putString(TileUtils.META_DATA_PREFERENCE_SUMMARY, "new summary text"); + String expectedSummary = "new summary text"; + bundle.putString(TileUtils.META_DATA_PREFERENCE_SUMMARY, expectedSummary); when(mIContentProvider.call(anyString(), eq(TileUtils.getMethodFromUri(Uri.parse(URI_GET_SUMMARY))), eq(URI_GET_SUMMARY), any())).thenReturn(bundle); @@ -447,57 +433,12 @@ public class TileUtilsTest { when(mContentResolver.acquireUnstableProvider(any(Uri.class))) .thenReturn(mIContentProvider); - TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache, - null /* defaultCategory */, outTiles, false /* usePriority */, - false /* checkCategory */, true /* forceTintExternalIcon */); - - assertThat(outTiles.size()).isEqualTo(1); - Tile tile = outTiles.get(0); - assertThat(tile.remoteViews).isNotNull(); - assertThat(tile.remoteViews.getLayoutId()).isEqualTo(R.layout.user_preference); - // Make sure the summary TextView got a new text string. - TileUtilsShadowRemoteViews shadowRemoteViews = - (TileUtilsShadowRemoteViews) ShadowExtractor.extract(tile.remoteViews); - assertThat(shadowRemoteViews.overrideViewId).isEqualTo(android.R.id.summary); - assertThat(shadowRemoteViews.overrideText).isEqualTo("new summary text"); - } - - @Test - public void getTilesForIntent_providerUnavailable_shouldNotOverrideRemoteViewSummary() - throws RemoteException { - Intent intent = new Intent(); - Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>(); - List<Tile> outTiles = new ArrayList<>(); - List<ResolveInfo> info = new ArrayList<>(); - ResolveInfo resolveInfo = newInfo(true, null /* category */, null, - null, URI_GET_SUMMARY); - resolveInfo.activityInfo.metaData.putInt("com.android.settings.custom_view", - R.layout.user_preference); - info.add(resolveInfo); - - when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt())) - .thenReturn(info); - - // Mock the content provider interaction. - Bundle bundle = new Bundle(); - bundle.putString(TileUtils.META_DATA_PREFERENCE_SUMMARY, "new summary text"); - when(mIContentProvider.call(anyString(), - eq(TileUtils.getMethodFromUri(Uri.parse(URI_GET_SUMMARY))), eq(URI_GET_SUMMARY), - any())).thenReturn(bundle); - - TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache, - null /* defaultCategory */, outTiles, false /* usePriority */, - false /* checkCategory */, true /* forceTintExternalIcon */); - - assertThat(outTiles.size()).isEqualTo(1); - Tile tile = outTiles.get(0); - assertThat(tile.remoteViews).isNotNull(); - assertThat(tile.remoteViews.getLayoutId()).isEqualTo(R.layout.user_preference); - // Make sure the summary TextView didn't get any text view updates. - TileUtilsShadowRemoteViews shadowRemoteViews = - (TileUtilsShadowRemoteViews) ShadowExtractor.extract(tile.remoteViews); - assertThat(shadowRemoteViews.overrideViewId).isNull(); - assertThat(shadowRemoteViews.overrideText).isNull(); + Tile tile = new Tile(); + tile.metaData = new Bundle(); + tile.metaData.putString(TileUtils.META_DATA_PREFERENCE_SUMMARY_URI, URI_GET_SUMMARY); + tile.remoteViews = mock(RemoteViews.class); + TileUtils.updateTileUsingSummaryUri(mContext, tile); + verify(tile.remoteViews, times(1)).setTextViewText(anyInt(), eq(expectedSummary)); } public static ResolveInfo newInfo(boolean systemApp, String category) { @@ -558,16 +499,4 @@ public class TileUtilsTest { } } - @Implements(RemoteViews.class) - public static class TileUtilsShadowRemoteViews { - - private Integer overrideViewId; - private CharSequence overrideText; - - @Implementation - public void setTextViewText(int viewId, CharSequence text) { - overrideViewId = viewId; - overrideText = text; - } - } } |