diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 77e8c95bef..a3d092fe4c 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -42,6 +42,7 @@ * Fix a bug that caused multiple ads in an ad pod to be skipped when one ad in the ad pod was skipped. * Fix passing an ads response to the `ImaAdsLoader` builder. + * Set the overlay language based on the device locale by default. * Cronet extension: * Fix handling of HTTP status code 200 when making unbounded length range requests ([#8090](https://github.com/google/ExoPlayer/issues/8090)). diff --git a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java index 65c8920971..1a97861b07 100644 --- a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java +++ b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java @@ -82,6 +82,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Locale; import java.util.Set; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @@ -1912,7 +1913,9 @@ public final class ImaAdsLoader private static final class DefaultImaFactory implements ImaUtil.ImaFactory { @Override public ImaSdkSettings createImaSdkSettings() { - return ImaSdkFactory.getInstance().createImaSdkSettings(); + ImaSdkSettings settings = ImaSdkFactory.getInstance().createImaSdkSettings(); + settings.setLanguage(getImaLanguageCodeForDefaultLocale()); + return settings; } @Override @@ -1953,5 +1956,16 @@ public final class ImaAdsLoader return ImaSdkFactory.getInstance() .createAdsLoader(context, imaSdkSettings, adDisplayContainer); } + + /** + * Returns a language code that's suitable for passing to {@link ImaSdkSettings#setLanguage} and + * corresponds to the device's {@link Locale#getDefault() default Locale}. + */ + // TODO: It may be possible to define a better mapping onto IMA's supported language codes. See: + // https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/localization. + // IMA will fall back to its default language code ("en") if the value returned is unsupported. + private static String getImaLanguageCodeForDefaultLocale() { + return Util.splitAtFirst(Util.getSystemLanguageCodes()[0], "-")[0]; + } } }