1package com.bumptech.glide.load.engine;
2
3import android.os.Handler;
4import com.bumptech.glide.load.CacheLoader;
5import com.bumptech.glide.Priority;
6import com.bumptech.glide.load.Encoder;
7import com.bumptech.glide.load.ResourceDecoder;
8import com.bumptech.glide.load.ResourceEncoder;
9import com.bumptech.glide.load.Transformation;
10import com.bumptech.glide.load.data.DataFetcher;
11import com.bumptech.glide.load.engine.cache.DiskCache;
12import com.bumptech.glide.load.resource.transcode.ResourceTranscoder;
13
14import java.io.InputStream;
15import java.util.concurrent.ExecutorService;
16
17class DefaultResourceRunnerFactory implements ResourceRunnerFactory {
18    private final CacheLoader cacheLoader;
19    private DiskCache diskCache;
20    private Handler mainHandler;
21    private ExecutorService diskCacheService;
22    private ExecutorService service;
23
24    public DefaultResourceRunnerFactory(DiskCache diskCache, Handler mainHandler,
25            ExecutorService diskCacheService, ExecutorService resizeService) {
26        this.diskCache = diskCache;
27        this.mainHandler = mainHandler;
28        this.diskCacheService = diskCacheService;
29        this.service = resizeService;
30        cacheLoader = new CacheLoader(diskCache);
31    }
32
33    @Override
34    public <T, Z, R> ResourceRunner<Z, R> build(EngineKey key, int width, int height,
35            ResourceDecoder<InputStream, Z> cacheDecoder, DataFetcher<T> fetcher, boolean cacheSource,
36            Encoder<T> sourceEncoder, ResourceDecoder<T, Z> decoder, Transformation<Z> transformation,
37            ResourceEncoder<Z> encoder, ResourceTranscoder<Z, R> transcoder, Priority priority,
38            boolean isMemoryCacheable, EngineJobListener listener) {
39
40        EngineJob engineJob = new EngineJob(key, mainHandler, isMemoryCacheable, listener);
41
42        SourceResourceRunner<T, Z, R> sourceRunner = new SourceResourceRunner<T, Z, R>(key, width, height, cacheLoader,
43                cacheDecoder, fetcher, cacheSource, sourceEncoder, decoder, transformation, encoder, transcoder,
44                diskCache, priority, engineJob);
45
46        return new ResourceRunner<Z, R>(key, width, height, cacheLoader, cacheDecoder, transformation,
47                transcoder, sourceRunner, diskCacheService, service, engineJob, priority);
48    }
49}
50