Loading packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java +8 −4 Original line number Original line Diff line number Diff line Loading @@ -390,6 +390,9 @@ public class DefaultContainerService extends IntentService { // No-installation limit for internal flash: 10% or less space available // No-installation limit for internal flash: 10% or less space available private static final double LOW_NAND_FLASH_TRESHOLD = 0.1; 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 // SD-to-internal app size threshold: currently set to 1 MB private static final long INSTALL_ON_SD_THRESHOLD = (1024 * 1024); private static final long INSTALL_ON_SD_THRESHOLD = (1024 * 1024); private static final int ERR_LOC = -1; private static final int ERR_LOC = -1; Loading Loading @@ -451,7 +454,8 @@ public class DefaultContainerService extends IntentService { String status = Environment.getExternalStorageState(); String status = Environment.getExternalStorageState(); long availSDSize = -1; long availSDSize = -1; boolean mediaAvailable = false; 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( StatFs sdStats = new StatFs( Environment.getExternalStorageDirectory().getPath()); Environment.getExternalStorageDirectory().getPath()); availSDSize = (long)sdStats.getAvailableBlocks() * availSDSize = (long)sdStats.getAvailableBlocks() * Loading @@ -474,7 +478,7 @@ public class DefaultContainerService extends IntentService { // For dex files. Just ignore and fail when extracting. Max limit of 2Gig for now. // For dex files. Just ignore and fail when extracting. Max limit of 2Gig for now. long reqInternalSize = 0; long reqInternalSize = 0; boolean intThresholdOk = (pctNandFree >= LOW_NAND_FLASH_TRESHOLD); boolean intThresholdOk = (pctNandFree >= LOW_NAND_FLASH_TRESHOLD); boolean intAvailOk = ((reqInstallSize + reqInternalSize) < availInternalSize); boolean intAvailOk = (reqInstallSize + reqInternalSize) < (availInternalSize - NAND_MIN_FREE_SPACE); boolean fitsOnSd = false; boolean fitsOnSd = false; if (mediaAvailable && (reqInstallSize < availSDSize)) { if (mediaAvailable && (reqInstallSize < availSDSize)) { // If we do not have an internal size requirement // If we do not have an internal size requirement Loading @@ -485,7 +489,7 @@ public class DefaultContainerService extends IntentService { fitsOnSd = true; fitsOnSd = true; } } } } boolean fitsOnInt = intThresholdOk && intAvailOk; boolean fitsOnInt = intThresholdOk || intAvailOk; if (checkInt) { if (checkInt) { // Check for internal memory availability // Check for internal memory availability if (fitsOnInt) { if (fitsOnInt) { Loading @@ -506,7 +510,7 @@ public class DefaultContainerService extends IntentService { return PackageHelper.RECOMMEND_INSTALL_EXTERNAL; return PackageHelper.RECOMMEND_INSTALL_EXTERNAL; } } } } if ((checkExt || checkBoth) && !mediaAvailable) { if (!mediaEmulated && (checkExt || checkBoth) && !mediaAvailable) { return PackageHelper.RECOMMEND_MEDIA_UNAVAILABLE; return PackageHelper.RECOMMEND_MEDIA_UNAVAILABLE; } } return PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE; return PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE; Loading Loading
packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java +8 −4 Original line number Original line Diff line number Diff line Loading @@ -390,6 +390,9 @@ public class DefaultContainerService extends IntentService { // No-installation limit for internal flash: 10% or less space available // No-installation limit for internal flash: 10% or less space available private static final double LOW_NAND_FLASH_TRESHOLD = 0.1; 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 // SD-to-internal app size threshold: currently set to 1 MB private static final long INSTALL_ON_SD_THRESHOLD = (1024 * 1024); private static final long INSTALL_ON_SD_THRESHOLD = (1024 * 1024); private static final int ERR_LOC = -1; private static final int ERR_LOC = -1; Loading Loading @@ -451,7 +454,8 @@ public class DefaultContainerService extends IntentService { String status = Environment.getExternalStorageState(); String status = Environment.getExternalStorageState(); long availSDSize = -1; long availSDSize = -1; boolean mediaAvailable = false; 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( StatFs sdStats = new StatFs( Environment.getExternalStorageDirectory().getPath()); Environment.getExternalStorageDirectory().getPath()); availSDSize = (long)sdStats.getAvailableBlocks() * availSDSize = (long)sdStats.getAvailableBlocks() * Loading @@ -474,7 +478,7 @@ public class DefaultContainerService extends IntentService { // For dex files. Just ignore and fail when extracting. Max limit of 2Gig for now. // For dex files. Just ignore and fail when extracting. Max limit of 2Gig for now. long reqInternalSize = 0; long reqInternalSize = 0; boolean intThresholdOk = (pctNandFree >= LOW_NAND_FLASH_TRESHOLD); boolean intThresholdOk = (pctNandFree >= LOW_NAND_FLASH_TRESHOLD); boolean intAvailOk = ((reqInstallSize + reqInternalSize) < availInternalSize); boolean intAvailOk = (reqInstallSize + reqInternalSize) < (availInternalSize - NAND_MIN_FREE_SPACE); boolean fitsOnSd = false; boolean fitsOnSd = false; if (mediaAvailable && (reqInstallSize < availSDSize)) { if (mediaAvailable && (reqInstallSize < availSDSize)) { // If we do not have an internal size requirement // If we do not have an internal size requirement Loading @@ -485,7 +489,7 @@ public class DefaultContainerService extends IntentService { fitsOnSd = true; fitsOnSd = true; } } } } boolean fitsOnInt = intThresholdOk && intAvailOk; boolean fitsOnInt = intThresholdOk || intAvailOk; if (checkInt) { if (checkInt) { // Check for internal memory availability // Check for internal memory availability if (fitsOnInt) { if (fitsOnInt) { Loading @@ -506,7 +510,7 @@ public class DefaultContainerService extends IntentService { return PackageHelper.RECOMMEND_INSTALL_EXTERNAL; return PackageHelper.RECOMMEND_INSTALL_EXTERNAL; } } } } if ((checkExt || checkBoth) && !mediaAvailable) { if (!mediaEmulated && (checkExt || checkBoth) && !mediaAvailable) { return PackageHelper.RECOMMEND_MEDIA_UNAVAILABLE; return PackageHelper.RECOMMEND_MEDIA_UNAVAILABLE; } } return PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE; return PackageHelper.RECOMMEND_FAILED_INSUFFICIENT_STORAGE; Loading