Support for max download size that may go over mobile
authorSteve Howard <showard@google.com>
Fri, 16 Jul 2010 02:59:40 +0000 (19:59 -0700)
committerSteve Howard <showard@google.com>
Mon, 19 Jul 2010 18:04:38 +0000 (11:04 -0700)
commit071bd7acb3185f4f1e807855605c5e6018e9742f
tree85e1d36689bb632b20b74faaac9596d660a7a46d
parent1aa26989047495ff58d3e2598d3f9549465cbb65
Support for max download size that may go over mobile

This change introduces support for a maximum download size that may go
over a mobile connection.  Downloads above this limit will wait for a
wifi connection.

To accomplish this, I moved a lot of the logic for checking
connectivity info into DownloadInfo itself.  I then moved the code to
call these checks from DownloadService, where it would call the checks
before spawning a DownloadThread, into DownloadThread itself.  This
makes it simpler to check connectivity after we get Content-Length
info.  It also eliminates the risk of a race condition where
connectivity changes between the check and the actual request
execution.

I realize this change reduces efficiency, because we now call into
ConnectivityManager/TelephonyManager twice per DownloadThread, rather
than once per DownloadService "tick".  I feel that it's OK since its a
small amount of computation running relatively infrequently.  If we
feel that it's a serious concern, and that the efficiency issues
outweigh the race problem, I can go easily back to the old approach.

I've left out the code to actually fetch the limit. I think this will
come from system settings, but I want to double-check, so I'll put it
in a separate change.

Other changes:
* simplify SystemFacade's interface to get connectivity info - rather
  than returning all connected types, just return the active type,
  since that should be all we care about
* adding @LargeTest to PublicApiFunctionalTest

Change-Id: Id1faa2c45bf2dade9fe779440721a1d42cbdfcd1
src/com/android/providers/downloads/DownloadInfo.java
src/com/android/providers/downloads/DownloadService.java
src/com/android/providers/downloads/DownloadThread.java
src/com/android/providers/downloads/Helpers.java
src/com/android/providers/downloads/RealSystemFacade.java
src/com/android/providers/downloads/SystemFacade.java
tests/src/com/android/providers/downloads/FakeSystemFacade.java
tests/src/com/android/providers/downloads/PublicApiFunctionalTest.java