/* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.common.executors; import javax.annotation.Nullable; import java.util.concurrent.Callable; import java.util.concurrent.Delayed; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; import java.util.concurrent.RunnableFuture; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import android.os.Handler; /** * A {@link ScheduledFuture} for {@link HandlerExecutorServiceImpl}. */ public class ScheduledFutureImpl<V> implements RunnableFuture<V>, ScheduledFuture<V> { private final Handler mHandler; private final FutureTask<V> mListenableFuture; public ScheduledFutureImpl(Handler handler, Callable<V> callable) { mHandler = handler; mListenableFuture = new FutureTask<V>(callable); } public ScheduledFutureImpl(Handler handler, Runnable runnable, @Nullable V result) { mHandler = handler; mListenableFuture = new FutureTask<V>(runnable, result); } @Override public long getDelay(TimeUnit unit) { throw new UnsupportedOperationException(); } @Override public int compareTo(Delayed other) { throw new UnsupportedOperationException(); } @Override public void run() { mListenableFuture.run(); } @Override public boolean cancel(boolean mayInterruptIfRunning) { return mListenableFuture.cancel(mayInterruptIfRunning); } @Override public boolean isCancelled() { return mListenableFuture.isCancelled(); } @Override public boolean isDone() { return mListenableFuture.isDone(); } @Override public V get() throws InterruptedException, ExecutionException { return mListenableFuture.get(); } @Override public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { return mListenableFuture.get(timeout, unit); } }