From 5355bcbdf63242d60e238ca220d5e49433481f45 Mon Sep 17 00:00:00 2001 From: ya0211 Date: Wed, 19 Jul 2023 00:00:54 +0800 Subject: [PATCH] Tidy up gojni --- app/src/main/golang/Geomag.go | 2 +- .../sanmer/geomag/{Geomag.kt => GeomagExt.kt} | 18 +++---- .../sanmer/geomag/database/entity/Record.kt | 12 ++--- .../com/sanmer/geomag/datastore/UserData.kt | 8 +-- .../com/sanmer/geomag/model/MagneticField.kt | 51 ------------------- .../sanmer/geomag/model/MagneticFieldExt.kt | 51 +++++++++++++++++++ .../com/sanmer/geomag/model/Position.kt | 14 ++--- .../kotlin/com/sanmer/geomag/model/Record.kt | 10 ++-- .../geomag/model/json/MagneticFieldJson.kt | 4 +- .../geomag/repository/UserDataRepository.kt | 4 +- .../sanmer/geomag/service/CalculateService.kt | 4 +- .../ui/screens/home/items/CalculationItem.kt | 12 ++--- .../viewrecord/items/MagneticFieldItem.kt | 4 +- .../viewrecord/items/RecordInfoItem.kt | 4 +- .../sanmer/geomag/viewmodel/HomeViewModel.kt | 11 ++-- 15 files changed, 103 insertions(+), 106 deletions(-) rename app/src/main/kotlin/com/sanmer/geomag/{Geomag.kt => GeomagExt.kt} (86%) delete mode 100644 app/src/main/kotlin/com/sanmer/geomag/model/MagneticField.kt create mode 100644 app/src/main/kotlin/com/sanmer/geomag/model/MagneticFieldExt.kt diff --git a/app/src/main/golang/Geomag.go b/app/src/main/golang/Geomag.go index 3e21b1d..9d2c211 100644 --- a/app/src/main/golang/Geomag.go +++ b/app/src/main/golang/Geomag.go @@ -1,7 +1,7 @@ package geomag //go:generate bash -c "if [ ! -d libs ]; then mkdir libs; fi" -//go:generate gomobile bind -target android -androidapi 26 -javapkg go -trimpath -v -o libs/geomag.aar +//go:generate gomobile bind -target android -androidapi 26 -javapkg com.sanmer -trimpath -v -o libs/geomag.aar import ( "github.com/proway2/go-igrf/igrf" diff --git a/app/src/main/kotlin/com/sanmer/geomag/Geomag.kt b/app/src/main/kotlin/com/sanmer/geomag/GeomagExt.kt similarity index 86% rename from app/src/main/kotlin/com/sanmer/geomag/Geomag.kt rename to app/src/main/kotlin/com/sanmer/geomag/GeomagExt.kt index 79a6654..cdd9ce0 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/Geomag.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/GeomagExt.kt @@ -1,20 +1,18 @@ package com.sanmer.geomag -import com.sanmer.geomag.model.MagneticField +import com.sanmer.geomag.model.MagneticFieldExt import com.sanmer.geomag.model.Position import com.sanmer.geomag.model.Record -import com.sanmer.geomag.model.toField import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.datetime.LocalDateTime -import go.geomag.Geomag as GoGeomag -object Geomag { +object GeomagExt { private fun toDecimalYears( year: Int, month: Int, day: Int, hour: Int, min: Int, sec: Int, nsec: Int, - ) = GoGeomag.toDecimalYears( + ) = Geomag.toDecimalYears( year.toLong(), month.toLong(), day.toLong(), @@ -29,7 +27,7 @@ object Geomag { longitude: Double, altKm: Double, decimalYears: Double - ) = GoGeomag.igrf( + ) = Geomag.igrf( latitude, longitude, altKm, @@ -41,7 +39,7 @@ object Geomag { longitude: Double, altKm: Double, decimalYears: Double - ) = GoGeomag.wmm( + ) = Geomag.wmm( latitude, longitude, altKm, @@ -62,7 +60,7 @@ object Geomag { longitude = position.longitude, altKm = position.altitude, decimalYears = toDecimalYears(dataTime) - ).toField() + ).let { MagneticFieldExt(it) } fun wmm( dataTime: LocalDateTime, @@ -72,14 +70,14 @@ object Geomag { longitude = position.longitude, altKm = position.altitude, decimalYears = toDecimalYears(dataTime) - ).toField() + ).let { MagneticFieldExt(it) } suspend fun run( model: Models, dataTime: LocalDateTime, position: Position ): Record = withContext(Dispatchers.Default) { - val cal: (LocalDateTime, Position) -> MagneticField = when (model) { + val cal: (LocalDateTime, Position) -> MagneticFieldExt = when (model) { Models.IGRF -> ::igrf Models.WMM -> ::wmm } diff --git a/app/src/main/kotlin/com/sanmer/geomag/database/entity/Record.kt b/app/src/main/kotlin/com/sanmer/geomag/database/entity/Record.kt index 1b0d859..42ef4a3 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/database/entity/Record.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/database/entity/Record.kt @@ -4,8 +4,8 @@ import androidx.room.ColumnInfo import androidx.room.Embedded import androidx.room.Entity import androidx.room.PrimaryKey -import com.sanmer.geomag.Geomag -import com.sanmer.geomag.model.MagneticField +import com.sanmer.geomag.GeomagExt +import com.sanmer.geomag.model.MagneticFieldExt import com.sanmer.geomag.model.Position import com.sanmer.geomag.model.Record import kotlinx.datetime.toLocalDateTime @@ -22,7 +22,7 @@ data class RecordEntity( ) val Record.primaryKey: Double get() { - val decimal = Geomag.toDecimalYears(time) + val decimal = GeomagExt.toDecimalYears(time) val position = position.altitude - position.latitude - position.longitude return decimal + position + model.ordinal } @@ -38,7 +38,7 @@ fun Record.toEntity() = RecordEntity( ) fun RecordEntity.toRecord() = Record( - model = Geomag.Models.valueOf(model), + model = GeomagExt.Models.valueOf(model), time = time.toLocalDateTime(), position = Position( latitude = latitude, @@ -66,7 +66,7 @@ data class MagneticFieldEntity( @ColumnInfo(name = "total_sv") val totalSV: Double ) -fun MagneticField.toEntity() = MagneticFieldEntity( +fun MagneticFieldExt.toEntity() = MagneticFieldEntity( declination, declinationSV, inclination, inclinationSV, horizontalIntensity, horizontalSV, @@ -76,7 +76,7 @@ fun MagneticField.toEntity() = MagneticFieldEntity( totalIntensity, totalSV ) -fun MagneticFieldEntity.toMF() = MagneticField( +fun MagneticFieldEntity.toMF() = MagneticFieldExt( declination, declinationSV, inclination, inclinationSV, horizontalIntensity, horizontalSV, diff --git a/app/src/main/kotlin/com/sanmer/geomag/datastore/UserData.kt b/app/src/main/kotlin/com/sanmer/geomag/datastore/UserData.kt index b1790c3..314cd15 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/datastore/UserData.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/datastore/UserData.kt @@ -2,21 +2,21 @@ package com.sanmer.geomag.datastore import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable -import com.sanmer.geomag.Geomag +import com.sanmer.geomag.GeomagExt import com.sanmer.geomag.app.utils.OsUtils import com.sanmer.geomag.ui.theme.Colors data class UserData( val darkMode: DarkMode, val themeColor: Int, - val fieldModel: Geomag.Models, + val fieldModel: GeomagExt.Models, val enableRecords: Boolean ) { companion object { fun default() = UserData( darkMode = DarkMode.FOLLOW_SYSTEM, themeColor = if (OsUtils.atLeastS) Colors.Dynamic.id else Colors.Sakura.id, - fieldModel = Geomag.Models.IGRF, + fieldModel = GeomagExt.Models.IGRF, enableRecords = true ) } @@ -39,6 +39,6 @@ fun UserData.toPreferences(): UserPreferences = UserPreferences.newBuilder() fun UserPreferences.toUserData() = UserData( darkMode = darkMode, themeColor = themeColor, - fieldModel = Geomag.Models.valueOf(fieldModel), + fieldModel = GeomagExt.Models.valueOf(fieldModel), enableRecords = enableRecords ) \ No newline at end of file diff --git a/app/src/main/kotlin/com/sanmer/geomag/model/MagneticField.kt b/app/src/main/kotlin/com/sanmer/geomag/model/MagneticField.kt deleted file mode 100644 index c1bd0d4..0000000 --- a/app/src/main/kotlin/com/sanmer/geomag/model/MagneticField.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.sanmer.geomag.model - -import go.geomag.MagneticField as GoMagneticField - -data class MagneticField( - val declination: Double, - val declinationSV: Double, - val inclination: Double, - val inclinationSV: Double, - val horizontalIntensity: Double, - val horizontalSV: Double, - val northComponent: Double, - val northSV: Double, - val eastComponent: Double, - val eastSV: Double, - val verticalComponent: Double, - val verticalSV: Double, - val totalIntensity: Double, - val totalSV: Double -) { - companion object { - fun empty() = MagneticField( - 0.0, 0.0, - 0.0, 0.0, - 0.0, 0.0, - 0.0, 0.0, - 0.0, 0.0, - 0.0, 0.0, - 0.0, 0.0 - ) - } -} - -fun GoMagneticField.toField() = MagneticField( - declination = declination, - declinationSV = declinationSV.orZero(), - inclination = inclination, - inclinationSV = inclinationSV.orZero(), - horizontalIntensity = horizontalIntensity, - horizontalSV = horizontalSV.orZero(), - northComponent = northComponent, - northSV = northSV.orZero(), - eastComponent = eastComponent, - eastSV = eastSV.orZero(), - verticalComponent = verticalComponent, - verticalSV = verticalSV.orZero(), - totalIntensity = totalIntensity, - totalSV = totalSV.orZero() -) - -private fun Double.orZero() = if (isNaN()) 0.0 else this diff --git a/app/src/main/kotlin/com/sanmer/geomag/model/MagneticFieldExt.kt b/app/src/main/kotlin/com/sanmer/geomag/model/MagneticFieldExt.kt new file mode 100644 index 0000000..1da6a9d --- /dev/null +++ b/app/src/main/kotlin/com/sanmer/geomag/model/MagneticFieldExt.kt @@ -0,0 +1,51 @@ +package com.sanmer.geomag.model + +import com.sanmer.geomag.MagneticField + +data class MagneticFieldExt( + val declination: Double, + val declinationSV: Double, + val inclination: Double, + val inclinationSV: Double, + val horizontalIntensity: Double, + val horizontalSV: Double, + val northComponent: Double, + val northSV: Double, + val eastComponent: Double, + val eastSV: Double, + val verticalComponent: Double, + val verticalSV: Double, + val totalIntensity: Double, + 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() + ) + + companion object { + fun empty() = MagneticFieldExt( + 0.0, 0.0, + 0.0, 0.0, + 0.0, 0.0, + 0.0, 0.0, + 0.0, 0.0, + 0.0, 0.0, + 0.0, 0.0 + ) + } +} + +private fun Double.orZero() = if (isNaN()) 0.0 else this diff --git a/app/src/main/kotlin/com/sanmer/geomag/model/Position.kt b/app/src/main/kotlin/com/sanmer/geomag/model/Position.kt index bf31c20..5d589c8 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/model/Position.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/model/Position.kt @@ -7,6 +7,12 @@ class Position( val longitude: Double, val altitude: Double ) { + constructor(location: Location) : this( + latitude = location.latitude, + longitude = location.longitude, + altitude = location.altitude / 1000.0 + ) + val latitudeWithUnit get() = "${latitude}º N" val longitudeWithUnit get() = "${longitude}º W" val altitudeWithUnit get() = "$altitude km" @@ -41,10 +47,4 @@ class Position( companion object { fun empty() = Position(0.0, 0.0, 0.0) } -} - -fun Location.toPosition() = Position( - latitude = latitude, - longitude = longitude, - altitude = altitude / 1000.0 -) \ No newline at end of file +} \ No newline at end of file diff --git a/app/src/main/kotlin/com/sanmer/geomag/model/Record.kt b/app/src/main/kotlin/com/sanmer/geomag/model/Record.kt index 9876ee3..cee98d3 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/model/Record.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/model/Record.kt @@ -1,16 +1,16 @@ package com.sanmer.geomag.model -import com.sanmer.geomag.Geomag +import com.sanmer.geomag.GeomagExt import com.sanmer.geomag.utils.expansion.now import com.squareup.moshi.JsonClass import kotlinx.datetime.LocalDateTime @JsonClass(generateAdapter = true) data class Record( - val model: Geomag.Models, + val model: GeomagExt.Models, val time: LocalDateTime, val position: Position, - val values: MagneticField + val values: MagneticFieldExt ) { override fun equals(other: Any?): Boolean { return when (other) { @@ -33,10 +33,10 @@ data class Record( companion object { fun empty() = Record( - model = Geomag.Models.IGRF, + model = GeomagExt.Models.IGRF, time = LocalDateTime.now(), position = Position.empty(), - values = MagneticField.empty() + values = MagneticFieldExt.empty() ) } } diff --git a/app/src/main/kotlin/com/sanmer/geomag/model/json/MagneticFieldJson.kt b/app/src/main/kotlin/com/sanmer/geomag/model/json/MagneticFieldJson.kt index 2b91b0c..8c27797 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/model/json/MagneticFieldJson.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/model/json/MagneticFieldJson.kt @@ -1,6 +1,6 @@ package com.sanmer.geomag.model.json -import com.sanmer.geomag.model.MagneticField +import com.sanmer.geomag.model.MagneticFieldExt import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @@ -22,7 +22,7 @@ data class MagneticFieldJson( @Json(name = "total_sv") val totalSV: Double, ) -fun MagneticField.toJson() = MagneticFieldJson( +fun MagneticFieldExt.toJson() = MagneticFieldJson( declination, declinationSV, inclination, inclinationSV, horizontalIntensity, horizontalSV, diff --git a/app/src/main/kotlin/com/sanmer/geomag/repository/UserDataRepository.kt b/app/src/main/kotlin/com/sanmer/geomag/repository/UserDataRepository.kt index 85631f5..0195d7d 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/repository/UserDataRepository.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/repository/UserDataRepository.kt @@ -1,6 +1,6 @@ package com.sanmer.geomag.repository -import com.sanmer.geomag.Geomag +import com.sanmer.geomag.GeomagExt import com.sanmer.geomag.datastore.DarkMode import com.sanmer.geomag.datastore.UserData import com.sanmer.geomag.datastore.UserPreferencesDataSource @@ -39,7 +39,7 @@ class UserDataRepository @Inject constructor( userPreferencesDataSource.setThemeColor(value) } - fun setFieldModel(value: Geomag.Models) = applicationScope.launch { + fun setFieldModel(value: GeomagExt.Models) = applicationScope.launch { userPreferencesDataSource.setFieldModel(value.name) } diff --git a/app/src/main/kotlin/com/sanmer/geomag/service/CalculateService.kt b/app/src/main/kotlin/com/sanmer/geomag/service/CalculateService.kt index 3349e1a..b2a43e4 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/service/CalculateService.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/service/CalculateService.kt @@ -9,7 +9,7 @@ import androidx.compose.runtime.setValue import androidx.core.app.ServiceCompat import androidx.lifecycle.LifecycleService import androidx.lifecycle.lifecycleScope -import com.sanmer.geomag.Geomag +import com.sanmer.geomag.GeomagExt import com.sanmer.geomag.R import com.sanmer.geomag.app.utils.NotificationUtils import com.sanmer.geomag.model.Position @@ -57,7 +57,7 @@ class CalculateService : LifecycleService() { parameters.sample(1000) .distinctUntilChanged() .onEach { (dataTime, position) -> - currentValue = Geomag.run( + currentValue = GeomagExt.run( model = userData.fieldModel, dataTime = dataTime, position = position, diff --git a/app/src/main/kotlin/com/sanmer/geomag/ui/screens/home/items/CalculationItem.kt b/app/src/main/kotlin/com/sanmer/geomag/ui/screens/home/items/CalculationItem.kt index 697c39a..051a42f 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/ui/screens/home/items/CalculationItem.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/ui/screens/home/items/CalculationItem.kt @@ -30,7 +30,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.sanmer.geomag.BuildConfig -import com.sanmer.geomag.Geomag +import com.sanmer.geomag.GeomagExt import com.sanmer.geomag.R import com.sanmer.geomag.ui.component.DropdownMenu import com.sanmer.geomag.ui.navigation.navigateToCalculate @@ -38,10 +38,10 @@ import com.sanmer.geomag.ui.navigation.navigateToCalculate @Composable fun CalculationItem( isRunning: Boolean, - fieldModel: Geomag.Models, + fieldModel: GeomagExt.Models, navController: NavController, modifier: Modifier = Modifier, - setFieldModel: (Geomag.Models) -> Unit, + setFieldModel: (GeomagExt.Models) -> Unit, singleCalculate: () -> Unit, toggleCalculate: (Context) -> Unit ) = OverviewCard( @@ -90,8 +90,8 @@ fun CalculationItem( @Composable private fun ModelSelect( - selected: Geomag.Models, - onChange: (Geomag.Models) -> Unit, + selected: GeomagExt.Models, + onChange: (GeomagExt.Models) -> Unit, ) { var expanded by remember { mutableStateOf(false) } val animateZ by animateFloatAsState( @@ -127,7 +127,7 @@ private fun ModelSelect( ) } ) { - Geomag.Models.values().forEach { + GeomagExt.Models.values().forEach { MenuItem( value = it.name, selected = selected.name, diff --git a/app/src/main/kotlin/com/sanmer/geomag/ui/screens/records/viewrecord/items/MagneticFieldItem.kt b/app/src/main/kotlin/com/sanmer/geomag/ui/screens/records/viewrecord/items/MagneticFieldItem.kt index ab2d63f..2f0d316 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/ui/screens/records/viewrecord/items/MagneticFieldItem.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/ui/screens/records/viewrecord/items/MagneticFieldItem.kt @@ -13,11 +13,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.sanmer.geomag.R -import com.sanmer.geomag.model.MagneticField +import com.sanmer.geomag.model.MagneticFieldExt @Composable fun MagneticFieldItem( - value: MagneticField, + value: MagneticFieldExt, modifier: Modifier = Modifier ) = OutlinedCard( modifier = modifier, diff --git a/app/src/main/kotlin/com/sanmer/geomag/ui/screens/records/viewrecord/items/RecordInfoItem.kt b/app/src/main/kotlin/com/sanmer/geomag/ui/screens/records/viewrecord/items/RecordInfoItem.kt index bcc01e1..49566e0 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/ui/screens/records/viewrecord/items/RecordInfoItem.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/ui/screens/records/viewrecord/items/RecordInfoItem.kt @@ -12,7 +12,7 @@ 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.Geomag +import com.sanmer.geomag.GeomagExt import com.sanmer.geomag.R import com.sanmer.geomag.model.Record @@ -57,7 +57,7 @@ fun RecordInfoItem( ValueItem( key = stringResource(id = R.string.overview_decimal), - value = Geomag.toDecimalYears(record.time).toString() + value = GeomagExt.toDecimalYears(record.time).toString() ) } } diff --git a/app/src/main/kotlin/com/sanmer/geomag/viewmodel/HomeViewModel.kt b/app/src/main/kotlin/com/sanmer/geomag/viewmodel/HomeViewModel.kt index 180a510..a2f95da 100644 --- a/app/src/main/kotlin/com/sanmer/geomag/viewmodel/HomeViewModel.kt +++ b/app/src/main/kotlin/com/sanmer/geomag/viewmodel/HomeViewModel.kt @@ -11,10 +11,9 @@ import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewModelScope -import com.sanmer.geomag.Geomag +import com.sanmer.geomag.GeomagExt import com.sanmer.geomag.model.Position import com.sanmer.geomag.model.Record -import com.sanmer.geomag.model.toPosition import com.sanmer.geomag.repository.LocalRepository import com.sanmer.geomag.repository.UserDataRepository import com.sanmer.geomag.service.CalculateService @@ -51,7 +50,7 @@ class HomeViewModel @Inject constructor( val isLocationRunning get() = LocationService.isRunning val position by derivedStateOf { - LocationService.location.toPosition() + Position(LocationService.location) } val isCalculateRunning get() = CalculateService.isRunning @@ -63,7 +62,7 @@ class HomeViewModel @Inject constructor( } val userData get() = userDataRepository.userData - fun setFieldModel(value: Geomag.Models) = userDataRepository.setFieldModel(value) + fun setFieldModel(value: GeomagExt.Models) = userDataRepository.setFieldModel(value) fun setEnableRecords(value: Boolean) = userDataRepository.setEnableRecords(value) init { @@ -98,7 +97,7 @@ class HomeViewModel @Inject constructor( val model = userDataRepository.value.fieldModel val enableRecords = userDataRepository.value.enableRecords - _currentValue = Geomag.run( + _currentValue = GeomagExt.run( model = model, dataTime = dateTime, position = position @@ -119,7 +118,7 @@ class HomeViewModel @Inject constructor( companion object { fun now(): DateTime { val value = LocalDateTime.now() - val decimal = Geomag.toDecimalYears(value) + val decimal = GeomagExt.toDecimalYears(value) return DateTime(value, decimal) }