From 613714cdb4d2e5d12ac5893fb573ad113bf50ea0 Mon Sep 17 00:00:00 2001 From: Phil Oliver <3497406+poliver@users.noreply.github.com> Date: Wed, 24 Sep 2025 16:23:05 -0400 Subject: [PATCH] Modularize database classes (#3192) --- app/build.gradle.kts | 6 +- .../mesh/compose/MessageItemTest.kt | 2 +- .../com/geeksville/mesh/ui/map/MapView.kt | 4 +- .../com/geeksville/mesh/ui/map/MapView.kt | 6 +- .../mesh/database/MeshLogRepository.kt | 4 +- .../mesh/database/NodeRepository.kt | 12 +- .../mesh/database/PacketRepository.kt | 10 +- .../database/QuickChatActionRepository.kt | 31 ++-- .../geeksville/mesh/model/DebugViewModel.kt | 2 +- .../geeksville/mesh/model/MetricsViewModel.kt | 5 +- .../java/com/geeksville/mesh/model/UIState.kt | 11 +- .../api/DeviceHardwareLocalDataSource.kt | 6 +- .../api/DeviceHardwareRepository.kt | 4 +- .../api/FirmwareReleaseLocalDataSource.kt | 10 +- .../api/FirmwareReleaseRepository.kt | 8 +- .../datastore/RadioConfigRepository.kt | 8 +- .../geeksville/mesh/service/MeshService.kt | 12 +- .../mesh/service/MeshServiceNotifications.kt | 2 +- .../geeksville/mesh/service/PacketHandler.kt | 2 +- .../main/java/com/geeksville/mesh/ui/Main.kt | 2 +- .../mesh/ui/common/components/MainAppBar.kt | 2 +- .../components/PositionPrecisionPreference.kt | 4 +- .../mesh/ui/common/components/PreviewUtils.kt | 2 +- .../mesh/ui/common/components/SignalInfo.kt | 2 +- .../preview/NodePreviewParameterProvider.kt | 2 +- .../mesh/ui/connections/ConnectionsScreen.kt | 2 +- .../ui/connections/ConnectionsViewModel.kt | 4 +- .../components/CurrentlyConnectedInfo.kt | 2 +- .../mesh/ui/map/BaseMapViewModel.kt | 4 +- .../com/geeksville/mesh/ui/message/Message.kt | 6 +- .../geeksville/mesh/ui/message/MessageList.kt | 4 +- .../geeksville/mesh/ui/message/QuickChat.kt | 2 +- .../mesh/ui/message/components/MessageItem.kt | 6 +- .../mesh/ui/message/components/Reaction.kt | 134 ++++++------------ .../geeksville/mesh/ui/metrics/PaxMetrics.kt | 2 +- .../geeksville/mesh/ui/metrics/PositionLog.kt | 4 +- .../com/geeksville/mesh/ui/node/NodeDetail.kt | 14 +- .../com/geeksville/mesh/ui/node/NodeScreen.kt | 2 +- .../mesh/ui/node/components/ElevationInfo.kt | 31 +--- .../mesh/ui/node/components/NodeChip.kt | 2 +- .../ui/node/components/NodeFilterTextField.kt | 2 +- .../mesh/ui/node/components/NodeItem.kt | 6 +- .../mesh/ui/node/components/NodeMenu.kt | 4 +- .../mesh/ui/settings/SettingsViewModel.kt | 4 +- .../settings/radio/CleanNodeDatabaseScreen.kt | 2 +- .../radio/CleanNodeDatabaseViewModel.kt | 2 +- .../ui/settings/radio/RadioConfigViewModel.kt | 6 +- .../components/MapReportingPreference.kt | 4 +- .../radio/components/UserConfigItemList.kt | 2 +- .../mesh/ui/sharing/ContactSharing.kt | 2 +- .../kotlin/AndroidLibraryConventionPlugin.kt | 1 + core/database/build.gradle.kts | 39 +++++ .../10.json | 0 .../11.json | 0 .../12.json | 0 .../13.json | 0 .../14.json | 0 .../15.json | 0 .../16.json | 0 .../17.json | 0 .../18.json | 0 .../19.json | 0 .../20.json | 0 .../3.json | 0 .../4.json | 0 .../5.json | 0 .../6.json | 0 .../7.json | 0 .../8.json | 0 .../9.json | 0 .../core/database}/MeshtasticDatabaseTest.kt | 21 ++- .../core/database/dao}/NodeInfoDaoTest.kt | 16 ++- .../core/database/dao}/PacketDaoTest.kt | 11 +- .../meshtastic/core}/database/Converters.kt | 18 +-- .../core}/database/MeshtasticDatabase.kt | 34 ++--- .../core}/database/dao/DeviceHardwareDao.kt | 4 +- .../core}/database/dao/FirmwareReleaseDao.kt | 6 +- .../core}/database/dao/MeshLogDao.kt | 9 +- .../core}/database/dao/NodeInfoDao.kt | 10 +- .../core}/database/dao/PacketDao.kt | 11 +- .../core}/database/dao/QuickChatActionDao.kt | 11 +- .../core/database/di}/DatabaseModule.kt | 54 +++---- .../database/entity/DeviceHardwareEntity.kt | 2 +- .../database/entity/FirmwareReleaseEntity.kt | 2 +- .../core}/database/entity/MeshLog.kt | 20 +-- .../core}/database/entity/MyNodeEntity.kt | 2 +- .../core}/database/entity/NodeEntity.kt | 4 +- .../core}/database/entity/Packet.kt | 8 +- .../core}/database/entity/QuickChatAction.kt | 4 +- .../core/database}/model/Message.kt | 4 +- .../meshtastic/core/database}/model/Node.kt | 6 +- .../core/database}/model/NodeSortOption.kt | 2 +- .../core/model}/util/DistanceExtensions.kt | 87 ++++++------ settings.gradle.kts | 17 ++- 94 files changed, 384 insertions(+), 431 deletions(-) create mode 100644 core/database/build.gradle.kts rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/10.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/11.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/12.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/13.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/14.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/15.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/16.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/17.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/18.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/19.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/20.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/3.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/4.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/5.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/6.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/7.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/8.json (100%) rename {app/schemas/com.geeksville.mesh.database.MeshtasticDatabase => core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase}/9.json (100%) rename {app/src/androidTest/java/com/geeksville/mesh => core/database/src/androidTest/kotlin/org/meshtastic/core/database}/MeshtasticDatabaseTest.kt (78%) rename {app/src/androidTest/java/com/geeksville/mesh => core/database/src/androidTest/kotlin/org/meshtastic/core/database/dao}/NodeInfoDaoTest.kt (96%) rename {app/src/androidTest/java/com/geeksville/mesh => core/database/src/androidTest/kotlin/org/meshtastic/core/database/dao}/PacketDaoTest.kt (94%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/Converters.kt (89%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/MeshtasticDatabase.kt (76%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/dao/DeviceHardwareDao.kt (91%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/dao/FirmwareReleaseDao.kt (88%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/dao/MeshLogDao.kt (92%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/dao/NodeInfoDao.kt (96%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/dao/PacketDao.kt (95%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/dao/QuickChatActionDao.kt (87%) rename {app/src/main/java/com/geeksville/mesh/database => core/database/src/main/kotlin/org/meshtastic/core/database/di}/DatabaseModule.kt (51%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/entity/DeviceHardwareEntity.kt (98%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/entity/FirmwareReleaseEntity.kt (98%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/entity/MeshLog.kt (89%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/entity/MyNodeEntity.kt (97%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/entity/NodeEntity.kt (98%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/entity/Packet.kt (94%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core}/database/entity/QuickChatAction.kt (92%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core/database}/model/Message.kt (97%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core/database}/model/Node.kt (97%) rename {app/src/main/java/com/geeksville/mesh => core/database/src/main/kotlin/org/meshtastic/core/database}/model/NodeSortOption.kt (96%) rename {app/src/main/java/com/geeksville/mesh => core/model/src/main/kotlin/org/meshtastic/core/model}/util/DistanceExtensions.kt (56%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7b37e92d5..a91321d46 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -28,7 +28,6 @@ plugins { alias(libs.plugins.meshtastic.android.application.compose) alias(libs.plugins.meshtastic.android.application.firebase) alias(libs.plugins.meshtastic.hilt) - alias(libs.plugins.meshtastic.android.room) alias(libs.plugins.kotlin.parcelize) alias(libs.plugins.meshtastic.kotlinx.serialization) alias(libs.plugins.devtools.ksp) @@ -146,10 +145,6 @@ android { } bundle { language { enableSplit = false } } buildFeatures { aidl = true } - sourceSets { - // Adds exported schema location as test app assets. - named("androidTest") { assets.srcDirs(files("$projectDir/schemas")) } - } } secrets { @@ -181,6 +176,7 @@ project.afterEvaluate { logger.lifecycle("Version code is set to: ${android.defa dependencies { implementation(projects.core.data) + implementation(projects.core.database) implementation(projects.core.datastore) implementation(projects.core.di) implementation(projects.core.model) diff --git a/app/src/androidTest/java/com/geeksville/mesh/compose/MessageItemTest.kt b/app/src/androidTest/java/com/geeksville/mesh/compose/MessageItemTest.kt index b2833a14a..b3396b43e 100644 --- a/app/src/androidTest/java/com/geeksville/mesh/compose/MessageItemTest.kt +++ b/app/src/androidTest/java/com/geeksville/mesh/compose/MessageItemTest.kt @@ -21,12 +21,12 @@ import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithContentDescription import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.geeksville.mesh.model.Message import com.geeksville.mesh.ui.common.preview.NodePreviewParameterProvider import com.geeksville.mesh.ui.message.components.MessageItem import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.meshtastic.core.database.model.Message import org.meshtastic.core.model.MessageStatus @RunWith(AndroidJUnit4::class) diff --git a/app/src/fdroid/java/com/geeksville/mesh/ui/map/MapView.kt b/app/src/fdroid/java/com/geeksville/mesh/ui/map/MapView.kt index 6e336e564..f7b476818 100644 --- a/app/src/fdroid/java/com/geeksville/mesh/ui/map/MapView.kt +++ b/app/src/fdroid/java/com/geeksville/mesh/ui/map/MapView.kt @@ -67,8 +67,6 @@ import com.geeksville.mesh.android.BuildUtils.debug import com.geeksville.mesh.android.gpsDisabled import com.geeksville.mesh.android.hasGps import com.geeksville.mesh.copy -import com.geeksville.mesh.database.entity.Packet -import com.geeksville.mesh.model.Node import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.ui.map.components.CacheLayout import com.geeksville.mesh.ui.map.components.DownloadButton @@ -82,6 +80,8 @@ import com.geeksville.mesh.waypoint import com.google.accompanist.permissions.ExperimentalPermissionsApi // Added for Accompanist import com.google.accompanist.permissions.rememberMultiplePermissionsState // Added for Accompanist import com.google.android.material.dialog.MaterialAlertDialogBuilder +import org.meshtastic.core.database.entity.Packet +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.util.formatAgo import org.meshtastic.core.strings.R diff --git a/app/src/google/java/com/geeksville/mesh/ui/map/MapView.kt b/app/src/google/java/com/geeksville/mesh/ui/map/MapView.kt index 9fbdfa6fb..6781c22b2 100644 --- a/app/src/google/java/com/geeksville/mesh/ui/map/MapView.kt +++ b/app/src/google/java/com/geeksville/mesh/ui/map/MapView.kt @@ -71,7 +71,6 @@ import com.geeksville.mesh.MeshProtos.Waypoint import com.geeksville.mesh.android.BuildUtils.debug import com.geeksville.mesh.android.BuildUtils.warn import com.geeksville.mesh.copy -import com.geeksville.mesh.model.Node import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.ui.map.components.ClusterItemsListDialog import com.geeksville.mesh.ui.map.components.CustomMapLayersSheet @@ -84,8 +83,6 @@ import com.geeksville.mesh.ui.metrics.HEADING_DEG import com.geeksville.mesh.ui.metrics.formatPositionTime import com.geeksville.mesh.ui.node.DEG_D import com.geeksville.mesh.ui.node.components.NodeChip -import com.geeksville.mesh.util.metersIn -import com.geeksville.mesh.util.toString import com.geeksville.mesh.waypoint import com.google.android.gms.location.LocationCallback import com.google.android.gms.location.LocationRequest @@ -117,9 +114,12 @@ import com.google.maps.android.compose.rememberUpdatedMarkerState import com.google.maps.android.compose.widgets.ScaleBar import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.util.formatAgo +import org.meshtastic.core.model.util.metersIn import org.meshtastic.core.model.util.mpsToKmph import org.meshtastic.core.model.util.mpsToMph +import org.meshtastic.core.model.util.toString import org.meshtastic.core.strings.R import timber.log.Timber import java.text.DateFormat diff --git a/app/src/main/java/com/geeksville/mesh/database/MeshLogRepository.kt b/app/src/main/java/com/geeksville/mesh/database/MeshLogRepository.kt index a503958d3..24255e54a 100644 --- a/app/src/main/java/com/geeksville/mesh/database/MeshLogRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/database/MeshLogRepository.kt @@ -22,14 +22,14 @@ import com.geeksville.mesh.MeshProtos import com.geeksville.mesh.MeshProtos.MeshPacket import com.geeksville.mesh.Portnums import com.geeksville.mesh.TelemetryProtos.Telemetry -import com.geeksville.mesh.database.dao.MeshLogDao -import com.geeksville.mesh.database.entity.MeshLog import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.conflate import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.withContext +import org.meshtastic.core.database.dao.MeshLogDao +import org.meshtastic.core.database.entity.MeshLog import javax.inject.Inject @Suppress("TooManyFunctions") diff --git a/app/src/main/java/com/geeksville/mesh/database/NodeRepository.kt b/app/src/main/java/com/geeksville/mesh/database/NodeRepository.kt index 460ce6bf3..5b9bc9887 100644 --- a/app/src/main/java/com/geeksville/mesh/database/NodeRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/database/NodeRepository.kt @@ -21,12 +21,6 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.coroutineScope import com.geeksville.mesh.CoroutineDispatchers import com.geeksville.mesh.MeshProtos -import com.geeksville.mesh.database.dao.NodeInfoDao -import com.geeksville.mesh.database.entity.MetadataEntity -import com.geeksville.mesh.database.entity.MyNodeEntity -import com.geeksville.mesh.database.entity.NodeEntity -import com.geeksville.mesh.model.Node -import com.geeksville.mesh.model.NodeSortOption import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -38,6 +32,12 @@ import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.withContext +import org.meshtastic.core.database.dao.NodeInfoDao +import org.meshtastic.core.database.entity.MetadataEntity +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.entity.NodeEntity +import org.meshtastic.core.database.model.Node +import org.meshtastic.core.database.model.NodeSortOption import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.util.onlineTimeThreshold import javax.inject.Inject diff --git a/app/src/main/java/com/geeksville/mesh/database/PacketRepository.kt b/app/src/main/java/com/geeksville/mesh/database/PacketRepository.kt index 733fe6220..685330fd1 100644 --- a/app/src/main/java/com/geeksville/mesh/database/PacketRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/database/PacketRepository.kt @@ -18,15 +18,15 @@ package com.geeksville.mesh.database import com.geeksville.mesh.Portnums.PortNum -import com.geeksville.mesh.database.dao.PacketDao -import com.geeksville.mesh.database.entity.ContactSettings -import com.geeksville.mesh.database.entity.Packet -import com.geeksville.mesh.database.entity.ReactionEntity -import com.geeksville.mesh.model.Node import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.withContext +import org.meshtastic.core.database.dao.PacketDao +import org.meshtastic.core.database.entity.ContactSettings +import org.meshtastic.core.database.entity.Packet +import org.meshtastic.core.database.entity.ReactionEntity +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.MessageStatus import javax.inject.Inject diff --git a/app/src/main/java/com/geeksville/mesh/database/QuickChatActionRepository.kt b/app/src/main/java/com/geeksville/mesh/database/QuickChatActionRepository.kt index 2f60898af..40f136bdd 100644 --- a/app/src/main/java/com/geeksville/mesh/database/QuickChatActionRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/database/QuickChatActionRepository.kt @@ -18,35 +18,28 @@ package com.geeksville.mesh.database import com.geeksville.mesh.CoroutineDispatchers -import com.geeksville.mesh.database.dao.QuickChatActionDao -import com.geeksville.mesh.database.entity.QuickChatAction import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.withContext +import org.meshtastic.core.database.dao.QuickChatActionDao +import org.meshtastic.core.database.entity.QuickChatAction import javax.inject.Inject -class QuickChatActionRepository @Inject constructor( +class QuickChatActionRepository +@Inject +constructor( private val quickChatDaoLazy: dagger.Lazy, private val dispatchers: CoroutineDispatchers, ) { - private val quickChatActionDao by lazy { - quickChatDaoLazy.get() - } + private val quickChatActionDao by lazy { quickChatDaoLazy.get() } fun getAllActions() = quickChatActionDao.getAll().flowOn(dispatchers.io) - suspend fun upsert(action: QuickChatAction) = withContext(dispatchers.io) { - quickChatActionDao.upsert(action) - } + suspend fun upsert(action: QuickChatAction) = withContext(dispatchers.io) { quickChatActionDao.upsert(action) } - suspend fun deleteAll() = withContext(dispatchers.io) { - quickChatActionDao.deleteAll() - } + suspend fun deleteAll() = withContext(dispatchers.io) { quickChatActionDao.deleteAll() } - suspend fun delete(action: QuickChatAction) = withContext(dispatchers.io) { - quickChatActionDao.delete(action) - } + suspend fun delete(action: QuickChatAction) = withContext(dispatchers.io) { quickChatActionDao.delete(action) } - suspend fun setItemPosition(uuid: Long, newPos: Int) = withContext(dispatchers.io) { - quickChatActionDao.updateActionPosition(uuid, newPos) - } -} \ No newline at end of file + suspend fun setItemPosition(uuid: Long, newPos: Int) = + withContext(dispatchers.io) { quickChatActionDao.updateActionPosition(uuid, newPos) } +} diff --git a/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt b/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt index 459657434..dcd5a10f1 100644 --- a/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt @@ -28,7 +28,6 @@ import com.geeksville.mesh.StoreAndForwardProtos import com.geeksville.mesh.TelemetryProtos import com.geeksville.mesh.android.Logging import com.geeksville.mesh.database.MeshLogRepository -import com.geeksville.mesh.database.entity.MeshLog import com.geeksville.mesh.repository.datastore.RadioConfigRepository import com.geeksville.mesh.ui.debug.FilterMode import com.google.protobuf.InvalidProtocolBufferException @@ -45,6 +44,7 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch +import org.meshtastic.core.database.entity.MeshLog import java.text.DateFormat import java.util.Date import java.util.Locale diff --git a/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt b/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt index 4b300952b..143573832 100644 --- a/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/model/MetricsViewModel.kt @@ -36,8 +36,6 @@ import com.geeksville.mesh.Portnums.PortNum import com.geeksville.mesh.TelemetryProtos.Telemetry import com.geeksville.mesh.android.Logging import com.geeksville.mesh.database.MeshLogRepository -import com.geeksville.mesh.database.entity.FirmwareRelease -import com.geeksville.mesh.database.entity.MeshLog import com.geeksville.mesh.repository.api.DeviceHardwareRepository import com.geeksville.mesh.repository.api.FirmwareReleaseRepository import com.geeksville.mesh.repository.datastore.RadioConfigRepository @@ -58,6 +56,9 @@ import kotlinx.coroutines.flow.toList import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.meshtastic.core.database.entity.FirmwareRelease +import org.meshtastic.core.database.entity.MeshLog +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.DeviceHardware import org.meshtastic.core.navigation.NodesRoutes diff --git a/app/src/main/java/com/geeksville/mesh/model/UIState.kt b/app/src/main/java/com/geeksville/mesh/model/UIState.kt index 0786d9316..80ecda051 100644 --- a/app/src/main/java/com/geeksville/mesh/model/UIState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/UIState.kt @@ -46,10 +46,6 @@ import com.geeksville.mesh.database.MeshLogRepository import com.geeksville.mesh.database.NodeRepository import com.geeksville.mesh.database.PacketRepository import com.geeksville.mesh.database.QuickChatActionRepository -import com.geeksville.mesh.database.entity.MyNodeEntity -import com.geeksville.mesh.database.entity.Packet -import com.geeksville.mesh.database.entity.QuickChatAction -import com.geeksville.mesh.database.entity.asDeviceVersion import com.geeksville.mesh.repository.api.DeviceHardwareRepository import com.geeksville.mesh.repository.api.FirmwareReleaseRepository import com.geeksville.mesh.repository.datastore.RadioConfigRepository @@ -78,6 +74,13 @@ import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.entity.Packet +import org.meshtastic.core.database.entity.QuickChatAction +import org.meshtastic.core.database.entity.asDeviceVersion +import org.meshtastic.core.database.model.Message +import org.meshtastic.core.database.model.Node +import org.meshtastic.core.database.model.NodeSortOption import org.meshtastic.core.datastore.UiPreferencesDataSource import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.DeviceHardware diff --git a/app/src/main/java/com/geeksville/mesh/repository/api/DeviceHardwareLocalDataSource.kt b/app/src/main/java/com/geeksville/mesh/repository/api/DeviceHardwareLocalDataSource.kt index d2d84685e..8450f87ee 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/api/DeviceHardwareLocalDataSource.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/api/DeviceHardwareLocalDataSource.kt @@ -17,11 +17,11 @@ package com.geeksville.mesh.repository.api -import com.geeksville.mesh.database.dao.DeviceHardwareDao -import com.geeksville.mesh.database.entity.DeviceHardwareEntity -import com.geeksville.mesh.database.entity.asEntity import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import org.meshtastic.core.database.dao.DeviceHardwareDao +import org.meshtastic.core.database.entity.DeviceHardwareEntity +import org.meshtastic.core.database.entity.asEntity import org.meshtastic.core.model.NetworkDeviceHardware import javax.inject.Inject diff --git a/app/src/main/java/com/geeksville/mesh/repository/api/DeviceHardwareRepository.kt b/app/src/main/java/com/geeksville/mesh/repository/api/DeviceHardwareRepository.kt index f8104f565..c2d107427 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/api/DeviceHardwareRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/api/DeviceHardwareRepository.kt @@ -19,10 +19,10 @@ package com.geeksville.mesh.repository.api import com.geeksville.mesh.android.BuildUtils.debug import com.geeksville.mesh.android.BuildUtils.warn -import com.geeksville.mesh.database.entity.DeviceHardwareEntity -import com.geeksville.mesh.database.entity.asExternalModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import org.meshtastic.core.database.entity.DeviceHardwareEntity +import org.meshtastic.core.database.entity.asExternalModel import org.meshtastic.core.model.DeviceHardware import org.meshtastic.core.network.DeviceHardwareRemoteDataSource import java.util.concurrent.TimeUnit diff --git a/app/src/main/java/com/geeksville/mesh/repository/api/FirmwareReleaseLocalDataSource.kt b/app/src/main/java/com/geeksville/mesh/repository/api/FirmwareReleaseLocalDataSource.kt index 2ae85d41f..471151e8e 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/api/FirmwareReleaseLocalDataSource.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/api/FirmwareReleaseLocalDataSource.kt @@ -17,14 +17,14 @@ package com.geeksville.mesh.repository.api -import com.geeksville.mesh.database.dao.FirmwareReleaseDao -import com.geeksville.mesh.database.entity.FirmwareReleaseEntity -import com.geeksville.mesh.database.entity.FirmwareReleaseType -import com.geeksville.mesh.database.entity.asDeviceVersion -import com.geeksville.mesh.database.entity.asEntity import dagger.Lazy import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import org.meshtastic.core.database.dao.FirmwareReleaseDao +import org.meshtastic.core.database.entity.FirmwareReleaseEntity +import org.meshtastic.core.database.entity.FirmwareReleaseType +import org.meshtastic.core.database.entity.asDeviceVersion +import org.meshtastic.core.database.entity.asEntity import org.meshtastic.core.model.NetworkFirmwareRelease import javax.inject.Inject diff --git a/app/src/main/java/com/geeksville/mesh/repository/api/FirmwareReleaseRepository.kt b/app/src/main/java/com/geeksville/mesh/repository/api/FirmwareReleaseRepository.kt index 656759599..2c2efa1c7 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/api/FirmwareReleaseRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/api/FirmwareReleaseRepository.kt @@ -19,12 +19,12 @@ package com.geeksville.mesh.repository.api import com.geeksville.mesh.android.BuildUtils.debug import com.geeksville.mesh.android.BuildUtils.warn -import com.geeksville.mesh.database.entity.FirmwareRelease -import com.geeksville.mesh.database.entity.FirmwareReleaseEntity -import com.geeksville.mesh.database.entity.FirmwareReleaseType -import com.geeksville.mesh.database.entity.asExternalModel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow +import org.meshtastic.core.database.entity.FirmwareRelease +import org.meshtastic.core.database.entity.FirmwareReleaseEntity +import org.meshtastic.core.database.entity.FirmwareReleaseType +import org.meshtastic.core.database.entity.asExternalModel import org.meshtastic.core.network.FirmwareReleaseRemoteDataSource import java.util.concurrent.TimeUnit import javax.inject.Inject diff --git a/app/src/main/java/com/geeksville/mesh/repository/datastore/RadioConfigRepository.kt b/app/src/main/java/com/geeksville/mesh/repository/datastore/RadioConfigRepository.kt index 6bb7fa328..6db1f4274 100644 --- a/app/src/main/java/com/geeksville/mesh/repository/datastore/RadioConfigRepository.kt +++ b/app/src/main/java/com/geeksville/mesh/repository/datastore/RadioConfigRepository.kt @@ -30,11 +30,7 @@ import com.geeksville.mesh.MeshProtos.DeviceMetadata import com.geeksville.mesh.MeshProtos.MeshPacket import com.geeksville.mesh.ModuleConfigProtos.ModuleConfig import com.geeksville.mesh.database.NodeRepository -import com.geeksville.mesh.database.entity.MetadataEntity -import com.geeksville.mesh.database.entity.MyNodeEntity -import com.geeksville.mesh.database.entity.NodeEntity import com.geeksville.mesh.deviceProfile -import com.geeksville.mesh.model.Node import com.geeksville.mesh.model.getChannelUrl import com.geeksville.mesh.service.ConnectionState import com.geeksville.mesh.service.ServiceAction @@ -45,6 +41,10 @@ import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.first +import org.meshtastic.core.database.entity.MetadataEntity +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.entity.NodeEntity +import org.meshtastic.core.database.model.Node import org.meshtastic.core.datastore.ChannelSetDataSource import org.meshtastic.core.datastore.LocalConfigDataSource import org.meshtastic.core.datastore.ModuleConfigDataSource diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt index 32424bb79..d22729a5a 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshService.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshService.kt @@ -56,14 +56,8 @@ import com.geeksville.mesh.concurrent.handledLaunch import com.geeksville.mesh.copy import com.geeksville.mesh.database.MeshLogRepository import com.geeksville.mesh.database.PacketRepository -import com.geeksville.mesh.database.entity.MeshLog -import com.geeksville.mesh.database.entity.MyNodeEntity -import com.geeksville.mesh.database.entity.NodeEntity -import com.geeksville.mesh.database.entity.Packet -import com.geeksville.mesh.database.entity.ReactionEntity import com.geeksville.mesh.fromRadio import com.geeksville.mesh.model.NO_DEVICE_SELECTED -import com.geeksville.mesh.model.Node import com.geeksville.mesh.position import com.geeksville.mesh.repository.datastore.RadioConfigRepository import com.geeksville.mesh.repository.location.LocationRepository @@ -90,6 +84,12 @@ import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import org.meshtastic.core.database.entity.MeshLog +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.entity.NodeEntity +import org.meshtastic.core.database.entity.Packet +import org.meshtastic.core.database.entity.ReactionEntity +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.DeviceVersion import org.meshtastic.core.model.MeshUser diff --git a/app/src/main/java/com/geeksville/mesh/service/MeshServiceNotifications.kt b/app/src/main/java/com/geeksville/mesh/service/MeshServiceNotifications.kt index 78b8ca6e2..ea0206730 100644 --- a/app/src/main/java/com/geeksville/mesh/service/MeshServiceNotifications.kt +++ b/app/src/main/java/com/geeksville/mesh/service/MeshServiceNotifications.kt @@ -38,8 +38,8 @@ import com.geeksville.mesh.MainActivity import com.geeksville.mesh.MeshProtos import com.geeksville.mesh.R.raw import com.geeksville.mesh.TelemetryProtos.LocalStats -import com.geeksville.mesh.database.entity.NodeEntity import com.geeksville.mesh.service.ReplyReceiver.Companion.KEY_TEXT_REPLY +import org.meshtastic.core.database.entity.NodeEntity import org.meshtastic.core.model.util.formatUptime import org.meshtastic.core.navigation.DEEP_LINK_BASE_URI import org.meshtastic.core.strings.R diff --git a/app/src/main/java/com/geeksville/mesh/service/PacketHandler.kt b/app/src/main/java/com/geeksville/mesh/service/PacketHandler.kt index 4a4572d0e..bc9506bc2 100644 --- a/app/src/main/java/com/geeksville/mesh/service/PacketHandler.kt +++ b/app/src/main/java/com/geeksville/mesh/service/PacketHandler.kt @@ -26,7 +26,6 @@ import com.geeksville.mesh.android.BuildUtils.info import com.geeksville.mesh.concurrent.handledLaunch import com.geeksville.mesh.database.MeshLogRepository import com.geeksville.mesh.database.PacketRepository -import com.geeksville.mesh.database.entity.MeshLog import com.geeksville.mesh.fromRadio import com.geeksville.mesh.repository.radio.RadioInterfaceService import dagger.Lazy @@ -36,6 +35,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.withTimeoutOrNull +import org.meshtastic.core.database.entity.MeshLog import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.MessageStatus import org.meshtastic.core.model.util.toOneLineString diff --git a/app/src/main/java/com/geeksville/mesh/ui/Main.kt b/app/src/main/java/com/geeksville/mesh/ui/Main.kt index 588ad8723..eb0c08e03 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/Main.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/Main.kt @@ -80,7 +80,6 @@ import com.geeksville.mesh.android.AddNavigationTracking import com.geeksville.mesh.android.BuildUtils.debug import com.geeksville.mesh.android.setAttributes import com.geeksville.mesh.model.BTScanModel -import com.geeksville.mesh.model.Node import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.navigation.channelsGraph import com.geeksville.mesh.navigation.connectionsGraph @@ -111,6 +110,7 @@ import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.rememberPermissionState import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DeviceVersion import org.meshtastic.core.navigation.ConnectionsRoutes import org.meshtastic.core.navigation.ContactsRoutes diff --git a/app/src/main/java/com/geeksville/mesh/ui/common/components/MainAppBar.kt b/app/src/main/java/com/geeksville/mesh/ui/common/components/MainAppBar.kt index 27d528ffd..5fe4696b3 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/common/components/MainAppBar.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/common/components/MainAppBar.kt @@ -46,7 +46,6 @@ import androidx.navigation.NavDestination import androidx.navigation.NavDestination.Companion.hasRoute import androidx.navigation.NavHostController import androidx.navigation.compose.currentBackStackEntryAsState -import com.geeksville.mesh.model.Node import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.navigation.isConfigRoute import com.geeksville.mesh.navigation.isNodeDetailRoute @@ -55,6 +54,7 @@ import com.geeksville.mesh.ui.common.theme.AppTheme import com.geeksville.mesh.ui.debug.DebugMenuActions import com.geeksville.mesh.ui.node.components.NodeChip import com.geeksville.mesh.ui.node.components.NodeMenuAction +import org.meshtastic.core.database.model.Node import org.meshtastic.core.navigation.ContactsRoutes import org.meshtastic.core.navigation.NodesRoutes import org.meshtastic.core.navigation.SettingsRoutes diff --git a/app/src/main/java/com/geeksville/mesh/ui/common/components/PositionPrecisionPreference.kt b/app/src/main/java/com/geeksville/mesh/ui/common/components/PositionPrecisionPreference.kt index 685b42d7e..b29f06ab2 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/common/components/PositionPrecisionPreference.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/common/components/PositionPrecisionPreference.kt @@ -31,8 +31,8 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.geeksville.mesh.util.DistanceUnit -import com.geeksville.mesh.util.toDistanceString +import org.meshtastic.core.model.util.DistanceUnit +import org.meshtastic.core.model.util.toDistanceString import org.meshtastic.core.strings.R import kotlin.math.pow import kotlin.math.roundToInt diff --git a/app/src/main/java/com/geeksville/mesh/ui/common/components/PreviewUtils.kt b/app/src/main/java/com/geeksville/mesh/ui/common/components/PreviewUtils.kt index dcfbfa94c..1671181c8 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/common/components/PreviewUtils.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/common/components/PreviewUtils.kt @@ -23,7 +23,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider import com.geeksville.mesh.MeshProtos import com.geeksville.mesh.PaxcountProtos import com.geeksville.mesh.TelemetryProtos -import com.geeksville.mesh.model.Node +import org.meshtastic.core.database.model.Node /** Simple [PreviewParameterProvider] that provides true and false values. */ class BooleanProvider : PreviewParameterProvider { diff --git a/app/src/main/java/com/geeksville/mesh/ui/common/components/SignalInfo.kt b/app/src/main/java/com/geeksville/mesh/ui/common/components/SignalInfo.kt index 909621563..e58a89acb 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/common/components/SignalInfo.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/common/components/SignalInfo.kt @@ -26,9 +26,9 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewParameter -import com.geeksville.mesh.model.Node import com.geeksville.mesh.ui.common.preview.NodePreviewParameterProvider import com.geeksville.mesh.ui.common.theme.AppTheme +import org.meshtastic.core.database.model.Node import org.meshtastic.core.strings.R const val MAX_VALID_SNR = 100F diff --git a/app/src/main/java/com/geeksville/mesh/ui/common/preview/NodePreviewParameterProvider.kt b/app/src/main/java/com/geeksville/mesh/ui/common/preview/NodePreviewParameterProvider.kt index 4b02ce5d0..56f2bb882 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/common/preview/NodePreviewParameterProvider.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/common/preview/NodePreviewParameterProvider.kt @@ -22,11 +22,11 @@ import com.geeksville.mesh.ConfigProtos import com.geeksville.mesh.MeshProtos import com.geeksville.mesh.deviceMetrics import com.geeksville.mesh.environmentMetrics -import com.geeksville.mesh.model.Node import com.geeksville.mesh.paxcount import com.geeksville.mesh.position import com.geeksville.mesh.user import com.google.protobuf.ByteString +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DeviceMetrics.Companion.currentTime import kotlin.random.Random diff --git a/app/src/main/java/com/geeksville/mesh/ui/connections/ConnectionsScreen.kt b/app/src/main/java/com/geeksville/mesh/ui/connections/ConnectionsScreen.kt index a5fc3832d..a487893c9 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/connections/ConnectionsScreen.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/connections/ConnectionsScreen.kt @@ -62,7 +62,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.geeksville.mesh.ConfigProtos import com.geeksville.mesh.model.BTScanModel import com.geeksville.mesh.model.DeviceListEntry -import com.geeksville.mesh.model.Node import com.geeksville.mesh.navigation.ConfigRoute import com.geeksville.mesh.navigation.getNavRouteFrom import com.geeksville.mesh.service.ConnectionState @@ -80,6 +79,7 @@ import com.geeksville.mesh.ui.settings.radio.components.PacketResponseStateDialo import com.geeksville.mesh.ui.sharing.SharedContactDialog import com.google.accompanist.permissions.ExperimentalPermissionsApi import kotlinx.coroutines.delay +import org.meshtastic.core.database.model.Node import org.meshtastic.core.navigation.Route import org.meshtastic.core.navigation.SettingsRoutes import org.meshtastic.core.strings.R diff --git a/app/src/main/java/com/geeksville/mesh/ui/connections/ConnectionsViewModel.kt b/app/src/main/java/com/geeksville/mesh/ui/connections/ConnectionsViewModel.kt index 67d21df88..1a41aa0bf 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/connections/ConnectionsViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/connections/ConnectionsViewModel.kt @@ -21,8 +21,6 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.geeksville.mesh.LocalOnlyProtos.LocalConfig import com.geeksville.mesh.database.NodeRepository -import com.geeksville.mesh.database.entity.MyNodeEntity -import com.geeksville.mesh.model.Node import com.geeksville.mesh.repository.bluetooth.BluetoothRepository import com.geeksville.mesh.repository.datastore.RadioConfigRepository import dagger.hilt.android.lifecycle.HiltViewModel @@ -31,6 +29,8 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.stateIn +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.model.Node import org.meshtastic.core.prefs.ui.UiPrefs import javax.inject.Inject diff --git a/app/src/main/java/com/geeksville/mesh/ui/connections/components/CurrentlyConnectedInfo.kt b/app/src/main/java/com/geeksville/mesh/ui/connections/components/CurrentlyConnectedInfo.kt index 1b7058a30..afa31b8c4 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/connections/components/CurrentlyConnectedInfo.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/connections/components/CurrentlyConnectedInfo.kt @@ -43,12 +43,12 @@ import androidx.compose.ui.unit.dp import com.geeksville.mesh.MeshProtos import com.geeksville.mesh.PaxcountProtos import com.geeksville.mesh.TelemetryProtos -import com.geeksville.mesh.model.Node import com.geeksville.mesh.ui.common.components.MaterialBatteryInfo import com.geeksville.mesh.ui.common.theme.AppTheme import com.geeksville.mesh.ui.common.theme.StatusColors.StatusRed import com.geeksville.mesh.ui.node.components.NodeChip import com.geeksville.mesh.ui.node.components.NodeMenuAction +import org.meshtastic.core.database.model.Node import org.meshtastic.core.strings.R @Composable diff --git a/app/src/main/java/com/geeksville/mesh/ui/map/BaseMapViewModel.kt b/app/src/main/java/com/geeksville/mesh/ui/map/BaseMapViewModel.kt index 29e1c92c4..c0e4d33e2 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/map/BaseMapViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/map/BaseMapViewModel.kt @@ -21,8 +21,6 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.geeksville.mesh.database.NodeRepository import com.geeksville.mesh.database.PacketRepository -import com.geeksville.mesh.database.entity.Packet -import com.geeksville.mesh.model.Node import com.geeksville.mesh.repository.datastore.RadioConfigRepository import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -31,6 +29,8 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.stateIn +import org.meshtastic.core.database.entity.Packet +import org.meshtastic.core.database.model.Node import org.meshtastic.core.prefs.map.MapPrefs @Suppress("TooManyFunctions") diff --git a/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt b/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt index 135a47fd0..779e38bfa 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/message/Message.kt @@ -95,9 +95,6 @@ import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.geeksville.mesh.AppOnlyProtos -import com.geeksville.mesh.database.entity.QuickChatAction -import com.geeksville.mesh.model.Message -import com.geeksville.mesh.model.Node import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.model.getChannel import com.geeksville.mesh.ui.common.components.SecurityIcon @@ -107,6 +104,9 @@ import com.geeksville.mesh.ui.node.components.NodeMenuAction import com.geeksville.mesh.ui.sharing.SharedContactDialog import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch +import org.meshtastic.core.database.entity.QuickChatAction +import org.meshtastic.core.database.model.Message +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DataPacket import org.meshtastic.core.strings.R import java.nio.charset.StandardCharsets diff --git a/app/src/main/java/com/geeksville/mesh/ui/message/MessageList.kt b/app/src/main/java/com/geeksville/mesh/ui/message/MessageList.kt index e0ab6fadc..1dd81329f 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/message/MessageList.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/message/MessageList.kt @@ -47,8 +47,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import com.geeksville.mesh.database.entity.Reaction -import com.geeksville.mesh.model.Message import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.ui.message.components.MessageItem import com.geeksville.mesh.ui.message.components.ReactionDialog @@ -57,6 +55,8 @@ import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.launch +import org.meshtastic.core.database.entity.Reaction +import org.meshtastic.core.database.model.Message import org.meshtastic.core.model.MessageStatus import org.meshtastic.core.strings.R diff --git a/app/src/main/java/com/geeksville/mesh/ui/message/QuickChat.kt b/app/src/main/java/com/geeksville/mesh/ui/message/QuickChat.kt index 93733c863..b19c3364e 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/message/QuickChat.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/message/QuickChat.kt @@ -70,12 +70,12 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import com.geeksville.mesh.database.entity.QuickChatAction import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.ui.common.components.dragContainer import com.geeksville.mesh.ui.common.components.dragDropItemsIndexed import com.geeksville.mesh.ui.common.components.rememberDragDropState import com.geeksville.mesh.ui.common.theme.AppTheme +import org.meshtastic.core.database.entity.QuickChatAction import org.meshtastic.core.strings.R @Composable diff --git a/app/src/main/java/com/geeksville/mesh/ui/message/components/MessageItem.kt b/app/src/main/java/com/geeksville/mesh/ui/message/components/MessageItem.kt index f4ffc2861..3ba1a6f92 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/message/components/MessageItem.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/message/components/MessageItem.kt @@ -49,9 +49,6 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp -import com.geeksville.mesh.database.entity.Reaction -import com.geeksville.mesh.model.Message -import com.geeksville.mesh.model.Node import com.geeksville.mesh.ui.common.components.MDText import com.geeksville.mesh.ui.common.components.Rssi import com.geeksville.mesh.ui.common.components.Snr @@ -60,6 +57,9 @@ import com.geeksville.mesh.ui.common.theme.AppTheme import com.geeksville.mesh.ui.common.theme.MessageItemColors import com.geeksville.mesh.ui.node.components.NodeChip import com.geeksville.mesh.ui.node.components.NodeMenuAction +import org.meshtastic.core.database.entity.Reaction +import org.meshtastic.core.database.model.Message +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.MessageStatus import org.meshtastic.core.strings.R diff --git a/app/src/main/java/com/geeksville/mesh/ui/message/components/Reaction.kt b/app/src/main/java/com/geeksville/mesh/ui/message/components/Reaction.kt index 4742a4461..4ff95f2f3 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/message/components/Reaction.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/message/components/Reaction.kt @@ -52,44 +52,25 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import com.geeksville.mesh.MeshProtos -import com.geeksville.mesh.database.entity.Reaction import com.geeksville.mesh.ui.common.components.BottomSheetDialog import com.geeksville.mesh.ui.common.theme.AppTheme +import org.meshtastic.core.database.entity.Reaction @Composable -private fun ReactionItem( - emoji: String, - emojiCount: Int = 1, - onClick: () -> Unit = {}, - onLongClick: () -> Unit = {}, -) { +private fun ReactionItem(emoji: String, emojiCount: Int = 1, onClick: () -> Unit = {}, onLongClick: () -> Unit = {}) { BadgedBox( badge = { if (emojiCount > 1) { - Badge { - Text( - fontWeight = FontWeight.Bold, - text = emojiCount.toString() - ) - } + Badge { Text(fontWeight = FontWeight.Bold, text = emojiCount.toString()) } } - } + }, ) { Surface( - modifier = Modifier - .combinedClickable( - onClick = onClick, - onLongClick = onLongClick - ), + modifier = Modifier.combinedClickable(onClick = onClick, onLongClick = onLongClick), color = MaterialTheme.colorScheme.primaryContainer, shape = CircleShape, ) { - Text( - text = emoji, - modifier = Modifier - .padding(4.dp) - .clip(CircleShape), - ) + Text(text = emoji, modifier = Modifier.padding(4.dp).clip(CircleShape)) } } } @@ -102,10 +83,7 @@ fun ReactionRow( onSendReaction: (String) -> Unit = {}, onShowReactions: () -> Unit = {}, ) { - val emojiList = - reduceEmojis( - reactions.reversed().map { it.emoji } - ).entries + val emojiList = reduceEmojis(reactions.reversed().map { it.emoji }).entries AnimatedVisibility(emojiList.isNotEmpty()) { LazyRow( @@ -113,16 +91,12 @@ fun ReactionRow( horizontalArrangement = Arrangement.Start, verticalAlignment = Alignment.CenterVertically, ) { - items( - emojiList.size - ) { index -> + items(emojiList.size) { index -> val entry = emojiList.elementAt(index) ReactionItem( emoji = entry.key, emojiCount = entry.value, - onClick = { - onSendReaction(entry.key) - }, + onClick = { onSendReaction(entry.key) }, onLongClick = onShowReactions, ) } @@ -133,68 +107,47 @@ fun ReactionRow( fun reduceEmojis(emojis: List): Map = emojis.groupingBy { it }.eachCount() @Composable -fun ReactionDialog( - reactions: List, - onDismiss: () -> Unit = {} -) = BottomSheetDialog( - onDismiss = onDismiss, - modifier = Modifier.fillMaxHeight(fraction = .3f), -) { - val groupedEmojis = reactions.groupBy { it.emoji } - var selectedEmoji by remember { mutableStateOf(null) } - val filteredReactions = selectedEmoji?.let { groupedEmojis[it] ?: emptyList() } ?: reactions +fun ReactionDialog(reactions: List, onDismiss: () -> Unit = {}) = + BottomSheetDialog(onDismiss = onDismiss, modifier = Modifier.fillMaxHeight(fraction = .3f)) { + val groupedEmojis = reactions.groupBy { it.emoji } + var selectedEmoji by remember { mutableStateOf(null) } + val filteredReactions = selectedEmoji?.let { groupedEmojis[it] ?: emptyList() } ?: reactions - LazyRow( - horizontalArrangement = Arrangement.spacedBy(8.dp), - modifier = Modifier.fillMaxWidth() - ) { - items(groupedEmojis.entries.toList()) { (emoji, reactions) -> - Text( - text = "$emoji${reactions.size}", - modifier = Modifier - .clip(CircleShape) - .background(if (selectedEmoji == emoji) Color.Gray else Color.Transparent) - .padding(8.dp) - .clickable { - selectedEmoji = if (selectedEmoji == emoji) null else emoji - }, - style = MaterialTheme.typography.bodyMedium - ) - } - } - - HorizontalDivider(Modifier.padding(vertical = 8.dp)) - - LazyColumn( - modifier = Modifier.fillMaxWidth(), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - items(filteredReactions) { reaction -> - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically, - ) { + LazyRow(horizontalArrangement = Arrangement.spacedBy(8.dp), modifier = Modifier.fillMaxWidth()) { + items(groupedEmojis.entries.toList()) { (emoji, reactions) -> Text( - text = reaction.user.longName, - style = MaterialTheme.typography.titleMedium - ) - Text( - text = reaction.emoji, - style = MaterialTheme.typography.titleLarge + text = "$emoji${reactions.size}", + modifier = + Modifier.clip(CircleShape) + .background(if (selectedEmoji == emoji) Color.Gray else Color.Transparent) + .padding(8.dp) + .clickable { selectedEmoji = if (selectedEmoji == emoji) null else emoji }, + style = MaterialTheme.typography.bodyMedium, ) } } + + HorizontalDivider(Modifier.padding(vertical = 8.dp)) + + LazyColumn(modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(12.dp)) { + items(filteredReactions) { reaction -> + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + ) { + Text(text = reaction.user.longName, style = MaterialTheme.typography.titleMedium) + Text(text = reaction.emoji, style = MaterialTheme.typography.titleLarge) + } + } + } } -} @PreviewLightDark @Composable fun ReactionItemPreview() { AppTheme { - Column( - modifier = Modifier.background(MaterialTheme.colorScheme.background) - ) { + Column(modifier = Modifier.background(MaterialTheme.colorScheme.background)) { ReactionItem(emoji = "\uD83D\uDE42") ReactionItem(emoji = "\uD83D\uDE42", emojiCount = 2) ReactionButton() @@ -207,20 +160,21 @@ fun ReactionItemPreview() { fun ReactionRowPreview() { AppTheme { ReactionRow( - reactions = listOf( + reactions = + listOf( Reaction( replyId = 1, user = MeshProtos.User.getDefaultInstance(), emoji = "\uD83D\uDE42", - timestamp = 1L + timestamp = 1L, ), Reaction( replyId = 1, user = MeshProtos.User.getDefaultInstance(), emoji = "\uD83D\uDE42", - timestamp = 1L + timestamp = 1L, ), - ) + ), ) } } diff --git a/app/src/main/java/com/geeksville/mesh/ui/metrics/PaxMetrics.kt b/app/src/main/java/com/geeksville/mesh/ui/metrics/PaxMetrics.kt index 59c4ae12b..9b16b99dd 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/metrics/PaxMetrics.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/metrics/PaxMetrics.kt @@ -55,11 +55,11 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.geeksville.mesh.PaxcountProtos import com.geeksville.mesh.Portnums.PortNum -import com.geeksville.mesh.database.entity.MeshLog import com.geeksville.mesh.model.MetricsViewModel import com.geeksville.mesh.model.TimeFrame import com.geeksville.mesh.ui.common.components.OptionLabel import com.geeksville.mesh.ui.common.components.SlidingSelector +import org.meshtastic.core.database.entity.MeshLog import org.meshtastic.core.model.util.formatUptime import org.meshtastic.core.strings.R import java.text.DateFormat diff --git a/app/src/main/java/com/geeksville/mesh/ui/metrics/PositionLog.kt b/app/src/main/java/com/geeksville/mesh/ui/metrics/PositionLog.kt index ce55d38a1..7b0dec73f 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/metrics/PositionLog.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/metrics/PositionLog.kt @@ -65,8 +65,8 @@ import com.geeksville.mesh.ConfigProtos.Config.DisplayConfig.DisplayUnits import com.geeksville.mesh.MeshProtos import com.geeksville.mesh.model.MetricsViewModel import com.geeksville.mesh.ui.common.theme.AppTheme -import com.geeksville.mesh.util.metersIn -import com.geeksville.mesh.util.toString +import org.meshtastic.core.model.util.metersIn +import org.meshtastic.core.model.util.toString import org.meshtastic.core.strings.R import java.text.DateFormat import kotlin.time.Duration.Companion.days diff --git a/app/src/main/java/com/geeksville/mesh/ui/node/NodeDetail.kt b/app/src/main/java/com/geeksville/mesh/ui/node/NodeDetail.kt index fda74269f..3302752ad 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/node/NodeDetail.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/node/NodeDetail.kt @@ -123,13 +123,9 @@ import coil3.compose.AsyncImage import coil3.request.ImageRequest import com.geeksville.mesh.ConfigProtos import com.geeksville.mesh.MeshProtos -import com.geeksville.mesh.database.entity.FirmwareRelease -import com.geeksville.mesh.database.entity.asDeviceVersion import com.geeksville.mesh.model.MetricsState import com.geeksville.mesh.model.MetricsViewModel -import com.geeksville.mesh.model.Node import com.geeksville.mesh.model.UIViewModel -import com.geeksville.mesh.model.isUnmessageableRole import com.geeksville.mesh.service.ServiceAction import com.geeksville.mesh.ui.common.components.MainAppBar import com.geeksville.mesh.ui.common.components.TitledCard @@ -147,10 +143,11 @@ import com.geeksville.mesh.ui.settings.components.SettingsItemDetail import com.geeksville.mesh.ui.settings.components.SettingsItemSwitch import com.geeksville.mesh.ui.sharing.SharedContactDialog import com.geeksville.mesh.util.thenIf -import com.geeksville.mesh.util.toDistanceString -import com.geeksville.mesh.util.toSmallDistanceString -import com.geeksville.mesh.util.toSpeedString import com.mikepenz.markdown.m3.Markdown +import org.meshtastic.core.database.entity.FirmwareRelease +import org.meshtastic.core.database.entity.asDeviceVersion +import org.meshtastic.core.database.model.Node +import org.meshtastic.core.database.model.isUnmessageableRole import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.DeviceHardware import org.meshtastic.core.model.DeviceVersion @@ -158,6 +155,9 @@ import org.meshtastic.core.model.util.UnitConversions import org.meshtastic.core.model.util.UnitConversions.toTempString import org.meshtastic.core.model.util.formatAgo import org.meshtastic.core.model.util.formatUptime +import org.meshtastic.core.model.util.toDistanceString +import org.meshtastic.core.model.util.toSmallDistanceString +import org.meshtastic.core.model.util.toSpeedString import org.meshtastic.core.navigation.NodeDetailRoutes import org.meshtastic.core.navigation.Route import org.meshtastic.core.navigation.SettingsRoutes diff --git a/app/src/main/java/com/geeksville/mesh/ui/node/NodeScreen.kt b/app/src/main/java/com/geeksville/mesh/ui/node/NodeScreen.kt index b70d4ebf2..d4b6a1c4d 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/node/NodeScreen.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/node/NodeScreen.kt @@ -46,7 +46,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import com.geeksville.mesh.model.Node import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.service.ConnectionState import com.geeksville.mesh.ui.common.components.MainAppBar @@ -57,6 +56,7 @@ import com.geeksville.mesh.ui.node.components.NodeMenuAction import com.geeksville.mesh.ui.sharing.AddContactFAB import com.geeksville.mesh.ui.sharing.SharedContactDialog import com.geeksville.mesh.ui.sharing.supportsQrCodeSharing +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.DeviceVersion import org.meshtastic.core.strings.R diff --git a/app/src/main/java/com/geeksville/mesh/ui/node/components/ElevationInfo.kt b/app/src/main/java/com/geeksville/mesh/ui/node/components/ElevationInfo.kt index 1db3a962e..bfbdb1015 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/node/components/ElevationInfo.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/node/components/ElevationInfo.kt @@ -25,40 +25,21 @@ import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import com.geeksville.mesh.ConfigProtos.Config.DisplayConfig.DisplayUnits -import com.geeksville.mesh.util.metersIn -import com.geeksville.mesh.util.toString +import org.meshtastic.core.model.util.metersIn +import org.meshtastic.core.model.util.toString @Composable -fun ElevationInfo( - modifier: Modifier = Modifier, - altitude: Int, - system: DisplayUnits, - suffix: String -) { +fun ElevationInfo(modifier: Modifier = Modifier, altitude: Int, system: DisplayUnits, suffix: String) { val annotatedString = buildAnnotatedString { append(altitude.metersIn(system).toString(system)) - MaterialTheme.typography.labelSmall.toSpanStyle().let { style -> - withStyle(style) { - append(" $suffix") - } - } + MaterialTheme.typography.labelSmall.toSpanStyle().let { style -> withStyle(style) { append(" $suffix") } } } - Text( - modifier = modifier, - fontSize = MaterialTheme.typography.labelLarge.fontSize, - text = annotatedString, - ) + Text(modifier = modifier, fontSize = MaterialTheme.typography.labelLarge.fontSize, text = annotatedString) } @Composable @Preview fun ElevationInfoPreview() { - MaterialTheme { - ElevationInfo( - altitude = 100, - system = DisplayUnits.METRIC, - suffix = "ASL" - ) - } + MaterialTheme { ElevationInfo(altitude = 100, system = DisplayUnits.METRIC, suffix = "ASL") } } diff --git a/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeChip.kt b/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeChip.kt index 6292af982..5ba9516d1 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeChip.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeChip.kt @@ -44,7 +44,7 @@ import androidx.compose.ui.unit.dp import com.geeksville.mesh.MeshProtos import com.geeksville.mesh.PaxcountProtos import com.geeksville.mesh.TelemetryProtos -import com.geeksville.mesh.model.Node +import org.meshtastic.core.database.model.Node @Composable fun NodeChip( diff --git a/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeFilterTextField.kt b/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeFilterTextField.kt index 185f4691f..6bd2a0ebb 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeFilterTextField.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeFilterTextField.kt @@ -56,9 +56,9 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp -import com.geeksville.mesh.model.NodeSortOption import com.geeksville.mesh.ui.common.preview.LargeFontPreview import com.geeksville.mesh.ui.common.theme.AppTheme +import org.meshtastic.core.database.model.NodeSortOption import org.meshtastic.core.strings.R @Suppress("LongParameterList") diff --git a/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeItem.kt b/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeItem.kt index 47558ce5e..a6a7e225d 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeItem.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeItem.kt @@ -51,13 +51,13 @@ import androidx.compose.ui.unit.dp import com.geeksville.mesh.ConfigProtos.Config.DeviceConfig import com.geeksville.mesh.ConfigProtos.Config.DisplayConfig import com.geeksville.mesh.MeshProtos -import com.geeksville.mesh.model.Node -import com.geeksville.mesh.model.isUnmessageableRole import com.geeksville.mesh.ui.common.components.BatteryInfo import com.geeksville.mesh.ui.common.components.SignalInfo import com.geeksville.mesh.ui.common.preview.NodePreviewParameterProvider import com.geeksville.mesh.ui.common.theme.AppTheme -import com.geeksville.mesh.util.toDistanceString +import org.meshtastic.core.database.model.Node +import org.meshtastic.core.database.model.isUnmessageableRole +import org.meshtastic.core.model.util.toDistanceString import org.meshtastic.core.strings.R @Suppress("LongMethod", "CyclomaticComplexMethod") diff --git a/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeMenu.kt b/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeMenu.kt index a4aa56d4b..f06a6e88c 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeMenu.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/node/components/NodeMenu.kt @@ -38,9 +38,9 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import com.geeksville.mesh.model.Node -import com.geeksville.mesh.model.isUnmessageableRole import com.geeksville.mesh.ui.common.components.SimpleAlertDialog +import org.meshtastic.core.database.model.Node +import org.meshtastic.core.database.model.isUnmessageableRole import org.meshtastic.core.strings.R @Suppress("LongMethod") diff --git a/app/src/main/java/com/geeksville/mesh/ui/settings/SettingsViewModel.kt b/app/src/main/java/com/geeksville/mesh/ui/settings/SettingsViewModel.kt index 5cbc25605..36c469331 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/settings/SettingsViewModel.kt @@ -28,8 +28,6 @@ import com.geeksville.mesh.Portnums import com.geeksville.mesh.android.Logging import com.geeksville.mesh.database.MeshLogRepository import com.geeksville.mesh.database.NodeRepository -import com.geeksville.mesh.database.entity.MyNodeEntity -import com.geeksville.mesh.model.Node import com.geeksville.mesh.repository.datastore.RadioConfigRepository import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers @@ -45,6 +43,8 @@ import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.model.Node import org.meshtastic.core.datastore.UiPreferencesDataSource import org.meshtastic.core.model.Position import org.meshtastic.core.model.util.positionToMeter diff --git a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/CleanNodeDatabaseScreen.kt b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/CleanNodeDatabaseScreen.kt index c8365d926..de87030c9 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/CleanNodeDatabaseScreen.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/CleanNodeDatabaseScreen.kt @@ -46,8 +46,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel -import com.geeksville.mesh.database.entity.NodeEntity import com.geeksville.mesh.ui.node.components.NodeChip +import org.meshtastic.core.database.entity.NodeEntity import org.meshtastic.core.strings.R /** diff --git a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/CleanNodeDatabaseViewModel.kt b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/CleanNodeDatabaseViewModel.kt index f2aa1c2e0..2a75b3242 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/CleanNodeDatabaseViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/CleanNodeDatabaseViewModel.kt @@ -20,12 +20,12 @@ package com.geeksville.mesh.ui.settings.radio import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.geeksville.mesh.database.NodeRepository -import com.geeksville.mesh.database.entity.NodeEntity import com.geeksville.mesh.repository.datastore.RadioConfigRepository import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch +import org.meshtastic.core.database.entity.NodeEntity import javax.inject.Inject import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.milliseconds diff --git a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/RadioConfigViewModel.kt b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/RadioConfigViewModel.kt index 78de37887..1cf4a7792 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/RadioConfigViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/RadioConfigViewModel.kt @@ -45,11 +45,8 @@ import com.geeksville.mesh.android.GeeksvilleApplication import com.geeksville.mesh.android.Logging import com.geeksville.mesh.android.isAnalyticsAvailable import com.geeksville.mesh.config -import com.geeksville.mesh.database.entity.MyNodeEntity import com.geeksville.mesh.deviceProfile -import com.geeksville.mesh.model.Node import com.geeksville.mesh.model.getChannelList -import com.geeksville.mesh.model.getStringResFrom import com.geeksville.mesh.model.toChannelSet import com.geeksville.mesh.moduleConfig import com.geeksville.mesh.navigation.ConfigRoute @@ -73,6 +70,9 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.json.JSONObject +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.model.Node +import org.meshtastic.core.database.model.getStringResFrom import org.meshtastic.core.model.Position import org.meshtastic.core.navigation.SettingsRoutes import org.meshtastic.core.prefs.analytics.AnalyticsPrefs diff --git a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/MapReportingPreference.kt b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/MapReportingPreference.kt index 1e95261ae..3f25efd56 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/MapReportingPreference.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/MapReportingPreference.kt @@ -43,8 +43,8 @@ import androidx.compose.ui.unit.dp import com.geeksville.mesh.ui.common.components.EditTextPreference import com.geeksville.mesh.ui.common.components.SwitchPreference import com.geeksville.mesh.ui.common.components.precisionBitsToMeters -import com.geeksville.mesh.util.DistanceUnit -import com.geeksville.mesh.util.toDistanceString +import org.meshtastic.core.model.util.DistanceUnit +import org.meshtastic.core.model.util.toDistanceString import org.meshtastic.core.strings.R import kotlin.math.roundToInt diff --git a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/UserConfigItemList.kt b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/UserConfigItemList.kt index ea574cba3..b1102879e 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/UserConfigItemList.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/settings/radio/components/UserConfigItemList.kt @@ -30,12 +30,12 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavController import com.geeksville.mesh.copy -import com.geeksville.mesh.model.isUnmessageableRole import com.geeksville.mesh.ui.common.components.EditTextPreference import com.geeksville.mesh.ui.common.components.PreferenceCategory import com.geeksville.mesh.ui.common.components.RegularPreference import com.geeksville.mesh.ui.common.components.SwitchPreference import com.geeksville.mesh.ui.settings.radio.RadioConfigViewModel +import org.meshtastic.core.database.model.isUnmessageableRole import org.meshtastic.core.model.DeviceVersion import org.meshtastic.core.strings.R diff --git a/app/src/main/java/com/geeksville/mesh/ui/sharing/ContactSharing.kt b/app/src/main/java/com/geeksville/mesh/ui/sharing/ContactSharing.kt index d0966fd58..e87053532 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/sharing/ContactSharing.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/sharing/ContactSharing.kt @@ -54,7 +54,6 @@ import com.geeksville.mesh.AdminProtos import com.geeksville.mesh.MeshProtos import com.geeksville.mesh.android.BuildUtils.debug import com.geeksville.mesh.android.BuildUtils.errormsg -import com.geeksville.mesh.model.Node import com.geeksville.mesh.model.UIViewModel import com.geeksville.mesh.ui.common.components.CopyIconButton import com.geeksville.mesh.ui.common.components.SimpleAlertDialog @@ -69,6 +68,7 @@ import com.google.zxing.WriterException import com.journeyapps.barcodescanner.BarcodeEncoder import com.journeyapps.barcodescanner.ScanContract import com.journeyapps.barcodescanner.ScanOptions +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DeviceVersion import org.meshtastic.core.strings.R import timber.log.Timber diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index e5c43e9e7..cf3e0b57a 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -50,6 +50,7 @@ class AndroidLibraryConventionPlugin : Plugin { } dependencies { "androidTestImplementation"(libs.findLibrary("kotlin.test").get()) + "androidTestImplementation"(libs.findBundle("testing.android").get()) "testImplementation"(libs.findLibrary("kotlin.test").get()) } diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts new file mode 100644 index 000000000..df4748020 --- /dev/null +++ b/core/database/build.gradle.kts @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2025 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +plugins { + alias(libs.plugins.meshtastic.android.library) + alias(libs.plugins.meshtastic.android.room) + alias(libs.plugins.meshtastic.hilt) + alias(libs.plugins.meshtastic.kotlinx.serialization) +} + +android { + namespace = "org.meshtastic.core.database" + sourceSets { + // Adds exported schema location as test app assets. + named("androidTest") { assets.srcDirs(files("$projectDir/schemas")) } + } +} + +dependencies { + implementation(projects.core.model) + implementation(projects.core.proto) + implementation(projects.core.strings) + implementation(libs.kotlinx.serialization.json) + implementation(libs.timber) +} diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/10.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/10.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/10.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/10.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/11.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/11.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/11.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/11.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/12.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/12.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/12.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/12.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/13.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/13.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/13.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/13.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/14.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/14.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/14.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/14.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/15.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/15.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/15.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/15.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/16.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/16.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/16.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/16.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/17.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/17.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/17.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/17.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/18.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/18.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/18.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/18.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/19.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/19.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/19.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/19.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/20.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/20.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/20.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/20.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/3.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/3.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/3.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/3.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/4.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/4.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/4.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/4.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/5.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/5.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/5.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/5.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/6.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/6.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/6.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/6.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/7.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/7.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/7.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/7.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/8.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/8.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/8.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/8.json diff --git a/app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/9.json b/core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/9.json similarity index 100% rename from app/schemas/com.geeksville.mesh.database.MeshtasticDatabase/9.json rename to core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/9.json diff --git a/app/src/androidTest/java/com/geeksville/mesh/MeshtasticDatabaseTest.kt b/core/database/src/androidTest/kotlin/org/meshtastic/core/database/MeshtasticDatabaseTest.kt similarity index 78% rename from app/src/androidTest/java/com/geeksville/mesh/MeshtasticDatabaseTest.kt rename to core/database/src/androidTest/kotlin/org/meshtastic/core/database/MeshtasticDatabaseTest.kt index 153c8f45a..c1eb8f840 100644 --- a/app/src/androidTest/java/com/geeksville/mesh/MeshtasticDatabaseTest.kt +++ b/core/database/src/androidTest/kotlin/org/meshtastic/core/database/MeshtasticDatabaseTest.kt @@ -15,13 +15,12 @@ * along with this program. If not, see . */ -package com.geeksville.mesh +package org.meshtastic.core.database import androidx.room.Room import androidx.room.testing.MigrationTestHelper import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry -import com.geeksville.mesh.database.MeshtasticDatabase import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -35,27 +34,23 @@ class MeshtasticDatabaseTest { } @get:Rule - val helper: MigrationTestHelper = MigrationTestHelper( - InstrumentationRegistry.getInstrumentation(), - MeshtasticDatabase::class.java, - ) + val helper: MigrationTestHelper = + MigrationTestHelper(InstrumentationRegistry.getInstrumentation(), MeshtasticDatabase::class.java) @Test @Throws(IOException::class) fun migrateAll() { // Create earliest version of the database. - helper.createDatabase(TEST_DB, 3).apply { - close() - } + helper.createDatabase(TEST_DB, 3).apply { close() } // Open latest version of the database. Room validates the schema // once all migrations execute. Room.databaseBuilder( InstrumentationRegistry.getInstrumentation().targetContext, MeshtasticDatabase::class.java, - TEST_DB - ).build().apply { - openHelper.writableDatabase.close() - } + TEST_DB, + ) + .build() + .apply { openHelper.writableDatabase.close() } } } diff --git a/app/src/androidTest/java/com/geeksville/mesh/NodeInfoDaoTest.kt b/core/database/src/androidTest/kotlin/org/meshtastic/core/database/dao/NodeInfoDaoTest.kt similarity index 96% rename from app/src/androidTest/java/com/geeksville/mesh/NodeInfoDaoTest.kt rename to core/database/src/androidTest/kotlin/org/meshtastic/core/database/dao/NodeInfoDaoTest.kt index c90bcc3ac..94640dde5 100644 --- a/app/src/androidTest/java/com/geeksville/mesh/NodeInfoDaoTest.kt +++ b/core/database/src/androidTest/kotlin/org/meshtastic/core/database/dao/NodeInfoDaoTest.kt @@ -15,17 +15,14 @@ * along with this program. If not, see . */ -package com.geeksville.mesh +package org.meshtastic.core.database.dao import androidx.room.Room import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry -import com.geeksville.mesh.database.MeshtasticDatabase -import com.geeksville.mesh.database.dao.NodeInfoDao -import com.geeksville.mesh.database.entity.MyNodeEntity -import com.geeksville.mesh.database.entity.NodeEntity -import com.geeksville.mesh.model.Node -import com.geeksville.mesh.model.NodeSortOption +import com.geeksville.mesh.MeshProtos +import com.geeksville.mesh.copy +import com.geeksville.mesh.user import com.google.protobuf.ByteString import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map @@ -37,6 +34,11 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.meshtastic.core.database.MeshtasticDatabase +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.entity.NodeEntity +import org.meshtastic.core.database.model.Node +import org.meshtastic.core.database.model.NodeSortOption import org.meshtastic.core.model.util.onlineTimeThreshold @RunWith(AndroidJUnit4::class) diff --git a/app/src/androidTest/java/com/geeksville/mesh/PacketDaoTest.kt b/core/database/src/androidTest/kotlin/org/meshtastic/core/database/dao/PacketDaoTest.kt similarity index 94% rename from app/src/androidTest/java/com/geeksville/mesh/PacketDaoTest.kt rename to core/database/src/androidTest/kotlin/org/meshtastic/core/database/dao/PacketDaoTest.kt index f2e05090f..83ac79e9c 100644 --- a/app/src/androidTest/java/com/geeksville/mesh/PacketDaoTest.kt +++ b/core/database/src/androidTest/kotlin/org/meshtastic/core/database/dao/PacketDaoTest.kt @@ -15,16 +15,12 @@ * along with this program. If not, see . */ -package com.geeksville.mesh +package org.meshtastic.core.database.dao import androidx.room.Room import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry -import com.geeksville.mesh.database.MeshtasticDatabase -import com.geeksville.mesh.database.dao.NodeInfoDao -import com.geeksville.mesh.database.dao.PacketDao -import com.geeksville.mesh.database.entity.MyNodeEntity -import com.geeksville.mesh.database.entity.Packet +import com.geeksville.mesh.Portnums import kotlinx.coroutines.flow.first import kotlinx.coroutines.runBlocking import org.junit.After @@ -33,6 +29,9 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.meshtastic.core.database.MeshtasticDatabase +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.entity.Packet import org.meshtastic.core.model.DataPacket @RunWith(AndroidJUnit4::class) diff --git a/app/src/main/java/com/geeksville/mesh/database/Converters.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/Converters.kt similarity index 89% rename from app/src/main/java/com/geeksville/mesh/database/Converters.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/Converters.kt index e5b54db6a..c75b869a0 100644 --- a/app/src/main/java/com/geeksville/mesh/database/Converters.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/Converters.kt @@ -15,20 +15,20 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database +package org.meshtastic.core.database import androidx.room.TypeConverter import com.geeksville.mesh.MeshProtos import com.geeksville.mesh.PaxcountProtos import com.geeksville.mesh.TelemetryProtos -import com.geeksville.mesh.android.Logging import com.google.protobuf.ByteString import com.google.protobuf.InvalidProtocolBufferException import kotlinx.serialization.json.Json import org.meshtastic.core.model.DataPacket +import timber.log.Timber @Suppress("TooManyFunctions") -class Converters : Logging { +class Converters { @TypeConverter fun dataFromString(value: String): DataPacket { val json = Json { isLenient = true } @@ -45,7 +45,7 @@ class Converters : Logging { fun bytesToFromRadio(bytes: ByteArray): MeshProtos.FromRadio = try { MeshProtos.FromRadio.parseFrom(bytes) } catch (ex: InvalidProtocolBufferException) { - errormsg("bytesToFromRadio TypeConverter error:", ex) + Timber.e(ex, "bytesToFromRadio TypeConverter error") MeshProtos.FromRadio.getDefaultInstance() } @@ -55,7 +55,7 @@ class Converters : Logging { fun bytesToUser(bytes: ByteArray): MeshProtos.User = try { MeshProtos.User.parseFrom(bytes) } catch (ex: InvalidProtocolBufferException) { - errormsg("bytesToUser TypeConverter error:", ex) + Timber.e(ex, "bytesToUser TypeConverter error") MeshProtos.User.getDefaultInstance() } @@ -65,7 +65,7 @@ class Converters : Logging { fun bytesToPosition(bytes: ByteArray): MeshProtos.Position = try { MeshProtos.Position.parseFrom(bytes) } catch (ex: InvalidProtocolBufferException) { - errormsg("bytesToPosition TypeConverter error:", ex) + Timber.e(ex, "bytesToPosition TypeConverter error") MeshProtos.Position.getDefaultInstance() } @@ -75,7 +75,7 @@ class Converters : Logging { fun bytesToTelemetry(bytes: ByteArray): TelemetryProtos.Telemetry = try { TelemetryProtos.Telemetry.parseFrom(bytes) } catch (ex: InvalidProtocolBufferException) { - errormsg("bytesToTelemetry TypeConverter error:", ex) + Timber.e(ex, "bytesToTelemetry TypeConverter error") TelemetryProtos.Telemetry.newBuilder().build() // Return an empty Telemetry object } @@ -85,7 +85,7 @@ class Converters : Logging { fun bytesToPaxcounter(bytes: ByteArray): PaxcountProtos.Paxcount = try { PaxcountProtos.Paxcount.parseFrom(bytes) } catch (ex: InvalidProtocolBufferException) { - errormsg("bytesToPaxcounter TypeConverter error:", ex) + Timber.e(ex, "bytesToPaxcounter TypeConverter error") PaxcountProtos.Paxcount.getDefaultInstance() } @@ -95,7 +95,7 @@ class Converters : Logging { fun bytesToMetadata(bytes: ByteArray): MeshProtos.DeviceMetadata = try { MeshProtos.DeviceMetadata.parseFrom(bytes) } catch (ex: InvalidProtocolBufferException) { - errormsg("bytesToMetadata TypeConverter error:", ex) + Timber.e(ex, "bytesToMetadata TypeConverter error") MeshProtos.DeviceMetadata.getDefaultInstance() } diff --git a/app/src/main/java/com/geeksville/mesh/database/MeshtasticDatabase.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/MeshtasticDatabase.kt similarity index 76% rename from app/src/main/java/com/geeksville/mesh/database/MeshtasticDatabase.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/MeshtasticDatabase.kt index 3f639f4e2..89f4870b1 100644 --- a/app/src/main/java/com/geeksville/mesh/database/MeshtasticDatabase.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/MeshtasticDatabase.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database +package org.meshtastic.core.database import android.content.Context import androidx.room.AutoMigration @@ -25,22 +25,22 @@ import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.TypeConverters import androidx.room.migration.AutoMigrationSpec -import com.geeksville.mesh.database.dao.DeviceHardwareDao -import com.geeksville.mesh.database.dao.FirmwareReleaseDao -import com.geeksville.mesh.database.dao.MeshLogDao -import com.geeksville.mesh.database.dao.NodeInfoDao -import com.geeksville.mesh.database.dao.PacketDao -import com.geeksville.mesh.database.dao.QuickChatActionDao -import com.geeksville.mesh.database.entity.ContactSettings -import com.geeksville.mesh.database.entity.DeviceHardwareEntity -import com.geeksville.mesh.database.entity.FirmwareReleaseEntity -import com.geeksville.mesh.database.entity.MeshLog -import com.geeksville.mesh.database.entity.MetadataEntity -import com.geeksville.mesh.database.entity.MyNodeEntity -import com.geeksville.mesh.database.entity.NodeEntity -import com.geeksville.mesh.database.entity.Packet -import com.geeksville.mesh.database.entity.QuickChatAction -import com.geeksville.mesh.database.entity.ReactionEntity +import org.meshtastic.core.database.dao.DeviceHardwareDao +import org.meshtastic.core.database.dao.FirmwareReleaseDao +import org.meshtastic.core.database.dao.MeshLogDao +import org.meshtastic.core.database.dao.NodeInfoDao +import org.meshtastic.core.database.dao.PacketDao +import org.meshtastic.core.database.dao.QuickChatActionDao +import org.meshtastic.core.database.entity.ContactSettings +import org.meshtastic.core.database.entity.DeviceHardwareEntity +import org.meshtastic.core.database.entity.FirmwareReleaseEntity +import org.meshtastic.core.database.entity.MeshLog +import org.meshtastic.core.database.entity.MetadataEntity +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.entity.NodeEntity +import org.meshtastic.core.database.entity.Packet +import org.meshtastic.core.database.entity.QuickChatAction +import org.meshtastic.core.database.entity.ReactionEntity @Database( entities = diff --git a/app/src/main/java/com/geeksville/mesh/database/dao/DeviceHardwareDao.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/DeviceHardwareDao.kt similarity index 91% rename from app/src/main/java/com/geeksville/mesh/database/dao/DeviceHardwareDao.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/dao/DeviceHardwareDao.kt index 6650abadf..8138e7c42 100644 --- a/app/src/main/java/com/geeksville/mesh/database/dao/DeviceHardwareDao.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/DeviceHardwareDao.kt @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.dao +package org.meshtastic.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query -import com.geeksville.mesh.database.entity.DeviceHardwareEntity +import org.meshtastic.core.database.entity.DeviceHardwareEntity @Dao interface DeviceHardwareDao { diff --git a/app/src/main/java/com/geeksville/mesh/database/dao/FirmwareReleaseDao.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/FirmwareReleaseDao.kt similarity index 88% rename from app/src/main/java/com/geeksville/mesh/database/dao/FirmwareReleaseDao.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/dao/FirmwareReleaseDao.kt index 07215f83b..ee8b15adc 100644 --- a/app/src/main/java/com/geeksville/mesh/database/dao/FirmwareReleaseDao.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/FirmwareReleaseDao.kt @@ -15,14 +15,14 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.dao +package org.meshtastic.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query -import com.geeksville.mesh.database.entity.FirmwareReleaseEntity -import com.geeksville.mesh.database.entity.FirmwareReleaseType +import org.meshtastic.core.database.entity.FirmwareReleaseEntity +import org.meshtastic.core.database.entity.FirmwareReleaseType @Dao interface FirmwareReleaseDao { diff --git a/app/src/main/java/com/geeksville/mesh/database/dao/MeshLogDao.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/MeshLogDao.kt similarity index 92% rename from app/src/main/java/com/geeksville/mesh/database/dao/MeshLogDao.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/dao/MeshLogDao.kt index d74518d9f..f0f471c05 100644 --- a/app/src/main/java/com/geeksville/mesh/database/dao/MeshLogDao.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/MeshLogDao.kt @@ -15,13 +15,13 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.dao +package org.meshtastic.core.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.Query -import com.geeksville.mesh.database.entity.MeshLog import kotlinx.coroutines.flow.Flow +import org.meshtastic.core.database.entity.MeshLog @Dao interface MeshLogDao { @@ -42,12 +42,11 @@ interface MeshLogDao { SELECT * FROM log WHERE from_num = :fromNum AND (:portNum = 0 AND port_num != 0 OR port_num = :portNum) ORDER BY received_date DESC LIMIT 0,:maxItem - """ + """, ) fun getLogsFrom(fromNum: Int, portNum: Int, maxItem: Int): Flow> - @Insert - fun insert(log: MeshLog) + @Insert fun insert(log: MeshLog) @Query("DELETE FROM log") fun deleteAll() diff --git a/app/src/main/java/com/geeksville/mesh/database/dao/NodeInfoDao.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/NodeInfoDao.kt similarity index 96% rename from app/src/main/java/com/geeksville/mesh/database/dao/NodeInfoDao.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/dao/NodeInfoDao.kt index cc4ec1e8f..a5d98e876 100644 --- a/app/src/main/java/com/geeksville/mesh/database/dao/NodeInfoDao.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/NodeInfoDao.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.dao +package org.meshtastic.core.database.dao import androidx.room.Dao import androidx.room.Insert @@ -24,12 +24,12 @@ import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Transaction import androidx.room.Upsert -import com.geeksville.mesh.database.entity.MetadataEntity -import com.geeksville.mesh.database.entity.MyNodeEntity -import com.geeksville.mesh.database.entity.NodeEntity -import com.geeksville.mesh.database.entity.NodeWithRelations import com.google.protobuf.ByteString import kotlinx.coroutines.flow.Flow +import org.meshtastic.core.database.entity.MetadataEntity +import org.meshtastic.core.database.entity.MyNodeEntity +import org.meshtastic.core.database.entity.NodeEntity +import org.meshtastic.core.database.entity.NodeWithRelations @Suppress("TooManyFunctions") @Dao diff --git a/app/src/main/java/com/geeksville/mesh/database/dao/PacketDao.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/PacketDao.kt similarity index 95% rename from app/src/main/java/com/geeksville/mesh/database/dao/PacketDao.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/dao/PacketDao.kt index 5bda825b5..2552a409e 100644 --- a/app/src/main/java/com/geeksville/mesh/database/dao/PacketDao.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/PacketDao.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.dao +package org.meshtastic.core.database.dao import androidx.room.Dao import androidx.room.MapColumn @@ -23,14 +23,15 @@ import androidx.room.Query import androidx.room.Transaction import androidx.room.Update import androidx.room.Upsert -import com.geeksville.mesh.database.entity.ContactSettings -import com.geeksville.mesh.database.entity.Packet -import com.geeksville.mesh.database.entity.PacketEntity -import com.geeksville.mesh.database.entity.ReactionEntity import kotlinx.coroutines.flow.Flow +import org.meshtastic.core.database.entity.ContactSettings +import org.meshtastic.core.database.entity.Packet +import org.meshtastic.core.database.entity.PacketEntity +import org.meshtastic.core.database.entity.ReactionEntity import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.MessageStatus +@Suppress("TooManyFunctions") @Dao interface PacketDao { diff --git a/app/src/main/java/com/geeksville/mesh/database/dao/QuickChatActionDao.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/QuickChatActionDao.kt similarity index 87% rename from app/src/main/java/com/geeksville/mesh/database/dao/QuickChatActionDao.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/dao/QuickChatActionDao.kt index 9d1847c8b..52fcb2fcf 100644 --- a/app/src/main/java/com/geeksville/mesh/database/dao/QuickChatActionDao.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/dao/QuickChatActionDao.kt @@ -15,14 +15,14 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.dao +package org.meshtastic.core.database.dao import androidx.room.Dao import androidx.room.Query import androidx.room.Transaction import androidx.room.Upsert -import com.geeksville.mesh.database.entity.QuickChatAction import kotlinx.coroutines.flow.Flow +import org.meshtastic.core.database.entity.QuickChatAction @Dao interface QuickChatActionDao { @@ -30,18 +30,17 @@ interface QuickChatActionDao { @Query("Select * from quick_chat order by position asc") fun getAll(): Flow> - @Upsert - fun upsert(action: QuickChatAction) + @Upsert fun upsert(action: QuickChatAction) @Query("Delete from quick_chat") fun deleteAll() @Query("Delete from quick_chat where uuid=:uuid") - fun _delete(uuid: Long) + fun delete(uuid: Long) @Transaction fun delete(action: QuickChatAction) { - _delete(action.uuid) + delete(action.uuid) decrementPositionsAfter(action.position) } diff --git a/app/src/main/java/com/geeksville/mesh/database/DatabaseModule.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/di/DatabaseModule.kt similarity index 51% rename from app/src/main/java/com/geeksville/mesh/database/DatabaseModule.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/di/DatabaseModule.kt index db0ba1251..c68cb9dd3 100644 --- a/app/src/main/java/com/geeksville/mesh/database/DatabaseModule.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/di/DatabaseModule.kt @@ -15,56 +15,40 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database +package org.meshtastic.core.database.di import android.app.Application -import com.geeksville.mesh.database.dao.DeviceHardwareDao -import com.geeksville.mesh.database.dao.FirmwareReleaseDao -import com.geeksville.mesh.database.dao.MeshLogDao -import com.geeksville.mesh.database.dao.NodeInfoDao -import com.geeksville.mesh.database.dao.PacketDao -import com.geeksville.mesh.database.dao.QuickChatActionDao import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent +import org.meshtastic.core.database.MeshtasticDatabase +import org.meshtastic.core.database.dao.DeviceHardwareDao +import org.meshtastic.core.database.dao.FirmwareReleaseDao +import org.meshtastic.core.database.dao.MeshLogDao +import org.meshtastic.core.database.dao.NodeInfoDao +import org.meshtastic.core.database.dao.PacketDao +import org.meshtastic.core.database.dao.QuickChatActionDao import javax.inject.Singleton @InstallIn(SingletonComponent::class) @Module class DatabaseModule { - @Provides - @Singleton - fun provideDatabase(app: Application): MeshtasticDatabase = - MeshtasticDatabase.getDatabase(app) + @Provides @Singleton + fun provideDatabase(app: Application): MeshtasticDatabase = MeshtasticDatabase.getDatabase(app) + + @Provides fun provideNodeInfoDao(database: MeshtasticDatabase): NodeInfoDao = database.nodeInfoDao() + + @Provides fun providePacketDao(database: MeshtasticDatabase): PacketDao = database.packetDao() + + @Provides fun provideMeshLogDao(database: MeshtasticDatabase): MeshLogDao = database.meshLogDao() @Provides - fun provideNodeInfoDao(database: MeshtasticDatabase): NodeInfoDao { - return database.nodeInfoDao() - } + fun provideQuickChatActionDao(database: MeshtasticDatabase): QuickChatActionDao = database.quickChatActionDao() @Provides - fun providePacketDao(database: MeshtasticDatabase): PacketDao { - return database.packetDao() - } + fun provideDeviceHardwareDao(database: MeshtasticDatabase): DeviceHardwareDao = database.deviceHardwareDao() @Provides - fun provideMeshLogDao(database: MeshtasticDatabase): MeshLogDao { - return database.meshLogDao() - } - - @Provides - fun provideQuickChatActionDao(database: MeshtasticDatabase): QuickChatActionDao { - return database.quickChatActionDao() - } - - @Provides - fun provideDeviceHardwareDao(database: MeshtasticDatabase): DeviceHardwareDao { - return database.deviceHardwareDao() - } - - @Provides - fun provideFirmwareReleaseDao(database: MeshtasticDatabase): FirmwareReleaseDao { - return database.firmwareReleaseDao() - } + fun provideFirmwareReleaseDao(database: MeshtasticDatabase): FirmwareReleaseDao = database.firmwareReleaseDao() } diff --git a/app/src/main/java/com/geeksville/mesh/database/entity/DeviceHardwareEntity.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/DeviceHardwareEntity.kt similarity index 98% rename from app/src/main/java/com/geeksville/mesh/database/entity/DeviceHardwareEntity.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/entity/DeviceHardwareEntity.kt index 2e1be4c01..f250507d9 100644 --- a/app/src/main/java/com/geeksville/mesh/database/entity/DeviceHardwareEntity.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/DeviceHardwareEntity.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.entity +package org.meshtastic.core.database.entity import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/app/src/main/java/com/geeksville/mesh/database/entity/FirmwareReleaseEntity.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/FirmwareReleaseEntity.kt similarity index 98% rename from app/src/main/java/com/geeksville/mesh/database/entity/FirmwareReleaseEntity.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/entity/FirmwareReleaseEntity.kt index 1a6076393..0808250b4 100644 --- a/app/src/main/java/com/geeksville/mesh/database/entity/FirmwareReleaseEntity.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/FirmwareReleaseEntity.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.entity +package org.meshtastic.core.database.entity import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/app/src/main/java/com/geeksville/mesh/database/entity/MeshLog.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/MeshLog.kt similarity index 89% rename from app/src/main/java/com/geeksville/mesh/database/entity/MeshLog.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/entity/MeshLog.kt index 870e3b642..5c3bfe7be 100644 --- a/app/src/main/java/com/geeksville/mesh/database/entity/MeshLog.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/MeshLog.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.entity +package org.meshtastic.core.database.entity import androidx.room.ColumnInfo import androidx.room.Entity @@ -27,13 +27,8 @@ import com.geeksville.mesh.Portnums import com.google.protobuf.TextFormat import java.io.IOException -@Entity( - tableName = "log", - indices = [ - Index(value = ["from_num"]), - Index(value = ["port_num"]), - ], -) +@Suppress("EmptyCatchBlock", "SwallowedException", "ConstructorParameterNaming") +@Entity(tableName = "log", indices = [Index(value = ["from_num"]), Index(value = ["port_num"])]) data class MeshLog( @PrimaryKey val uuid: String, @ColumnInfo(name = "type") val message_type: String, @@ -52,8 +47,7 @@ data class MeshLog( try { TextFormat.getParser().merge(raw_message, builder) return builder.build() - } catch (e: IOException) { - } + } catch (e: IOException) {} } return null } @@ -65,8 +59,7 @@ data class MeshLog( try { TextFormat.getParser().merge(raw_message, builder) return builder.build() - } catch (e: IOException) { - } + } catch (e: IOException) {} } return null } @@ -78,8 +71,7 @@ data class MeshLog( try { TextFormat.getParser().merge(raw_message, builder) return builder.build() - } catch (e: IOException) { - } + } catch (e: IOException) {} } return null } diff --git a/app/src/main/java/com/geeksville/mesh/database/entity/MyNodeEntity.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/MyNodeEntity.kt similarity index 97% rename from app/src/main/java/com/geeksville/mesh/database/entity/MyNodeEntity.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/entity/MyNodeEntity.kt index 122c58fbe..c351fdf89 100644 --- a/app/src/main/java/com/geeksville/mesh/database/entity/MyNodeEntity.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/MyNodeEntity.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.entity +package org.meshtastic.core.database.entity import androidx.room.Entity import androidx.room.PrimaryKey diff --git a/app/src/main/java/com/geeksville/mesh/database/entity/NodeEntity.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/NodeEntity.kt similarity index 98% rename from app/src/main/java/com/geeksville/mesh/database/entity/NodeEntity.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/entity/NodeEntity.kt index d83809809..b8bc85408 100644 --- a/app/src/main/java/com/geeksville/mesh/database/entity/NodeEntity.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/NodeEntity.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.entity +package org.meshtastic.core.database.entity import androidx.room.ColumnInfo import androidx.room.Embedded @@ -27,9 +27,9 @@ import com.geeksville.mesh.MeshProtos import com.geeksville.mesh.PaxcountProtos import com.geeksville.mesh.TelemetryProtos import com.geeksville.mesh.copy -import com.geeksville.mesh.model.Node import com.google.protobuf.ByteString import com.google.protobuf.kotlin.isNotEmpty +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DeviceMetrics import org.meshtastic.core.model.EnvironmentMetrics import org.meshtastic.core.model.MeshUser diff --git a/app/src/main/java/com/geeksville/mesh/database/entity/Packet.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/Packet.kt similarity index 94% rename from app/src/main/java/com/geeksville/mesh/database/entity/Packet.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/entity/Packet.kt index a70d99acf..7b970627d 100644 --- a/app/src/main/java/com/geeksville/mesh/database/entity/Packet.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/Packet.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.entity +package org.meshtastic.core.database.entity import androidx.room.ColumnInfo import androidx.room.Embedded @@ -24,8 +24,8 @@ import androidx.room.Index import androidx.room.PrimaryKey import androidx.room.Relation import com.geeksville.mesh.MeshProtos.User -import com.geeksville.mesh.model.Message -import com.geeksville.mesh.model.Node +import org.meshtastic.core.database.model.Message +import org.meshtastic.core.database.model.Node import org.meshtastic.core.model.DataPacket import org.meshtastic.core.model.util.getShortDateTime @@ -57,6 +57,7 @@ data class PacketEntity( } } +@Suppress("ConstructorParameterNaming") @Entity( tableName = "packet", indices = [Index(value = ["myNodeNum"]), Index(value = ["port_num"]), Index(value = ["contact_key"])], @@ -77,6 +78,7 @@ data class Packet( @ColumnInfo(name = "hopsAway", defaultValue = "-1") val hopsAway: Int = -1, ) +@Suppress("ConstructorParameterNaming") @Entity(tableName = "contact_settings") data class ContactSettings(@PrimaryKey val contact_key: String, val muteUntil: Long = 0L) { val isMuted diff --git a/app/src/main/java/com/geeksville/mesh/database/entity/QuickChatAction.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/QuickChatAction.kt similarity index 92% rename from app/src/main/java/com/geeksville/mesh/database/entity/QuickChatAction.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/entity/QuickChatAction.kt index 3a31f9f31..ef2e9e8a6 100644 --- a/app/src/main/java/com/geeksville/mesh/database/entity/QuickChatAction.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/entity/QuickChatAction.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.database.entity +package org.meshtastic.core.database.entity import androidx.room.ColumnInfo import androidx.room.Entity @@ -27,7 +27,7 @@ data class QuickChatAction( @ColumnInfo(name = "name") val name: String = "", @ColumnInfo(name = "message") val message: String = "", @ColumnInfo(name = "mode") val mode: Mode = Mode.Instant, - @ColumnInfo(name = "position") val position: Int + @ColumnInfo(name = "position") val position: Int, ) { enum class Mode { Append, diff --git a/app/src/main/java/com/geeksville/mesh/model/Message.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/model/Message.kt similarity index 97% rename from app/src/main/java/com/geeksville/mesh/model/Message.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/model/Message.kt index 0682b53e0..08a0eb191 100644 --- a/app/src/main/java/com/geeksville/mesh/model/Message.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/model/Message.kt @@ -15,11 +15,11 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.model +package org.meshtastic.core.database.model import androidx.annotation.StringRes import com.geeksville.mesh.MeshProtos.Routing -import com.geeksville.mesh.database.entity.Reaction +import org.meshtastic.core.database.entity.Reaction import org.meshtastic.core.model.MessageStatus import org.meshtastic.core.strings.R diff --git a/app/src/main/java/com/geeksville/mesh/model/Node.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/model/Node.kt similarity index 97% rename from app/src/main/java/com/geeksville/mesh/model/Node.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/model/Node.kt index 40d8ac293..e5d4dc6a3 100644 --- a/app/src/main/java/com/geeksville/mesh/model/Node.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/model/Node.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.model +package org.meshtastic.core.database.model import android.graphics.Color import com.geeksville.mesh.ConfigProtos @@ -25,13 +25,13 @@ import com.geeksville.mesh.PaxcountProtos import com.geeksville.mesh.TelemetryProtos.DeviceMetrics import com.geeksville.mesh.TelemetryProtos.EnvironmentMetrics import com.geeksville.mesh.TelemetryProtos.PowerMetrics -import com.geeksville.mesh.database.entity.NodeEntity -import com.geeksville.mesh.util.toDistanceString import com.google.protobuf.ByteString import com.google.protobuf.kotlin.isNotEmpty +import org.meshtastic.core.database.entity.NodeEntity import org.meshtastic.core.model.util.GPSFormat import org.meshtastic.core.model.util.UnitConversions.celsiusToFahrenheit import org.meshtastic.core.model.util.latLongToMeter +import org.meshtastic.core.model.util.toDistanceString @Suppress("MagicNumber") data class Node( diff --git a/app/src/main/java/com/geeksville/mesh/model/NodeSortOption.kt b/core/database/src/main/kotlin/org/meshtastic/core/database/model/NodeSortOption.kt similarity index 96% rename from app/src/main/java/com/geeksville/mesh/model/NodeSortOption.kt rename to core/database/src/main/kotlin/org/meshtastic/core/database/model/NodeSortOption.kt index 031f44fa6..35b9913b8 100644 --- a/app/src/main/java/com/geeksville/mesh/model/NodeSortOption.kt +++ b/core/database/src/main/kotlin/org/meshtastic/core/database/model/NodeSortOption.kt @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.model +package org.meshtastic.core.database.model import androidx.annotation.StringRes import org.meshtastic.core.strings.R diff --git a/app/src/main/java/com/geeksville/mesh/util/DistanceExtensions.kt b/core/model/src/main/kotlin/org/meshtastic/core/model/util/DistanceExtensions.kt similarity index 56% rename from app/src/main/java/com/geeksville/mesh/util/DistanceExtensions.kt rename to core/model/src/main/kotlin/org/meshtastic/core/model/util/DistanceExtensions.kt index 2d2fe94da..0d268e0ab 100644 --- a/app/src/main/java/com/geeksville/mesh/util/DistanceExtensions.kt +++ b/core/model/src/main/kotlin/org/meshtastic/core/model/util/DistanceExtensions.kt @@ -15,18 +15,16 @@ * along with this program. If not, see . */ -package com.geeksville.mesh.util +@file:Suppress("MatchingDeclarationName") + +package org.meshtastic.core.model.util import android.icu.util.LocaleData import android.icu.util.ULocale import com.geeksville.mesh.ConfigProtos.Config.DisplayConfig.DisplayUnits import java.util.Locale -enum class DistanceUnit( - val symbol: String, - val multiplier: Float, - val system: Int -) { +enum class DistanceUnit(val symbol: String, val multiplier: Float, val system: Int) { METER("m", multiplier = 1F, DisplayUnits.METRIC_VALUE), KILOMETER("km", multiplier = 0.001F, DisplayUnits.METRIC_VALUE), FOOT("ft", multiplier = 3.28084F, DisplayUnits.IMPERIAL_VALUE), @@ -34,75 +32,76 @@ enum class DistanceUnit( ; companion object { - fun getFromLocale(locale: Locale = Locale.getDefault()): DisplayUnits { - return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) { + fun getFromLocale(locale: Locale = Locale.getDefault()): DisplayUnits = + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) { when (LocaleData.getMeasurementSystem(ULocale.forLocale(locale))) { LocaleData.MeasurementSystem.SI -> DisplayUnits.METRIC else -> DisplayUnits.IMPERIAL } } else { when (locale.country.uppercase(locale)) { - "US", "LR", "MM", "GB" -> DisplayUnits.IMPERIAL + "US", + "LR", + "MM", + "GB", + -> DisplayUnits.IMPERIAL else -> DisplayUnits.METRIC } } - } } } -fun Int.metersIn(unit: DistanceUnit): Float { - return this * unit.multiplier -} +fun Int.metersIn(unit: DistanceUnit): Float = this * unit.multiplier fun Int.metersIn(system: DisplayUnits): Float { - val unit = when (system.number) { - DisplayUnits.IMPERIAL_VALUE -> DistanceUnit.FOOT - else -> DistanceUnit.METER - } + val unit = + when (system.number) { + DisplayUnits.IMPERIAL_VALUE -> DistanceUnit.FOOT + else -> DistanceUnit.METER + } return this.metersIn(unit) } -fun Float.toString(unit: DistanceUnit): String { - return if (unit in setOf(DistanceUnit.METER, DistanceUnit.FOOT)) { - "%.0f %s" - } else { - "%.1f %s" - }.format(this, unit.symbol) +fun Float.toString(unit: DistanceUnit): String = if (unit in setOf(DistanceUnit.METER, DistanceUnit.FOOT)) { + "%.0f %s" +} else { + "%.1f %s" } + .format(this, unit.symbol) fun Float.toString(system: DisplayUnits): String { - val unit = when (system.number) { - DisplayUnits.IMPERIAL_VALUE -> DistanceUnit.FOOT - else -> DistanceUnit.METER - } + val unit = + when (system.number) { + DisplayUnits.IMPERIAL_VALUE -> DistanceUnit.FOOT + else -> DistanceUnit.METER + } return this.toString(unit) } private const val KILOMETER_THRESHOLD = 1000 private const val MILE_THRESHOLD = 1609 + fun Int.toDistanceString(system: DisplayUnits): String { - val unit = if (system.number == DisplayUnits.METRIC_VALUE) { - if (this < KILOMETER_THRESHOLD) DistanceUnit.METER else DistanceUnit.KILOMETER - } else { - if (this < MILE_THRESHOLD) DistanceUnit.FOOT else DistanceUnit.MILE - } + val unit = + if (system.number == DisplayUnits.METRIC_VALUE) { + if (this < KILOMETER_THRESHOLD) DistanceUnit.METER else DistanceUnit.KILOMETER + } else { + if (this < MILE_THRESHOLD) DistanceUnit.FOOT else DistanceUnit.MILE + } val valueInUnit = this * unit.multiplier return valueInUnit.toString(unit) } @Suppress("MagicNumber") -fun Float.toSpeedString(system: DisplayUnits): String = - if (system == DisplayUnits.METRIC) { - "%.0f km/h".format(this * 3.6) - } else { - "%.0f mph".format(this * 2.23694f) - } +fun Float.toSpeedString(system: DisplayUnits): String = if (system == DisplayUnits.METRIC) { + "%.0f km/h".format(this * 3.6) +} else { + "%.0f mph".format(this * 2.23694f) +} @Suppress("MagicNumber") -fun Float.toSmallDistanceString(system: DisplayUnits): String { - return if (system == DisplayUnits.IMPERIAL) { - "%.2f in".format(this / 25.4f) - } else { - "%.0f mm".format(this) - } +fun Float.toSmallDistanceString(system: DisplayUnits): String = if (system == DisplayUnits.IMPERIAL) { + "%.2f in".format(this / 25.4f) +} else { + "%.0f mm".format(this) } diff --git a/settings.gradle.kts b/settings.gradle.kts index ccdeaa40e..1450cdd61 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -17,8 +17,21 @@ import org.gradle.kotlin.dsl.maven * along with this program. If not, see . */ -include(":app", ":core:data", ":core:datastore", ":core:di", ":core:model", ":core:navigation", ":core:network", ":core:prefs", ":core:proto", - ":core:strings", ":feature:map", ":mesh_service_example") +include( + ":app", + ":core:data", + ":core:database", + ":core:datastore", + ":core:di", + ":core:model", + ":core:navigation", + ":core:network", + ":core:prefs", + ":core:proto", + ":core:strings", + ":feature:map", + ":mesh_service_example", +) rootProject.name = "MeshtasticAndroid" // https://docs.gradle.org/current/userguide/declaring_dependencies.html#sec:type-safe-project-accessors