Skip to content

Commit

Permalink
feat(unification): connect BidLoader from rendering #370
Browse files Browse the repository at this point in the history
Add Native json object. Add saving Native ad to cache.
  • Loading branch information
ValentinPostindustria committed Mar 21, 2022
1 parent 3c75c15 commit 44f8a4f
Show file tree
Hide file tree
Showing 22 changed files with 327 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@
import android.text.TextUtils;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.prebid.mobile.rendering.bidding.data.bid.BidResponse;
import org.prebid.mobile.rendering.bidding.listeners.BidRequesterListener;
import org.prebid.mobile.rendering.bidding.loader.BidLoader;
import org.prebid.mobile.rendering.errors.AdException;
import org.prebid.mobile.tasksmanager.TasksManager;
import org.prebid.mobile.units.configuration.AdUnitConfiguration;

Expand All @@ -37,9 +42,12 @@ public abstract class AdUnit {
private DemandFetcher fetcher;
protected AdUnitConfiguration configuration = new AdUnitConfiguration();

AdUnit(@NonNull String configId, @NonNull AdType adType) {
@Nullable
protected Object adObject;

AdUnit(@NonNull String configId, @NonNull AdUnitConfiguration.AdUnitIdentifierType adType) {
configuration.setConfigId(configId);
configuration.setAdType(adType);
configuration.setAdUnitIdentifierType(adType);
}

public void setAutoRefreshPeriodMillis(@IntRange(from = MIN_AUTO_REFRESH_PERIOD_MILLIS) int periodMillis) {
Expand Down Expand Up @@ -68,19 +76,12 @@ public void stopAutoRefresh() {
}

public void fetchDemand(@NonNull final OnCompleteListener2 listener) {

final Map<String, String> keywordsMap = new HashMap<>();

fetchDemand(keywordsMap, new OnCompleteListener() {
@Override
public void onComplete(final ResultCode resultCode) {
TasksManager.getInstance().executeOnMainThread(new Runnable() {
@Override
public void run() {
listener.onComplete(resultCode, keywordsMap.size() != 0 ? Collections.unmodifiableMap(keywordsMap) : null);
}
});
}
fetchDemand(keywordsMap, resultCode -> {
TasksManager.getInstance().executeOnMainThread(() ->
listener.onComplete(resultCode, keywordsMap.size() != 0 ? Collections.unmodifiableMap(keywordsMap) : null)
);
});
}

Expand Down Expand Up @@ -130,17 +131,26 @@ public void fetchDemand(@NonNull Object adObj, @NonNull OnCompleteListener liste
}

if (Util.supportedAdObject(adObj)) {
fetcher = new DemandFetcher(adObj);
fetcher.setPeriodMillis(periodMillis);
fetcher.setConfiguration(configuration);
fetcher.setListener(listener);
if (periodMillis >= 30000) {
LogUtil.v("Start fetching bids with auto refresh millis: " + periodMillis);
} else {
LogUtil.v("Start a single fetching.");
}
fetcher.start();
adObject = adObj;
BidLoader loader = new BidLoader(
context,
configuration,
createBidListener(listener)
);
loader.load();
// TODO:Unification: Add auto refresh
// fetcher = new DemandFetcher(adObj);
// fetcher.setPeriodMillis(periodMillis);
// fetcher.setConfiguration(configuration);
// fetcher.setListener(listener);
// if (periodMillis >= 30000) {
// LogUtil.v("Start fetching bids with auto refresh millis: " + periodMillis);
// } else {
// LogUtil.v("Start a single fetching.");
// }
// fetcher.start();
} else {
adObject = null;
listener.onComplete(ResultCode.INVALID_AD_OBJECT);
}

Expand Down Expand Up @@ -249,6 +259,26 @@ public void setPbAdSlot(String pbAdSlot) {
configuration.setPbAdSlot(pbAdSlot);
}


protected BidRequesterListener createBidListener(OnCompleteListener originalListener) {
return new BidRequesterListener() {
@Override
public void onFetchCompleted(BidResponse response) {
HashMap<String, String> keywords = response.getTargeting();
Util.apply(keywords, adObject);
originalListener.onComplete(ResultCode.SUCCESS);
}

@Override
public void onError(AdException exception) {
Util.apply(null, adObject);
// TODO:Unification: Change code
originalListener.onComplete(ResultCode.NETWORK_ERROR);
}
};
}


@VisibleForTesting
public AdUnitConfiguration getConfiguration() {
return configuration;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@
package org.prebid.mobile;

import androidx.annotation.NonNull;
import org.prebid.mobile.units.configuration.AdUnitConfiguration;

import java.util.HashSet;

public class BannerAdUnit extends BannerBaseAdUnit {

public BannerAdUnit(@NonNull String configId, int width, int height) {
super(configId, AdType.BANNER);
super(configId, AdUnitConfiguration.AdUnitIdentifierType.BANNER);
configuration.addSize(new AdSize(width, height));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.prebid.mobile.units.configuration.AdUnitConfiguration;

import java.util.List;

public abstract class BannerBaseAdUnit extends AdUnit {

BannerBaseAdUnit(@NonNull String configId, @NonNull AdType adType) {
BannerBaseAdUnit(@NonNull String configId, @NonNull AdUnitConfiguration.AdUnitIdentifierType adType) {
super(configId, adType);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,12 @@

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.prebid.mobile.units.configuration.AdUnitConfiguration;

public class InterstitialAdUnit extends BannerBaseAdUnit {

public InterstitialAdUnit(@NonNull String configId) {
super(configId, AdType.INTERSTITIAL);
super(configId, AdUnitConfiguration.AdUnitIdentifierType.INTERSTITIAL);
}

public InterstitialAdUnit(@NonNull String configId, int minWidthPerc, int minHeightPerc) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import org.json.JSONObject;
import org.prebid.mobile.rendering.bidding.data.bid.BidResponse;
import org.prebid.mobile.rendering.bidding.listeners.BidRequesterListener;
import org.prebid.mobile.rendering.errors.AdException;
import org.prebid.mobile.units.configuration.AdUnitConfiguration;
import org.prebid.mobile.units.configuration.NativeAdUnitConfiguration;

import java.util.HashMap;

/**
* For details of the configuration of native imps, please check this documentation:
* https://www.iab.com/wp-content/uploads/2018/03/OpenRTB-Native-Ads-Specification-Final-1.2.pdf
Expand All @@ -16,11 +22,34 @@ public class NativeAdUnit extends AdUnit {
private final NativeAdUnitConfiguration nativeConfiguration;

public NativeAdUnit(@NonNull String configId) {
super(configId, AdType.NATIVE);
super(configId, AdUnitConfiguration.AdUnitIdentifierType.NATIVE);
configuration.initNativeConfiguration();
nativeConfiguration = configuration.getNativeConfiguration();
}

@Override
protected BidRequesterListener createBidListener(OnCompleteListener originalListener) {
return new BidRequesterListener() {
@Override
public void onFetchCompleted(BidResponse response) {
HashMap<String, String> keywords = response.getTargeting();
Util.apply(keywords, adObject);

String cacheId = CacheManager.save(response.getWinningBidJson());
Util.saveCacheId(cacheId, adObject);

originalListener.onComplete(ResultCode.SUCCESS);
}

@Override
public void onError(AdException exception) {
Util.apply(null, adObject);
// TODO:Unification: Change code
originalListener.onComplete(ResultCode.NETWORK_ERROR);
}
};
}

public enum CONTEXT_TYPE {
CONTENT_CENTRIC(1),
SOCIAL_CENTRIC(2),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package org.prebid.mobile;

import org.json.JSONObject;

public abstract class NativeAsset {

enum REQUEST_ASSET {
TITLE,
IMAGE,
Expand All @@ -17,8 +20,6 @@ public REQUEST_ASSET getType() {
return type;
}




public abstract JSONObject getJsonObject();

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.json.JSONArray;
import org.json.JSONObject;
import org.prebid.mobile.rendering.utils.logger.LogUtil;

public class NativeDataAsset extends NativeAsset {
public NativeDataAsset() {
Expand Down Expand Up @@ -101,4 +102,25 @@ public void setAssetExt(Object assetExt) {
this.assetExt = assetExt;
}
}

@Override
public JSONObject getJsonObject() {
JSONObject result = new JSONObject();

try {
result.putOpt("required", required ? 1 : 0);
result.putOpt("ext", assetExt);

JSONObject dataObject = new JSONObject();
dataObject.putOpt("type", dataType != null ? dataType.getID() : null);
dataObject.putOpt("len", len);
dataObject.putOpt("ext", dataExt);

result.put("data", dataObject);
} catch (Exception exception) {
LogUtil.error("NativeTitleAsset", "Can't create json object: " + exception.getMessage());
}

return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.json.JSONArray;
import org.json.JSONObject;
import org.prebid.mobile.rendering.utils.logger.LogUtil;

import java.util.ArrayList;

Expand Down Expand Up @@ -52,7 +53,7 @@ public IMAGE_TYPE getImageType() {
return type;
}

private int wmin = -1;
private int wmin = 0;

public void setWMin(int wmin) {
this.wmin = wmin;
Expand All @@ -62,7 +63,7 @@ public int getWMin() {
return wmin;
}

private int hmin = -1;
private int hmin = 0;

public int getHMin() {
return hmin;
Expand All @@ -72,7 +73,7 @@ public void setHMin(int hmin) {
this.hmin = hmin;
}

private int w = -1;
private int w = 0;

public int getW() {
return w;
Expand All @@ -82,7 +83,7 @@ public void setW(int w) {
this.w = w;
}

private int h = -1;
private int h = 0;

public void setH(int h) {
this.h = h;
Expand Down Expand Up @@ -135,4 +136,38 @@ public void setImageExt(Object imageExt) {
public Object getImageExt() {
return imageExt;
}


@Override
public JSONObject getJsonObject() {
JSONObject result = new JSONObject();

try {
result.putOpt("required", required ? 1 : 0);
result.putOpt("ext", assetExt);

JSONObject imageObject = new JSONObject();
imageObject.putOpt("type", type != null ? type.getID() : null);

imageObject.put("w", w);
imageObject.put("wmin", wmin);
imageObject.put("h", h);
imageObject.put("hmin", hmin);
imageObject.putOpt("ext", imageExt);

if (!mimes.isEmpty()) {
JSONArray mimesArray = new JSONArray();
for (String mime : mimes) {
mimesArray.put(mime);
}
imageObject.putOpt("mimes", mimesArray);
}

result.put("img", imageObject);
} catch (Exception exception) {
LogUtil.error("NativeImageAsset", "Can't create json object: " + exception.getMessage());
}

return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import org.json.JSONArray;
import org.json.JSONObject;
import org.prebid.mobile.rendering.utils.logger.LogUtil;

public class NativeTitleAsset extends NativeAsset {

private int len;
private boolean required;
private Object titleExt;
Expand Down Expand Up @@ -48,4 +50,25 @@ public void setAssetExt(Object assetExt) {
this.assetExt = assetExt;
}
}

@Override
public JSONObject getJsonObject() {
JSONObject result = new JSONObject();

try {
result.putOpt("required", required ? 1 : 0);
result.putOpt("ext", assetExt);

JSONObject titleObject = new JSONObject();
titleObject.putOpt("len", len);
titleObject.putOpt("ext", titleExt);

result.put("title", titleObject);
} catch (Exception exception) {
LogUtil.error("NativeTitleAsset", "Can't create json object: " + exception.getMessage());
}

return result;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@
package org.prebid.mobile;

import androidx.annotation.NonNull;
import org.prebid.mobile.units.configuration.AdUnitConfiguration;

public class RewardedVideoAdUnit extends VideoBaseAdUnit {

public RewardedVideoAdUnit(@NonNull String configId) {
super(configId, AdType.REWARDED_VIDEO);
super(configId, AdUnitConfiguration.AdUnitIdentifierType.VAST);
}

}
Loading

0 comments on commit 44f8a4f

Please sign in to comment.