Copyright (c) 2013 Adcash OU.
All rights reserved under Creative Commons Attribution 3.0 Unported
http://creativecommons.org/licenses/by/3.0/
Redistribution and use in source and binary forms, with or...
If you think the Android project android-sdk listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
/*
* Copyright (c) 2010-2013, Adcash OU./*www.java2s.com*/
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of 'MoPub Inc.' nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/package com.adcash.mobileads;
import android.util.Log;
import com.adcash.mobileads.factories.AdFetchTaskFactory;
import com.adcash.mobileads.util.AsyncTasks;
/*
* AdFetcher is a delegate of an AdViewController that handles loading ad data over a
* network connection. The ad is fetched in a background thread by executing
* AdFetchTask, which is an AsyncTask subclass. This class gracefully handles
* the changes to AsyncTask in Android 4.0.1 (we continue to run parallel to
* the app developer's background tasks). Further, AdFetcher keeps track of
* the last completed task to prevent out-of-order execution.
*/publicclass AdFetcher {
publicstaticfinal String HTML_RESPONSE_BODY_KEY = "Html-Response-Body";
publicstaticfinal String REDIRECT_URL_KEY = "Redirect-Url";
publicstaticfinal String CLICKTHROUGH_URL_KEY = "Clickthrough-Url";
publicstaticfinal String SCROLLABLE_KEY = "Scrollable";
publicstaticfinal String AD_CONFIGURATION_KEY = "Ad-Configuration";
privateint mTimeoutMilliseconds = 10000;
private AdViewController mAdViewController;
private AdFetchTask mCurrentTask;
private String mUserAgent;
privatefinal TaskTracker mTaskTracker;
enum FetchStatus {
NOT_SET,
FETCH_CANCELLED,
INVALID_SERVER_RESPONSE_BACKOFF,
INVALID_SERVER_RESPONSE_NOBACKOFF,
CLEAR_AD_TYPE,
AD_WARMING_UP;
}
public AdFetcher(AdViewController adview, String userAgent) {
mAdViewController = adview;
mUserAgent = userAgent;
mTaskTracker = new TaskTracker();
}
publicvoid fetchAdForUrl(String url) {
mTaskTracker.newTaskStarted();
Log.i("Adcash", "Fetching ad for task #" + getCurrentTaskId());
if (mCurrentTask != null) {
mCurrentTask.cancel(true);
}
mCurrentTask = AdFetchTaskFactory.create(mTaskTracker, mAdViewController, mUserAgent, mTimeoutMilliseconds);
try {
AsyncTasks.safeExecuteOnExecutor(mCurrentTask, url);
} catch (Exception exception) {
Log.d("Adcash", "Error executing AdFetchTask", exception);
}
}
publicvoid cancelFetch() {
if (mCurrentTask != null) {
Log.i("Adcash", "Canceling fetch ad for task #" + getCurrentTaskId());
mCurrentTask.cancel(true);
}
}
void cleanup() {
cancelFetch();
mAdViewController = null;
mUserAgent = "";
}
protectedvoid setTimeout(int milliseconds) {
mTimeoutMilliseconds = milliseconds;
}
privatelong getCurrentTaskId() {
return mTaskTracker.getCurrentTaskId();
}
}