Skip to content
This repository has been archived by the owner on May 19, 2024. It is now read-only.

Commit

Permalink
Use libgeomag-jni
Browse files Browse the repository at this point in the history
  • Loading branch information
SanmerDev committed Nov 2, 2023
1 parent 17b7238 commit ede1441
Show file tree
Hide file tree
Showing 16 changed files with 93 additions and 268 deletions.
21 changes: 0 additions & 21 deletions .github/workflows/android.yml
Expand Up @@ -43,27 +43,6 @@ jobs:
java-version: '17'
architecture: x64

- name: Set up Golang
uses: actions/setup-go@v4
with:
go-version-file: ${{ github.workspace }}/app/src/main/golang/go.mod
cache-dependency-path: ${{ github.workspace }}/app/src/main/golang/go.sum

- name: Set up NDK
uses: nttld/setup-ndk@v1
with:
ndk-version: r26
add-to-path: false
local-cache: true

- name: Build Golang library
run: |
go install golang.org/x/mobile/cmd/gomobile@latest
gomobile init
go generate app/src/main/golang/Geomag.go
env:
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}

- name: Set up Gradle
uses: gradle/gradle-build-action@v2
with:
Expand Down
6 changes: 6 additions & 0 deletions app/build.gradle.kts
Expand Up @@ -81,6 +81,12 @@ android {
}
}

sourceSets {
getByName("main") {
jniLibs.srcDir("src/main/libs")
}
}

splits {
abi {
reset()
Expand Down
6 changes: 6 additions & 0 deletions app/proguard-rules.pro
Expand Up @@ -11,4 +11,10 @@
<fields>;
}

# Keep Native library
-keep class dev.sanmer.geomag.MagneticField { *; }
-keepclassmembers class dev.sanmer.geomag.Geomag {
native <methods>;
}

-repackageclasses com.sanmer.geomag
1 change: 0 additions & 1 deletion app/src/main/golang/.gitignore

This file was deleted.

67 changes: 0 additions & 67 deletions app/src/main/golang/Geomag.go

This file was deleted.

45 changes: 0 additions & 45 deletions app/src/main/golang/MagneticField.go

This file was deleted.

16 changes: 0 additions & 16 deletions app/src/main/golang/go.mod

This file was deleted.

14 changes: 0 additions & 14 deletions app/src/main/golang/go.sum

This file was deleted.

89 changes: 10 additions & 79 deletions app/src/main/kotlin/com/sanmer/geomag/GeomagExt.kt
Expand Up @@ -2,98 +2,29 @@ package com.sanmer.geomag

import com.sanmer.geomag.model.MagneticFieldExt
import com.sanmer.geomag.model.Position
import com.sanmer.geomag.model.Record
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import kotlinx.datetime.LocalDateTime
import dev.sanmer.geomag.Geomag

@Suppress(
"MemberVisibilityCanBePrivate",
"SpellCheckingInspection"
)
object GeomagExt {
private fun toDecimalYears(
year: Int, month: Int, day: Int,
hour: Int, min: Int,
sec: Int, nsec: Int,
) = Geomag.toDecimalYears(
year.toLong(),
month.toLong(),
day.toLong(),
hour.toLong(),
min.toLong(),
sec.toLong(),
nsec.toLong()
)

private fun igrf(
latitude: Double,
longitude: Double,
altKm: Double,
fun igrf(
position: Position,
decimalYears: Double
) = Geomag.igrf(
latitude,
longitude,
altKm,
decimalYears
)

private fun wmm(
latitude: Double,
longitude: Double,
altKm: Double,
decimalYears: Double
) = Geomag.wmm(
latitude,
longitude,
altKm,
decimalYears
)

fun toDecimalYears(dateTime: LocalDateTime) = toDecimalYears(
dateTime.year, dateTime.monthNumber, dateTime.dayOfMonth,
dateTime.hour, dateTime.minute,
dateTime.second, dateTime.nanosecond
)

fun igrf(
dataTime: LocalDateTime,
position: Position
) = igrf(
latitude = position.latitude,
longitude = position.longitude,
altKm = position.altitude,
decimalYears = toDecimalYears(dataTime)
altitude = position.altitude,
decimalYears = decimalYears
).let { MagneticFieldExt(it) }

fun wmm(
dataTime: LocalDateTime,
position: Position
) = wmm(
position: Position,
decimalYears: Double
) = Geomag.wmm(
latitude = position.latitude,
longitude = position.longitude,
altKm = position.altitude,
decimalYears = toDecimalYears(dataTime)
altitude = position.altitude,
decimalYears = decimalYears
).let { MagneticFieldExt(it) }

suspend fun run(
model: Models,
dataTime: LocalDateTime,
position: Position
): Record = withContext(Dispatchers.Default) {
val cal: (LocalDateTime, Position) -> MagneticFieldExt = when (model) {
Models.IGRF -> ::igrf
Models.WMM -> ::wmm
}

return@withContext Record(
model = model,
time = dataTime,
position = position,
values = cal(dataTime, position)
)
}

enum class Models {
IGRF,
WMM
Expand Down
34 changes: 16 additions & 18 deletions app/src/main/kotlin/com/sanmer/geomag/model/MagneticFieldExt.kt
@@ -1,6 +1,6 @@
package com.sanmer.geomag.model

import com.sanmer.geomag.MagneticField
import dev.sanmer.geomag.MagneticField

data class MagneticFieldExt(
val declination: Double,
Expand All @@ -19,20 +19,20 @@ data class MagneticFieldExt(
val totalSV: Double
) {
constructor(field: MagneticField) : this(
declination = field.declination,
declinationSV = field.declinationSV.orZero(),
inclination = field.inclination,
inclinationSV = field.inclinationSV.orZero(),
horizontalIntensity = field.horizontalIntensity,
horizontalSV = field.horizontalSV.orZero(),
northComponent = field.northComponent,
northSV = field.northSV.orZero(),
eastComponent = field.eastComponent,
eastSV = field.eastSV.orZero(),
verticalComponent = field.verticalComponent,
verticalSV = field.verticalSV.orZero(),
totalIntensity = field.totalIntensity,
totalSV = field.totalSV.orZero()
declination = field.d,
declinationSV = field.dDot,
inclination = field.i,
inclinationSV = field.iDot,
horizontalIntensity = field.h,
horizontalSV = field.hDot,
northComponent = field.x,
northSV = field.xDot,
eastComponent = field.y,
eastSV = field.yDot,
verticalComponent = field.z,
verticalSV = field.zDot,
totalIntensity = field.f,
totalSV = field.fDot
)

companion object {
Expand All @@ -46,6 +46,4 @@ data class MagneticFieldExt(
0.0, 0.0
)
}
}

private fun Double.orZero() = if (isNaN()) 0.0 else this
}
Expand Up @@ -12,9 +12,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.sanmer.geomag.GeomagExt
import com.sanmer.geomag.R
import com.sanmer.geomag.model.Record
import dev.sanmer.geomag.Geomag

@Composable
fun RecordInfoItem(
Expand Down Expand Up @@ -57,7 +57,7 @@ fun RecordInfoItem(

ValueItem(
key = stringResource(id = R.string.overview_decimal),
value = GeomagExt.toDecimalYears(record.time).toString()
value = Geomag.toDecimalYears(record.time).toString()
)
}
}
Expand Down

0 comments on commit ede1441

Please sign in to comment.