* migrate few annotations to androidx
* mission recovery: better error handling (except StreamExtractor.getErrorMessage() method always returns an error)
* post-processing: more detailed progress
[file specific changes]
DownloadMission.java
* remove redundant/boilerplate code (again)
* make few variables volatile
* better file "length" approximation
* use "done" variable to count the amount of bytes downloaded (simplify percent calc in UI code)
Postprocessing.java
* if case of error use "ERROR_POSTPROCESSING" instead of "ERROR_UNKNOWN_EXCEPTION"
* simplify source stream init
DownloadManager.java
* move all "service message sending" code to DownloadMission
* remove not implemented method "notifyUserPendingDownloads()" also his unused strings
DownloadManagerService.java
* use START_STICKY instead of START_NOT_STICKY
* simplify addMissionEventListener()/removeMissionEventListener() methods (always are called from the main thread)
Deleter.java
* better method definition
MissionAdapter.java
* better method definition
* code cleanup
* the UI is now refreshed every 750ms
* simplify download progress calculation
* indicates if the download is actually recovering
* smooth download speed measure
* show estimated remain time
MainFragment.java:
* check if viewPager is null (issued by "Apply changes" feature of Android Studio)
* implement socket timeout error
* use 128k buffer size for copy
* use NewPipe HTTP user agent in the downloads
* automatically recover downloads with network errors that are queued
* replace "In queue" to "Pending" in the downloads header to avoid confusions (all languages)
* use 29bits Clusters size to support huge video resolutions (fixes#2291) (WebmWriter.java)
* add missing changes to WebmMuxer.java (i forget select the audio track)
* re-work finished mission database
* re-work DownloadMission and bump it Serializable version
* keep the classic Java IO API
* SAF Tree API support on Android Lollipop or higher
* add wrapper for SAF stream opening
* implement Closeable in SharpStream to replace the dispose() method
* do required changes for this API:
** remove any file creation logic from DownloadInitializer
** make PostProcessing Serializable and reduce the number of iterations
** update all strings.xml files
** storage helpers: StoredDirectoryHelper & StoredFileHelper
** best effort to handle any kind of SAF errors/exceptions
Remove strings which have been deleted from the English strings file during development, but were translated via Weblate, which failed to pull and push our upstream repo.
Translated using Weblate (Swedish)
Currently translated at 100.0% (383 of 383 strings)
Translated using Weblate (Chinese (Mandarin))
Currently translated at 27.4% (105 of 383 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 97.1% (372 of 383 strings)
Translated using Weblate (German)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Arabic)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Basque)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Dutch)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Spanish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Catalan)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (German)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Turkish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Swedish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (French)
Currently translated at 97,1% (372 of 383 strings)
Translated using Weblate (French)
Currently translated at 97,1% (372 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Arabic)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Basque)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Dutch)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Spanish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Catalan)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (German)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Swedish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Turkish)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Estonian)
Currently translated at 91.6% (351 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)
Translated using Weblate (Russian)
Currently translated at 100,0% (383 of 383 strings)