diff options
author | Kenny Root <kroot@google.com> | 2011-03-15 12:43:07 -0700 |
---|---|---|
committer | Kenny Root <kroot@google.com> | 2011-03-15 12:43:07 -0700 |
commit | 1aa73a1bbadbc3ffb0c04bf5c0dc78a0fb7e32b9 (patch) | |
tree | 1961a062b0a3b536902f5e9b1fa2f944470e0103 /packages | |
parent | e65711b21f1b351f28d4f04819e1e05a9ac8dfee (diff) | |
download | frameworks_base-1aa73a1bbadbc3ffb0c04bf5c0dc78a0fb7e32b9.zip frameworks_base-1aa73a1bbadbc3ffb0c04bf5c0dc78a0fb7e32b9.tar.gz frameworks_base-1aa73a1bbadbc3ffb0c04bf5c0dc78a0fb7e32b9.tar.bz2 |
Add byte limit in addition to ratio for installs DO NOT MERGE
Previously you were not allowed to install anything to the internal
storage if there was less than 10% free space available on the
internal storage. This doesn't make sense on devices with huge storage
capacity, so just add in a hard-coded byte limit.
This will be cleaned up at a later time to use the same code as
DeviceStorageMonitorService to determine the limits.
Bug: 4086510
Change-Id: I39f69b5272ef44fea218e3b45171b48e2eab2480
Diffstat (limited to 'packages')
-rw-r--r-- | packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java index 21f77e3..337593f 100644 --- a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java +++ b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java @@ -390,6 +390,9 @@ public class DefaultContainerService extends IntentService { // No-installation limit for internal flash: 10% or less space available private static final double LOW_NAND_FLASH_TRESHOLD = 0.1; + // No-installation limit for internal flash: 150MB or less space available + private static final long NAND_MIN_FREE_SPACE = (1024L * 1024L * 150L); + // SD-to-internal app size threshold: currently set to 1 MB private static final long INSTALL_ON_SD_THRESHOLD = (1024 * 1024); private static final int ERR_LOC = -1; @@ -451,7 +454,8 @@ public class DefaultContainerService extends IntentService { String status = Environment.getExternalStorageState(); long availSDSize = -1; boolean mediaAvailable = false; - if (!Environment.isExternalStorageEmulated() && status.equals(Environment.MEDIA_MOUNTED)) { + final boolean mediaEmulated = Environment.isExternalStorageEmulated(); + if (!mediaEmulated && status.equals(Environment.MEDIA_MOUNTED)) { StatFs sdStats = new StatFs( Environment.getExternalStorageDirectory().getPath()); availSDSize = (long)sdStats.getAvailableBlocks() * @@ -474,7 +478,7 @@ public class DefaultContainerService extends IntentService { // For dex files. Just ignore and fail when extracting. Max limit of 2Gig for now. long reqInternalSize = 0; boolean intThresholdOk = (pctNandFree >= LOW_NAND_FLASH_TRESHOLD); - boolean intAvailOk = ((reqInstallSize + reqInternalSize) < availInternalSize); + boolean intAvailOk = (reqInstallSize + reqInternalSize) < (availInternalSize - NAND_MIN_FREE_SPACE); boolean fitsOnSd = false; if (mediaAvailable && (reqInstallSize < availSDSize)) { // If we do not have an internal size requirement @@ -485,7 +489,7 @@ public class DefaultContainerService extends IntentService { fitsOnSd = true; } } - boolean fitsOnInt = intThresholdOk && intAvailOk; + boolean fitsOnInt = intThresholdOk || intAvailOk; if (checkInt) { // Check for internal memory availability if (fitsOnInt) { @@ -506,7 +510,7 @@ public class DefaultContainerService extends IntentService { return PackageHelper.RECOMMEND_INSTALL_EXTERNAL; } } - if ((checkExt || checkBoth) && !mediaAvailable) { + if (!mediaEmulated && (checkExt || checkBoth) && !mediaAvailable) { return PackageHelper.RECOMMEND_MEDIA_UNAVAILABLE; } return PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE; |