diff options
| -rw-r--r-- | core/java/com/android/internal/content/InstallLocationUtils.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/core/java/com/android/internal/content/InstallLocationUtils.java b/core/java/com/android/internal/content/InstallLocationUtils.java index c456cf3a4bb6..4d9c09e92617 100644 --- a/core/java/com/android/internal/content/InstallLocationUtils.java +++ b/core/java/com/android/internal/content/InstallLocationUtils.java @@ -31,6 +31,7 @@ import android.os.Environment; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.SystemProperties; import android.os.storage.IStorageManager; import android.os.storage.StorageManager; import android.os.storage.StorageVolume; @@ -261,12 +262,12 @@ public class InstallLocationUtils { // We're left with new installations with either preferring external or auto, so just pick // volume with most space + String bestCandidate = !volumePaths.isEmpty() ? volumePaths.keyAt(0) : null; if (volumePaths.size() == 1) { if (checkFitOnVolume(storageManager, volumePaths.valueAt(0), params)) { - return volumePaths.keyAt(0); + return bestCandidate; } } else { - String bestCandidate = null; long bestCandidateAvailBytes = Long.MIN_VALUE; for (String vol : volumePaths.keySet()) { final String volumePath = volumePaths.get(vol); @@ -289,6 +290,14 @@ public class InstallLocationUtils { } + // For new installations of a predefined size, check property to let it through + // regardless of the actual free space. + if (bestCandidate != null && Integer.MAX_VALUE == params.sizeBytes + && SystemProperties.getBoolean("debug.pm.install_skip_size_check_for_maxint", + false)) { + return bestCandidate; + } + throw new IOException("No special requests, but no room on allowed volumes. " + " allow3rdPartyOnInternal? " + allow3rdPartyOnInternal); } |