summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/ContextImpl.java3
-rw-r--r--core/java/android/os/storage/StorageManager.java53
2 files changed, 46 insertions, 10 deletions
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index a40fe7558cba..734d43503e7b 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -460,7 +460,8 @@ class ContextImpl extends Context {
registerService(STORAGE_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
try {
- return new StorageManager(ctx.mMainThread.getHandler().getLooper());
+ return new StorageManager(
+ ctx.getContentResolver(), ctx.mMainThread.getHandler().getLooper());
} catch (RemoteException rex) {
Log.e(TAG, "Failed to create StorageManager", rex);
return null;
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index 862a95cb9d13..f5e728dc565c 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -16,7 +16,9 @@
package android.os.storage;
-import android.app.NotificationManager;
+import static android.net.TrafficStats.MB_IN_BYTES;
+
+import android.content.ContentResolver;
import android.content.Context;
import android.os.Environment;
import android.os.Handler;
@@ -25,6 +27,7 @@ import android.os.Message;
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.provider.Settings;
import android.util.Log;
import android.util.SparseArray;
@@ -54,20 +57,20 @@ import java.util.concurrent.atomic.AtomicInteger;
* {@link android.content.Context#getSystemService(java.lang.String)} with an
* argument of {@link android.content.Context#STORAGE_SERVICE}.
*/
-
-public class StorageManager
-{
+public class StorageManager {
private static final String TAG = "StorageManager";
+ private final ContentResolver mResolver;
+
/*
* Our internal MountService binder reference
*/
- final private IMountService mMountService;
+ private final IMountService mMountService;
/*
* The looper target for callbacks
*/
- Looper mTgtLooper;
+ private final Looper mTgtLooper;
/*
* Target listener for binder callbacks
@@ -308,16 +311,16 @@ public class StorageManager
*
* @hide
*/
- public StorageManager(Looper tgtLooper) throws RemoteException {
+ public StorageManager(ContentResolver resolver, Looper tgtLooper) throws RemoteException {
+ mResolver = resolver;
+ mTgtLooper = tgtLooper;
mMountService = IMountService.Stub.asInterface(ServiceManager.getService("mount"));
if (mMountService == null) {
Log.e(TAG, "Unable to connect to mount service! - is it running yet?");
return;
}
- mTgtLooper = tgtLooper;
}
-
/**
* Registers a {@link android.os.storage.StorageEventListener StorageEventListener}.
*
@@ -610,4 +613,36 @@ public class StorageManager
Log.w(TAG, "No primary storage defined");
return null;
}
+
+ private static final int DEFAULT_THRESHOLD_PERCENTAGE = 10;
+ private static final long DEFAULT_THRESHOLD_MAX_BYTES = 500 * MB_IN_BYTES;
+ private static final long DEFAULT_FULL_THRESHOLD_BYTES = MB_IN_BYTES;
+
+ /**
+ * Return the number of available bytes at which the given path is
+ * considered running low on storage.
+ *
+ * @hide
+ */
+ public long getStorageLowBytes(File path) {
+ final long lowPercent = Settings.Global.getInt(mResolver,
+ Settings.Global.SYS_STORAGE_THRESHOLD_PERCENTAGE, DEFAULT_THRESHOLD_PERCENTAGE);
+ final long lowBytes = (path.getTotalSpace() * lowPercent) / 100;
+
+ final long maxLowBytes = Settings.Global.getLong(mResolver,
+ Settings.Global.SYS_STORAGE_THRESHOLD_MAX_BYTES, DEFAULT_THRESHOLD_MAX_BYTES);
+
+ return Math.min(lowBytes, maxLowBytes);
+ }
+
+ /**
+ * Return the number of available bytes at which the given path is
+ * considered full.
+ *
+ * @hide
+ */
+ public long getStorageFullBytes(File path) {
+ return Settings.Global.getLong(mResolver, Settings.Global.SYS_STORAGE_FULL_THRESHOLD_BYTES,
+ DEFAULT_FULL_THRESHOLD_BYTES);
+ }
}