From 51edf96ae9596226cff5e8debda19da1b6c7b165 Mon Sep 17 00:00:00 2001 From: melkayam92 Date: Fri, 29 Jan 2021 15:17:45 +0200 Subject: [PATCH] feat(admob, android): add adaptive banner support (#4840) * added support for adaptive banner Co-authored-by: Mike Hardy --- ...ativeFirebaseAdMobBannerAdViewManager.java | 2 +- .../admob/ReactNativeFirebaseAdMobCommon.java | 28 +++++++++++++++++++ packages/admob/lib/index.d.ts | 2 -- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/packages/admob/android/src/main/java/io/invertase/firebase/admob/ReactNativeFirebaseAdMobBannerAdViewManager.java b/packages/admob/android/src/main/java/io/invertase/firebase/admob/ReactNativeFirebaseAdMobBannerAdViewManager.java index 44cd44d82d..5faee1b6c1 100644 --- a/packages/admob/android/src/main/java/io/invertase/firebase/admob/ReactNativeFirebaseAdMobBannerAdViewManager.java +++ b/packages/admob/android/src/main/java/io/invertase/firebase/admob/ReactNativeFirebaseAdMobBannerAdViewManager.java @@ -96,7 +96,7 @@ public void setRequest(ReactViewGroup reactViewGroup, ReadableMap value) { @ReactProp(name = "size") public void setSize(ReactViewGroup reactViewGroup, String value) { - size = ReactNativeFirebaseAdMobCommon.stringToAdSize(value); + size = ReactNativeFirebaseAdMobCommon.getAdSize(value, reactViewGroup); int width; int height; diff --git a/packages/admob/android/src/main/java/io/invertase/firebase/admob/ReactNativeFirebaseAdMobCommon.java b/packages/admob/android/src/main/java/io/invertase/firebase/admob/ReactNativeFirebaseAdMobCommon.java index f4c54980cb..505c0a7057 100644 --- a/packages/admob/android/src/main/java/io/invertase/firebase/admob/ReactNativeFirebaseAdMobCommon.java +++ b/packages/admob/android/src/main/java/io/invertase/firebase/admob/ReactNativeFirebaseAdMobCommon.java @@ -20,10 +20,15 @@ import android.location.Location; import android.os.Bundle; +import android.util.DisplayMetrics; +import android.view.Display; + import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.WritableMap; +import com.facebook.react.views.view.ReactViewGroup; import com.google.ads.mediation.admob.AdMobAdapter; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; @@ -39,6 +44,29 @@ public class ReactNativeFirebaseAdMobCommon { + static AdSize getAdSizeForAdaptiveBanner(ReactViewGroup reactViewGroup) { + + try { + Display display = Objects.requireNonNull(((ReactContext) reactViewGroup.getContext()).getCurrentActivity()).getWindowManager().getDefaultDisplay(); + + DisplayMetrics outMetrics = new DisplayMetrics(); + display.getMetrics(outMetrics); + int adWidth = (int) (outMetrics.widthPixels / outMetrics.density); + + return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(reactViewGroup.getContext(), adWidth); + } catch (Exception e) { + return AdSize.BANNER; + } + } + + static AdSize getAdSize(String preDefinedAdSize, ReactViewGroup reactViewGroup) { + if ("ADAPTIVE_BANNER".equals(preDefinedAdSize)) { + return ReactNativeFirebaseAdMobCommon.getAdSizeForAdaptiveBanner(reactViewGroup); + } else { + return ReactNativeFirebaseAdMobCommon.stringToAdSize(preDefinedAdSize); + } + } + static AdSize stringToAdSize(String value) { Pattern pattern = Pattern.compile("([0-9]+)x([0-9]+)"); Matcher matcher = pattern.matcher(value); diff --git a/packages/admob/lib/index.d.ts b/packages/admob/lib/index.d.ts index b56f9c801c..22f4b20763 100644 --- a/packages/admob/lib/index.d.ts +++ b/packages/admob/lib/index.d.ts @@ -239,8 +239,6 @@ export namespace FirebaseAdMobTypes { /** * A (next generation) dynamically sized banner that is full-width and auto-height. - * - * iOS only */ ADAPTIVE_BANNER: 'ADAPTIVE_BANNER';