if like made 3 new features maby you can use the code of that use in the meshtastic app key word monitor email detection in longfast put them in list and a tv dashboard whit chromecast https://www.youtube.com/watch?v=kIslPJpNWjI#5315
Closed
tenij000 wants to merge 10 commits intomeshtastic:mainfrom
Conversation
meshtastic keyword monitor Signed-off-by: tenij000 <tenij000@gmail.com>
…e self-sent messages
email gate way Signed-off-by: tenij000 <tenij000@gmail.com>
…, and Dutch translations
Collaborator
|
What is this? |
Collaborator
|
Closing this - undocumented, untested, not following CONTRIBUTORS.md |
Member
|
What in the world did I just read? |
This comment has been minimized.
This comment has been minimized.
Author
|
update made so can run your android app > install on google tv runs on tv it self whit out a phone |
Contributor
There was a problem hiding this comment.
Pull request overview
This PR attempts to add three major user-facing capabilities to the Meshtastic app—keyword monitoring (with optional auto-reply), an “email gateway” queue surfaced in Settings, and TV/Cast-related UI—while also introducing a new minimal build flavor and changing navigation/top-level destinations.
Changes:
- Add keyword monitor preferences + UI, and message highlighting/auto-reply hooks.
- Add an email queue database table/DAO + settings screens + email intent helper.
- Add Cast-related dependencies/UI (Cast button in the app bar + a Presentation-based TV dashboard), plus a new
minimalflavor and related build/nav changes.
Reviewed changes
Copilot reviewed 79 out of 83 changed files in this pull request and generated 17 comments.
Show a summary per file
| File | Description |
|---|---|
| gradle/libs.versions.toml | Add Cast + MediaRouter libs to catalog |
| feature/widget/build.gradle.kts | Lower widget module minSdk to 24 |
| feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/navigation/SettingsNavigation.kt | Add routes for Email queue/settings screens |
| feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/filter/FilterSettingsViewModel.kt | Add keyword monitor state + mutations |
| feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/filter/FilterSettingsScreen.kt | Add keyword monitor UI to filter settings |
| feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/email/EmailSettingsScreen.kt | New email settings UI screen |
| feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/email/EmailQueueViewModel.kt | New VM for email queue + toggle |
| feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/email/EmailQueueScreen.kt | New email queue list UI |
| feature/settings/src/androidMain/kotlin/org/meshtastic/feature/settings/SettingsScreen.kt | Add email queue entry + TV dashboard section |
| feature/settings/build.gradle.kts | Add Room/SQLite deps to settings feature |
| feature/messaging/src/jvmMain/kotlin/org/meshtastic/feature/messaging/MessageExportHandler.kt | JVM stub for export handler |
| feature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/component/MessageScreenComponents.kt | Add “export CSV” overflow menu item |
| feature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/component/MessageItem.kt | Add keyword-monitor highlighting icon |
| feature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/MessageViewModel.kt | Wire CSV export write path |
| feature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/Message.kt | Add expect/actual export handler entry point |
| feature/messaging/src/androidMain/kotlin/org/meshtastic/feature/messaging/MessageExportHandler.kt | Android document-create export handler |
| desktop/src/test/kotlin/org/meshtastic/desktop/ui/DesktopTopLevelDestinationParityTest.kt | Update desktop nav parity expectations |
| desktop/src/main/kotlin/org/meshtastic/desktop/Main.kt | Update keyboard shortcut destination |
| core/ui/src/jvmMain/kotlin/org/meshtastic/core/ui/component/CastButton.kt | JVM stub Cast button |
| core/ui/src/iosMain/kotlin/org/meshtastic/core/ui/component/CastButton.kt | iOS stub Cast button |
| core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/navigation/TopLevelDestinationExt.kt | Update top-level icon mapping |
| core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/MeshtasticNavigationSuite.kt | Allow custom destinations + special tint |
| core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/MainAppBar.kt | Always show CastButton in app bar |
| core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/component/CastButton.kt | Add expect CastButton declaration |
| core/ui/src/androidMain/kotlin/org/meshtastic/core/ui/component/CastButton.kt | Android MediaRouteButton-backed Cast button |
| core/ui/build.gradle.kts | Add Cast/MediaRouter dependencies for Android |
| core/testing/src/commonMain/kotlin/org/meshtastic/core/testing/FakeAppPreferences.kt | Adjust preference fakes (incomplete) |
| core/service/build.gradle.kts | Add serialization + Ktor/Room deps to service module |
| core/resources/src/commonMain/composeResources/values/strings.xml | Add EN strings for email + TV dashboard |
| core/resources/src/commonMain/composeResources/values-nl/strings.xml | Add NL strings for email + TV dashboard |
| core/resources/src/commonMain/composeResources/drawable/ic_crown.xml | Add crown icon drawable |
| core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AppPreferences.kt | Add keyword monitors + EmailPrefs interfaces |
| core/prefs/src/commonMain/kotlin/org/meshtastic/core/prefs/ui/UiPrefsImpl.kt | Persist keyword monitors in DataStore |
| core/prefs/src/commonMain/kotlin/org/meshtastic/core/prefs/email/EmailPrefsImpl.kt | New EmailPrefs DataStore-backed impl |
| core/prefs/src/androidMain/kotlin/org/meshtastic/core/prefs/di/CorePrefsAndroidModule.kt | Provide EmailDataStore on Android |
| core/network/src/androidMain/kotlin/org/meshtastic/core/network/radio/AndroidRadioTransportFactory.kt | Change mock transport detection behavior |
| core/navigation/src/commonTest/kotlin/org/meshtastic/core/navigation/MultiBackstackTest.kt | Update tests for renamed top-level destination |
| core/navigation/src/commonMain/kotlin/org/meshtastic/core/navigation/TopLevelDestination.kt | Replace Map top-level with Location/Position |
| core/navigation/src/commonMain/kotlin/org/meshtastic/core/navigation/Routes.kt | Add SettingsRoute.EmailQueue/EmailSettings |
| core/database/src/commonMain/kotlin/org/meshtastic/core/database/entity/EmailQueueEntity.kt | New Room entity for email queue |
| core/database/src/commonMain/kotlin/org/meshtastic/core/database/entity/DiscordQueueEntity.kt | New (unused) discord queue entity |
| core/database/src/commonMain/kotlin/org/meshtastic/core/database/dao/EmailQueueDao.kt | New DAO for email queue |
| core/database/src/commonMain/kotlin/org/meshtastic/core/database/dao/DiscordQueueDao.kt | New (unused) DAO for discord queue |
| core/database/src/commonMain/kotlin/org/meshtastic/core/database/MeshtasticDatabase.kt | Add email queue table + bump schema version |
| core/database/src/commonMain/kotlin/org/meshtastic/core/database/DatabaseProvider.kt | Add global db singleton holder |
| core/database/src/commonMain/kotlin/org/meshtastic/core/database/DatabaseManager.kt | Assign global DatabaseProvider.db on open |
| core/database/schemas/org.meshtastic.core.database.MeshtasticDatabase/39.json | New Room schema snapshot |
| core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MeshDataHandlerImpl.kt | Add keyword + email detection/auto-reply logic |
| core/common/src/jvmMain/kotlin/org/meshtastic/core/common/util/EmailUtil.kt | JVM stub sendEmailIntent |
| core/common/src/iosMain/kotlin/org/meshtastic/core/common/util/EmailUtil.kt | iOS stub sendEmailIntent |
| core/common/src/commonMain/kotlin/org/meshtastic/core/common/util/EmailUtil.kt | Add expect sendEmailIntent |
| core/common/src/androidMain/kotlin/org/meshtastic/core/common/util/EmailUtil.kt | Android implementation of sendEmailIntent |
| core/barcode/src/minimal/kotlin/org/meshtastic/core/barcode/BarcodeAnalyzerFactory.kt | ZXing analyzer for minimal flavor |
| core/barcode/build.gradle.kts | Add ZXing dep for minimal flavor |
| config.properties | Lower MIN_SDK to 24 globally |
| build-logic/convention/src/main/kotlin/org/meshtastic/buildlogic/MeshtasticFlavor.kt | Introduce minimal flavor |
| build-logic/convention/src/main/kotlin/AnalyticsConventionPlugin.kt | Disable analytics tasks for minimal |
| app/src/minimal/kotlin/org/meshtastic/app/ui/MapNavigation.kt | Disable map graph in minimal |
| app/src/minimal/kotlin/org/meshtastic/app/di/MinimalNetworkModule.kt | No-op API service for minimal |
| app/src/minimal/kotlin/org/meshtastic/app/di/FlavorModule.kt | Minimal DI module entry point |
| app/src/minimal/kotlin/org/meshtastic/app/analytics/MinimalPlatformAnalytics.kt | Minimal analytics implementation |
| app/src/minimal/kotlin/org/meshtastic/app/MapLocals.kt | Minimal map locals no-op |
| app/src/minimal/kotlin/org/meshtastic/app/AnalyticsIntro.kt | Minimal analytics intro no-op |
| app/src/minimal/AndroidManifest.xml | Remove location permissions; adjust FGS type |
| app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml | Add/update adaptive icon definition |
| app/src/main/kotlin/org/meshtastic/app/ui/Main.kt | Register map graph via flavor hook |
| app/src/main/kotlin/org/meshtastic/app/di/AppKoinModule.kt | Remove FeatureMapModule from base modules |
| app/src/main/kotlin/org/meshtastic/app/cast/TvDashboardPresentation.kt | New Presentation-based TV dashboard |
| app/src/main/kotlin/org/meshtastic/app/cast/CastOptionsProvider.kt | Provide CastOptions for GMS cast framework |
| app/src/main/kotlin/org/meshtastic/app/MainActivity.kt | Add MediaRouter/Cast session wiring; refactor locals |
| app/src/main/AndroidManifest.xml | Register Cast OPTIONS_PROVIDER meta-data |
| app/src/google/kotlin/org/meshtastic/app/ui/MapNavigation.kt | Enable map graph in google flavor |
| app/src/google/kotlin/org/meshtastic/app/di/FlavorModule.kt | Include FeatureMapModule in google flavor |
| app/src/google/kotlin/org/meshtastic/app/MapLocals.kt | Provide map-related CompositionLocals (google) |
| app/src/google/kotlin/org/meshtastic/app/AnalyticsIntro.kt | Move analytics intro into base package |
| app/src/fdroid/kotlin/org/meshtastic/app/ui/MapNavigation.kt | Enable map graph in fdroid flavor |
| app/src/fdroid/kotlin/org/meshtastic/app/di/FlavorModule.kt | Include FeatureMapModule in fdroid flavor |
| app/src/fdroid/kotlin/org/meshtastic/app/MapLocals.kt | Provide map-related CompositionLocals (fdroid) |
| app/src/fdroid/kotlin/org/meshtastic/app/AnalyticsIntro.kt | Move analytics intro into base package |
| app/build.gradle.kts | Make map feature flavor-scoped; add cast deps; packaging excludes |
Comment on lines
100
to
104
| private val adminPacketHandler: AdminPacketHandler, | ||
| private val uiPrefs: UiPrefs, | ||
| private val workerManager: org.meshtastic.core.repository.MeshWorkerManager, | ||
| private val radioController: Lazy<org.meshtastic.core.model.RadioController>, | ||
| @Named("ServiceScope") private val scope: CoroutineScope, |
| import androidx.mediarouter.media.MediaRouteSelector | ||
| import androidx.mediarouter.media.MediaRouter | ||
| import androidx.mediarouter.media.MediaControlIntent | ||
| import com.google.android.gms.cast.CastMediaControlIntent |
Comment on lines
50
to
54
| override val supportedDeviceTypes: List<DeviceType> = listOf(DeviceType.BLE, DeviceType.TCP, DeviceType.USB) | ||
|
|
||
| override fun isMockTransport(): Boolean = | ||
| buildConfigProvider.isDebug || Settings.System.getString(context.contentResolver, "firebase.test.lab") == "true" | ||
| Settings.System.getString(context.contentResolver, "firebase.test.lab") == "true" | ||
|
|
Comment on lines
+412
to
+420
| private fun ExportMessagesMenuItem(onDismiss: () -> Unit, onExport: () -> Unit) { | ||
| DropdownMenuItem( | ||
| text = { Text("Exporteer gesprekken (.csv)") }, | ||
| onClick = { | ||
| onDismiss() | ||
| onExport() | ||
| }, | ||
| leadingIcon = { Icon(imageVector = MeshtasticIcons.FileDownload, contentDescription = "Export") }, | ||
| ) |
Comment on lines
53
to
56
| import org.meshtastic.core.ui.icon.MeshtasticIcons | ||
| import org.meshtastic.core.ui.icon.Send | ||
| import org.meshtastic.core.ui.icon.Send | ||
| import org.meshtastic.core.ui.icon.Wifi |
Comment on lines
+131
to
+136
| Text( | ||
| "Geen zoekwoorden ingesteld", | ||
| style = MaterialTheme.typography.bodyMedium, | ||
| color = MaterialTheme.colorScheme.onSurfaceVariant, | ||
| modifier = Modifier.padding(vertical = 8.dp), | ||
| ) |
Comment on lines
152
to
+158
| fun shouldProvideNodeLocation(nodeNum: Int): StateFlow<Boolean> | ||
|
|
||
| fun setShouldProvideNodeLocation(nodeNum: Int, provide: Boolean) | ||
|
|
||
| val keywordMonitors: StateFlow<Set<String>> | ||
|
|
||
| fun setKeywordMonitors(keywords: Set<String>) |
Comment on lines
299
to
313
| @@ -290,12 +309,5 @@ class FakeAppPreferences : AppPreferences { | |||
| override val radio = FakeRadioPrefs() | |||
| override val mesh = FakeMeshPrefs() | |||
| override val tak = FakeTakPrefs() | |||
| } | |||
|
|
|||
| class FakeTakPrefs : org.meshtastic.core.repository.TakPrefs { | |||
| override val isTakServerEnabled = MutableStateFlow(false) | |||
|
|
|||
| override fun setTakServerEnabled(enabled: Boolean) { | |||
| isTakServerEnabled.value = enabled | |||
| } | |||
| override val discord = FakeDiscordPrefs() | |||
| } | |||
Comment on lines
+260
to
+272
| if (text.contains(keyword)) { | ||
| Logger.i { "Keyword trigger detected on channel 0: $text (keyword: $keyword)" } | ||
|
|
||
| // UI Notification (Silent) | ||
| scope.handledLaunch { | ||
| notificationManager.dispatch( | ||
| Notification( | ||
| title = "Keyword: $keyword", | ||
| message = "Bericht: ${dataPacket.text}", | ||
| category = Notification.Category.Message, | ||
| isSilent = true, | ||
| ), | ||
| ) |
Comment on lines
133
to
136
| _currentDb.value = db | ||
| _currentAddress.value = address | ||
| DatabaseProvider.db = db | ||
| markLastUsed(dbName) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Thank you for sending in a pull request, here's some tips to get started!
(Please delete all these tips and replace with your text)