package com.mopub.common; import android.os.Build; import android.support.annotation.NonNull; import com.mopub.network.AdResponse; import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; /** * A value class used for generating reports to send data back to MoPub */ public class AdReport implements Serializable { private static final long serialVersionUID = 1L; private static final String DATE_FORMAT_PATTERN = "M/d/yy hh:mm:ss a z"; private final AdResponse mAdResponse; private final String mAdUnitId; private final String mSdkVersion; private final String mDeviceModel; private final Locale mDeviceLocale; private final String mUdid; public AdReport(@NonNull String adUnitId, @NonNull ClientMetadata clientMetadata, @NonNull AdResponse adResponse) { mAdUnitId = adUnitId; mSdkVersion = clientMetadata.getSdkVersion(); mDeviceModel = clientMetadata.getDeviceModel(); mDeviceLocale = clientMetadata.getDeviceLocale(); mUdid = clientMetadata.getDeviceId(); mAdResponse = adResponse; } @Override public String toString() { StringBuilder parameters = new StringBuilder(); appendKeyValue(parameters, "sdk_version", mSdkVersion); appendKeyValue(parameters, "creative_id", mAdResponse.getDspCreativeId()); appendKeyValue(parameters, "platform_version", Integer.toString(Build.VERSION.SDK_INT)); appendKeyValue(parameters, "device_model", mDeviceModel); appendKeyValue(parameters, "ad_unit_id", mAdUnitId); appendKeyValue(parameters, "device_locale", mDeviceLocale == null ? null : mDeviceLocale.toString()); appendKeyValue(parameters, "device_id", mUdid); appendKeyValue(parameters, "network_type", mAdResponse.getNetworkType()); appendKeyValue(parameters, "platform", "android"); appendKeyValue(parameters, "timestamp", getFormattedTimeStamp(mAdResponse.getTimestamp())); appendKeyValue(parameters, "ad_type", mAdResponse.getAdType()); Integer width = mAdResponse.getWidth(); Integer height = mAdResponse.getHeight(); appendKeyValue(parameters, "ad_size", "{" + (width == null ? "0" : width) + ", " + (height == null ? "0" : height) + "}"); return parameters.toString(); } public String getResponseString() { return mAdResponse.getStringBody(); } private void appendKeyValue(StringBuilder parameters, String key, String value) { parameters.append(key); parameters.append(" : "); parameters.append(value); parameters.append("\n"); } private String getFormattedTimeStamp(long timeStamp) { if (timeStamp != -1) { SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_PATTERN, Locale.US); return dateFormat.format(new Date(timeStamp)); } else { return null; } } }