• Jeff Sharkey's avatar
    Many improvements to download storage management. · dffbb9c4
    Jeff Sharkey authored
    Change all data transfer to occur through FileDescriptors instead of
    relying on local files.  This paves the way for downloading directly
    to content:// Uris in the future.
    
    Rewrite storage management logic to preflight download when size is
    known.  If enough space is found, immediately reserve the space with
    fallocate(), advising the kernel block allocator to try giving us a
    contiguous block regions to reduce fragmentation.  When preflighting
    on internal storage or emulated external storage, ask PackageManager
    to clear private app caches to free up space.
    
    Since we fallocate() the entire file, use the database as the source
    of truth for resume locations, which requires that we fsync() before
    each database update.
    
    Store in-progress downloads in separate directories to keep the OS
    from deleting out from under us.  Clean up filename generation logic
    to break ties in this new dual-directory case.
    
    Clearer enforcement of successful download preconditions around
    content lengths and ETags.  Move all database field mutations to
    clearer DownloadInfoDelta object, and write back through single
    code path.
    
    Catch and log uncaught exceptions from DownloadThread.  Tests to
    verify new storage behaviors.  Fixed existing test to reflect correct
    RFC behavior.
    
    Bug: 5287571, 3213677, 12663412
    Change-Id: I6bb905eca7c7d1a6bc88df3db28b65d70f660221
    dffbb9c4
AndroidManifest.xml 6.1 KB