package com.mercandalli.android.apps.files.storage; import android.app.ActivityManager; import android.content.Context; import android.os.Environment; import android.os.StatFs; import android.support.annotation.NonNull; import android.support.annotation.Nullable; public final class StorageManager { @Nullable private static StorageManager sInstance; @NonNull public static StorageManager getInstance() { if (sInstance == null) { sInstance = new StorageManager(); } return sInstance; } @Nullable private Storage mStorageDisk; @Nullable private Storage mStorageRam; private StorageManager() { } @NonNull public Storage getStorageDisk() { if (mStorageDisk == null) { final StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath()); final long blockSize = statFs.getBlockSize(); final long totalSize = statFs.getBlockCount() * blockSize; final long availableSize = statFs.getAvailableBlocks() * blockSize; mStorageDisk = new Storage(totalSize, availableSize); } return mStorageDisk; } @NonNull public Storage getRam(Context context) { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { return new Storage(0, 0); } if (mStorageRam == null) { ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); activityManager.getMemoryInfo(mi); long available = mi.availMem; long total = mi.totalMem; mStorageRam = new Storage(total, available); } return mStorageRam; } }