|
|
@ -27,7 +27,7 @@ object MemoryUtil { |
|
|
const val Pb = Tb * 1024 |
|
|
const val Pb = Tb * 1024 |
|
|
const val Eb = Pb * 1024 |
|
|
const val Eb = Pb * 1024 |
|
|
|
|
|
|
|
|
private fun bytesToSizeUnit(size: Float): String = |
|
|
|
|
|
|
|
|
private fun bytesToSizeUnit(size: Float, roundUp: Boolean = false): String = |
|
|
when { |
|
|
when { |
|
|
size < Kb -> { |
|
|
size < Kb -> { |
|
|
context.getString( |
|
|
context.getString( |
|
|
@ -39,63 +39,59 @@ object MemoryUtil { |
|
|
size < Mb -> { |
|
|
size < Mb -> { |
|
|
context.getString( |
|
|
context.getString( |
|
|
R.string.memory_formatted, |
|
|
R.string.memory_formatted, |
|
|
(size / Kb).hundredths, |
|
|
|
|
|
|
|
|
if (roundUp) ceil(size / Kb) else (size / Kb).hundredths, |
|
|
context.getString(R.string.memory_kilobyte) |
|
|
context.getString(R.string.memory_kilobyte) |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
size < Gb -> { |
|
|
size < Gb -> { |
|
|
context.getString( |
|
|
context.getString( |
|
|
R.string.memory_formatted, |
|
|
R.string.memory_formatted, |
|
|
(size / Mb).hundredths, |
|
|
|
|
|
|
|
|
if (roundUp) ceil(size / Mb) else (size / Mb).hundredths, |
|
|
context.getString(R.string.memory_megabyte) |
|
|
context.getString(R.string.memory_megabyte) |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
size < Tb -> { |
|
|
size < Tb -> { |
|
|
context.getString( |
|
|
context.getString( |
|
|
R.string.memory_formatted, |
|
|
R.string.memory_formatted, |
|
|
(size / Gb).hundredths, |
|
|
|
|
|
|
|
|
if (roundUp) ceil(size / Gb) else (size / Gb).hundredths, |
|
|
context.getString(R.string.memory_gigabyte) |
|
|
context.getString(R.string.memory_gigabyte) |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
size < Pb -> { |
|
|
size < Pb -> { |
|
|
context.getString( |
|
|
context.getString( |
|
|
R.string.memory_formatted, |
|
|
R.string.memory_formatted, |
|
|
(size / Tb).hundredths, |
|
|
|
|
|
|
|
|
if (roundUp) ceil(size / Tb) else (size / Tb).hundredths, |
|
|
context.getString(R.string.memory_terabyte) |
|
|
context.getString(R.string.memory_terabyte) |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
size < Eb -> { |
|
|
size < Eb -> { |
|
|
context.getString( |
|
|
context.getString( |
|
|
R.string.memory_formatted, |
|
|
R.string.memory_formatted, |
|
|
(size / Pb).hundredths, |
|
|
|
|
|
|
|
|
if (roundUp) ceil(size / Pb) else (size / Pb).hundredths, |
|
|
context.getString(R.string.memory_petabyte) |
|
|
context.getString(R.string.memory_petabyte) |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
else -> { |
|
|
else -> { |
|
|
context.getString( |
|
|
context.getString( |
|
|
R.string.memory_formatted, |
|
|
R.string.memory_formatted, |
|
|
(size / Eb).hundredths, |
|
|
|
|
|
|
|
|
if (roundUp) ceil(size / Eb) else (size / Eb).hundredths, |
|
|
context.getString(R.string.memory_exabyte) |
|
|
context.getString(R.string.memory_exabyte) |
|
|
) |
|
|
) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Devices are unlikely to have 0.5GB increments of memory so we'll just round up to account for |
|
|
|
|
|
// the potential error created by memInfo.totalMem |
|
|
|
|
|
private val totalMemory: Float |
|
|
|
|
|
|
|
|
val totalMemory: Float |
|
|
get() { |
|
|
get() { |
|
|
val memInfo = ActivityManager.MemoryInfo() |
|
|
val memInfo = ActivityManager.MemoryInfo() |
|
|
with(context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager) { |
|
|
with(context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager) { |
|
|
getMemoryInfo(memInfo) |
|
|
getMemoryInfo(memInfo) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return ceil( |
|
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { |
|
|
|
|
|
memInfo.advertisedMem.toFloat() |
|
|
|
|
|
} else { |
|
|
|
|
|
memInfo.totalMem.toFloat() |
|
|
|
|
|
} |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { |
|
|
|
|
|
memInfo.advertisedMem.toFloat() |
|
|
|
|
|
} else { |
|
|
|
|
|
memInfo.totalMem.toFloat() |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
fun isLessThan(minimum: Int, size: Float): Boolean = |
|
|
fun isLessThan(minimum: Int, size: Float): Boolean = |
|
|
@ -109,5 +105,7 @@ object MemoryUtil { |
|
|
else -> totalMemory < Kb && totalMemory < minimum |
|
|
else -> totalMemory < Kb && totalMemory < minimum |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
fun getDeviceRAM(): String = bytesToSizeUnit(totalMemory) |
|
|
|
|
|
|
|
|
// Devices are unlikely to have 0.5GB increments of memory so we'll just round up to account for |
|
|
|
|
|
// the potential error created by memInfo.totalMem |
|
|
|
|
|
fun getDeviceRAM(): String = bytesToSizeUnit(totalMemory, true) |
|
|
} |
|
|
} |