Expose longer statfs values, add derived values.

Since fsblkcnt_t is 8 bytes, provide methods to access larger value
instead of casting to int.  This would start being an issue around
8TB filesystems.

Also add convenience methods to calculate values in bytes.

Change-Id: Ib924425d8d6d82785466f611ca71800cc1e952b6
diff --git a/api/current.txt b/api/current.txt
index 2615e0b..536a2c8 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -16597,9 +16597,15 @@
   public class StatFs {
     ctor public StatFs(java.lang.String);
     method public int getAvailableBlocks();
+    method public long getAvailableBlocksLong();
+    method public long getAvailableBytes();
     method public int getBlockCount();
+    method public long getBlockCountLong();
     method public int getBlockSize();
+    method public long getBlockSizeLong();
     method public int getFreeBlocks();
+    method public long getFreeBlocksLong();
+    method public long getFreeBytes();
     method public void restat(java.lang.String);
   }
 
diff --git a/core/java/android/os/StatFs.java b/core/java/android/os/StatFs.java
index ca7fdba..60ec0d7 100644
--- a/core/java/android/os/StatFs.java
+++ b/core/java/android/os/StatFs.java
@@ -65,6 +65,14 @@
     }
 
     /**
+     * The size, in bytes, of a block on the file system. This corresponds to
+     * the Unix {@code statfs.f_bsize} field.
+     */
+    public long getBlockSizeLong() {
+        return mStat.f_bsize;
+    }
+
+    /**
      * The total number of blocks on the file system. This corresponds to the
      * Unix {@code statfs.f_blocks} field.
      */
@@ -73,6 +81,14 @@
     }
 
     /**
+     * The size, in bytes, of a block on the file system. This corresponds to
+     * the Unix {@code statfs.f_bsize} field.
+     */
+    public long getBlockCountLong() {
+        return mStat.f_blocks;
+    }
+
+    /**
      * The total number of blocks that are free on the file system, including
      * reserved blocks (that are not available to normal applications). This
      * corresponds to the Unix {@code statfs.f_bfree} field. Most applications
@@ -83,10 +99,44 @@
     }
 
     /**
+     * The total number of blocks that are free on the file system, including
+     * reserved blocks (that are not available to normal applications). This
+     * corresponds to the Unix {@code statfs.f_bfree} field. Most applications
+     * will want to use {@link #getAvailableBlocks()} instead.
+     */
+    public long getFreeBlocksLong() {
+        return mStat.f_bfree;
+    }
+
+    /**
+     * The number of bytes that are free on the file system, including
+     * reserved blocks (that are not available to normal applications).
+     */
+    public long getFreeBytes() {
+        return mStat.f_bfree * mStat.f_bsize;
+    }
+
+    /**
      * The number of blocks that are free on the file system and available to
      * applications. This corresponds to the Unix {@code statfs.f_bavail} field.
      */
     public int getAvailableBlocks() {
         return (int) mStat.f_bavail;
     }
+
+    /**
+     * The number of blocks that are free on the file system and available to
+     * applications. This corresponds to the Unix {@code statfs.f_bavail} field.
+     */
+    public long getAvailableBlocksLong() {
+        return mStat.f_bavail;
+    }
+
+    /**
+     * The number of bytes that are free on the file system and available to
+     * applications.
+     */
+    public long getAvailableBytes() {
+        return mStat.f_bavail * mStat.f_bsize;
+    }
 }