Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
4da14e46
authored
Apr 24, 2019
by
eguven
Committed by
Oliver Woodman
Apr 26, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add DownloadService SET_REQUIREMENTS action
PiperOrigin-RevId: 245014381
parent
f7f6489f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
113 additions
and
28 deletions
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadManager.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java
library/core/src/main/java/com/google/android/exoplayer2/scheduler/Requirements.java
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadManager.java
View file @
4da14e46
...
@@ -268,9 +268,9 @@ public final class DownloadManager {
...
@@ -268,9 +268,9 @@ public final class DownloadManager {
}
}
/**
/**
* Sets the requirements
needed to be met to start download
s.
* Sets the requirements
that need to be met for downloads to progres
s.
*
*
* @param requirements
Need to be met to start downloads
.
* @param requirements
A {@link Requirements}
.
*/
*/
public
void
setRequirements
(
Requirements
requirements
)
{
public
void
setRequirements
(
Requirements
requirements
)
{
if
(
requirements
.
equals
(
requirementsWatcher
.
getRequirements
()))
{
if
(
requirements
.
equals
(
requirementsWatcher
.
getRequirements
()))
{
...
...
library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java
View file @
4da14e46
...
@@ -67,6 +67,17 @@ public abstract class DownloadService extends Service {
...
@@ -67,6 +67,17 @@ public abstract class DownloadService extends Service {
"com.google.android.exoplayer.downloadService.action.ADD_DOWNLOAD"
;
"com.google.android.exoplayer.downloadService.action.ADD_DOWNLOAD"
;
/**
/**
* Removes a download. Extras:
*
* <ul>
* <li>{@link #KEY_CONTENT_ID} - The content id of a download to remove.
* <li>{@link #KEY_FOREGROUND} - See {@link #KEY_FOREGROUND}.
* </ul>
*/
public
static
final
String
ACTION_REMOVE_DOWNLOAD
=
"com.google.android.exoplayer.downloadService.action.REMOVE_DOWNLOAD"
;
/**
* Resumes all downloads except those that have a non-zero {@link Download#stopReason}. Extras:
* Resumes all downloads except those that have a non-zero {@link Download#stopReason}. Extras:
*
*
* <ul>
* <ul>
...
@@ -91,10 +102,10 @@ public abstract class DownloadService extends Service {
...
@@ -91,10 +102,10 @@ public abstract class DownloadService extends Service {
* Download#STOP_REASON_NONE}. Extras:
* Download#STOP_REASON_NONE}. Extras:
*
*
* <ul>
* <ul>
* <li>{@link #KEY_CONTENT_ID} - The content id of a single download to update with the
manual
* <li>{@link #KEY_CONTENT_ID} - The content id of a single download to update with the
stop
*
stop
reason. If omitted, all downloads will be updated.
* reason. If omitted, all downloads will be updated.
* <li>{@link #KEY_STOP_REASON} - An application provided reason for stopping the download or
* <li>{@link #KEY_STOP_REASON} - An application provided reason for stopping the download or
* downloads, or {@link Download#STOP_REASON_NONE} to clear the
manual
stop reason.
* downloads, or {@link Download#STOP_REASON_NONE} to clear the stop reason.
* <li>{@link #KEY_FOREGROUND} - See {@link #KEY_FOREGROUND}.
* <li>{@link #KEY_FOREGROUND} - See {@link #KEY_FOREGROUND}.
* </ul>
* </ul>
*/
*/
...
@@ -102,15 +113,15 @@ public abstract class DownloadService extends Service {
...
@@ -102,15 +113,15 @@ public abstract class DownloadService extends Service {
"com.google.android.exoplayer.downloadService.action.SET_STOP_REASON"
;
"com.google.android.exoplayer.downloadService.action.SET_STOP_REASON"
;
/**
/**
*
Removes a download
. Extras:
*
Sets the requirements that need to be met for downloads to progress
. Extras:
*
*
* <ul>
* <ul>
* <li>{@link #KEY_
CONTENT_ID} - The content id of a download to remove
.
* <li>{@link #KEY_
REQUIREMENTS} - A {@link Requirements}
.
* <li>{@link #KEY_FOREGROUND} - See {@link #KEY_FOREGROUND}.
* <li>{@link #KEY_FOREGROUND} - See {@link #KEY_FOREGROUND}.
* </ul>
* </ul>
*/
*/
public
static
final
String
ACTION_
REMOVE_DOWNLOAD
=
public
static
final
String
ACTION_
SET_REQUIREMENTS
=
"com.google.android.exoplayer.downloadService.action.
REMOVE_DOWNLOAD
"
;
"com.google.android.exoplayer.downloadService.action.
SET_REQUIREMENTS
"
;
/** Key for the {@link DownloadRequest} in {@link #ACTION_ADD_DOWNLOAD} intents. */
/** Key for the {@link DownloadRequest} in {@link #ACTION_ADD_DOWNLOAD} intents. */
public
static
final
String
KEY_DOWNLOAD_REQUEST
=
"download_request"
;
public
static
final
String
KEY_DOWNLOAD_REQUEST
=
"download_request"
;
...
@@ -125,7 +136,10 @@ public abstract class DownloadService extends Service {
...
@@ -125,7 +136,10 @@ public abstract class DownloadService extends Service {
* Key for the stop reason in {@link #ACTION_SET_STOP_REASON} and {@link #ACTION_ADD_DOWNLOAD}
* Key for the stop reason in {@link #ACTION_SET_STOP_REASON} and {@link #ACTION_ADD_DOWNLOAD}
* intents.
* intents.
*/
*/
public
static
final
String
KEY_STOP_REASON
=
"manual_stop_reason"
;
public
static
final
String
KEY_STOP_REASON
=
"stop_reason"
;
/** Key for the requirements in {@link #ACTION_SET_REQUIREMENTS} intents. */
public
static
final
String
KEY_REQUIREMENTS
=
"requirements"
;
/**
/**
* Key for a boolean extra that can be set on any intent to indicate whether the service was
* Key for a boolean extra that can be set on any intent to indicate whether the service was
...
@@ -236,7 +250,7 @@ public abstract class DownloadService extends Service {
...
@@ -236,7 +250,7 @@ public abstract class DownloadService extends Service {
* @param clazz The concrete download service being targeted by the intent.
* @param clazz The concrete download service being targeted by the intent.
* @param downloadRequest The request to be executed.
* @param downloadRequest The request to be executed.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @return
Created I
ntent.
* @return
The created i
ntent.
*/
*/
public
static
Intent
buildAddDownloadIntent
(
public
static
Intent
buildAddDownloadIntent
(
Context
context
,
Context
context
,
...
@@ -255,7 +269,7 @@ public abstract class DownloadService extends Service {
...
@@ -255,7 +269,7 @@ public abstract class DownloadService extends Service {
* @param stopReason An initial stop reason for the download, or {@link Download#STOP_REASON_NONE}
* @param stopReason An initial stop reason for the download, or {@link Download#STOP_REASON_NONE}
* if the download should be started.
* if the download should be started.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @return
Created I
ntent.
* @return
The created i
ntent.
*/
*/
public
static
Intent
buildAddDownloadIntent
(
public
static
Intent
buildAddDownloadIntent
(
Context
context
,
Context
context
,
...
@@ -275,7 +289,7 @@ public abstract class DownloadService extends Service {
...
@@ -275,7 +289,7 @@ public abstract class DownloadService extends Service {
* @param clazz The concrete download service being targeted by the intent.
* @param clazz The concrete download service being targeted by the intent.
* @param id The content id.
* @param id The content id.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @return
Created I
ntent.
* @return
The created i
ntent.
*/
*/
public
static
Intent
buildRemoveDownloadIntent
(
public
static
Intent
buildRemoveDownloadIntent
(
Context
context
,
Class
<?
extends
DownloadService
>
clazz
,
String
id
,
boolean
foreground
)
{
Context
context
,
Class
<?
extends
DownloadService
>
clazz
,
String
id
,
boolean
foreground
)
{
...
@@ -289,7 +303,7 @@ public abstract class DownloadService extends Service {
...
@@ -289,7 +303,7 @@ public abstract class DownloadService extends Service {
* @param context A {@link Context}.
* @param context A {@link Context}.
* @param clazz The concrete download service being targeted by the intent.
* @param clazz The concrete download service being targeted by the intent.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @return
Created I
ntent.
* @return
The created i
ntent.
*/
*/
public
static
Intent
buildResumeDownloadsIntent
(
public
static
Intent
buildResumeDownloadsIntent
(
Context
context
,
Class
<?
extends
DownloadService
>
clazz
,
boolean
foreground
)
{
Context
context
,
Class
<?
extends
DownloadService
>
clazz
,
boolean
foreground
)
{
...
@@ -302,7 +316,7 @@ public abstract class DownloadService extends Service {
...
@@ -302,7 +316,7 @@ public abstract class DownloadService extends Service {
* @param context A {@link Context}.
* @param context A {@link Context}.
* @param clazz The concrete download service being targeted by the intent.
* @param clazz The concrete download service being targeted by the intent.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @return
Created I
ntent.
* @return
The created i
ntent.
*/
*/
public
static
Intent
buildPauseDownloadsIntent
(
public
static
Intent
buildPauseDownloadsIntent
(
Context
context
,
Class
<?
extends
DownloadService
>
clazz
,
boolean
foreground
)
{
Context
context
,
Class
<?
extends
DownloadService
>
clazz
,
boolean
foreground
)
{
...
@@ -318,7 +332,7 @@ public abstract class DownloadService extends Service {
...
@@ -318,7 +332,7 @@ public abstract class DownloadService extends Service {
* @param id The content id, or {@code null} to set the stop reason for all downloads.
* @param id The content id, or {@code null} to set the stop reason for all downloads.
* @param stopReason An application defined stop reason.
* @param stopReason An application defined stop reason.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @return
Created I
ntent.
* @return
The created i
ntent.
*/
*/
public
static
Intent
buildSetStopReasonIntent
(
public
static
Intent
buildSetStopReasonIntent
(
Context
context
,
Context
context
,
...
@@ -332,6 +346,25 @@ public abstract class DownloadService extends Service {
...
@@ -332,6 +346,25 @@ public abstract class DownloadService extends Service {
}
}
/**
/**
* Builds an {@link Intent} for setting the requirements that need to be met for downloads to
* progress.
*
* @param context A {@link Context}.
* @param clazz The concrete download service being targeted by the intent.
* @param requirements A {@link Requirements}.
* @param foreground Whether this intent will be used to start the service in the foreground.
* @return The created intent.
*/
public
static
Intent
buildSetRequirementsIntent
(
Context
context
,
Class
<?
extends
DownloadService
>
clazz
,
Requirements
requirements
,
boolean
foreground
)
{
return
getIntent
(
context
,
clazz
,
ACTION_SET_REQUIREMENTS
,
foreground
)
.
putExtra
(
KEY_REQUIREMENTS
,
requirements
);
}
/**
* Starts the service if not started already and adds a new download.
* Starts the service if not started already and adds a new download.
*
*
* @param context A {@link Context}.
* @param context A {@link Context}.
...
@@ -429,6 +462,24 @@ public abstract class DownloadService extends Service {
...
@@ -429,6 +462,24 @@ public abstract class DownloadService extends Service {
}
}
/**
/**
* Starts the service if not started already and sets the requirements that need to be met for
* downloads to progress.
*
* @param context A {@link Context}.
* @param clazz The concrete download service to be started.
* @param requirements A {@link Requirements}.
* @param foreground Whether the service is started in the foreground.
*/
public
static
void
sendSetRequirements
(
Context
context
,
Class
<?
extends
DownloadService
>
clazz
,
Requirements
requirements
,
boolean
foreground
)
{
Intent
intent
=
buildSetRequirementsIntent
(
context
,
clazz
,
requirements
,
foreground
);
startService
(
context
,
intent
,
foreground
);
}
/**
* Starts a download service to resume any ongoing downloads.
* Starts a download service to resume any ongoing downloads.
*
*
* @param context A {@link Context}.
* @param context A {@link Context}.
...
@@ -479,10 +530,12 @@ public abstract class DownloadService extends Service {
...
@@ -479,10 +530,12 @@ public abstract class DownloadService extends Service {
lastStartId
=
startId
;
lastStartId
=
startId
;
taskRemoved
=
false
;
taskRemoved
=
false
;
String
intentAction
=
null
;
String
intentAction
=
null
;
String
contentId
=
null
;
if
(
intent
!=
null
)
{
if
(
intent
!=
null
)
{
intentAction
=
intent
.
getAction
();
intentAction
=
intent
.
getAction
();
startedInForeground
|=
startedInForeground
|=
intent
.
getBooleanExtra
(
KEY_FOREGROUND
,
false
)
||
ACTION_RESTART
.
equals
(
intentAction
);
intent
.
getBooleanExtra
(
KEY_FOREGROUND
,
false
)
||
ACTION_RESTART
.
equals
(
intentAction
);
contentId
=
intent
.
getStringExtra
(
KEY_CONTENT_ID
);
}
}
// intentAction is null if the service is restarted or no action is specified.
// intentAction is null if the service is restarted or no action is specified.
if
(
intentAction
==
null
)
{
if
(
intentAction
==
null
)
{
...
@@ -497,12 +550,19 @@ public abstract class DownloadService extends Service {
...
@@ -497,12 +550,19 @@ public abstract class DownloadService extends Service {
case
ACTION_ADD_DOWNLOAD:
case
ACTION_ADD_DOWNLOAD:
DownloadRequest
downloadRequest
=
intent
.
getParcelableExtra
(
KEY_DOWNLOAD_REQUEST
);
DownloadRequest
downloadRequest
=
intent
.
getParcelableExtra
(
KEY_DOWNLOAD_REQUEST
);
if
(
downloadRequest
==
null
)
{
if
(
downloadRequest
==
null
)
{
Log
.
e
(
TAG
,
"Ignored ADD: Missing "
+
KEY_DOWNLOAD_REQUEST
+
" extra"
);
Log
.
e
(
TAG
,
"Ignored ADD
_DOWNLOAD
: Missing "
+
KEY_DOWNLOAD_REQUEST
+
" extra"
);
}
else
{
}
else
{
int
stopReason
=
intent
.
getIntExtra
(
KEY_STOP_REASON
,
Download
.
STOP_REASON_NONE
);
int
stopReason
=
intent
.
getIntExtra
(
KEY_STOP_REASON
,
Download
.
STOP_REASON_NONE
);
downloadManager
.
addDownload
(
downloadRequest
,
stopReason
);
downloadManager
.
addDownload
(
downloadRequest
,
stopReason
);
}
}
break
;
break
;
case
ACTION_REMOVE_DOWNLOAD:
if
(
contentId
==
null
)
{
Log
.
e
(
TAG
,
"Ignored REMOVE_DOWNLOAD: Missing "
+
KEY_CONTENT_ID
+
" extra"
);
}
else
{
downloadManager
.
removeDownload
(
contentId
);
}
break
;
case
ACTION_RESUME_DOWNLOADS:
case
ACTION_RESUME_DOWNLOADS:
downloadManager
.
resumeDownloads
();
downloadManager
.
resumeDownloads
();
break
;
break
;
...
@@ -511,19 +571,18 @@ public abstract class DownloadService extends Service {
...
@@ -511,19 +571,18 @@ public abstract class DownloadService extends Service {
break
;
break
;
case
ACTION_SET_STOP_REASON:
case
ACTION_SET_STOP_REASON:
if
(!
intent
.
hasExtra
(
KEY_STOP_REASON
))
{
if
(!
intent
.
hasExtra
(
KEY_STOP_REASON
))
{
Log
.
e
(
TAG
,
"Ignored SET_
MANUAL_
STOP_REASON: Missing "
+
KEY_STOP_REASON
+
" extra"
);
Log
.
e
(
TAG
,
"Ignored SET_STOP_REASON: Missing "
+
KEY_STOP_REASON
+
" extra"
);
}
else
{
}
else
{
String
contentId
=
intent
.
getStringExtra
(
KEY_CONTENT_ID
);
int
stopReason
=
intent
.
getIntExtra
(
KEY_STOP_REASON
,
Download
.
STOP_REASON_NONE
);
int
stopReason
=
intent
.
getIntExtra
(
KEY_STOP_REASON
,
Download
.
STOP_REASON_NONE
);
downloadManager
.
setStopReason
(
contentId
,
stopReason
);
downloadManager
.
setStopReason
(
contentId
,
stopReason
);
}
}
break
;
break
;
case
ACTION_
REMOVE_DOWNLOAD
:
case
ACTION_
SET_REQUIREMENTS
:
String
contentId
=
intent
.
getStringExtra
(
KEY_CONTENT_ID
);
Requirements
requirements
=
intent
.
getParcelableExtra
(
KEY_REQUIREMENTS
);
if
(
contentId
==
null
)
{
if
(
requirements
==
null
)
{
Log
.
e
(
TAG
,
"Ignored
REMOVE: Missing "
+
KEY_CONTENT_ID
+
" extra"
);
Log
.
e
(
TAG
,
"Ignored
SET_REQUIREMENTS: Missing "
+
KEY_REQUIREMENTS
+
" extra"
);
}
else
{
}
else
{
downloadManager
.
removeDownload
(
contentId
);
downloadManager
.
setRequirements
(
requirements
);
}
}
break
;
break
;
default
:
default
:
...
...
library/core/src/main/java/com/google/android/exoplayer2/scheduler/Requirements.java
View file @
4da14e46
...
@@ -23,6 +23,8 @@ import android.net.Network;
...
@@ -23,6 +23,8 @@ import android.net.Network;
import
android.net.NetworkCapabilities
;
import
android.net.NetworkCapabilities
;
import
android.net.NetworkInfo
;
import
android.net.NetworkInfo
;
import
android.os.BatteryManager
;
import
android.os.BatteryManager
;
import
android.os.Parcel
;
import
android.os.Parcelable
;
import
android.os.PowerManager
;
import
android.os.PowerManager
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.IntDef
;
import
com.google.android.exoplayer2.util.Log
;
import
com.google.android.exoplayer2.util.Log
;
...
@@ -31,10 +33,8 @@ import java.lang.annotation.Documented;
...
@@ -31,10 +33,8 @@ import java.lang.annotation.Documented;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.RetentionPolicy
;
/**
/** Defines a set of device state requirements. */
* Defines a set of device state requirements.
public
final
class
Requirements
implements
Parcelable
{
*/
public
final
class
Requirements
{
/**
/**
* Requirement flags. Possible flag values are {@link #NETWORK}, {@link #NETWORK_UNMETERED},
* Requirement flags. Possible flag values are {@link #NETWORK}, {@link #NETWORK_UNMETERED},
...
@@ -205,4 +205,30 @@ public final class Requirements {
...
@@ -205,4 +205,30 @@ public final class Requirements {
public
int
hashCode
()
{
public
int
hashCode
()
{
return
requirements
;
return
requirements
;
}
}
// Parcelable implementation.
@Override
public
int
describeContents
()
{
return
0
;
}
@Override
public
void
writeToParcel
(
Parcel
dest
,
int
flags
)
{
dest
.
writeInt
(
requirements
);
}
public
static
final
Parcelable
.
Creator
<
Requirements
>
CREATOR
=
new
Creator
<
Requirements
>()
{
@Override
public
Requirements
createFromParcel
(
Parcel
in
)
{
return
new
Requirements
(
in
.
readInt
());
}
@Override
public
Requirements
[]
newArray
(
int
size
)
{
return
new
Requirements
[
size
];
}
};
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment