Merge "Fix injected settings titles not matching a locale change." into oc-dev am: 1b54760eee
am: 5669141382
Change-Id: Ic628750c2332cfdf734bf7798e378ddf93a0cdbd
This commit is contained in:
@@ -135,8 +135,16 @@ 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.
|
||||
@@ -373,7 +381,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 {
|
||||
|
||||
@@ -235,6 +235,51 @@ public class TileUtilsTest {
|
||||
.isEqualTo(TileUtils.SETTING_PKG);
|
||||
}
|
||||
|
||||
@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 {
|
||||
@@ -327,7 +372,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();
|
||||
@@ -346,6 +397,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;
|
||||
|
||||
Reference in New Issue
Block a user