diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadState.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadState.java index b7d2944e63..472c672574 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadState.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadState.java @@ -247,7 +247,7 @@ public final class DownloadState { type, action.uri, action.customCacheKey, - getNextState(state, action.isRemoveAction), + getNextState(state, stopFlags != 0, action.isRemoveAction), /* downloadPercentage= */ C.PERCENTAGE_UNSET, downloadedBytes, /* totalBytes= */ C.LENGTH_UNSET, @@ -261,14 +261,14 @@ public final class DownloadState { action.data); } - private static int getNextState(int currentState, boolean remove) { + private static int getNextState(int currentState, boolean stopFlagsSet, boolean remove) { int nextState; if (remove) { nextState = STATE_REMOVING; } else { if (currentState == STATE_REMOVING || currentState == STATE_RESTARTING) { nextState = STATE_RESTARTING; - } else if (currentState == STATE_STOPPED) { + } else if (stopFlagsSet) { nextState = STATE_STOPPED; } else { nextState = STATE_QUEUED; diff --git a/library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadStateTest.java b/library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadStateTest.java index dcb0b443af..de6369d1fe 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadStateTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/offline/DownloadStateTest.java @@ -195,6 +195,22 @@ public class DownloadStateTest { assertEqual(mergedDownloadState, expectedDownloadState); } + @Test + public void mergeAction_stopFlagSetButNotInStoppedState_stateBecomesStopped() { + DownloadAction downloadAction = createDownloadAction(); + DownloadStateBuilder downloadStateBuilder = + new DownloadStateBuilder(downloadAction) + .setState(DownloadState.STATE_COMPLETED) + .setStopFlags(DownloadState.STOP_FLAG_MANUAL); + DownloadState downloadState = downloadStateBuilder.build(); + + DownloadState mergedDownloadState = downloadState.mergeAction(downloadAction); + + DownloadState expectedDownloadState = + downloadStateBuilder.setState(DownloadState.STATE_STOPPED).build(); + assertEqual(mergedDownloadState, expectedDownloadState); + } + @Test public void mergeAction_restartingDownloadRemoveAction_stateBecomesRemoving() { DownloadAction downloadAction = createRemoveAction();