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
3bce2138
authored
Dec 20, 2019
by
olly
Committed by
Oliver Woodman
Jan 17, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Fix handling of network transitions in RequirementsWatcher
Issue: #6733 PiperOrigin-RevId: 286621715
parent
355b3afa
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
41 additions
and
30 deletions
RELEASENOTES.md
library/core/src/main/java/com/google/android/exoplayer2/scheduler/Requirements.java
library/core/src/main/java/com/google/android/exoplayer2/scheduler/RequirementsWatcher.java
RELEASENOTES.md
View file @
3bce2138
...
@@ -8,6 +8,10 @@
...
@@ -8,6 +8,10 @@
Also change
`IcyInfo.rawMetadata`
from
`String`
to
`byte[]`
to allow
Also change
`IcyInfo.rawMetadata`
from
`String`
to
`byte[]`
to allow
developers to handle data that's neither UTF-8 nor ISO-8859-1
developers to handle data that's neither UTF-8 nor ISO-8859-1
(
[
#6753
](
https://github.com/google/ExoPlayer/issues/6753
)
).
(
[
#6753
](
https://github.com/google/ExoPlayer/issues/6753
)
).
*
Fix handling of network transitions in
`RequirementsWatcher`
(
[
#6733
](
https://github.com/google/ExoPlayer/issues/6733
)
). Incorrect handling
could previously cause downloads to be paused when they should have been able
to proceed.
### 2.11.1 (2019-12-20) ###
### 2.11.1 (2019-12-20) ###
...
...
library/core/src/main/java/com/google/android/exoplayer2/scheduler/Requirements.java
View file @
3bce2138
...
@@ -163,9 +163,10 @@ public final class Requirements implements Parcelable {
...
@@ -163,9 +163,10 @@ public final class Requirements implements Parcelable {
}
}
private
static
boolean
isInternetConnectivityValidated
(
ConnectivityManager
connectivityManager
)
{
private
static
boolean
isInternetConnectivityValidated
(
ConnectivityManager
connectivityManager
)
{
if
(
Util
.
SDK_INT
<
23
)
{
// It's possible to query NetworkCapabilities from API level 23, but RequirementsWatcher only
// TODO Check internet connectivity using http://clients3.google.com/generate_204 on API
// fires an event to update its Requirements when NetworkCapabilities change from API level 24.
// levels prior to 23.
// Since Requirements wont be updated, we assume connectivity is validated on API level 23.
if
(
Util
.
SDK_INT
<
24
)
{
return
true
;
return
true
;
}
}
Network
activeNetwork
=
connectivityManager
.
getActiveNetwork
();
Network
activeNetwork
=
connectivityManager
.
getActiveNetwork
();
...
@@ -174,10 +175,8 @@ public final class Requirements implements Parcelable {
...
@@ -174,10 +175,8 @@ public final class Requirements implements Parcelable {
}
}
NetworkCapabilities
networkCapabilities
=
NetworkCapabilities
networkCapabilities
=
connectivityManager
.
getNetworkCapabilities
(
activeNetwork
);
connectivityManager
.
getNetworkCapabilities
(
activeNetwork
);
boolean
validated
=
return
networkCapabilities
!=
null
networkCapabilities
==
null
&&
networkCapabilities
.
hasCapability
(
NetworkCapabilities
.
NET_CAPABILITY_VALIDATED
);
||
!
networkCapabilities
.
hasCapability
(
NetworkCapabilities
.
NET_CAPABILITY_VALIDATED
);
return
!
validated
;
}
}
@Override
@Override
...
...
library/core/src/main/java/com/google/android/exoplayer2/scheduler/RequirementsWatcher.java
View file @
3bce2138
...
@@ -23,7 +23,6 @@ import android.content.IntentFilter;
...
@@ -23,7 +23,6 @@ import android.content.IntentFilter;
import
android.net.ConnectivityManager
;
import
android.net.ConnectivityManager
;
import
android.net.Network
;
import
android.net.Network
;
import
android.net.NetworkCapabilities
;
import
android.net.NetworkCapabilities
;
import
android.net.NetworkRequest
;
import
android.os.Handler
;
import
android.os.Handler
;
import
android.os.Looper
;
import
android.os.Looper
;
import
android.os.PowerManager
;
import
android.os.PowerManager
;
...
@@ -62,7 +61,7 @@ public final class RequirementsWatcher {
...
@@ -62,7 +61,7 @@ public final class RequirementsWatcher {
@Nullable
private
DeviceStatusChangeReceiver
receiver
;
@Nullable
private
DeviceStatusChangeReceiver
receiver
;
@Requirements
.
RequirementFlags
private
int
notMetRequirements
;
@Requirements
.
RequirementFlags
private
int
notMetRequirements
;
@Nullable
private
CapabilityValidated
Callback
networkCallback
;
@Nullable
private
Network
Callback
networkCallback
;
/**
/**
* @param context Any context.
* @param context Any context.
...
@@ -88,8 +87,8 @@ public final class RequirementsWatcher {
...
@@ -88,8 +87,8 @@ public final class RequirementsWatcher {
IntentFilter
filter
=
new
IntentFilter
();
IntentFilter
filter
=
new
IntentFilter
();
if
(
requirements
.
isNetworkRequired
())
{
if
(
requirements
.
isNetworkRequired
())
{
if
(
Util
.
SDK_INT
>=
2
3
)
{
if
(
Util
.
SDK_INT
>=
2
4
)
{
registerNetworkCallbackV2
3
();
registerNetworkCallbackV2
4
();
}
else
{
}
else
{
filter
.
addAction
(
ConnectivityManager
.
CONNECTIVITY_ACTION
);
filter
.
addAction
(
ConnectivityManager
.
CONNECTIVITY_ACTION
);
}
}
...
@@ -115,8 +114,8 @@ public final class RequirementsWatcher {
...
@@ -115,8 +114,8 @@ public final class RequirementsWatcher {
public
void
stop
()
{
public
void
stop
()
{
context
.
unregisterReceiver
(
Assertions
.
checkNotNull
(
receiver
));
context
.
unregisterReceiver
(
Assertions
.
checkNotNull
(
receiver
));
receiver
=
null
;
receiver
=
null
;
if
(
networkCallback
!=
null
)
{
if
(
Util
.
SDK_INT
>=
24
&&
networkCallback
!=
null
)
{
unregisterNetworkCallback
();
unregisterNetworkCallback
V24
();
}
}
}
}
...
@@ -125,26 +124,21 @@ public final class RequirementsWatcher {
...
@@ -125,26 +124,21 @@ public final class RequirementsWatcher {
return
requirements
;
return
requirements
;
}
}
@TargetApi
(
2
3
)
@TargetApi
(
2
4
)
private
void
registerNetworkCallbackV2
3
()
{
private
void
registerNetworkCallbackV2
4
()
{
ConnectivityManager
connectivityManager
=
ConnectivityManager
connectivityManager
=
Assertions
.
checkNotNull
(
Assertions
.
checkNotNull
(
(
ConnectivityManager
)
context
.
getSystemService
(
Context
.
CONNECTIVITY_SERVICE
));
(
ConnectivityManager
)
context
.
getSystemService
(
Context
.
CONNECTIVITY_SERVICE
));
NetworkRequest
request
=
networkCallback
=
new
NetworkCallback
();
new
NetworkRequest
.
Builder
()
connectivityManager
.
registerDefaultNetworkCallback
(
networkCallback
);
.
addCapability
(
NetworkCapabilities
.
NET_CAPABILITY_VALIDATED
)
.
build
();
networkCallback
=
new
CapabilityValidatedCallback
();
connectivityManager
.
registerNetworkCallback
(
request
,
networkCallback
);
}
}
private
void
unregisterNetworkCallback
()
{
@TargetApi
(
24
)
if
(
Util
.
SDK_INT
>=
21
)
{
private
void
unregisterNetworkCallbackV24
()
{
ConnectivityManager
connectivityManager
=
ConnectivityManager
connectivityManager
=
(
ConnectivityManager
)
context
.
getSystemService
(
Context
.
CONNECTIVITY_SERVICE
);
(
ConnectivityManager
)
context
.
getSystemService
(
Context
.
CONNECTIVITY_SERVICE
);
connectivityManager
.
unregisterNetworkCallback
(
Assertions
.
checkNotNull
(
networkCallback
));
connectivityManager
.
unregisterNetworkCallback
(
Assertions
.
checkNotNull
(
networkCallback
));
networkCallback
=
null
;
networkCallback
=
null
;
}
}
}
private
void
checkRequirements
()
{
private
void
checkRequirements
()
{
...
@@ -165,8 +159,11 @@ public final class RequirementsWatcher {
...
@@ -165,8 +159,11 @@ public final class RequirementsWatcher {
}
}
}
}
@RequiresApi
(
api
=
21
)
@RequiresApi
(
24
)
private
final
class
CapabilityValidatedCallback
extends
ConnectivityManager
.
NetworkCallback
{
private
final
class
NetworkCallback
extends
ConnectivityManager
.
NetworkCallback
{
boolean
receivedCapabilitiesChange
;
boolean
networkValidated
;
@Override
@Override
public
void
onAvailable
(
Network
network
)
{
public
void
onAvailable
(
Network
network
)
{
onNetworkCallback
();
onNetworkCallback
();
...
@@ -177,6 +174,17 @@ public final class RequirementsWatcher {
...
@@ -177,6 +174,17 @@ public final class RequirementsWatcher {
onNetworkCallback
();
onNetworkCallback
();
}
}
@Override
public
void
onCapabilitiesChanged
(
Network
network
,
NetworkCapabilities
networkCapabilities
)
{
boolean
networkValidated
=
networkCapabilities
.
hasCapability
(
NetworkCapabilities
.
NET_CAPABILITY_VALIDATED
);
if
(!
receivedCapabilitiesChange
||
this
.
networkValidated
!=
networkValidated
)
{
receivedCapabilitiesChange
=
true
;
this
.
networkValidated
=
networkValidated
;
onNetworkCallback
();
}
}
private
void
onNetworkCallback
()
{
private
void
onNetworkCallback
()
{
handler
.
post
(
handler
.
post
(
()
->
{
()
->
{
...
...
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