From 689e89e5f39ee99ea35d2060aaaead1321d63421 Mon Sep 17 00:00:00 2001 From: olly Date: Mon, 23 Nov 2020 17:54:26 +0000 Subject: [PATCH] Localize IMA based on device locale by default #exofixit PiperOrigin-RevId: 343871061 --- RELEASENOTES.md | 2 ++ .../android/exoplayer2/ext/ima/ImaAdsLoader.java | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 9c0f2962fc..ae01c34f4c 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -88,6 +88,8 @@ * Notify onBufferingEnded when the state of origin player becomes STATE_IDLE or STATE_ENDED. * Allow to remove all playlist items that makes the player reset. +* IMA extension: + * Set the overlay language based on the device locale by default. ### 2.12.1 (2020-10-23) ### 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 27e708a67d..8bb6057a56 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 @@ -58,6 +58,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.Set; /** @@ -544,7 +545,9 @@ public final class ImaAdsLoader implements Player.EventListener, AdsLoader { 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 @@ -585,5 +588,16 @@ public final class ImaAdsLoader implements Player.EventListener, AdsLoader { 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]; + } } }