Jelajahi Sumber

multi-platform

Milan Jurkulak 1 tahun lalu
induk
melakukan
017daa6175

+ 3 - 1
composeApp/src/androidMain/kotlin/org/mjdev/desktop/helpers/system/meminfo/MemInfo.android.kt

@@ -1,3 +1,5 @@
 package org.mjdev.desktop.helpers.system.meminfo
 
-actual fun MemInfo(): MemInfoStub  = MemInfoAndroid()
+import org.mjdev.desktop.interfaces.IDesktopContext
+
+actual fun MemInfo(context: IDesktopContext): MemInfoStub  = MemInfoAndroid(context)

+ 19 - 10
composeApp/src/androidMain/kotlin/org/mjdev/desktop/helpers/system/meminfo/MemInfoAndroid.kt

@@ -1,16 +1,25 @@
 package org.mjdev.desktop.helpers.system.meminfo
 
-import okio.Path.Companion.toPath
-import org.mjdev.desktop.extensions.PathExt.lines
+import android.app.ActivityManager
+import android.content.Context
+import android.content.Context.ACTIVITY_SERVICE
+import org.mjdev.desktop.context.DesktopContext
+import org.mjdev.desktop.interfaces.IDesktopContext
 
-class MemInfoAndroid: MemInfoStub() {
-    private val runtime = Runtime.getRuntime()
-
-    override val free: Double = runtime.freeMemory().toDouble().times(KB)
+class MemInfoAndroid(
+    context: IDesktopContext
+) : MemInfoStub(context) {
+    val aContext: Context?
+        get() = (context as? DesktopContext)?.context
+    val activityManager: ActivityManager? by lazy {
+        aContext?.getSystemService(ACTIVITY_SERVICE) as ActivityManager
+    }
+    private val meminfo: ActivityManager.MemoryInfo
+        get() = ActivityManager.MemoryInfo().apply {
+            activityManager?.getMemoryInfo(this)
+        }
 
-    override val total: Double = runtime.totalMemory().toDouble().times(KB)
+    override val free: Double = meminfo.availMem.toDouble()
 
-    companion object {
-        const val KB = 1024
-    }
+    override val total: Double = meminfo.totalMem.toDouble()
 }

+ 1 - 1
composeApp/src/commonMain/kotlin/org/mjdev/desktop/components/desktop/widgets/MemoryChart.kt

@@ -45,7 +45,7 @@ fun MemoryChart(
             legendPosition = legendPosition
         ) {
             // todo
-            MemInfo().let { mem ->
+            MemInfo(context).let { mem ->
                 val secondValue = mem.free
                 val firstValue = mem.used
                 val secondTitle = freeTitle.plus(": ").plus(mem.free.toMemorySizeReadable())

+ 5 - 1
composeApp/src/commonMain/kotlin/org/mjdev/desktop/helpers/system/meminfo/MemInfo.kt

@@ -1,3 +1,7 @@
 package org.mjdev.desktop.helpers.system.meminfo
 
-expect fun MemInfo() : MemInfoStub
+import org.mjdev.desktop.interfaces.IDesktopContext
+
+expect fun MemInfo(
+    context: IDesktopContext
+) : MemInfoStub

+ 5 - 1
composeApp/src/commonMain/kotlin/org/mjdev/desktop/helpers/system/meminfo/MemInfoStub.kt

@@ -1,6 +1,10 @@
 package org.mjdev.desktop.helpers.system.meminfo
 
-open class MemInfoStub {
+import org.mjdev.desktop.interfaces.IDesktopContext
+
+open class MemInfoStub(
+    val context: IDesktopContext
+) {
     open val free: Double = 100.0
     open val total: Double = 100.0
 

+ 4 - 1
composeApp/src/desktopMain/kotlin/org/mjdev/desktop/helpers/system/meminfo/MemInfo.desktop.kt

@@ -2,8 +2,11 @@ package org.mjdev.desktop.helpers.system.meminfo
 
 import org.jetbrains.skiko.OS
 import org.jetbrains.skiko.hostOs
+import org.mjdev.desktop.interfaces.IDesktopContext
 
-actual fun MemInfo(): MemInfoStub = when (hostOs) {
+actual fun MemInfo(
+    context: IDesktopContext
+): MemInfoStub = when (hostOs) {
     // todo other platforms
     OS.Linux -> MemInfoLinux()
     else -> MemInfoStub()

+ 4 - 1
composeApp/src/desktopMain/kotlin/org/mjdev/desktop/helpers/system/meminfo/MemInfoLinux.kt

@@ -2,8 +2,11 @@ package org.mjdev.desktop.helpers.system.meminfo
 
 import okio.Path.Companion.toPath
 import org.mjdev.desktop.extensions.PathExt.lines
+import org.mjdev.desktop.interfaces.IDesktopContext
 
-class MemInfoLinux: MemInfoStub() {
+class MemInfoLinux(
+    context: IDesktopContext
+): MemInfoStub(context) {
     private val info: List<String> = "/proc/meminfo".toPath().lines
 
     override val free: Double = info.parseLine("MemAvailable").times(KB)

+ 5 - 1
composeApp/src/wasmJsMain/kotlin/org/mjdev/desktop/helpers/system/meminfo/MemInfo.wasmJs.kt

@@ -1,3 +1,7 @@
 package org.mjdev.desktop.helpers.system.meminfo
 
-actual fun MemInfo(): MemInfoStub = MemInfoStub()
+import org.mjdev.desktop.interfaces.IDesktopContext
+
+actual fun MemInfo(
+    context: IDesktopContext
+): MemInfoStub = MemInfoStub(context)