refactor(ui): compose resources, domain layer (#4628)

Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
This commit is contained in:
James Rich 2026-02-22 21:39:50 -06:00 committed by GitHub
parent 96adc70401
commit 2676a51647
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
322 changed files with 3031 additions and 2790 deletions

View file

@ -35,10 +35,10 @@ import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.debug_active_filters
import org.meshtastic.core.strings.debug_filters
import org.meshtastic.core.strings.getString
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.debug_active_filters
import org.meshtastic.core.resources.debug_filters
import org.meshtastic.core.resources.getString
import org.meshtastic.feature.settings.debugging.DebugViewModel.UiMeshLog
@RunWith(AndroidJUnit4::class)

View file

@ -34,11 +34,11 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.debug_active_filters
import org.meshtastic.core.strings.debug_default_search
import org.meshtastic.core.strings.debug_filters
import org.meshtastic.core.strings.getString
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.debug_active_filters
import org.meshtastic.core.resources.debug_default_search
import org.meshtastic.core.resources.debug_filters
import org.meshtastic.core.resources.getString
import org.meshtastic.feature.settings.debugging.DebugViewModel.UiMeshLog
import org.meshtastic.feature.settings.debugging.LogSearchManager.SearchMatch
import org.meshtastic.feature.settings.debugging.LogSearchManager.SearchState

View file

@ -25,10 +25,10 @@ import org.junit.Assert
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.cancel
import org.meshtastic.core.strings.getString
import org.meshtastic.core.strings.save
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.cancel
import org.meshtastic.core.resources.getString
import org.meshtastic.core.resources.save
import org.meshtastic.proto.DeviceProfile
import org.meshtastic.proto.Position

View file

@ -28,11 +28,11 @@ import org.junit.Assert
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.getString
import org.meshtastic.core.strings.i_agree
import org.meshtastic.core.strings.map_reporting
import org.meshtastic.core.strings.map_reporting_summary
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.getString
import org.meshtastic.core.resources.i_agree
import org.meshtastic.core.resources.map_reporting
import org.meshtastic.core.resources.map_reporting_summary
@RunWith(AndroidJUnit4::class)
class MapReportingPreferenceTest {

View file

@ -30,8 +30,8 @@ import com.mikepenz.aboutlibraries.Libs
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
import com.mikepenz.aboutlibraries.util.withContext
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.acknowledgements
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.acknowledgements
import org.meshtastic.core.ui.component.MainAppBar
@Composable

View file

@ -74,33 +74,33 @@ import org.meshtastic.core.common.util.toInstant
import org.meshtastic.core.database.DatabaseConstants
import org.meshtastic.core.navigation.Route
import org.meshtastic.core.navigation.SettingsRoutes
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.acknowledgements
import org.meshtastic.core.strings.analytics_okay
import org.meshtastic.core.strings.app_settings
import org.meshtastic.core.strings.app_version
import org.meshtastic.core.strings.bottom_nav_settings
import org.meshtastic.core.strings.choose_theme
import org.meshtastic.core.strings.device_db_cache_limit
import org.meshtastic.core.strings.device_db_cache_limit_summary
import org.meshtastic.core.strings.dynamic
import org.meshtastic.core.strings.export_configuration
import org.meshtastic.core.strings.export_data_csv
import org.meshtastic.core.strings.import_configuration
import org.meshtastic.core.strings.intro_show
import org.meshtastic.core.strings.location_disabled
import org.meshtastic.core.strings.modules_already_unlocked
import org.meshtastic.core.strings.modules_unlocked
import org.meshtastic.core.strings.preferences_language
import org.meshtastic.core.strings.provide_location_to_mesh
import org.meshtastic.core.strings.remotely_administrating
import org.meshtastic.core.strings.save_rangetest
import org.meshtastic.core.strings.system_settings
import org.meshtastic.core.strings.theme
import org.meshtastic.core.strings.theme_dark
import org.meshtastic.core.strings.theme_light
import org.meshtastic.core.strings.theme_system
import org.meshtastic.core.strings.use_homoglyph_characters_encoding
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.acknowledgements
import org.meshtastic.core.resources.analytics_okay
import org.meshtastic.core.resources.app_settings
import org.meshtastic.core.resources.app_version
import org.meshtastic.core.resources.bottom_nav_settings
import org.meshtastic.core.resources.choose_theme
import org.meshtastic.core.resources.device_db_cache_limit
import org.meshtastic.core.resources.device_db_cache_limit_summary
import org.meshtastic.core.resources.dynamic
import org.meshtastic.core.resources.export_configuration
import org.meshtastic.core.resources.export_data_csv
import org.meshtastic.core.resources.import_configuration
import org.meshtastic.core.resources.intro_show
import org.meshtastic.core.resources.location_disabled
import org.meshtastic.core.resources.modules_already_unlocked
import org.meshtastic.core.resources.modules_unlocked
import org.meshtastic.core.resources.preferences_language
import org.meshtastic.core.resources.provide_location_to_mesh
import org.meshtastic.core.resources.remotely_administrating
import org.meshtastic.core.resources.save_rangetest
import org.meshtastic.core.resources.system_settings
import org.meshtastic.core.resources.theme
import org.meshtastic.core.resources.theme_dark
import org.meshtastic.core.resources.theme_light
import org.meshtastic.core.resources.theme_system
import org.meshtastic.core.resources.use_homoglyph_characters_encoding
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.ListItem
import org.meshtastic.core.ui.component.MainAppBar

View file

@ -86,22 +86,22 @@ import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.common.util.nowMillis
import org.meshtastic.core.common.util.toDate
import org.meshtastic.core.common.util.toInstant
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.debug_clear
import org.meshtastic.core.strings.debug_decoded_payload
import org.meshtastic.core.strings.debug_default_search
import org.meshtastic.core.strings.debug_export_failed
import org.meshtastic.core.strings.debug_export_success
import org.meshtastic.core.strings.debug_filters
import org.meshtastic.core.strings.debug_logs_export
import org.meshtastic.core.strings.debug_panel
import org.meshtastic.core.strings.debug_store_logs_summary
import org.meshtastic.core.strings.debug_store_logs_title
import org.meshtastic.core.strings.log_retention_days
import org.meshtastic.core.strings.log_retention_days_quantity
import org.meshtastic.core.strings.log_retention_days_summary
import org.meshtastic.core.strings.log_retention_hours
import org.meshtastic.core.strings.log_retention_never
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.debug_clear
import org.meshtastic.core.resources.debug_decoded_payload
import org.meshtastic.core.resources.debug_default_search
import org.meshtastic.core.resources.debug_export_failed
import org.meshtastic.core.resources.debug_export_success
import org.meshtastic.core.resources.debug_filters
import org.meshtastic.core.resources.debug_logs_export
import org.meshtastic.core.resources.debug_panel
import org.meshtastic.core.resources.debug_store_logs_summary
import org.meshtastic.core.resources.debug_store_logs_title
import org.meshtastic.core.resources.log_retention_days
import org.meshtastic.core.resources.log_retention_days_quantity
import org.meshtastic.core.resources.log_retention_days_summary
import org.meshtastic.core.resources.log_retention_hours
import org.meshtastic.core.resources.log_retention_never
import org.meshtastic.core.ui.component.CopyIconButton
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.MainAppBar

View file

@ -56,16 +56,16 @@ import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.debug_active_filters
import org.meshtastic.core.strings.debug_filter_add
import org.meshtastic.core.strings.debug_filter_add_custom
import org.meshtastic.core.strings.debug_filter_clear
import org.meshtastic.core.strings.debug_filter_included
import org.meshtastic.core.strings.debug_filter_preset_title
import org.meshtastic.core.strings.debug_filters
import org.meshtastic.core.strings.match_all
import org.meshtastic.core.strings.match_any
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.debug_active_filters
import org.meshtastic.core.resources.debug_filter_add
import org.meshtastic.core.resources.debug_filter_add_custom
import org.meshtastic.core.resources.debug_filter_clear
import org.meshtastic.core.resources.debug_filter_included
import org.meshtastic.core.resources.debug_filter_preset_title
import org.meshtastic.core.resources.debug_filters
import org.meshtastic.core.resources.match_all
import org.meshtastic.core.resources.match_any
import org.meshtastic.feature.settings.debugging.DebugViewModel.UiMeshLog
@Composable

View file

@ -52,12 +52,12 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.debug_default_search
import org.meshtastic.core.strings.debug_logs_export
import org.meshtastic.core.strings.debug_search_clear
import org.meshtastic.core.strings.debug_search_next
import org.meshtastic.core.strings.debug_search_prev
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.debug_default_search
import org.meshtastic.core.resources.debug_logs_export
import org.meshtastic.core.resources.debug_search_clear
import org.meshtastic.core.resources.debug_search_next
import org.meshtastic.core.resources.debug_search_prev
import org.meshtastic.core.ui.theme.AppTheme
import org.meshtastic.feature.settings.debugging.DebugViewModel.UiMeshLog
import org.meshtastic.feature.settings.debugging.LogSearchManager.SearchMatch

View file

@ -44,9 +44,9 @@ import org.meshtastic.core.model.getTracerouteResponse
import org.meshtastic.core.model.util.decodeOrNull
import org.meshtastic.core.model.util.toReadableString
import org.meshtastic.core.prefs.meshlog.MeshLogPrefs
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.debug_clear
import org.meshtastic.core.strings.debug_clear_logs_confirm
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.debug_clear
import org.meshtastic.core.resources.debug_clear_logs_confirm
import org.meshtastic.core.ui.util.AlertManager
import org.meshtastic.core.ui.viewmodel.stateInWhileSubscribed
import org.meshtastic.proto.AdminMessage

View file

@ -48,18 +48,18 @@ import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.add
import org.meshtastic.core.strings.delete
import org.meshtastic.core.strings.filter_add_placeholder
import org.meshtastic.core.strings.filter_enable
import org.meshtastic.core.strings.filter_enable_summary
import org.meshtastic.core.strings.filter_no_words
import org.meshtastic.core.strings.filter_regex_pattern
import org.meshtastic.core.strings.filter_settings
import org.meshtastic.core.strings.filter_whole_word
import org.meshtastic.core.strings.filter_words
import org.meshtastic.core.strings.filter_words_summary
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.add
import org.meshtastic.core.resources.delete
import org.meshtastic.core.resources.filter_add_placeholder
import org.meshtastic.core.resources.filter_enable
import org.meshtastic.core.resources.filter_enable_summary
import org.meshtastic.core.resources.filter_no_words
import org.meshtastic.core.resources.filter_regex_pattern
import org.meshtastic.core.resources.filter_settings
import org.meshtastic.core.resources.filter_whole_word
import org.meshtastic.core.resources.filter_words
import org.meshtastic.core.resources.filter_words_summary
import org.meshtastic.core.ui.component.MainAppBar
@Composable

View file

@ -31,17 +31,17 @@ import androidx.compose.ui.graphics.vector.ImageVector
import org.jetbrains.compose.resources.StringResource
import org.meshtastic.core.navigation.Route
import org.meshtastic.core.navigation.SettingsRoutes
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.bluetooth
import org.meshtastic.core.strings.channels
import org.meshtastic.core.strings.device
import org.meshtastic.core.strings.display
import org.meshtastic.core.strings.lora
import org.meshtastic.core.strings.network
import org.meshtastic.core.strings.position
import org.meshtastic.core.strings.power
import org.meshtastic.core.strings.security
import org.meshtastic.core.strings.user
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.bluetooth
import org.meshtastic.core.resources.channels
import org.meshtastic.core.resources.device
import org.meshtastic.core.resources.display
import org.meshtastic.core.resources.lora
import org.meshtastic.core.resources.network
import org.meshtastic.core.resources.position
import org.meshtastic.core.resources.power
import org.meshtastic.core.resources.security
import org.meshtastic.core.resources.user
import org.meshtastic.proto.AdminMessage
import org.meshtastic.proto.DeviceMetadata

View file

@ -35,21 +35,21 @@ import org.jetbrains.compose.resources.StringResource
import org.meshtastic.core.model.Capabilities
import org.meshtastic.core.navigation.Route
import org.meshtastic.core.navigation.SettingsRoutes
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.ambient_lighting
import org.meshtastic.core.strings.audio
import org.meshtastic.core.strings.canned_message
import org.meshtastic.core.strings.detection_sensor
import org.meshtastic.core.strings.external_notification
import org.meshtastic.core.strings.mqtt
import org.meshtastic.core.strings.neighbor_info
import org.meshtastic.core.strings.paxcounter
import org.meshtastic.core.strings.range_test
import org.meshtastic.core.strings.remote_hardware
import org.meshtastic.core.strings.serial
import org.meshtastic.core.strings.status_message
import org.meshtastic.core.strings.store_forward
import org.meshtastic.core.strings.telemetry
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.ambient_lighting
import org.meshtastic.core.resources.audio
import org.meshtastic.core.resources.canned_message
import org.meshtastic.core.resources.detection_sensor
import org.meshtastic.core.resources.external_notification
import org.meshtastic.core.resources.mqtt
import org.meshtastic.core.resources.neighbor_info
import org.meshtastic.core.resources.paxcounter
import org.meshtastic.core.resources.range_test
import org.meshtastic.core.resources.remote_hardware
import org.meshtastic.core.resources.serial
import org.meshtastic.core.resources.status_message
import org.meshtastic.core.resources.store_forward
import org.meshtastic.core.resources.telemetry
import org.meshtastic.proto.AdminMessage
import org.meshtastic.proto.DeviceMetadata

View file

@ -41,13 +41,13 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.database.entity.NodeEntity
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.clean_node_database_description
import org.meshtastic.core.strings.clean_node_database_title
import org.meshtastic.core.strings.clean_nodes_older_than
import org.meshtastic.core.strings.clean_now
import org.meshtastic.core.strings.clean_unknown_nodes
import org.meshtastic.core.strings.nodes_queued_for_deletion
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.clean_node_database_description
import org.meshtastic.core.resources.clean_node_database_title
import org.meshtastic.core.resources.clean_nodes_older_than
import org.meshtastic.core.resources.clean_now
import org.meshtastic.core.resources.clean_unknown_nodes
import org.meshtastic.core.resources.nodes_queued_for_deletion
import org.meshtastic.core.ui.component.NodeChip
/**

View file

@ -26,11 +26,11 @@ import org.jetbrains.compose.resources.getString
import org.meshtastic.core.common.util.nowSeconds
import org.meshtastic.core.data.repository.NodeRepository
import org.meshtastic.core.database.entity.NodeEntity
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.are_you_sure
import org.meshtastic.core.resources.clean_node_database_confirmation
import org.meshtastic.core.resources.clean_now
import org.meshtastic.core.service.ServiceRepository
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.are_you_sure
import org.meshtastic.core.strings.clean_node_database_confirmation
import org.meshtastic.core.strings.clean_now
import org.meshtastic.core.ui.util.AlertManager
import javax.inject.Inject
import kotlin.time.Duration.Companion.days

View file

@ -54,24 +54,24 @@ import org.meshtastic.core.database.model.Node
import org.meshtastic.core.navigation.FirmwareRoutes
import org.meshtastic.core.navigation.Route
import org.meshtastic.core.navigation.SettingsRoutes
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.administration
import org.meshtastic.core.strings.advanced_title
import org.meshtastic.core.strings.backup_restore
import org.meshtastic.core.strings.clean_node_database_title
import org.meshtastic.core.strings.debug_panel
import org.meshtastic.core.strings.device_configuration
import org.meshtastic.core.strings.export_configuration
import org.meshtastic.core.strings.factory_reset
import org.meshtastic.core.strings.firmware_update_title
import org.meshtastic.core.strings.import_configuration
import org.meshtastic.core.strings.message_device_managed
import org.meshtastic.core.strings.module_settings
import org.meshtastic.core.strings.nodedb_reset
import org.meshtastic.core.strings.preserve_favorites
import org.meshtastic.core.strings.radio_configuration
import org.meshtastic.core.strings.reboot
import org.meshtastic.core.strings.shutdown
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.administration
import org.meshtastic.core.resources.advanced_title
import org.meshtastic.core.resources.backup_restore
import org.meshtastic.core.resources.clean_node_database_title
import org.meshtastic.core.resources.debug_panel
import org.meshtastic.core.resources.device_configuration
import org.meshtastic.core.resources.export_configuration
import org.meshtastic.core.resources.factory_reset
import org.meshtastic.core.resources.firmware_update_title
import org.meshtastic.core.resources.import_configuration
import org.meshtastic.core.resources.message_device_managed
import org.meshtastic.core.resources.module_settings
import org.meshtastic.core.resources.nodedb_reset
import org.meshtastic.core.resources.preserve_favorites
import org.meshtastic.core.resources.radio_configuration
import org.meshtastic.core.resources.reboot
import org.meshtastic.core.resources.shutdown
import org.meshtastic.core.ui.component.ListItem
import org.meshtastic.core.ui.component.TitledCard
import org.meshtastic.core.ui.theme.AppTheme

View file

@ -58,15 +58,15 @@ import org.meshtastic.core.navigation.SettingsRoutes
import org.meshtastic.core.prefs.analytics.AnalyticsPrefs
import org.meshtastic.core.prefs.homoglyph.HomoglyphPrefs
import org.meshtastic.core.prefs.map.MapConsentPrefs
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.UiText
import org.meshtastic.core.resources.cant_shutdown
import org.meshtastic.core.service.ConnectionState
import org.meshtastic.core.service.IMeshService
import org.meshtastic.core.service.ServiceRepository
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.cant_shutdown
import org.meshtastic.core.ui.util.getChannelList
import org.meshtastic.feature.settings.navigation.ConfigRoute
import org.meshtastic.feature.settings.navigation.ModuleRoute
import org.meshtastic.feature.settings.util.UiText
import org.meshtastic.proto.AdminMessage
import org.meshtastic.proto.Channel
import org.meshtastic.proto.ChannelSettings
@ -683,7 +683,7 @@ constructor(
private fun sendError(error: String) = setResponseStateError(UiText.DynamicString(error))
private fun sendError(id: StringResource) = setResponseStateError(UiText.StringResource(id))
private fun sendError(id: StringResource) = setResponseStateError(UiText.Resource(id))
private fun setResponseStateError(error: UiText) {
_radioConfigState.update { it.copy(responseState = ResponseState.Error(error)) }

View file

@ -16,7 +16,7 @@
*/
package org.meshtastic.feature.settings.radio
import org.meshtastic.feature.settings.util.UiText
import org.meshtastic.core.resources.UiText
/** Generic sealed class defines each possible state of a response. */
sealed class ResponseState<out T> {

View file

@ -54,13 +54,13 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.model.Capabilities
import org.meshtastic.core.model.Channel
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.add
import org.meshtastic.core.strings.cancel
import org.meshtastic.core.strings.channel_name
import org.meshtastic.core.strings.channels
import org.meshtastic.core.strings.press_and_drag
import org.meshtastic.core.strings.send
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.add
import org.meshtastic.core.resources.cancel
import org.meshtastic.core.resources.channel_name
import org.meshtastic.core.resources.channels
import org.meshtastic.core.resources.press_and_drag
import org.meshtastic.core.resources.send
import org.meshtastic.core.ui.component.MainAppBar
import org.meshtastic.core.ui.component.PreferenceFooter
import org.meshtastic.core.ui.component.dragContainer

View file

@ -29,8 +29,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.delete
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.delete
import org.meshtastic.core.ui.component.ChannelItem
import org.meshtastic.core.ui.component.SecurityIcon
import org.meshtastic.core.ui.theme.AppTheme

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2025 Meshtastic LLC
* Copyright (c) 2025-2026 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
@ -14,7 +14,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.meshtastic.feature.settings.radio.channel.component
import androidx.compose.foundation.layout.Arrangement
@ -28,10 +27,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.sp
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.channels
import org.meshtastic.core.strings.freq
import org.meshtastic.core.strings.slot
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.channels
import org.meshtastic.core.resources.freq
import org.meshtastic.core.resources.slot
import org.meshtastic.core.ui.component.PreferenceCategory
import org.meshtastic.core.ui.theme.AppTheme

View file

@ -42,23 +42,23 @@ import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.StringResource
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.model.Capabilities
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.channel_features
import org.meshtastic.core.strings.downlink_enabled
import org.meshtastic.core.strings.downlink_feature_description
import org.meshtastic.core.strings.icon_meanings
import org.meshtastic.core.strings.info
import org.meshtastic.core.strings.location_sharing
import org.meshtastic.core.strings.manual_position_request
import org.meshtastic.core.strings.periodic_position_broadcast
import org.meshtastic.core.strings.primary
import org.meshtastic.core.strings.primary_channel_feature
import org.meshtastic.core.strings.secondary
import org.meshtastic.core.strings.secondary_channel_position_feature
import org.meshtastic.core.strings.secondary_no_telemetry
import org.meshtastic.core.strings.security_icon_help_dismiss
import org.meshtastic.core.strings.uplink_enabled
import org.meshtastic.core.strings.uplink_feature_description
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.channel_features
import org.meshtastic.core.resources.downlink_enabled
import org.meshtastic.core.resources.downlink_feature_description
import org.meshtastic.core.resources.icon_meanings
import org.meshtastic.core.resources.info
import org.meshtastic.core.resources.location_sharing
import org.meshtastic.core.resources.manual_position_request
import org.meshtastic.core.resources.periodic_position_broadcast
import org.meshtastic.core.resources.primary
import org.meshtastic.core.resources.primary_channel_feature
import org.meshtastic.core.resources.secondary
import org.meshtastic.core.resources.secondary_channel_position_feature
import org.meshtastic.core.resources.secondary_no_telemetry
import org.meshtastic.core.resources.security_icon_help_dismiss
import org.meshtastic.core.resources.uplink_enabled
import org.meshtastic.core.resources.uplink_feature_description
import org.meshtastic.core.ui.component.MeshtasticDialog
@Composable

View file

@ -34,13 +34,13 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.model.Channel
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.cancel
import org.meshtastic.core.strings.channel_name
import org.meshtastic.core.strings.default_
import org.meshtastic.core.strings.downlink_enabled
import org.meshtastic.core.strings.save
import org.meshtastic.core.strings.uplink_enabled
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.cancel
import org.meshtastic.core.resources.channel_name
import org.meshtastic.core.resources.default_
import org.meshtastic.core.resources.downlink_enabled
import org.meshtastic.core.resources.save
import org.meshtastic.core.resources.uplink_enabled
import org.meshtastic.core.ui.component.EditBase64Preference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.MeshtasticDialog

View file

@ -25,14 +25,14 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.ambient_lighting
import org.meshtastic.core.strings.ambient_lighting_config
import org.meshtastic.core.strings.blue
import org.meshtastic.core.strings.current
import org.meshtastic.core.strings.green
import org.meshtastic.core.strings.led_state
import org.meshtastic.core.strings.red
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.ambient_lighting
import org.meshtastic.core.resources.ambient_lighting_config
import org.meshtastic.core.resources.blue
import org.meshtastic.core.resources.current
import org.meshtastic.core.resources.green
import org.meshtastic.core.resources.led_state
import org.meshtastic.core.resources.red
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference
import org.meshtastic.core.ui.component.TitledCard

View file

@ -25,16 +25,16 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.audio
import org.meshtastic.core.strings.audio_config
import org.meshtastic.core.strings.codec2_sample_rate
import org.meshtastic.core.strings.codec_2_enabled
import org.meshtastic.core.strings.i2s_clock
import org.meshtastic.core.strings.i2s_data_in
import org.meshtastic.core.strings.i2s_data_out
import org.meshtastic.core.strings.i2s_word_select
import org.meshtastic.core.strings.ptt_pin
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.audio
import org.meshtastic.core.resources.audio_config
import org.meshtastic.core.resources.codec2_sample_rate
import org.meshtastic.core.resources.codec_2_enabled
import org.meshtastic.core.resources.i2s_clock
import org.meshtastic.core.resources.i2s_data_in
import org.meshtastic.core.resources.i2s_data_out
import org.meshtastic.core.resources.i2s_word_select
import org.meshtastic.core.resources.ptt_pin
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference

View file

@ -25,12 +25,12 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.bluetooth
import org.meshtastic.core.strings.bluetooth_config
import org.meshtastic.core.strings.bluetooth_enabled
import org.meshtastic.core.strings.fixed_pin
import org.meshtastic.core.strings.pairing_mode
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.bluetooth
import org.meshtastic.core.resources.bluetooth_config
import org.meshtastic.core.resources.bluetooth_enabled
import org.meshtastic.core.resources.fixed_pin
import org.meshtastic.core.resources.pairing_mode
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference

View file

@ -31,21 +31,21 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.allow_input_source
import org.meshtastic.core.strings.canned_message
import org.meshtastic.core.strings.canned_message_config
import org.meshtastic.core.strings.canned_message_enabled
import org.meshtastic.core.strings.generate_input_event_on_ccw
import org.meshtastic.core.strings.generate_input_event_on_cw
import org.meshtastic.core.strings.generate_input_event_on_press
import org.meshtastic.core.strings.gpio_pin_for_rotary_encoder_a_port
import org.meshtastic.core.strings.gpio_pin_for_rotary_encoder_b_port
import org.meshtastic.core.strings.gpio_pin_for_rotary_encoder_press_port
import org.meshtastic.core.strings.messages
import org.meshtastic.core.strings.rotary_encoder_1_enabled
import org.meshtastic.core.strings.send_bell
import org.meshtastic.core.strings.up_down_select_input_enabled
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.allow_input_source
import org.meshtastic.core.resources.canned_message
import org.meshtastic.core.resources.canned_message_config
import org.meshtastic.core.resources.canned_message_enabled
import org.meshtastic.core.resources.generate_input_event_on_ccw
import org.meshtastic.core.resources.generate_input_event_on_cw
import org.meshtastic.core.resources.generate_input_event_on_press
import org.meshtastic.core.resources.gpio_pin_for_rotary_encoder_a_port
import org.meshtastic.core.resources.gpio_pin_for_rotary_encoder_b_port
import org.meshtastic.core.resources.gpio_pin_for_rotary_encoder_press_port
import org.meshtastic.core.resources.messages
import org.meshtastic.core.resources.rotary_encoder_1_enabled
import org.meshtastic.core.resources.send_bell
import org.meshtastic.core.resources.up_down_select_input_enabled
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference

View file

@ -29,17 +29,17 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.detection_sensor
import org.meshtastic.core.strings.detection_sensor_config
import org.meshtastic.core.strings.detection_sensor_enabled
import org.meshtastic.core.strings.detection_trigger_type
import org.meshtastic.core.strings.friendly_name
import org.meshtastic.core.strings.gpio_pin_to_monitor
import org.meshtastic.core.strings.minimum_broadcast_seconds
import org.meshtastic.core.strings.send_bell_with_alert_message
import org.meshtastic.core.strings.state_broadcast_seconds
import org.meshtastic.core.strings.use_input_pullup_mode
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.detection_sensor
import org.meshtastic.core.resources.detection_sensor_config
import org.meshtastic.core.resources.detection_sensor_enabled
import org.meshtastic.core.resources.detection_trigger_type
import org.meshtastic.core.resources.friendly_name
import org.meshtastic.core.resources.gpio_pin_to_monitor
import org.meshtastic.core.resources.minimum_broadcast_seconds
import org.meshtastic.core.resources.send_bell_with_alert_message
import org.meshtastic.core.resources.state_broadcast_seconds
import org.meshtastic.core.resources.use_input_pullup_mode
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference

View file

@ -64,50 +64,50 @@ import no.nordicsemi.android.common.core.registerReceiver
import org.jetbrains.compose.resources.StringResource
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.model.util.toPosixString
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.accept
import org.meshtastic.core.strings.are_you_sure
import org.meshtastic.core.strings.button_gpio
import org.meshtastic.core.strings.buzzer_gpio
import org.meshtastic.core.strings.cancel
import org.meshtastic.core.strings.config_device_doubleTapAsButtonPress_summary
import org.meshtastic.core.strings.config_device_ledHeartbeatEnabled_summary
import org.meshtastic.core.strings.config_device_tripleClickAsAdHocPing_summary
import org.meshtastic.core.strings.config_device_tzdef_summary
import org.meshtastic.core.strings.config_device_use_phone_tz
import org.meshtastic.core.strings.device
import org.meshtastic.core.strings.double_tap_as_button_press
import org.meshtastic.core.strings.gpio
import org.meshtastic.core.strings.hardware
import org.meshtastic.core.strings.i_know_what_i_m_doing
import org.meshtastic.core.strings.led_heartbeat
import org.meshtastic.core.strings.nodeinfo_broadcast_interval
import org.meshtastic.core.strings.options
import org.meshtastic.core.strings.rebroadcast_mode
import org.meshtastic.core.strings.rebroadcast_mode_all_desc
import org.meshtastic.core.strings.rebroadcast_mode_all_skip_decoding_desc
import org.meshtastic.core.strings.rebroadcast_mode_core_portnums_only_desc
import org.meshtastic.core.strings.rebroadcast_mode_known_only_desc
import org.meshtastic.core.strings.rebroadcast_mode_local_only_desc
import org.meshtastic.core.strings.rebroadcast_mode_none_desc
import org.meshtastic.core.strings.role
import org.meshtastic.core.strings.role_client_base_desc
import org.meshtastic.core.strings.role_client_desc
import org.meshtastic.core.strings.role_client_hidden_desc
import org.meshtastic.core.strings.role_client_mute_desc
import org.meshtastic.core.strings.role_lost_and_found_desc
import org.meshtastic.core.strings.role_repeater_desc
import org.meshtastic.core.strings.role_router_client_desc
import org.meshtastic.core.strings.role_router_desc
import org.meshtastic.core.strings.role_router_late_desc
import org.meshtastic.core.strings.role_sensor_desc
import org.meshtastic.core.strings.role_tak_desc
import org.meshtastic.core.strings.role_tak_tracker_desc
import org.meshtastic.core.strings.role_tracker_desc
import org.meshtastic.core.strings.router_role_confirmation_text
import org.meshtastic.core.strings.time_zone
import org.meshtastic.core.strings.triple_click_adhoc_ping
import org.meshtastic.core.strings.unrecognized
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.accept
import org.meshtastic.core.resources.are_you_sure
import org.meshtastic.core.resources.button_gpio
import org.meshtastic.core.resources.buzzer_gpio
import org.meshtastic.core.resources.cancel
import org.meshtastic.core.resources.config_device_doubleTapAsButtonPress_summary
import org.meshtastic.core.resources.config_device_ledHeartbeatEnabled_summary
import org.meshtastic.core.resources.config_device_tripleClickAsAdHocPing_summary
import org.meshtastic.core.resources.config_device_tzdef_summary
import org.meshtastic.core.resources.config_device_use_phone_tz
import org.meshtastic.core.resources.device
import org.meshtastic.core.resources.double_tap_as_button_press
import org.meshtastic.core.resources.gpio
import org.meshtastic.core.resources.hardware
import org.meshtastic.core.resources.i_know_what_i_m_doing
import org.meshtastic.core.resources.led_heartbeat
import org.meshtastic.core.resources.nodeinfo_broadcast_interval
import org.meshtastic.core.resources.options
import org.meshtastic.core.resources.rebroadcast_mode
import org.meshtastic.core.resources.rebroadcast_mode_all_desc
import org.meshtastic.core.resources.rebroadcast_mode_all_skip_decoding_desc
import org.meshtastic.core.resources.rebroadcast_mode_core_portnums_only_desc
import org.meshtastic.core.resources.rebroadcast_mode_known_only_desc
import org.meshtastic.core.resources.rebroadcast_mode_local_only_desc
import org.meshtastic.core.resources.rebroadcast_mode_none_desc
import org.meshtastic.core.resources.role
import org.meshtastic.core.resources.role_client_base_desc
import org.meshtastic.core.resources.role_client_desc
import org.meshtastic.core.resources.role_client_hidden_desc
import org.meshtastic.core.resources.role_client_mute_desc
import org.meshtastic.core.resources.role_lost_and_found_desc
import org.meshtastic.core.resources.role_repeater_desc
import org.meshtastic.core.resources.role_router_client_desc
import org.meshtastic.core.resources.role_router_desc
import org.meshtastic.core.resources.role_router_late_desc
import org.meshtastic.core.resources.role_sensor_desc
import org.meshtastic.core.resources.role_tak_desc
import org.meshtastic.core.resources.role_tak_tracker_desc
import org.meshtastic.core.resources.role_tracker_desc
import org.meshtastic.core.resources.router_role_confirmation_text
import org.meshtastic.core.resources.time_zone
import org.meshtastic.core.resources.triple_click_adhoc_ping
import org.meshtastic.core.resources.unrecognized
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.InsetDivider

View file

@ -24,31 +24,31 @@ import androidx.compose.runtime.remember
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.advanced
import org.meshtastic.core.strings.always_point_north
import org.meshtastic.core.strings.bold_heading
import org.meshtastic.core.strings.carousel_interval
import org.meshtastic.core.strings.compass_orientation
import org.meshtastic.core.strings.config_display_auto_screen_carousel_secs_summary
import org.meshtastic.core.strings.config_display_compass_north_top_summary
import org.meshtastic.core.strings.config_display_displaymode_summary
import org.meshtastic.core.strings.config_display_flip_screen_summary
import org.meshtastic.core.strings.config_display_heading_bold_summary
import org.meshtastic.core.strings.config_display_oled_summary
import org.meshtastic.core.strings.config_display_screen_on_secs_summary
import org.meshtastic.core.strings.config_display_units_summary
import org.meshtastic.core.strings.config_display_wake_on_tap_or_motion_summary
import org.meshtastic.core.strings.display
import org.meshtastic.core.strings.display_config
import org.meshtastic.core.strings.display_mode
import org.meshtastic.core.strings.display_time_in_12h_format
import org.meshtastic.core.strings.display_units
import org.meshtastic.core.strings.flip_screen
import org.meshtastic.core.strings.oled_type
import org.meshtastic.core.strings.screen_on_for
import org.meshtastic.core.strings.use_12h_format
import org.meshtastic.core.strings.wake_on_tap_or_motion
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.advanced
import org.meshtastic.core.resources.always_point_north
import org.meshtastic.core.resources.bold_heading
import org.meshtastic.core.resources.carousel_interval
import org.meshtastic.core.resources.compass_orientation
import org.meshtastic.core.resources.config_display_auto_screen_carousel_secs_summary
import org.meshtastic.core.resources.config_display_compass_north_top_summary
import org.meshtastic.core.resources.config_display_displaymode_summary
import org.meshtastic.core.resources.config_display_flip_screen_summary
import org.meshtastic.core.resources.config_display_heading_bold_summary
import org.meshtastic.core.resources.config_display_oled_summary
import org.meshtastic.core.resources.config_display_screen_on_secs_summary
import org.meshtastic.core.resources.config_display_units_summary
import org.meshtastic.core.resources.config_display_wake_on_tap_or_motion_summary
import org.meshtastic.core.resources.display
import org.meshtastic.core.resources.display_config
import org.meshtastic.core.resources.display_mode
import org.meshtastic.core.resources.display_time_in_12h_format
import org.meshtastic.core.resources.display_units
import org.meshtastic.core.resources.flip_screen
import org.meshtastic.core.resources.oled_type
import org.meshtastic.core.resources.screen_on_for
import org.meshtastic.core.resources.use_12h_format
import org.meshtastic.core.resources.wake_on_tap_or_motion
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.SwitchPreference
import org.meshtastic.core.ui.component.TitledCard

View file

@ -28,15 +28,15 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.StringResource
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.cancel
import org.meshtastic.core.strings.channel_url
import org.meshtastic.core.strings.fixed_position
import org.meshtastic.core.strings.long_name
import org.meshtastic.core.strings.module_settings
import org.meshtastic.core.strings.radio_configuration
import org.meshtastic.core.strings.save
import org.meshtastic.core.strings.short_name
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.cancel
import org.meshtastic.core.resources.channel_url
import org.meshtastic.core.resources.fixed_position
import org.meshtastic.core.resources.long_name
import org.meshtastic.core.resources.module_settings
import org.meshtastic.core.resources.radio_configuration
import org.meshtastic.core.resources.save
import org.meshtastic.core.resources.short_name
import org.meshtastic.core.ui.component.MeshtasticDialog
import org.meshtastic.core.ui.component.SwitchPreference
import org.meshtastic.proto.DeviceProfile

View file

@ -45,30 +45,30 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import co.touchlab.kermit.Logger
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.advanced
import org.meshtastic.core.strings.alert_bell_buzzer
import org.meshtastic.core.strings.alert_bell_led
import org.meshtastic.core.strings.alert_bell_vibra
import org.meshtastic.core.strings.alert_message_buzzer
import org.meshtastic.core.strings.alert_message_led
import org.meshtastic.core.strings.alert_message_vibra
import org.meshtastic.core.strings.external_notification
import org.meshtastic.core.strings.external_notification_config
import org.meshtastic.core.strings.external_notification_enabled
import org.meshtastic.core.strings.import_label
import org.meshtastic.core.strings.nag_timeout_seconds
import org.meshtastic.core.strings.notifications_on_alert_bell_receipt
import org.meshtastic.core.strings.notifications_on_message_receipt
import org.meshtastic.core.strings.output_buzzer_gpio
import org.meshtastic.core.strings.output_duration_milliseconds
import org.meshtastic.core.strings.output_led_active_high
import org.meshtastic.core.strings.output_led_gpio
import org.meshtastic.core.strings.output_vibra_gpio
import org.meshtastic.core.strings.play
import org.meshtastic.core.strings.ringtone
import org.meshtastic.core.strings.use_i2s_as_buzzer
import org.meshtastic.core.strings.use_pwm_buzzer
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.advanced
import org.meshtastic.core.resources.alert_bell_buzzer
import org.meshtastic.core.resources.alert_bell_led
import org.meshtastic.core.resources.alert_bell_vibra
import org.meshtastic.core.resources.alert_message_buzzer
import org.meshtastic.core.resources.alert_message_led
import org.meshtastic.core.resources.alert_message_vibra
import org.meshtastic.core.resources.external_notification
import org.meshtastic.core.resources.external_notification_config
import org.meshtastic.core.resources.external_notification_enabled
import org.meshtastic.core.resources.import_label
import org.meshtastic.core.resources.nag_timeout_seconds
import org.meshtastic.core.resources.notifications_on_alert_bell_receipt
import org.meshtastic.core.resources.notifications_on_message_receipt
import org.meshtastic.core.resources.output_buzzer_gpio
import org.meshtastic.core.resources.output_duration_milliseconds
import org.meshtastic.core.resources.output_led_active_high
import org.meshtastic.core.resources.output_led_gpio
import org.meshtastic.core.resources.output_vibra_gpio
import org.meshtastic.core.resources.play
import org.meshtastic.core.resources.ringtone
import org.meshtastic.core.resources.use_i2s_as_buzzer
import org.meshtastic.core.resources.use_pwm_buzzer
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference

View file

@ -31,30 +31,30 @@ import org.meshtastic.core.model.Channel
import org.meshtastic.core.model.ChannelOption
import org.meshtastic.core.model.RegionInfo
import org.meshtastic.core.model.numChannels
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.advanced
import org.meshtastic.core.strings.bandwidth
import org.meshtastic.core.strings.coding_rate
import org.meshtastic.core.strings.config_lora_frequency_slot_summary
import org.meshtastic.core.strings.config_lora_hop_limit_summary
import org.meshtastic.core.strings.config_lora_modem_preset_summary
import org.meshtastic.core.strings.config_lora_region_summary
import org.meshtastic.core.strings.frequency_slot
import org.meshtastic.core.strings.hop_limit
import org.meshtastic.core.strings.ignore_mqtt
import org.meshtastic.core.strings.lora
import org.meshtastic.core.strings.modem_preset
import org.meshtastic.core.strings.ok_to_mqtt
import org.meshtastic.core.strings.options
import org.meshtastic.core.strings.override_duty_cycle
import org.meshtastic.core.strings.override_frequency_mhz
import org.meshtastic.core.strings.pa_fan_disabled
import org.meshtastic.core.strings.region_frequency_plan
import org.meshtastic.core.strings.spread_factor
import org.meshtastic.core.strings.sx126x_rx_boosted_gain
import org.meshtastic.core.strings.tx_enabled
import org.meshtastic.core.strings.tx_power_dbm
import org.meshtastic.core.strings.use_modem_preset
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.advanced
import org.meshtastic.core.resources.bandwidth
import org.meshtastic.core.resources.coding_rate
import org.meshtastic.core.resources.config_lora_frequency_slot_summary
import org.meshtastic.core.resources.config_lora_hop_limit_summary
import org.meshtastic.core.resources.config_lora_modem_preset_summary
import org.meshtastic.core.resources.config_lora_region_summary
import org.meshtastic.core.resources.frequency_slot
import org.meshtastic.core.resources.hop_limit
import org.meshtastic.core.resources.ignore_mqtt
import org.meshtastic.core.resources.lora
import org.meshtastic.core.resources.modem_preset
import org.meshtastic.core.resources.ok_to_mqtt
import org.meshtastic.core.resources.options
import org.meshtastic.core.resources.override_duty_cycle
import org.meshtastic.core.resources.override_frequency_mhz
import org.meshtastic.core.resources.pa_fan_disabled
import org.meshtastic.core.resources.region_frequency_plan
import org.meshtastic.core.resources.spread_factor
import org.meshtastic.core.resources.sx126x_rx_boosted_gain
import org.meshtastic.core.resources.tx_enabled
import org.meshtastic.core.resources.tx_power_dbm
import org.meshtastic.core.resources.use_modem_preset
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SignedIntegerEditTextPreference

View file

@ -30,20 +30,20 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.address
import org.meshtastic.core.strings.default_mqtt_address
import org.meshtastic.core.strings.encryption_enabled
import org.meshtastic.core.strings.json_output_enabled
import org.meshtastic.core.strings.map_reporting
import org.meshtastic.core.strings.mqtt
import org.meshtastic.core.strings.mqtt_config
import org.meshtastic.core.strings.mqtt_enabled
import org.meshtastic.core.strings.password
import org.meshtastic.core.strings.proxy_to_client_enabled
import org.meshtastic.core.strings.root_topic
import org.meshtastic.core.strings.tls_enabled
import org.meshtastic.core.strings.username
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.address
import org.meshtastic.core.resources.default_mqtt_address
import org.meshtastic.core.resources.encryption_enabled
import org.meshtastic.core.resources.json_output_enabled
import org.meshtastic.core.resources.map_reporting
import org.meshtastic.core.resources.mqtt
import org.meshtastic.core.resources.mqtt_config
import org.meshtastic.core.resources.mqtt_enabled
import org.meshtastic.core.resources.password
import org.meshtastic.core.resources.proxy_to_client_enabled
import org.meshtastic.core.resources.root_topic
import org.meshtastic.core.resources.tls_enabled
import org.meshtastic.core.resources.username
import org.meshtastic.core.ui.component.EditPasswordPreference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2025 Meshtastic LLC
* Copyright (c) 2025-2026 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
@ -14,7 +14,6 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.meshtastic.feature.settings.radio.component
import androidx.compose.animation.AnimatedVisibility
@ -40,14 +39,14 @@ import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.model.util.DistanceUnit
import org.meshtastic.core.model.util.toDistanceString
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.i_agree
import org.meshtastic.core.strings.i_agree_to_share_my_location
import org.meshtastic.core.strings.map_reporting
import org.meshtastic.core.strings.map_reporting_consent_header
import org.meshtastic.core.strings.map_reporting_consent_text
import org.meshtastic.core.strings.map_reporting_interval_seconds
import org.meshtastic.core.strings.map_reporting_summary
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.i_agree
import org.meshtastic.core.resources.i_agree_to_share_my_location
import org.meshtastic.core.resources.map_reporting
import org.meshtastic.core.resources.map_reporting_consent_header
import org.meshtastic.core.resources.map_reporting_consent_text
import org.meshtastic.core.resources.map_reporting_interval_seconds
import org.meshtastic.core.resources.map_reporting_summary
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.SwitchPreference
import org.meshtastic.core.ui.component.precisionBitsToMeters

View file

@ -25,13 +25,13 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.config_device_transmitOverLora_summary
import org.meshtastic.core.strings.neighbor_info
import org.meshtastic.core.strings.neighbor_info_config
import org.meshtastic.core.strings.neighbor_info_enabled
import org.meshtastic.core.strings.transmit_over_lora
import org.meshtastic.core.strings.update_interval_seconds
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.config_device_transmitOverLora_summary
import org.meshtastic.core.resources.neighbor_info
import org.meshtastic.core.resources.neighbor_info_config
import org.meshtastic.core.resources.neighbor_info_enabled
import org.meshtastic.core.resources.transmit_over_lora
import org.meshtastic.core.resources.update_interval_seconds
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference
import org.meshtastic.core.ui.component.TitledCard

View file

@ -44,35 +44,35 @@ import org.meshtastic.core.barcode.extractWifiCredentials
import org.meshtastic.core.barcode.rememberBarcodeScanner
import org.meshtastic.core.model.util.handleMeshtasticUri
import org.meshtastic.core.nfc.NfcScannerEffect
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.advanced
import org.meshtastic.core.strings.cancel
import org.meshtastic.core.strings.config_network_eth_enabled_summary
import org.meshtastic.core.strings.config_network_udp_enabled_summary
import org.meshtastic.core.strings.config_network_wifi_enabled_summary
import org.meshtastic.core.strings.connection_status
import org.meshtastic.core.strings.error
import org.meshtastic.core.strings.ethernet_config
import org.meshtastic.core.strings.ethernet_enabled
import org.meshtastic.core.strings.ethernet_ip
import org.meshtastic.core.strings.gateway
import org.meshtastic.core.strings.ip
import org.meshtastic.core.strings.ipv4_mode
import org.meshtastic.core.strings.network
import org.meshtastic.core.strings.nfc_disabled
import org.meshtastic.core.strings.ntp_server
import org.meshtastic.core.strings.open_settings
import org.meshtastic.core.strings.password
import org.meshtastic.core.strings.rsyslog_server
import org.meshtastic.core.strings.scan_nfc
import org.meshtastic.core.strings.ssid
import org.meshtastic.core.strings.subnet
import org.meshtastic.core.strings.udp_enabled
import org.meshtastic.core.strings.wifi_config
import org.meshtastic.core.strings.wifi_enabled
import org.meshtastic.core.strings.wifi_ip
import org.meshtastic.core.strings.wifi_qr_code_error
import org.meshtastic.core.strings.wifi_qr_code_scan
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.advanced
import org.meshtastic.core.resources.cancel
import org.meshtastic.core.resources.config_network_eth_enabled_summary
import org.meshtastic.core.resources.config_network_udp_enabled_summary
import org.meshtastic.core.resources.config_network_wifi_enabled_summary
import org.meshtastic.core.resources.connection_status
import org.meshtastic.core.resources.error
import org.meshtastic.core.resources.ethernet_config
import org.meshtastic.core.resources.ethernet_enabled
import org.meshtastic.core.resources.ethernet_ip
import org.meshtastic.core.resources.gateway
import org.meshtastic.core.resources.ip
import org.meshtastic.core.resources.ipv4_mode
import org.meshtastic.core.resources.network
import org.meshtastic.core.resources.nfc_disabled
import org.meshtastic.core.resources.ntp_server
import org.meshtastic.core.resources.open_settings
import org.meshtastic.core.resources.password
import org.meshtastic.core.resources.rsyslog_server
import org.meshtastic.core.resources.scan_nfc
import org.meshtastic.core.resources.ssid
import org.meshtastic.core.resources.subnet
import org.meshtastic.core.resources.udp_enabled
import org.meshtastic.core.resources.wifi_config
import org.meshtastic.core.resources.wifi_enabled
import org.meshtastic.core.resources.wifi_ip
import org.meshtastic.core.resources.wifi_qr_code_error
import org.meshtastic.core.resources.wifi_qr_code_scan
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditIPv4Preference
import org.meshtastic.core.ui.component.EditPasswordPreference

View file

@ -33,10 +33,10 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.delay
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.close
import org.meshtastic.core.strings.delivery_confirmed
import org.meshtastic.core.strings.error
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.close
import org.meshtastic.core.resources.delivery_confirmed
import org.meshtastic.core.resources.error
import org.meshtastic.core.ui.component.MeshtasticDialog
import org.meshtastic.feature.settings.radio.ResponseState

View file

@ -26,13 +26,13 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.ble_rssi_threshold_defaults_to_80
import org.meshtastic.core.strings.paxcounter
import org.meshtastic.core.strings.paxcounter_config
import org.meshtastic.core.strings.paxcounter_enabled
import org.meshtastic.core.strings.update_interval_seconds
import org.meshtastic.core.strings.wifi_rssi_threshold_defaults_to_80
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.ble_rssi_threshold_defaults_to_80
import org.meshtastic.core.resources.paxcounter
import org.meshtastic.core.resources.paxcounter_config
import org.meshtastic.core.resources.paxcounter_enabled
import org.meshtastic.core.resources.update_interval_seconds
import org.meshtastic.core.resources.wifi_rssi_threshold_defaults_to_80
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.SignedIntegerEditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference

View file

@ -40,31 +40,31 @@ import kotlinx.coroutines.launch
import no.nordicsemi.android.common.permissions.ble.RequireLocation
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.model.Position
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.advanced_device_gps
import org.meshtastic.core.strings.altitude
import org.meshtastic.core.strings.broadcast_interval
import org.meshtastic.core.strings.config_position_broadcast_secs_summary
import org.meshtastic.core.strings.config_position_broadcast_smart_minimum_distance_summary
import org.meshtastic.core.strings.config_position_broadcast_smart_minimum_interval_secs_summary
import org.meshtastic.core.strings.config_position_flags_summary
import org.meshtastic.core.strings.config_position_gps_update_interval_summary
import org.meshtastic.core.strings.device_gps
import org.meshtastic.core.strings.fixed_position
import org.meshtastic.core.strings.gps_en_gpio
import org.meshtastic.core.strings.gps_mode
import org.meshtastic.core.strings.gps_receive_gpio
import org.meshtastic.core.strings.gps_transmit_gpio
import org.meshtastic.core.strings.latitude
import org.meshtastic.core.strings.longitude
import org.meshtastic.core.strings.minimum_distance
import org.meshtastic.core.strings.minimum_interval
import org.meshtastic.core.strings.position
import org.meshtastic.core.strings.position_config_set_fixed_from_phone
import org.meshtastic.core.strings.position_flags
import org.meshtastic.core.strings.position_packet
import org.meshtastic.core.strings.smart_position
import org.meshtastic.core.strings.update_interval
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.advanced_device_gps
import org.meshtastic.core.resources.altitude
import org.meshtastic.core.resources.broadcast_interval
import org.meshtastic.core.resources.config_position_broadcast_secs_summary
import org.meshtastic.core.resources.config_position_broadcast_smart_minimum_distance_summary
import org.meshtastic.core.resources.config_position_broadcast_smart_minimum_interval_secs_summary
import org.meshtastic.core.resources.config_position_flags_summary
import org.meshtastic.core.resources.config_position_gps_update_interval_summary
import org.meshtastic.core.resources.device_gps
import org.meshtastic.core.resources.fixed_position
import org.meshtastic.core.resources.gps_en_gpio
import org.meshtastic.core.resources.gps_mode
import org.meshtastic.core.resources.gps_receive_gpio
import org.meshtastic.core.resources.gps_transmit_gpio
import org.meshtastic.core.resources.latitude
import org.meshtastic.core.resources.longitude
import org.meshtastic.core.resources.minimum_distance
import org.meshtastic.core.resources.minimum_interval
import org.meshtastic.core.resources.position
import org.meshtastic.core.resources.position_config_set_fixed_from_phone
import org.meshtastic.core.resources.position_flags
import org.meshtastic.core.resources.position_packet
import org.meshtastic.core.resources.smart_position
import org.meshtastic.core.resources.update_interval
import org.meshtastic.core.ui.component.BitwisePreference
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditTextPreference

View file

@ -26,18 +26,18 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.adc_multiplier_override
import org.meshtastic.core.strings.adc_multiplier_override_ratio
import org.meshtastic.core.strings.battery_ina_2xx_i2c_address
import org.meshtastic.core.strings.config_power_is_power_saving_summary
import org.meshtastic.core.strings.enable_power_saving_mode
import org.meshtastic.core.strings.minimum_wake_time_seconds
import org.meshtastic.core.strings.power
import org.meshtastic.core.strings.power_config
import org.meshtastic.core.strings.shutdown_on_power_loss
import org.meshtastic.core.strings.super_deep_sleep_duration_seconds
import org.meshtastic.core.strings.wait_for_bluetooth_duration_seconds
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.adc_multiplier_override
import org.meshtastic.core.resources.adc_multiplier_override_ratio
import org.meshtastic.core.resources.battery_ina_2xx_i2c_address
import org.meshtastic.core.resources.config_power_is_power_saving_summary
import org.meshtastic.core.resources.enable_power_saving_mode
import org.meshtastic.core.resources.minimum_wake_time_seconds
import org.meshtastic.core.resources.power
import org.meshtastic.core.resources.power_config
import org.meshtastic.core.resources.shutdown_on_power_loss
import org.meshtastic.core.resources.super_deep_sleep_duration_seconds
import org.meshtastic.core.resources.wait_for_bluetooth_duration_seconds
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference

View file

@ -34,9 +34,9 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.unit.dp
import com.squareup.wire.Message
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.discard_changes
import org.meshtastic.core.strings.save_changes
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.discard_changes
import org.meshtastic.core.resources.save_changes
import org.meshtastic.core.ui.component.MainAppBar
import org.meshtastic.core.ui.component.PreferenceFooter
import org.meshtastic.feature.settings.radio.ResponseState

View file

@ -24,12 +24,12 @@ import androidx.compose.runtime.remember
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.range_test
import org.meshtastic.core.strings.range_test_config
import org.meshtastic.core.strings.range_test_enabled
import org.meshtastic.core.strings.save_csv_in_storage_esp32_only
import org.meshtastic.core.strings.sender_message_interval_seconds
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.range_test
import org.meshtastic.core.resources.range_test_config
import org.meshtastic.core.resources.range_test_enabled
import org.meshtastic.core.resources.save_csv_in_storage_esp32_only
import org.meshtastic.core.resources.sender_message_interval_seconds
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.SwitchPreference
import org.meshtastic.core.ui.component.TitledCard

View file

@ -25,12 +25,12 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.allow_undefined_pin_access
import org.meshtastic.core.strings.available_pins
import org.meshtastic.core.strings.remote_hardware
import org.meshtastic.core.strings.remote_hardware_config
import org.meshtastic.core.strings.remote_hardware_enabled
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.allow_undefined_pin_access
import org.meshtastic.core.resources.available_pins
import org.meshtastic.core.resources.remote_hardware
import org.meshtastic.core.resources.remote_hardware_config
import org.meshtastic.core.resources.remote_hardware_enabled
import org.meshtastic.core.ui.component.EditListPreference
import org.meshtastic.core.ui.component.SwitchPreference
import org.meshtastic.core.ui.component.TitledCard

View file

@ -42,29 +42,29 @@ import okio.ByteString.Companion.toByteString
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.common.util.nowMillis
import org.meshtastic.core.model.util.encodeToString
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.admin_key
import org.meshtastic.core.strings.admin_keys
import org.meshtastic.core.strings.administration
import org.meshtastic.core.strings.config_security_admin_key
import org.meshtastic.core.strings.config_security_debug_log_api_enabled
import org.meshtastic.core.strings.config_security_is_managed
import org.meshtastic.core.strings.config_security_private_key
import org.meshtastic.core.strings.config_security_public_key
import org.meshtastic.core.strings.config_security_serial_enabled
import org.meshtastic.core.strings.debug_log_api_enabled
import org.meshtastic.core.strings.direct_message_key
import org.meshtastic.core.strings.export_keys
import org.meshtastic.core.strings.export_keys_confirmation
import org.meshtastic.core.strings.legacy_admin_channel
import org.meshtastic.core.strings.logs
import org.meshtastic.core.strings.managed_mode
import org.meshtastic.core.strings.private_key
import org.meshtastic.core.strings.public_key
import org.meshtastic.core.strings.regenerate_keys_confirmation
import org.meshtastic.core.strings.regenerate_private_key
import org.meshtastic.core.strings.security
import org.meshtastic.core.strings.serial_console
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.admin_key
import org.meshtastic.core.resources.admin_keys
import org.meshtastic.core.resources.administration
import org.meshtastic.core.resources.config_security_admin_key
import org.meshtastic.core.resources.config_security_debug_log_api_enabled
import org.meshtastic.core.resources.config_security_is_managed
import org.meshtastic.core.resources.config_security_private_key
import org.meshtastic.core.resources.config_security_public_key
import org.meshtastic.core.resources.config_security_serial_enabled
import org.meshtastic.core.resources.debug_log_api_enabled
import org.meshtastic.core.resources.direct_message_key
import org.meshtastic.core.resources.export_keys
import org.meshtastic.core.resources.export_keys_confirmation
import org.meshtastic.core.resources.legacy_admin_channel
import org.meshtastic.core.resources.logs
import org.meshtastic.core.resources.managed_mode
import org.meshtastic.core.resources.private_key
import org.meshtastic.core.resources.public_key
import org.meshtastic.core.resources.regenerate_keys_confirmation
import org.meshtastic.core.resources.regenerate_private_key
import org.meshtastic.core.resources.security
import org.meshtastic.core.resources.serial_console
import org.meshtastic.core.ui.component.CopyIconButton
import org.meshtastic.core.ui.component.EditBase64Preference
import org.meshtastic.core.ui.component.EditListPreference

View file

@ -25,15 +25,15 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.echo_enabled
import org.meshtastic.core.strings.override_console_serial_port
import org.meshtastic.core.strings.serial
import org.meshtastic.core.strings.serial_baud_rate
import org.meshtastic.core.strings.serial_config
import org.meshtastic.core.strings.serial_enabled
import org.meshtastic.core.strings.serial_mode
import org.meshtastic.core.strings.timeout
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.echo_enabled
import org.meshtastic.core.resources.override_console_serial_port
import org.meshtastic.core.resources.serial
import org.meshtastic.core.resources.serial_baud_rate
import org.meshtastic.core.resources.serial_config
import org.meshtastic.core.resources.serial_enabled
import org.meshtastic.core.resources.serial_mode
import org.meshtastic.core.resources.timeout
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference

View file

@ -34,11 +34,11 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.database.model.Node
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.cancel
import org.meshtastic.core.strings.send
import org.meshtastic.core.strings.shutdown_node_name
import org.meshtastic.core.strings.shutdown_warning
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.cancel
import org.meshtastic.core.resources.send
import org.meshtastic.core.resources.shutdown_node_name
import org.meshtastic.core.resources.shutdown_warning
import org.meshtastic.core.ui.component.MeshtasticDialog
import org.meshtastic.core.ui.theme.AppTheme
import org.meshtastic.proto.User

View file

@ -32,11 +32,11 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.clear
import org.meshtastic.core.strings.node_status_summary
import org.meshtastic.core.strings.status_message
import org.meshtastic.core.strings.status_message_config
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.clear
import org.meshtastic.core.resources.node_status_summary
import org.meshtastic.core.resources.status_message
import org.meshtastic.core.resources.status_message_config
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.TitledCard
import org.meshtastic.feature.settings.radio.RadioConfigViewModel

View file

@ -25,15 +25,15 @@ import androidx.compose.ui.platform.LocalFocusManager
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.heartbeat
import org.meshtastic.core.strings.history_return_max
import org.meshtastic.core.strings.history_return_window
import org.meshtastic.core.strings.number_of_records
import org.meshtastic.core.strings.server
import org.meshtastic.core.strings.store_forward
import org.meshtastic.core.strings.store_forward_config
import org.meshtastic.core.strings.store_forward_enabled
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.heartbeat
import org.meshtastic.core.resources.history_return_max
import org.meshtastic.core.resources.history_return_window
import org.meshtastic.core.resources.number_of_records
import org.meshtastic.core.resources.server
import org.meshtastic.core.resources.store_forward
import org.meshtastic.core.resources.store_forward_config
import org.meshtastic.core.resources.store_forward_enabled
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.SwitchPreference
import org.meshtastic.core.ui.component.TitledCard

View file

@ -25,21 +25,21 @@ import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.model.Capabilities
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.air_quality_metrics_module_enabled
import org.meshtastic.core.strings.air_quality_metrics_update_interval_seconds
import org.meshtastic.core.strings.device_metrics_update_interval_seconds
import org.meshtastic.core.strings.device_telemetry_enabled
import org.meshtastic.core.strings.device_telemetry_enabled_summary
import org.meshtastic.core.strings.environment_metrics_module_enabled
import org.meshtastic.core.strings.environment_metrics_on_screen_enabled
import org.meshtastic.core.strings.environment_metrics_update_interval_seconds
import org.meshtastic.core.strings.environment_metrics_use_fahrenheit
import org.meshtastic.core.strings.power_metrics_module_enabled
import org.meshtastic.core.strings.power_metrics_on_screen_enabled
import org.meshtastic.core.strings.power_metrics_update_interval_seconds
import org.meshtastic.core.strings.telemetry
import org.meshtastic.core.strings.telemetry_config
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.air_quality_metrics_module_enabled
import org.meshtastic.core.resources.air_quality_metrics_update_interval_seconds
import org.meshtastic.core.resources.device_metrics_update_interval_seconds
import org.meshtastic.core.resources.device_telemetry_enabled
import org.meshtastic.core.resources.device_telemetry_enabled_summary
import org.meshtastic.core.resources.environment_metrics_module_enabled
import org.meshtastic.core.resources.environment_metrics_on_screen_enabled
import org.meshtastic.core.resources.environment_metrics_update_interval_seconds
import org.meshtastic.core.resources.environment_metrics_use_fahrenheit
import org.meshtastic.core.resources.power_metrics_module_enabled
import org.meshtastic.core.resources.power_metrics_on_screen_enabled
import org.meshtastic.core.resources.power_metrics_update_interval_seconds
import org.meshtastic.core.resources.telemetry
import org.meshtastic.core.resources.telemetry_config
import org.meshtastic.core.ui.component.DropDownPreference
import org.meshtastic.core.ui.component.SwitchPreference
import org.meshtastic.core.ui.component.TitledCard

View file

@ -31,17 +31,17 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.database.model.isUnmessageableRole
import org.meshtastic.core.model.Capabilities
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.hardware_model
import org.meshtastic.core.strings.licensed_amateur_radio
import org.meshtastic.core.strings.licensed_amateur_radio_text
import org.meshtastic.core.strings.long_name
import org.meshtastic.core.strings.node_id
import org.meshtastic.core.strings.short_name
import org.meshtastic.core.strings.unmessageable
import org.meshtastic.core.strings.unmonitored_or_infrastructure
import org.meshtastic.core.strings.user
import org.meshtastic.core.strings.user_config
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.hardware_model
import org.meshtastic.core.resources.licensed_amateur_radio
import org.meshtastic.core.resources.licensed_amateur_radio_text
import org.meshtastic.core.resources.long_name
import org.meshtastic.core.resources.node_id
import org.meshtastic.core.resources.short_name
import org.meshtastic.core.resources.unmessageable
import org.meshtastic.core.resources.unmonitored_or_infrastructure
import org.meshtastic.core.resources.user
import org.meshtastic.core.resources.user_config
import org.meshtastic.core.ui.component.EditTextPreference
import org.meshtastic.core.ui.component.RegularPreference
import org.meshtastic.core.ui.component.SwitchPreference

View file

@ -22,9 +22,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.cancel
import org.meshtastic.core.strings.send
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.cancel
import org.meshtastic.core.resources.send
import org.meshtastic.core.ui.component.MeshtasticDialog
import org.meshtastic.core.ui.theme.AppTheme

View file

@ -21,12 +21,12 @@ package org.meshtastic.feature.settings.util
import org.jetbrains.compose.resources.PluralStringResource
import org.jetbrains.compose.resources.StringResource
import org.meshtastic.core.model.util.TimeConstants
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.interval_always_on
import org.meshtastic.core.strings.interval_unset
import org.meshtastic.core.strings.plurals_hours
import org.meshtastic.core.strings.plurals_minutes
import org.meshtastic.core.strings.plurals_seconds
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.interval_always_on
import org.meshtastic.core.resources.interval_unset
import org.meshtastic.core.resources.plurals_hours
import org.meshtastic.core.resources.plurals_minutes
import org.meshtastic.core.resources.plurals_seconds
import kotlin.time.Duration.Companion.hours
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds

View file

@ -23,12 +23,12 @@ import androidx.compose.ui.platform.LocalResources
import androidx.core.os.LocaleListCompat
import co.touchlab.kermit.Logger
import org.jetbrains.compose.resources.stringResource
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.fr_HT
import org.meshtastic.core.strings.preferences_system_default
import org.meshtastic.core.strings.pt_BR
import org.meshtastic.core.strings.zh_CN
import org.meshtastic.core.strings.zh_TW
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.fr_HT
import org.meshtastic.core.resources.preferences_system_default
import org.meshtastic.core.resources.pt_BR
import org.meshtastic.core.resources.zh_CN
import org.meshtastic.core.resources.zh_TW
import org.xmlpull.v1.XmlPullParser
import java.util.Locale

View file

@ -1,34 +0,0 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package org.meshtastic.feature.settings.util
import androidx.compose.runtime.Composable
import org.jetbrains.compose.resources.stringResource
@Suppress("SpreadOperator")
sealed class UiText {
data class DynamicString(val value: String) : UiText()
class StringResource(val resId: org.jetbrains.compose.resources.StringResource, vararg val args: Any) : UiText()
@Composable
fun asString(): String = when (this) {
is DynamicString -> value
is StringResource -> stringResource(resId, *args)
}
}

View file

@ -25,9 +25,9 @@ import androidx.compose.ui.test.onNodeWithText
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.meshtastic.core.strings.Res
import org.meshtastic.core.strings.getString
import org.meshtastic.core.strings.use_homoglyph_characters_encoding
import org.meshtastic.core.resources.Res
import org.meshtastic.core.resources.getString
import org.meshtastic.core.resources.use_homoglyph_characters_encoding
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import java.util.Locale