# CacheDataSource.Factory

Artifact: [androidx.media3:media3-datasource](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/datasource/cache/CacheDataSource.java+class:androidx.media3.datasource.cache.CacheDataSource.Factory)

*** ** * ** ***


```
class CacheDataSource.Factory : DataSource.Factory
```

<br />

*** ** * ** ***

`https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` for `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource` instances.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#Factory()()` |

| ### Public functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource!` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#createDataSource()()` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource` instance. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource!` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#createDataSourceForDownloading()()` Returns an instance suitable for downloading content. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource!` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#createDataSourceForRemovingDownload()()` Returns an instance suitable for reading cached content as part of removing a download. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#setCacheReadDataSourceFactory(androidx.media3.datasource.DataSource.Factory)( cacheReadDataSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory! )` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` for `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource` for reading from the cache. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#setCacheWriteDataSinkFactory(androidx.media3.datasource.DataSink.Factory)( cacheWriteDataSinkFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSink.Factory? )` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSink.Factory` for generating `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSink` for writing data to the cache. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#setEventListener(androidx.media3.datasource.cache.CacheDataSource.EventListener)(eventListener: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.EventListener?)` Sets the {link EventListener} to which events are delivered. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#setFlags(int)(@https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Flags flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Flags`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#setUpstreamDataSourceFactory(androidx.media3.datasource.DataSource.Factory)( upstreamDataSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory? )` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` for upstream `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource`, which are used to read data in the case of a cache miss. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#setUpstreamPriority(int)(@https://developer.android.com/reference/kotlin/androidx/media3/common/C.Priority upstreamPriority: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/common/C.Priority` to use when requesting data from upstream. |

| ### Public properties |
|---|---|
| `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/Cache!` | `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#cache()` |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheKeyFactory!` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#cacheKeyFactory()` |
| `https://developer.android.com/reference/kotlin/androidx/media3/common/PriorityTaskManager?` | `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#upstreamPriorityTaskManager()` |

## Public constructors

### Factory

```
Factory()
```

## Public functions

### createDataSource

```
fun createDataSource(): CacheDataSource!
```

Creates a `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource` instance.

### createDataSourceForDownloading

```
fun createDataSourceForDownloading(): CacheDataSource!
```

Returns an instance suitable for downloading content. The created instance is equivalent to one that would be created by `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#createDataSource()`, except:

- The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource#FLAG_BLOCK_ON_CACHE()` is always set.
- The task priority is overridden to be `https://developer.android.com/reference/kotlin/androidx/media3/common/C#PRIORITY_DOWNLOAD()`.

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource!` | An instance suitable for downloading content. |

### createDataSourceForRemovingDownload

```
fun createDataSourceForRemovingDownload(): CacheDataSource!
```

Returns an instance suitable for reading cached content as part of removing a download. The created instance is equivalent to one that would be created by `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#createDataSource()`, except:

- The upstream is overridden to be `null`, since when removing content we don't want to request anything that's not already cached.
- The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource#FLAG_BLOCK_ON_CACHE()` is always set.
- The task priority is overridden to be `https://developer.android.com/reference/kotlin/androidx/media3/common/C#PRIORITY_DOWNLOAD()`.

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource!` | An instance suitable for reading cached content as part of removing a download. |

### setCacheReadDataSourceFactory

```
@CanIgnoreReturnValue
fun setCacheReadDataSourceFactory(
    cacheReadDataSourceFactory: DataSource.Factory!
): CacheDataSource.Factory!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` for `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource` for reading from the cache.

The default is a `https://developer.android.com/reference/kotlin/androidx/media3/datasource/FileDataSource.Factory` in its default configuration.

| Parameters |
|---|---|
| `cacheReadDataSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory!` | The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` for reading from the cache. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | This factory. |

### setCacheWriteDataSinkFactory

```
@CanIgnoreReturnValue
fun setCacheWriteDataSinkFactory(
    cacheWriteDataSinkFactory: DataSink.Factory?
): CacheDataSource.Factory!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSink.Factory` for generating `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSink` for writing data to the cache. Passing `null` causes the cache to be read-only.

The default is a `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSink.Factory` in its default configuration.

| Parameters |
|---|---|
| `cacheWriteDataSinkFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSink.Factory?` | The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSink.Factory` for generating `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSink` for writing data to the cache, or `null` to disable writing. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | This factory. |

### setEventListener

```
@CanIgnoreReturnValue
fun setEventListener(eventListener: CacheDataSource.EventListener?): CacheDataSource.Factory!
```

Sets the {link EventListener} to which events are delivered.

The default is `null`.

| Parameters |
|---|---|
| `eventListener: https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.EventListener?` | The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.EventListener`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | This factory. |

### setFlags

```
@CanIgnoreReturnValue
fun setFlags(@CacheDataSource.Flags flags: Int): CacheDataSource.Factory!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Flags`.

The default is `0`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Flags flags: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Flags`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | This factory. |

### setUpstreamDataSourceFactory

```
@CanIgnoreReturnValue
fun setUpstreamDataSourceFactory(
    upstreamDataSourceFactory: DataSource.Factory?
): CacheDataSource.Factory!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` for upstream `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource`, which are used to read data in the case of a cache miss.

The default is `null`, and so this method must be called before the factory is used in order for data to be read from upstream in the case of a cache miss.

| Parameters |
|---|---|
| `upstreamDataSourceFactory: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory?` | The upstream `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource` for reading data not in the cache, or `null` to cause failure in the case of a cache miss. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | This factory. |

### setUpstreamPriority

```
@CanIgnoreReturnValue
fun setUpstreamPriority(@C.Priority upstreamPriority: Int): CacheDataSource.Factory!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/common/C.Priority` to use when requesting data from upstream. The priority is only used if a `https://developer.android.com/reference/kotlin/androidx/media3/common/PriorityTaskManager` is set by calling `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory#setUpstreamPriorityTaskManager(androidx.media3.common.PriorityTaskManager)`.

The default is `https://developer.android.com/reference/kotlin/androidx/media3/common/C#PRIORITY_PLAYBACK()`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/kotlin/androidx/media3/common/C.Priority upstreamPriority: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/C.Priority` to use when requesting data from upstream. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cache/CacheDataSource.Factory!` | This factory. |

## Public properties

### cache

```
@MonotonicNonNull
var cache: @MonotonicNonNull Cache!
```

### cacheKeyFactory

```
var cacheKeyFactory: CacheKeyFactory!
```

### upstreamPriorityTaskManager

```
var upstreamPriorityTaskManager: PriorityTaskManager?
```