|
23 | 23 | import com.facebook.react.bridge.Arguments; |
24 | 24 | import com.facebook.react.bridge.ReactContext; |
25 | 25 | import com.facebook.react.bridge.ReadableArray; |
| 26 | +import com.facebook.react.bridge.ReadableMap; |
| 27 | +import com.facebook.react.bridge.ReadableType; |
26 | 28 | import com.facebook.react.bridge.WritableMap; |
27 | 29 | import com.facebook.react.common.MapBuilder; |
28 | 30 | import com.facebook.react.uimanager.PixelUtil; |
@@ -118,26 +120,54 @@ public void setRequest(ReactNativeAdView reactViewGroup, String value) { |
118 | 120 | } |
119 | 121 | } |
120 | 122 |
|
121 | | - @ReactProp(name = "sizes") |
122 | | - public void setSizes(ReactNativeAdView reactViewGroup, ReadableArray value) { |
123 | | - List<AdSize> sizeList = new ArrayList<>(); |
124 | | - for (Object size : value.toArrayList()) { |
125 | | - if (size instanceof String) { |
126 | | - String sizeString = (String) size; |
127 | | - sizeList.add(ReactNativeGoogleMobileAdsCommon.getAdSize(sizeString, reactViewGroup)); |
| 123 | + @ReactProp(name = "sizeConfig") |
| 124 | + public void setSizeConfig(ReactNativeAdView reactViewGroup, ReadableMap sizeConfig) { |
| 125 | + if (sizeConfig != null) { |
| 126 | + // Handle maxHeight |
| 127 | + if (sizeConfig.hasKey("maxHeight") && !sizeConfig.isNull("maxHeight")) { |
| 128 | + float maxHeight = (float) sizeConfig.getDouble("maxHeight"); |
| 129 | + reactViewGroup.setMaxAdHeight(maxHeight); |
| 130 | + } else { |
| 131 | + reactViewGroup.setMaxAdHeight(0); |
128 | 132 | } |
129 | | - } |
130 | 133 |
|
131 | | - if (sizeList.size() > 0 && !sizeList.contains(AdSize.FLUID)) { |
132 | | - AdSize adSize = sizeList.get(0); |
133 | | - WritableMap payload = Arguments.createMap(); |
134 | | - payload.putDouble("width", adSize.getWidth()); |
135 | | - payload.putDouble("height", adSize.getHeight()); |
136 | | - sendEvent(reactViewGroup, EVENT_SIZE_CHANGE, payload); |
137 | | - } |
| 134 | + // Handle width |
| 135 | + if (sizeConfig.hasKey("width") && !sizeConfig.isNull("width")) { |
| 136 | + float width = (float) sizeConfig.getDouble("width"); |
| 137 | + reactViewGroup.setAdWidth(width); |
| 138 | + } else { |
| 139 | + reactViewGroup.setAdWidth(0); |
| 140 | + } |
| 141 | + // Handle the sizes array |
| 142 | + if (sizeConfig.hasKey("sizes") && !sizeConfig.isNull("sizes")) { |
| 143 | + ReadableArray sizesArray = sizeConfig.getArray("sizes"); |
| 144 | + if (sizesArray != null) { |
| 145 | + // Process the sizes array and convert to AdSize objects |
| 146 | + List<AdSize> sizeList = new ArrayList<>(); |
| 147 | + for (int i = 0; i < sizesArray.size(); i++) { |
| 148 | + if (sizesArray.getType(i) == ReadableType.String) { |
| 149 | + String sizeString = sizesArray.getString(i); |
| 150 | + AdSize adSize = |
| 151 | + ReactNativeGoogleMobileAdsCommon.getAdSize(sizeString, reactViewGroup); |
| 152 | + sizeList.add(adSize); |
| 153 | + } |
| 154 | + } |
138 | 155 |
|
139 | | - reactViewGroup.setSizes(sizeList); |
140 | | - reactViewGroup.setPropsChanged(true); |
| 156 | + // Update the view with sizes and trigger size change event if needed |
| 157 | + if (sizeList.size() > 0 && !sizeList.contains(AdSize.FLUID)) { |
| 158 | + AdSize adSize = sizeList.get(0); |
| 159 | + WritableMap payload = Arguments.createMap(); |
| 160 | + payload.putDouble("width", adSize.getWidth()); |
| 161 | + payload.putDouble("height", adSize.getHeight()); |
| 162 | + sendEvent(reactViewGroup, EVENT_SIZE_CHANGE, payload); |
| 163 | + } |
| 164 | + |
| 165 | + reactViewGroup.setSizes(sizeList); |
| 166 | + } |
| 167 | + } |
| 168 | + |
| 169 | + reactViewGroup.setPropsChanged(true); |
| 170 | + } |
141 | 171 | } |
142 | 172 |
|
143 | 173 | @ReactProp(name = "manualImpressionsEnabled") |
|
0 commit comments