- Made parts of DownloadActions public that were previously hidden.
This is necessary so that when an app is listening to the
DownloadManager, it can tell something about the tasks.
- Simplified DownloadActivity some more. The helpers may migrate
into their corresponding modules at some point, and also be
converted to return structured TrackGroupArrays rather than a
flat list of Formats.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=195269824
Also add a build rule to simplify the test setup with a custom blacklist.
In addition, the test path pattern are made less specific to capture all the
static nullness tests in the /main/ directories.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=195230334
This includes only the (hopefully) non-debatable changes for the DASH module
and all needed changes for call into the core library.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=195097791
Currently it's possible to copy a master playlist with a URL
that was never present in the original. This change prevents
this, and also moves the key more in line with DASH/SS.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=195065286
A single master version prevents app developers from providing
custom download functionality (because they can't increment the
version). It's also error prone to expect someone modifying the
DASH action to remember to update the ActionFile master version.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194981886
Ad load errors will be forwarded as media source load errors in the future
and other ad events are not actually player related to warrant reporting
them as part of playback analytics.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194936656
This was adding a lot of code, and the multiple use cases
for Downloader was pretty confusing (in particular the
ordering of method calls was unclear). It's also not
performant (e.g. it requires loading/parsing manifest(s)
and initialization segments from disk).
In practice I think apps will need to keep a record of
what's offlined in their app's database (or equivalent),
which they can update by registering as a listener on
DownloadManager. This will be done for the demo app in
a subsequent change.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194932876
- It's much cleaner to split completed/error notification methods.
- Make error notification show the content title in the demo app.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194920507
It's no longer necessary to stash a reference to the
error yourself. This also correctly handles the case
where setPlayer is called with a player that's already
in an error state.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194828387
This change is intended to resolve overloading of "Download",
where a DownloadTask could be an actual download task, or a
remove task.
Also cleaned up some documentation.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194815058
Cronet now returns an unmodifiable list, so we need to copy it
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194790506
- Redefine Scheduler interface to better describe what implementations
do. The previous version was too general, in that it allowed concrete
DownloadService implementations to pass different Requirements to
the base class and to the Scheduler. It's also difficult to see how
that version could ever support dynamic updates to Requirements, which
is probably a feature we'll need to add quite soon.
- Fix a (probably theoretical) problem where static fields in
DownloadService assumed only a single concrete implementation.
- Stop using PlatformScheduler pre-API-21 in demo app, because it will
fail.
- Define default Requirements that require network.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194785751
Our current custom looper implementation tries to handle all messages
including those sent to the main looper. However, the main looper does not
use our doLoop implementation and thus messages never get executed.
This adds a check whether the target looper is the main looper and if so,
uses the default message forwarding implementation.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194779214
- It's wasted effort
- DataSpec reconstruction fails because creating a DataSpec with 0
length isn't allowed.
- Also better document DataSink open/close, to be like DataSource.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194778132
This replaces the existing listeners and provides some additional meta data
for each event.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194770421
- Add ACCESS_NETWORK_STATE to core library. It seems fairly fundamental. We should
also be using it elsewhere (e.g. to fail fast if there's no network).
- Add annotation to force apps using PlatformScheduler to declare RECEIVE_BOOT_PERMISSION
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194763051
Add a TestRunner for MetadataRetriever that roughly follow the test runner for
ExoPlayer. The TestRunner supports scheduling test steps in a sequence, compare
expected callbacks with actual callbacks, and block the test until it is done.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194518738
- When calculating the downloaded percentage in DASH, there was no
way to disambiguate between 0 of 0 segments being downloaded because
there are no cached indexes (i.e. 0% downloaded) and 0 of 0 segments
being downloaded because the index defines 0 segments (i.e. 100%
downloaded).
- Also replace use of NaN with a named constant.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194453202
Supports extracting data from AMR container format for both narrow and wide
band formats. Also added AmrExtractor as one of the default extractor to be
used in DefaultExtractorsFactory.
GitHub: #2527.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194407507
When we play downloaded content, we rely on the manifest filters
to produce a manifest that contains only the content that was
downloaded. It makes sense just to use the same filters during
download too, so we don't have to worry about any implementation
differences.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194380704
- clone() wasn't performing a deep enough copy
- Sort tracks in overrides to improve equals check
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194220596
ProgressiveDownloader never implemented this properly, and we
don't use it in DownloadManager/DownloadService, both of which
use a polling model. A polling model is also what's used elsewhere,
for example to query the current playback position.
This is effectively doing the TODO in ProgressiveDownloader.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194214579
This removes a fair chunk of code. The line delta would
be more negative if it not for adding all the /* x= */
comments in DashDownloadActionTest!
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194136689
Using addAnalyticsListener provides the same functionality with additional
information.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194071893
This removes the need for separate String/Parcelable filter paths in
the demo app. Hopefully this is a temporary measure as we work
toward using track groups + consistent keys for all media types.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194065499
Some of the events are emitted by the media periods itself and their index may
not be available in the publicly accessible timeline yet.
To prevent this, we currently check for timeline.isEmpty() only. But this may
also happen for dynamic changes, e.g. when new sources are added in fast
succession and a manifest for one of the new sources starts loading before the
updated timeline is reported.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=194057401
Playback will still fail if an input sample is larger
than 32K, but will now fail gracefully.
Issue: #4057
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=193951955
Also move NotificationUtil from the UI module to the core module.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=193941401