From 8de149eb78f58b67892292920acfec6c72a56f40 Mon Sep 17 00:00:00 2001 From: olly Date: Mon, 3 Dec 2018 20:07:01 +0000 Subject: [PATCH] Use custom cache key factory for removal as well as downloading Issue #5013 PiperOrigin-RevId: 223838303 --- .../offline/DownloaderConstructorHelper.java | 8 ++ .../offline/ProgressiveDownloader.java | 10 +- .../exoplayer2/offline/SegmentDownloader.java | 16 ++-- .../exoplayer2/upstream/cache/CacheUtil.java | 66 +++++++++---- .../upstream/cache/CacheDataSourceTest.java | 32 ++++++- .../upstream/cache/CacheUtilTest.java | 95 +++++++++++-------- 6 files changed, 154 insertions(+), 73 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloaderConstructorHelper.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloaderConstructorHelper.java index 28e898216d..74b918c06d 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloaderConstructorHelper.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloaderConstructorHelper.java @@ -27,12 +27,14 @@ import com.google.android.exoplayer2.upstream.cache.CacheDataSinkFactory; import com.google.android.exoplayer2.upstream.cache.CacheDataSource; import com.google.android.exoplayer2.upstream.cache.CacheDataSourceFactory; import com.google.android.exoplayer2.upstream.cache.CacheKeyFactory; +import com.google.android.exoplayer2.upstream.cache.CacheUtil; import com.google.android.exoplayer2.util.PriorityTaskManager; /** A helper class that holds necessary parameters for {@link Downloader} construction. */ public final class DownloaderConstructorHelper { private final Cache cache; + @Nullable private final CacheKeyFactory cacheKeyFactory; @Nullable private final PriorityTaskManager priorityTaskManager; private final CacheDataSourceFactory onlineCacheDataSourceFactory; private final CacheDataSourceFactory offlineCacheDataSourceFactory; @@ -130,6 +132,7 @@ public final class DownloaderConstructorHelper { cacheKeyFactory); this.cache = cache; this.priorityTaskManager = priorityTaskManager; + this.cacheKeyFactory = cacheKeyFactory; } /** Returns the {@link Cache} instance. */ @@ -137,6 +140,11 @@ public final class DownloaderConstructorHelper { return cache; } + /** Returns the {@link CacheKeyFactory}. */ + public CacheKeyFactory getCacheKeyFactory() { + return cacheKeyFactory != null ? cacheKeyFactory : CacheUtil.DEFAULT_CACHE_KEY_FACTORY; + } + /** Returns a {@link PriorityTaskManager} instance. */ public PriorityTaskManager getPriorityTaskManager() { // Return a dummy PriorityTaskManager if none is provided. Create a new PriorityTaskManager diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/ProgressiveDownloader.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/ProgressiveDownloader.java index 1a241f0b4e..41f0944b75 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/ProgressiveDownloader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/ProgressiveDownloader.java @@ -21,6 +21,7 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.upstream.cache.Cache; import com.google.android.exoplayer2.upstream.cache.CacheDataSource; +import com.google.android.exoplayer2.upstream.cache.CacheKeyFactory; import com.google.android.exoplayer2.upstream.cache.CacheUtil; import com.google.android.exoplayer2.upstream.cache.CacheUtil.CachingCounters; import com.google.android.exoplayer2.util.PriorityTaskManager; @@ -37,6 +38,7 @@ public final class ProgressiveDownloader implements Downloader { private final DataSpec dataSpec; private final Cache cache; private final CacheDataSource dataSource; + private final CacheKeyFactory cacheKeyFactory; private final PriorityTaskManager priorityTaskManager; private final CacheUtil.CachingCounters cachingCounters; private final AtomicBoolean isCanceled; @@ -49,9 +51,12 @@ public final class ProgressiveDownloader implements Downloader { */ public ProgressiveDownloader( Uri uri, @Nullable String customCacheKey, DownloaderConstructorHelper constructorHelper) { - this.dataSpec = new DataSpec(uri, 0, C.LENGTH_UNSET, customCacheKey, 0); + this.dataSpec = + new DataSpec( + uri, /* absoluteStreamPosition= */ 0, C.LENGTH_UNSET, customCacheKey, /* flags= */ 0); this.cache = constructorHelper.getCache(); this.dataSource = constructorHelper.createCacheDataSource(); + this.cacheKeyFactory = constructorHelper.getCacheKeyFactory(); this.priorityTaskManager = constructorHelper.getPriorityTaskManager(); cachingCounters = new CachingCounters(); isCanceled = new AtomicBoolean(); @@ -64,6 +69,7 @@ public final class ProgressiveDownloader implements Downloader { CacheUtil.cache( dataSpec, cache, + cacheKeyFactory, dataSource, new byte[BUFFER_SIZE_BYTES], priorityTaskManager, @@ -101,6 +107,6 @@ public final class ProgressiveDownloader implements Downloader { @Override public void remove() { - CacheUtil.remove(cache, CacheUtil.getKey(dataSpec)); + CacheUtil.remove(dataSpec, cache, cacheKeyFactory); } } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java index 62a6a9294a..e55d2a1baf 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/SegmentDownloader.java @@ -22,6 +22,7 @@ import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DataSpec; import com.google.android.exoplayer2.upstream.cache.Cache; import com.google.android.exoplayer2.upstream.cache.CacheDataSource; +import com.google.android.exoplayer2.upstream.cache.CacheKeyFactory; import com.google.android.exoplayer2.upstream.cache.CacheUtil; import com.google.android.exoplayer2.upstream.cache.CacheUtil.CachingCounters; import com.google.android.exoplayer2.util.PriorityTaskManager; @@ -62,10 +63,11 @@ public abstract class SegmentDownloader> impleme private static final int BUFFER_SIZE_BYTES = 128 * 1024; private final Uri manifestUri; - private final PriorityTaskManager priorityTaskManager; private final Cache cache; private final CacheDataSource dataSource; private final CacheDataSource offlineDataSource; + private final CacheKeyFactory cacheKeyFactory; + private final PriorityTaskManager priorityTaskManager; private final ArrayList streamKeys; private final AtomicBoolean isCanceled; @@ -87,6 +89,7 @@ public abstract class SegmentDownloader> impleme this.cache = constructorHelper.getCache(); this.dataSource = constructorHelper.createCacheDataSource(); this.offlineDataSource = constructorHelper.createOfflineCacheDataSource(); + this.cacheKeyFactory = constructorHelper.getCacheKeyFactory(); this.priorityTaskManager = constructorHelper.getPriorityTaskManager(); totalSegments = C.LENGTH_UNSET; totalBytes = C.LENGTH_UNSET; @@ -117,6 +120,7 @@ public abstract class SegmentDownloader> impleme CacheUtil.cache( segments.get(i).dataSpec, cache, + cacheKeyFactory, dataSource, buffer, priorityTaskManager, @@ -170,13 +174,13 @@ public abstract class SegmentDownloader> impleme M manifest = getManifest(offlineDataSource, manifestUri); List segments = getSegments(offlineDataSource, manifest, true); for (int i = 0; i < segments.size(); i++) { - removeUri(segments.get(i).dataSpec.uri); + removeDataSpec(segments.get(i).dataSpec); } } catch (IOException e) { // Ignore exceptions when removing. } finally { // Always attempt to remove the manifest. - removeUri(manifestUri); + removeDataSpec(new DataSpec(manifestUri)); } } @@ -225,7 +229,7 @@ public abstract class SegmentDownloader> impleme long totalBytes = 0; for (int i = segments.size() - 1; i >= 0; i--) { Segment segment = segments.get(i); - CacheUtil.getCached(segment.dataSpec, cache, cachingCounters); + CacheUtil.getCached(segment.dataSpec, cache, cacheKeyFactory, cachingCounters); downloadedBytes += cachingCounters.alreadyCachedBytes; if (cachingCounters.contentLength != C.LENGTH_UNSET) { if (cachingCounters.alreadyCachedBytes == cachingCounters.contentLength) { @@ -244,8 +248,8 @@ public abstract class SegmentDownloader> impleme return segments; } - private void removeUri(Uri uri) { - CacheUtil.remove(cache, CacheUtil.generateKey(uri)); + private void removeDataSpec(DataSpec dataSpec) { + CacheUtil.remove(dataSpec, cache, cacheKeyFactory); } } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CacheUtil.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CacheUtil.java index cee22375a9..1a44fb3144 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CacheUtil.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CacheUtil.java @@ -54,8 +54,9 @@ public final class CacheUtil { /** Default buffer size to be used while caching. */ public static final int DEFAULT_BUFFER_SIZE_BYTES = 128 * 1024; - /** Default {@link CacheKeyFactory} that calls through to {@link #getKey}. */ - public static final CacheKeyFactory DEFAULT_CACHE_KEY_FACTORY = CacheUtil::getKey; + /** Default {@link CacheKeyFactory}. */ + public static final CacheKeyFactory DEFAULT_CACHE_KEY_FACTORY = + (dataSpec) -> dataSpec.key != null ? dataSpec.key : generateKey(dataSpec.uri); /** * Generates a cache key out of the given {@link Uri}. @@ -67,26 +68,21 @@ public final class CacheUtil { } /** - * Returns the {@code dataSpec.key} if not null, otherwise generates a cache key out of {@code - * dataSpec.uri} - * - * @param dataSpec Defines a content which the requested key is for. - */ - public static String getKey(DataSpec dataSpec) { - return dataSpec.key != null ? dataSpec.key : generateKey(dataSpec.uri); - } - - /** - * Sets a {@link CachingCounters} to contain the number of bytes already downloaded and the - * length for the content defined by a {@code dataSpec}. {@link CachingCounters#newlyCachedBytes} - * is reset to 0. + * Sets a {@link CachingCounters} to contain the number of bytes already downloaded and the length + * for the content defined by a {@code dataSpec}. {@link CachingCounters#newlyCachedBytes} is + * reset to 0. * * @param dataSpec Defines the data to be checked. * @param cache A {@link Cache} which has the data. + * @param cacheKeyFactory An optional factory for cache keys. * @param counters The {@link CachingCounters} to update. */ - public static void getCached(DataSpec dataSpec, Cache cache, CachingCounters counters) { - String key = getKey(dataSpec); + public static void getCached( + DataSpec dataSpec, + Cache cache, + @Nullable CacheKeyFactory cacheKeyFactory, + CachingCounters counters) { + String key = buildCacheKey(dataSpec, cacheKeyFactory); long start = dataSpec.absoluteStreamPosition; long left = dataSpec.length != C.LENGTH_UNSET ? dataSpec.length : cache.getContentLength(key); counters.contentLength = left; @@ -114,6 +110,7 @@ public final class CacheUtil { * * @param dataSpec Defines the data to be cached. * @param cache A {@link Cache} to store the data. + * @param cacheKeyFactory An optional factory for cache keys. * @param upstream A {@link DataSource} for reading data not in the cache. * @param counters If not null, updated during caching. * @param isCanceled An optional flag that will interrupt caching if set to true. @@ -123,6 +120,7 @@ public final class CacheUtil { public static void cache( DataSpec dataSpec, Cache cache, + @Nullable CacheKeyFactory cacheKeyFactory, DataSource upstream, @Nullable CachingCounters counters, @Nullable AtomicBoolean isCanceled) @@ -130,6 +128,7 @@ public final class CacheUtil { cache( dataSpec, cache, + cacheKeyFactory, new CacheDataSource(cache, upstream), new byte[DEFAULT_BUFFER_SIZE_BYTES], /* priorityTaskManager= */ null, @@ -151,6 +150,7 @@ public final class CacheUtil { * * @param dataSpec Defines the data to be cached. * @param cache A {@link Cache} to store the data. + * @param cacheKeyFactory An optional factory for cache keys. * @param dataSource A {@link CacheDataSource} that works on the {@code cache}. * @param buffer The buffer to be used while caching. * @param priorityTaskManager If not null it's used to check whether it is allowed to proceed with @@ -166,6 +166,7 @@ public final class CacheUtil { public static void cache( DataSpec dataSpec, Cache cache, + @Nullable CacheKeyFactory cacheKeyFactory, CacheDataSource dataSource, byte[] buffer, PriorityTaskManager priorityTaskManager, @@ -179,13 +180,13 @@ public final class CacheUtil { if (counters != null) { // Initialize the CachingCounter values. - getCached(dataSpec, cache, counters); + getCached(dataSpec, cache, cacheKeyFactory, counters); } else { // Dummy CachingCounters. No need to initialize as they will not be visible to the caller. counters = new CachingCounters(); } - String key = getKey(dataSpec); + String key = buildCacheKey(dataSpec, cacheKeyFactory); long start = dataSpec.absoluteStreamPosition; long left = dataSpec.length != C.LENGTH_UNSET ? dataSpec.length : cache.getContentLength(key); while (left != 0) { @@ -296,18 +297,41 @@ public final class CacheUtil { } } - /** Removes all of the data in the {@code cache} pointed by the {@code key}. */ + /** + * Removes all of the data specified by the {@code dataSpec}. + * + * @param dataSpec Defines the data to be removed. + * @param cache A {@link Cache} to store the data. + * @param cacheKeyFactory An optional factory for cache keys. + */ + public static void remove( + DataSpec dataSpec, Cache cache, @Nullable CacheKeyFactory cacheKeyFactory) { + remove(cache, buildCacheKey(dataSpec, cacheKeyFactory)); + } + + /** + * Removes all of the data specified by the {@code key}. + * + * @param cache A {@link Cache} to store the data. + * @param key The key whose data should be removed. + */ public static void remove(Cache cache, String key) { NavigableSet cachedSpans = cache.getCachedSpans(key); for (CacheSpan cachedSpan : cachedSpans) { try { cache.removeSpan(cachedSpan); } catch (Cache.CacheException e) { - // do nothing + // Do nothing. } } } + private static String buildCacheKey( + DataSpec dataSpec, @Nullable CacheKeyFactory cacheKeyFactory) { + return (cacheKeyFactory != null ? cacheKeyFactory : DEFAULT_CACHE_KEY_FACTORY) + .buildCacheKey(dataSpec); + } + private static void throwExceptionIfInterruptedOrCancelled(AtomicBoolean isCanceled) throws InterruptedException { if (Thread.interrupted() || (isCanceled != null && isCanceled.get())) { diff --git a/library/core/src/test/java/com/google/android/exoplayer2/upstream/cache/CacheDataSourceTest.java b/library/core/src/test/java/com/google/android/exoplayer2/upstream/cache/CacheDataSourceTest.java index d76b2d5afb..83126ce34a 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/upstream/cache/CacheDataSourceTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/upstream/cache/CacheDataSourceTest.java @@ -338,7 +338,12 @@ public final class CacheDataSourceTest { .appendReadData(1024 * 1024) .endData()); CacheUtil.cache( - unboundedDataSpec, cache, upstream2, /* counters= */ null, /* isCanceled= */ null); + unboundedDataSpec, + cache, + /* cacheKeyFactory= */ null, + upstream2, + /* counters= */ null, + /* isCanceled= */ null); // Read the rest of the data. TestUtil.readToEnd(cacheDataSource); @@ -382,7 +387,12 @@ public final class CacheDataSourceTest { .appendReadData(1024 * 1024) .endData()); CacheUtil.cache( - unboundedDataSpec, cache, upstream2, /* counters= */ null, /* isCanceled= */ null); + unboundedDataSpec, + cache, + /* cacheKeyFactory= */ null, + upstream2, + /* counters= */ null, + /* isCanceled= */ null); // Read the rest of the data. TestUtil.readToEnd(cacheDataSource); @@ -400,7 +410,13 @@ public final class CacheDataSourceTest { // Cache the latter half of the data. int halfDataLength = 512; DataSpec dataSpec = buildDataSpec(halfDataLength, C.LENGTH_UNSET); - CacheUtil.cache(dataSpec, cache, upstream, /* counters= */ null, /* isCanceled= */ null); + CacheUtil.cache( + dataSpec, + cache, + /* cacheKeyFactory= */ null, + upstream, + /* counters= */ null, + /* isCanceled= */ null); // Create cache read-only CacheDataSource. CacheDataSource cacheDataSource = @@ -411,7 +427,7 @@ public final class CacheDataSourceTest { TestUtil.readExactly(cacheDataSource, 100); // Delete cached data. - CacheUtil.remove(cache, defaultCacheKey); + CacheUtil.remove(unboundedDataSpec, cache, /* cacheKeyFactory= */ null); assertCacheEmpty(cache); // Read the rest of the data. @@ -430,7 +446,13 @@ public final class CacheDataSourceTest { // Cache the latter half of the data. int halfDataLength = 512; DataSpec dataSpec = buildDataSpec(/* position= */ 0, halfDataLength); - CacheUtil.cache(dataSpec, cache, upstream, /* counters= */ null, /* isCanceled= */ null); + CacheUtil.cache( + dataSpec, + cache, + /* cacheKeyFactory= */ null, + upstream, + /* counters= */ null, + /* isCanceled= */ null); // Create blocking CacheDataSource. CacheDataSource cacheDataSource = diff --git a/library/core/src/test/java/com/google/android/exoplayer2/upstream/cache/CacheUtilTest.java b/library/core/src/test/java/com/google/android/exoplayer2/upstream/cache/CacheUtilTest.java index dba71ab9db..d0bdfa2b83 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/upstream/cache/CacheUtilTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/upstream/cache/CacheUtilTest.java @@ -15,13 +15,9 @@ */ package com.google.android.exoplayer2.upstream.cache; -import static android.net.Uri.EMPTY; -import static android.net.Uri.parse; import static com.google.android.exoplayer2.C.LENGTH_UNSET; import static com.google.android.exoplayer2.testutil.CacheAsserts.assertCacheEmpty; import static com.google.android.exoplayer2.testutil.CacheAsserts.assertCachedData; -import static com.google.android.exoplayer2.upstream.cache.CacheUtil.generateKey; -import static com.google.android.exoplayer2.upstream.cache.CacheUtil.getKey; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; @@ -107,50 +103,40 @@ public final class CacheUtilTest { @Test public void testGenerateKey() throws Exception { - assertThat(generateKey(EMPTY)).isNotNull(); + assertThat(CacheUtil.generateKey(Uri.EMPTY)).isNotNull(); Uri testUri = Uri.parse("test"); String key = CacheUtil.generateKey(testUri); assertThat(key).isNotNull(); - // Should generate the same key for the same input - assertThat(generateKey(testUri)).isEqualTo(key); + // Should generate the same key for the same input. + assertThat(CacheUtil.generateKey(testUri)).isEqualTo(key); - // Should generate different key for different input - assertThat(key.equals(generateKey(parse("test2")))).isFalse(); - } - - @Test - public void testGetKey() throws Exception { - Uri testUri = Uri.parse("test"); - String key = "key"; - // If DataSpec.key is present, returns it - assertThat(getKey(new DataSpec(testUri, 0, LENGTH_UNSET, key))).isEqualTo(key); - // If not generates a new one using DataSpec.uri - assertThat(getKey(new DataSpec(testUri, 0, LENGTH_UNSET, null))) - .isEqualTo(generateKey(testUri)); + // Should generate different key for different input. + assertThat(key.equals(CacheUtil.generateKey(Uri.parse("test2")))).isFalse(); } @Test public void testDefaultCacheKeyFactory_buildCacheKey() throws Exception { Uri testUri = Uri.parse("test"); String key = "key"; - // If DataSpec.key is present, returns it + // If DataSpec.key is present, returns it. assertThat( CacheUtil.DEFAULT_CACHE_KEY_FACTORY.buildCacheKey( new DataSpec(testUri, 0, LENGTH_UNSET, key))) .isEqualTo(key); - // If not generates a new one using DataSpec.uri + // If not generates a new one using DataSpec.uri. assertThat( CacheUtil.DEFAULT_CACHE_KEY_FACTORY.buildCacheKey( new DataSpec(testUri, 0, LENGTH_UNSET, null))) - .isEqualTo(generateKey(testUri)); + .isEqualTo(testUri.toString()); } @Test public void testGetCachedNoData() throws Exception { CachingCounters counters = new CachingCounters(); - CacheUtil.getCached(new DataSpec(Uri.parse("test")), mockCache, counters); + CacheUtil.getCached( + new DataSpec(Uri.parse("test")), mockCache, /* cacheKeyFactory= */ null, counters); assertCounters(counters, 0, 0, C.LENGTH_UNSET); } @@ -160,7 +146,8 @@ public final class CacheUtilTest { // Mock there is 100 bytes cached at the beginning mockCache.spansAndGaps = new int[] {100}; CachingCounters counters = new CachingCounters(); - CacheUtil.getCached(new DataSpec(Uri.parse("test")), mockCache, counters); + CacheUtil.getCached( + new DataSpec(Uri.parse("test")), mockCache, /* cacheKeyFactory= */ null, counters); assertCounters(counters, 100, 0, C.LENGTH_UNSET); } @@ -169,7 +156,8 @@ public final class CacheUtilTest { public void testGetCachedNoDataKnownLength() throws Exception { mockCache.contentLength = 1000; CachingCounters counters = new CachingCounters(); - CacheUtil.getCached(new DataSpec(Uri.parse("test")), mockCache, counters); + CacheUtil.getCached( + new DataSpec(Uri.parse("test")), mockCache, /* cacheKeyFactory= */ null, counters); assertCounters(counters, 0, 0, 1000); } @@ -179,7 +167,8 @@ public final class CacheUtilTest { mockCache.contentLength = 1000; mockCache.spansAndGaps = new int[] {100, 100, 200}; CachingCounters counters = new CachingCounters(); - CacheUtil.getCached(new DataSpec(Uri.parse("test")), mockCache, counters); + CacheUtil.getCached( + new DataSpec(Uri.parse("test")), mockCache, /* cacheKeyFactory= */ null, counters); assertCounters(counters, 300, 0, 1000); } @@ -191,7 +180,12 @@ public final class CacheUtilTest { CachingCounters counters = new CachingCounters(); CacheUtil.cache( - new DataSpec(Uri.parse("test_data")), cache, dataSource, counters, /* isCanceled= */ null); + new DataSpec(Uri.parse("test_data")), + cache, + /* cacheKeyFactory= */ null, + dataSource, + counters, + /* isCanceled= */ null); assertCounters(counters, 0, 100, 100); assertCachedData(cache, fakeDataSet); @@ -205,11 +199,18 @@ public final class CacheUtilTest { Uri testUri = Uri.parse("test_data"); DataSpec dataSpec = new DataSpec(testUri, 10, 20, null); CachingCounters counters = new CachingCounters(); - CacheUtil.cache(dataSpec, cache, dataSource, counters, /* isCanceled= */ null); + CacheUtil.cache( + dataSpec, cache, /* cacheKeyFactory= */ null, dataSource, counters, /* isCanceled= */ null); assertCounters(counters, 0, 20, 20); - CacheUtil.cache(new DataSpec(testUri), cache, dataSource, counters, /* isCanceled= */ null); + CacheUtil.cache( + new DataSpec(testUri), + cache, + /* cacheKeyFactory= */ null, + dataSource, + counters, + /* isCanceled= */ null); assertCounters(counters, 20, 80, 100); assertCachedData(cache, fakeDataSet); @@ -224,7 +225,8 @@ public final class CacheUtilTest { DataSpec dataSpec = new DataSpec(Uri.parse("test_data")); CachingCounters counters = new CachingCounters(); - CacheUtil.cache(dataSpec, cache, dataSource, counters, /* isCanceled= */ null); + CacheUtil.cache( + dataSpec, cache, /* cacheKeyFactory= */ null, dataSource, counters, /* isCanceled= */ null); assertCounters(counters, 0, 100, 100); assertCachedData(cache, fakeDataSet); @@ -240,11 +242,18 @@ public final class CacheUtilTest { Uri testUri = Uri.parse("test_data"); DataSpec dataSpec = new DataSpec(testUri, 10, 20, null); CachingCounters counters = new CachingCounters(); - CacheUtil.cache(dataSpec, cache, dataSource, counters, /* isCanceled= */ null); + CacheUtil.cache( + dataSpec, cache, /* cacheKeyFactory= */ null, dataSource, counters, /* isCanceled= */ null); assertCounters(counters, 0, 20, 20); - CacheUtil.cache(new DataSpec(testUri), cache, dataSource, counters, /* isCanceled= */ null); + CacheUtil.cache( + new DataSpec(testUri), + cache, + /* cacheKeyFactory= */ null, + dataSource, + counters, + /* isCanceled= */ null); assertCounters(counters, 20, 80, 100); assertCachedData(cache, fakeDataSet); @@ -258,7 +267,8 @@ public final class CacheUtilTest { Uri testUri = Uri.parse("test_data"); DataSpec dataSpec = new DataSpec(testUri, 0, 1000, null); CachingCounters counters = new CachingCounters(); - CacheUtil.cache(dataSpec, cache, dataSource, counters, /* isCanceled= */ null); + CacheUtil.cache( + dataSpec, cache, /* cacheKeyFactory= */ null, dataSource, counters, /* isCanceled= */ null); assertCounters(counters, 0, 100, 1000); assertCachedData(cache, fakeDataSet); @@ -276,6 +286,7 @@ public final class CacheUtilTest { CacheUtil.cache( dataSpec, cache, + /* cacheKeyFactory= */ null, new CacheDataSource(cache, dataSource), new byte[CacheUtil.DEFAULT_BUFFER_SIZE_BYTES], /* priorityTaskManager= */ null, @@ -304,7 +315,12 @@ public final class CacheUtilTest { FakeDataSource dataSource = new FakeDataSource(fakeDataSet); CacheUtil.cache( - new DataSpec(Uri.parse("test_data")), cache, dataSource, counters, /* isCanceled= */ null); + new DataSpec(Uri.parse("test_data")), + cache, + /* cacheKeyFactory= */ null, + dataSource, + counters, + /* isCanceled= */ null); assertCounters(counters, 0, 300, 300); assertCachedData(cache, fakeDataSet); @@ -316,10 +332,12 @@ public final class CacheUtilTest { FakeDataSource dataSource = new FakeDataSource(fakeDataSet); Uri uri = Uri.parse("test_data"); + DataSpec dataSpec = new DataSpec(uri); CacheUtil.cache( - new DataSpec(uri), + dataSpec, cache, - // set maxCacheFileSize to 10 to make sure there are multiple spans + /* cacheKeyFactory= */ null, + // Set maxCacheFileSize to 10 to make sure there are multiple spans. new CacheDataSource(cache, dataSource, 0, 10), new byte[CacheUtil.DEFAULT_BUFFER_SIZE_BYTES], /* priorityTaskManager= */ null, @@ -327,7 +345,7 @@ public final class CacheUtilTest { /* counters= */ null, /* isCanceled= */ null, true); - CacheUtil.remove(cache, CacheUtil.generateKey(uri)); + CacheUtil.remove(dataSpec, cache, /* cacheKeyFactory= */ null); assertCacheEmpty(cache); } @@ -338,5 +356,4 @@ public final class CacheUtilTest { assertThat(counters.newlyCachedBytes).isEqualTo(newlyCachedBytes); assertThat(counters.contentLength).isEqualTo(contentLength); } - }