package com.loopj.android.http;
import java.util.concurrent.Future;
/**
* A Handle to an AsyncRequest which can be used to cancel a running request.
*
*/
public class RequestHandle {
private final Future<?> request;
public RequestHandle(Future<?> request) {
this.request = request;
}
/**
* Attempts to cancel this request. This attempt will fail if the request has
* already completed, has already been cancelled, or could not be cancelled
* for some other reason. If successful, and this request has not started
* when cancel is called, this request should never run. If the request has
* already started, then the mayInterruptIfRunning parameter determines
* whether the thread executing this request should be interrupted in an
* attempt to stop the request.
*
* After this method returns, subsequent calls to isDone() will always
* return true. Subsequent calls to isCancelled() will always return true
* if this method returned true.
*
* @param mayInterruptIfRunning true if the thread executing this request should be interrupted; otherwise, in-progress requests are allowed to complete
* @return false if the request could not be cancelled, typically because it has already completed normally; true otherwise
*/
public boolean cancel(boolean mayInterruptIfRunning) {
if (this.request == null) {
return false;
}
return request.cancel(mayInterruptIfRunning);
}
/**
* Returns true if this task completed. Completion may be due to normal termination, an exception, or cancellation -- in all of these cases, this method will return true.
* @return true if this task completed
*/
public boolean isFinished() {
if (this.request == null) {
return true;
}
return request.isDone();
}
/**
* Returns true if this task was cancelled before it completed normally.
* @return true if this task was cancelled before it completed
*/
public boolean isCancelled() {
if (this.request == null) {
return false;
}
return request.isCancelled();
}
}