package com.mopub.common; import android.net.Uri; import android.text.TextUtils; import com.mopub.network.PlayServicesUrlRewriter; public abstract class BaseUrlGenerator { private StringBuilder mStringBuilder; private boolean mFirstParam; public abstract String generateUrlString(String serverHostname); protected void initUrlString(String serverHostname, String handlerType) { mStringBuilder = new StringBuilder("http://" + serverHostname + handlerType); mFirstParam = true; } protected String getFinalUrlString() { return mStringBuilder.toString(); } protected void addParam(String key, String value) { if (TextUtils.isEmpty(value)) { return; } mStringBuilder.append(getParamDelimiter()); mStringBuilder.append(key); mStringBuilder.append("="); mStringBuilder.append(Uri.encode(value)); } private String getParamDelimiter() { if (mFirstParam) { mFirstParam = false; return "?"; } return "&"; } protected void setApiVersion(String apiVersion) { addParam("v", apiVersion); } protected void setAppVersion(String appVersion) { addParam("av", appVersion); } protected void setExternalStoragePermission(boolean isExternalStoragePermissionGranted) { addParam("android_perms_ext_storage", isExternalStoragePermissionGranted ? "1" : "0"); } protected void setDeviceInfo(String... info) { StringBuilder result = new StringBuilder(); if (info == null || info.length < 1) { return; } for (int i=0; i<info.length-1; i++) { result.append(info[i]).append(","); } result.append(info[info.length-1]); addParam("dn", result.toString()); } protected void setDoNotTrack(boolean dnt) { if (dnt) { addParam("dnt", "1"); } } protected void setUdid(String udid) { addParam("udid", udid); } /** * Appends special keys/values for advertising id and do-not-track. PlayServicesUrlRewriter will * replace these templates wiht the correct values when the request is processed. */ protected void appendAdvertisingInfoTemplates() { addParam("udid", PlayServicesUrlRewriter.UDID_TEMPLATE); addParam("dnt", PlayServicesUrlRewriter.DO_NOT_TRACK_TEMPLATE); } }