diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowLocaleManagerTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowLocaleManagerTest.java index aa7cc4c4721..e53b3dd53b5 100644 --- a/robolectric/src/test/java/org/robolectric/shadows/ShadowLocaleManagerTest.java +++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowLocaleManagerTest.java @@ -45,6 +45,18 @@ public void setApplicationLocales_updatesMap() { .isEqualTo(DEFAULT_LOCALES); } + @Test + public void setApplicationLocales_defaultPackage_updatesMap() { + // empty map before set is called. + assertThat(localeManager.getApplicationLocales(DEFAULT_PACKAGE_NAME)) + .isEqualTo(LocaleList.getEmptyLocaleList()); + + localeManager.setApplicationLocales(DEFAULT_LOCALES); + + shadowLocaleManager.enforceInstallerCheck(false); + assertThat(localeManager.getApplicationLocales()).isEqualTo(DEFAULT_LOCALES); + } + @Test public void getApplicationLocales_fetchAsInstaller_returnsLocales() { localeManager.setApplicationLocales(DEFAULT_PACKAGE_NAME, DEFAULT_LOCALES); diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLocaleManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLocaleManager.java index 2244a2be736..d96a1e2c441 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLocaleManager.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowLocaleManager.java @@ -12,6 +12,7 @@ import java.util.Set; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; +import org.robolectric.versioning.AndroidVersions.U; /** Shadow of {@link LocaleManager} */ @Implements(value = LocaleManager.class, minSdk = VERSION_CODES.TIRAMISU, isInAndroidSdk = false) @@ -48,13 +49,26 @@ protected LocaleList getApplicationLocales(String packageName) { /** * Stores the passed locales for the given package in-memory. * + *

Starting in Android U, this method just invokes the 3-arg version (below). + * *

Use this method in tests to substitute call for {@link LocaleManager#setApplicationLocales}. */ - @Implementation + @Implementation(maxSdk = VERSION_CODES.TIRAMISU) protected void setApplicationLocales(String packageName, LocaleList locales) { appLocales.put(packageName, locales); } + /** + * Stores the passed locales for the given package in-memory. + * + *

Use this method in tests to substitute call for {@link LocaleManager#setApplicationLocales}. + */ + @Implementation(minSdk = U.SDK_INT) + protected void setApplicationLocales( + String packageName, LocaleList locales, boolean fromDelegate) { + setApplicationLocales(packageName, locales); + } + @RequiresApi(api = VERSION_CODES.N) @Implementation protected LocaleList getSystemLocales() {