summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author William Luh <williamluh@google.com> 2017-04-07 00:00:40 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-04-07 00:00:44 +0000
commit1b54760eeeb77f2ce0b88fd4deb0db16437397b9 (patch)
treeb1fb8f7c019cf1263ae042a513300d3a6b134023
parent34cb00ac83164bdf3b3fd4d5ef6ed3cf20c92833 (diff)
parent4c978a302afb0e3b416319b3cd963a6e7ccc379d (diff)
Merge "Fix injected settings titles not matching a locale change." into oc-dev
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java19
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java60
2 files changed, 77 insertions, 2 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
index f31c09b104fd..6bcf256a8033 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
@@ -135,10 +135,18 @@ public class TileUtils {
* Name of the meta-data item that should be set in the AndroidManifest.xml
* to specify the title that should be displayed for the preference.
*/
+ @Deprecated
public static final String META_DATA_PREFERENCE_TITLE = "com.android.settings.title";
/**
* Name of the meta-data item that should be set in the AndroidManifest.xml
+ * to specify the title that should be displayed for the preference.
+ */
+ public static final String META_DATA_PREFERENCE_TITLE_RES_ID =
+ "com.android.settings.title.resid";
+
+ /**
+ * Name of the meta-data item that should be set in the AndroidManifest.xml
* to specify the summary text that should be displayed for the preference.
*/
public static final String META_DATA_PREFERENCE_SUMMARY = "com.android.settings.summary";
@@ -364,7 +372,16 @@ public class TileUtils {
if (metaData.containsKey(META_DATA_PREFERENCE_ICON)) {
icon = metaData.getInt(META_DATA_PREFERENCE_ICON);
}
- if (metaData.containsKey(META_DATA_PREFERENCE_TITLE)) {
+ int resId = 0;
+ if (metaData.containsKey(META_DATA_PREFERENCE_TITLE_RES_ID)) {
+ resId = metaData.getInt(META_DATA_PREFERENCE_TITLE_RES_ID);
+ if (resId != 0) {
+ title = res.getString(resId);
+ }
+ }
+ // Fallback to legacy title extraction if we couldn't get the title through
+ // res id.
+ if ((resId == 0) && metaData.containsKey(META_DATA_PREFERENCE_TITLE)) {
if (metaData.get(META_DATA_PREFERENCE_TITLE) instanceof Integer) {
title = res.getString(metaData.getInt(META_DATA_PREFERENCE_TITLE));
} else {
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 2d3c4a786f5c..5310b7a604b0 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
@@ -231,6 +231,51 @@ public class TileUtilsTest {
}
@Test
+ public void getTilesForIntent_shouldReadMetadataTitleAsString() 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, URI_GET_ICON,
+ URI_GET_SUMMARY, "my title", 0);
+ info.add(resolveInfo);
+
+ when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
+ .thenReturn(info);
+
+ TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
+ null /* defaultCategory */, outTiles, false /* usePriority */,
+ false /* checkCategory */);
+
+ assertThat(outTiles.size()).isEqualTo(1);
+ assertThat(outTiles.get(0).title).isEqualTo("my title");
+ }
+
+ @Test
+ public void getTilesForIntent_shouldReadMetadataTitleFromResource() 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, URI_GET_ICON,
+ URI_GET_SUMMARY, null, 123);
+ info.add(resolveInfo);
+
+ when(mPackageManager.queryIntentActivitiesAsUser(eq(intent), anyInt(), anyInt()))
+ .thenReturn(info);
+
+ when(mResources.getString(eq(123)))
+ .thenReturn("my localized title");
+
+ TileUtils.getTilesForIntent(mContext, UserHandle.CURRENT, intent, addedCache,
+ null /* defaultCategory */, outTiles, false /* usePriority */,
+ false /* checkCategory */);
+
+ assertThat(outTiles.size()).isEqualTo(1);
+ assertThat(outTiles.get(0).title).isEqualTo("my localized title");
+ }
+
+ @Test
public void getTilesForIntent_shouldNotProcessInvalidUriContentSystemApp()
throws RemoteException {
Intent intent = new Intent();
@@ -298,7 +343,13 @@ public class TileUtilsTest {
}
private static ResolveInfo newInfo(boolean systemApp, String category, String keyHint,
- String iconUri, String summaryUri) {
+ String iconUri, String summaryUri) {
+ return newInfo(systemApp, category, keyHint, iconUri, summaryUri, null, 0);
+ }
+
+ private static ResolveInfo newInfo(boolean systemApp, String category, String keyHint,
+ String iconUri, String summaryUri, String title, int titleResId) {
+
ResolveInfo info = new ResolveInfo();
info.system = systemApp;
info.activityInfo = new ActivityInfo();
@@ -317,6 +368,13 @@ public class TileUtilsTest {
if (summaryUri != null) {
info.activityInfo.metaData.putString("com.android.settings.summary_uri", summaryUri);
}
+ if (title != null) {
+ info.activityInfo.metaData.putString(TileUtils.META_DATA_PREFERENCE_TITLE, title);
+ }
+ if (titleResId != 0) {
+ info.activityInfo.metaData.putInt(
+ TileUtils.META_DATA_PREFERENCE_TITLE_RES_ID, titleResId);
+ }
info.activityInfo.applicationInfo = new ApplicationInfo();
if (systemApp) {
info.activityInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;