package de.danoeh.antennapod.core.util; import android.net.Uri; import android.util.Log; import de.danoeh.antennapod.core.BuildConfig; /** * Provides methods for checking and editing a URL. */ public final class URLChecker { /** * Class shall not be instantiated. */ private URLChecker() { } /** * Logging tag. */ private static final String TAG = "URLChecker"; private static final String AP_SUBSCRIBE = "antennapod-subscribe://"; /** * Checks if URL is valid and modifies it if necessary. * * @param url The url which is going to be prepared * @return The prepared url */ public static String prepareURL(String url) { url = url.trim(); if (url.startsWith("feed://")) { if (BuildConfig.DEBUG) Log.d(TAG, "Replacing feed:// with http://"); return url.replaceFirst("feed://", "http://"); } else if (url.startsWith("pcast://")) { if (BuildConfig.DEBUG) Log.d(TAG, "Removing pcast://"); return prepareURL(url.substring("pcast://".length())); } else if (url.startsWith("itpc")) { if (BuildConfig.DEBUG) Log.d(TAG, "Replacing itpc:// with http://"); return url.replaceFirst("itpc://", "http://"); } else if (url.startsWith(AP_SUBSCRIBE)) { if (BuildConfig.DEBUG) Log.d(TAG, "Removing antennapod-subscribe://"); return prepareURL(url.substring(AP_SUBSCRIBE.length())); } else if (!(url.startsWith("http://") || url.startsWith("https://"))) { if (BuildConfig.DEBUG) Log.d(TAG, "Adding http:// at the beginning of the URL"); return "http://" + url; } else { return url; } } /** * Checks if URL is valid and modifies it if necessary. * This method also handles protocol relative URLs. * * @param url The url which is going to be prepared * @param base The url against which the (possibly relative) url is applied. If this is null, * the result of prepareURL(url) is returned instead. * @return The prepared url */ public static String prepareURL(String url, String base) { if (base == null) { return prepareURL(url); } url = url.trim(); base = prepareURL(base); Uri urlUri = Uri.parse(url); Uri baseUri = Uri.parse(base); if (urlUri.isRelative() && baseUri.isAbsolute()) { return urlUri.buildUpon().scheme(baseUri.getScheme()).build().toString(); } else { return prepareURL(url); } } }