package com.mopub.nativeads; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.mopub.common.Preconditions; import com.mopub.common.Preconditions.NoThrow; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; abstract class TaskManager<T> { @NonNull protected final TaskManagerListener<T> mImageTaskManagerListener; protected final int mSize; @NonNull protected final Map<String, T> mResults; @NonNull protected final AtomicInteger mCompletedCount; @NonNull protected final AtomicBoolean mFailed; interface TaskManagerListener<T> { void onSuccess(@NonNull final Map<String, T> images); void onFail(); } TaskManager(@NonNull final List<String> urls, @NonNull final TaskManagerListener<T> imageTaskManagerListener) throws IllegalArgumentException { Preconditions.checkNotNull(urls, "Urls list cannot be null"); Preconditions.checkNotNull(imageTaskManagerListener, "ImageTaskManagerListener cannot be null"); Preconditions.checkState(!urls.contains(null), "Urls list cannot contain null"); mSize = urls.size(); mImageTaskManagerListener = imageTaskManagerListener; mCompletedCount = new AtomicInteger(0); mFailed = new AtomicBoolean(false); mResults = Collections.synchronizedMap(new HashMap<String, T>(mSize)); } abstract void execute(); }