kopia lustrzana https://github.com/meshtastic/Meshtastic-Android
refactor: consolidate QR code scanning methods
rodzic
75003bb6f0
commit
f73d909cd0
|
@ -3,7 +3,6 @@ package com.geeksville.mesh
|
|||
import android.net.Uri
|
||||
import com.geeksville.mesh.model.getChannelUrl
|
||||
import com.geeksville.mesh.model.primaryChannel
|
||||
import com.geeksville.mesh.model.shouldAddChannels
|
||||
import com.geeksville.mesh.model.toChannelSet
|
||||
import dagger.hilt.android.testing.HiltAndroidRule
|
||||
import dagger.hilt.android.testing.HiltAndroidTest
|
||||
|
@ -47,9 +46,8 @@ class ChannelSetTest {
|
|||
fun handleAddInFragment() {
|
||||
val url = Uri.parse("https://meshtastic.org/e/#CgMSAQESBggBQANIAQ?add=true")
|
||||
val cs = url.toChannelSet()
|
||||
val shouldAdd = url.shouldAddChannels()
|
||||
Assert.assertEquals("LongFast", cs.primaryChannel!!.name)
|
||||
Assert.assertTrue(shouldAdd)
|
||||
Assert.assertEquals("Custom", cs.primaryChannel!!.name)
|
||||
Assert.assertFalse(cs.hasLoraConfig())
|
||||
}
|
||||
|
||||
/** properly parse channel config when `?add=true` is in the query parameters */
|
||||
|
@ -57,8 +55,7 @@ class ChannelSetTest {
|
|||
fun handleAddInQueryParams() {
|
||||
val url = Uri.parse("https://meshtastic.org/e/?add=true#CgMSAQESBggBQANIAQ")
|
||||
val cs = url.toChannelSet()
|
||||
val shouldAdd = url.shouldAddChannels()
|
||||
Assert.assertEquals("LongFast", cs.primaryChannel!!.name)
|
||||
Assert.assertTrue(shouldAdd)
|
||||
Assert.assertEquals("Custom", cs.primaryChannel!!.name)
|
||||
Assert.assertFalse(cs.hasLoraConfig())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,8 @@ package com.geeksville.mesh
|
|||
|
||||
import android.app.Activity
|
||||
import android.bluetooth.BluetoothAdapter
|
||||
import android.content.*
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageInfo
|
||||
import android.content.pm.PackageManager
|
||||
import android.hardware.usb.UsbManager
|
||||
|
@ -22,25 +23,47 @@ import androidx.activity.viewModels
|
|||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.fragment.app.FragmentTransaction
|
||||
import androidx.lifecycle.asLiveData
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
import com.geeksville.mesh.android.*
|
||||
import com.geeksville.mesh.android.BindFailedException
|
||||
import com.geeksville.mesh.android.GeeksvilleApplication
|
||||
import com.geeksville.mesh.android.Logging
|
||||
import com.geeksville.mesh.android.ServiceClient
|
||||
import com.geeksville.mesh.android.getBluetoothPermissions
|
||||
import com.geeksville.mesh.android.getNotificationPermissions
|
||||
import com.geeksville.mesh.android.hasBluetoothPermission
|
||||
import com.geeksville.mesh.android.hasNotificationPermission
|
||||
import com.geeksville.mesh.android.permissionMissing
|
||||
import com.geeksville.mesh.android.rationaleDialog
|
||||
import com.geeksville.mesh.android.shouldShowRequestPermissionRationale
|
||||
import com.geeksville.mesh.concurrent.handledLaunch
|
||||
import com.geeksville.mesh.databinding.ActivityMainBinding
|
||||
import com.geeksville.mesh.model.BluetoothViewModel
|
||||
import com.geeksville.mesh.model.DeviceVersion
|
||||
import com.geeksville.mesh.model.UIViewModel
|
||||
import com.geeksville.mesh.model.primaryChannel
|
||||
import com.geeksville.mesh.model.shouldAddChannels
|
||||
import com.geeksville.mesh.model.toChannelSet
|
||||
import com.geeksville.mesh.service.*
|
||||
import com.geeksville.mesh.ui.*
|
||||
import com.geeksville.mesh.service.MeshService
|
||||
import com.geeksville.mesh.service.MeshServiceNotifications
|
||||
import com.geeksville.mesh.service.ServiceRepository
|
||||
import com.geeksville.mesh.service.startService
|
||||
import com.geeksville.mesh.ui.ChannelFragment
|
||||
import com.geeksville.mesh.ui.ContactsFragment
|
||||
import com.geeksville.mesh.ui.DebugFragment
|
||||
import com.geeksville.mesh.ui.QuickChatSettingsFragment
|
||||
import com.geeksville.mesh.ui.SettingsFragment
|
||||
import com.geeksville.mesh.ui.UsersFragment
|
||||
import com.geeksville.mesh.ui.components.ScannedQrCodeDialog
|
||||
import com.geeksville.mesh.ui.map.MapFragment
|
||||
import com.geeksville.mesh.ui.navigateToMessages
|
||||
import com.geeksville.mesh.ui.navigateToNavGraph
|
||||
import com.geeksville.mesh.ui.theme.AppTheme
|
||||
import com.geeksville.mesh.util.Exceptions
|
||||
import com.geeksville.mesh.util.LanguageUtils
|
||||
import com.geeksville.mesh.util.getPackageInfoCompat
|
||||
|
@ -222,6 +245,25 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
override fun onTabReselected(tab: TabLayout.Tab?) { }
|
||||
})
|
||||
|
||||
binding.composeView.setContent {
|
||||
val connState by model.connectionState.collectAsStateWithLifecycle()
|
||||
val channels by model.channels.collectAsStateWithLifecycle()
|
||||
val requestChannelSet by model.requestChannelSet.collectAsStateWithLifecycle()
|
||||
|
||||
AppTheme {
|
||||
if (connState.isConnected()) {
|
||||
if (requestChannelSet != null) {
|
||||
ScannedQrCodeDialog(
|
||||
channels = channels,
|
||||
incoming = requestChannelSet!!,
|
||||
onDismiss = model::clearRequestChannelUrl,
|
||||
onConfirm = model::setChannels,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle any intent
|
||||
handleIntent(intent)
|
||||
}
|
||||
|
@ -253,8 +295,6 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
handleIntent(intent)
|
||||
}
|
||||
|
||||
private var requestedChannelUrl: Uri? = null
|
||||
|
||||
// Handle any intents that were passed into us
|
||||
private fun handleIntent(intent: Intent) {
|
||||
val appLinkAction = intent.action
|
||||
|
@ -263,10 +303,12 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
when (appLinkAction) {
|
||||
Intent.ACTION_VIEW -> {
|
||||
debug("Asked to open a channel URL - ask user if they want to switch to that channel. If so send the config to the radio")
|
||||
requestedChannelUrl = appLinkData
|
||||
|
||||
// if the device is connected already, process it now
|
||||
perhapsChangeChannel()
|
||||
try {
|
||||
appLinkData?.let { model.requestChannelSet(it.toChannelSet()) }
|
||||
} catch (ex: Throwable) {
|
||||
errormsg("Channel url error: ${ex.message}")
|
||||
showSnackbar("${getString(R.string.channel_invalid)}: ${ex.message}")
|
||||
}
|
||||
|
||||
// We now wait for the device to connect, once connected, we ask the user if they want to switch to the new channel
|
||||
}
|
||||
|
@ -355,11 +397,6 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
|
||||
if (curVer < MeshService.minDeviceVersion) {
|
||||
showAlert(R.string.firmware_too_old, R.string.firmware_old)
|
||||
} else {
|
||||
// If our app is too old/new, we probably don't understand the new DeviceConfig messages, so we don't read them until here
|
||||
|
||||
// we have a connection to our device now, do the channel change
|
||||
perhapsChangeChannel()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -407,51 +444,6 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
}
|
||||
}
|
||||
|
||||
@Suppress("NestedBlockDepth")
|
||||
private fun perhapsChangeChannel(url: Uri? = requestedChannelUrl) {
|
||||
// if the device is connected already, process it now
|
||||
if (url != null && model.isConnected()) {
|
||||
requestedChannelUrl = null
|
||||
try {
|
||||
val channels = url.toChannelSet()
|
||||
val shouldAdd = url.shouldAddChannels()
|
||||
val primary = channels.primaryChannel
|
||||
if (primary == null) {
|
||||
showSnackbar(R.string.channel_invalid)
|
||||
} else {
|
||||
val dialogMessage = if (!shouldAdd) {
|
||||
getString(R.string.do_you_want_switch).format(primary.name)
|
||||
} else {
|
||||
resources.getQuantityString(
|
||||
R.plurals.add_channel_from_qr,
|
||||
channels.settingsCount,
|
||||
channels.settingsCount
|
||||
)
|
||||
}
|
||||
MaterialAlertDialogBuilder(this)
|
||||
.setTitle(R.string.new_channel_rcvd)
|
||||
.setMessage(dialogMessage)
|
||||
.setNeutralButton(R.string.cancel) { _, _ ->
|
||||
// Do nothing
|
||||
}
|
||||
.setPositiveButton(R.string.accept) { _, _ ->
|
||||
debug("Setting channel from URL")
|
||||
try {
|
||||
model.setChannels(channels, !shouldAdd)
|
||||
} catch (ex: RemoteException) {
|
||||
errormsg("Couldn't change channel ${ex.message}")
|
||||
showSnackbar(R.string.cant_change_no_radio)
|
||||
}
|
||||
}
|
||||
.show()
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
errormsg("Channel url error: ${ex.message}")
|
||||
showSnackbar("${getString(R.string.channel_invalid)}: ${ex.message}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
|
||||
return try {
|
||||
super.dispatchTouchEvent(ev)
|
||||
|
@ -562,15 +554,6 @@ class MainActivity : AppCompatActivity(), Logging {
|
|||
}
|
||||
}
|
||||
|
||||
// Call perhapsChangeChannel() whenever [requestChannelUrl] updates with a non-null value
|
||||
model.requestChannelUrl.observe(this) { url ->
|
||||
url?.let {
|
||||
requestedChannelUrl = url
|
||||
model.clearRequestChannelUrl()
|
||||
perhapsChangeChannel()
|
||||
}
|
||||
}
|
||||
|
||||
// Call showSnackbar() whenever [snackbarText] updates with a non-null value
|
||||
model.snackbarText.observe(this) { text ->
|
||||
if (text is Int) showSnackbar(text)
|
||||
|
|
|
@ -11,9 +11,9 @@ import com.journeyapps.barcodescanner.BarcodeEncoder
|
|||
import java.net.MalformedURLException
|
||||
import kotlin.jvm.Throws
|
||||
|
||||
internal const val URL_PREFIX = "https://meshtastic.org/e/#"
|
||||
private const val MESHTASTIC_DOMAIN = "meshtastic.org"
|
||||
private const val MESHTASTIC_CHANNEL_CONFIG_PATH = "/e/"
|
||||
private const val MESHTASTIC_HOST = "meshtastic.org"
|
||||
private const val MESHTASTIC_PATH = "/e/"
|
||||
internal const val URL_PREFIX = "https://$MESHTASTIC_HOST$MESHTASTIC_PATH#"
|
||||
private const val BASE64FLAGS = Base64.URL_SAFE + Base64.NO_WRAP + Base64.NO_PADDING
|
||||
|
||||
/**
|
||||
|
@ -23,37 +23,21 @@ private const val BASE64FLAGS = Base64.URL_SAFE + Base64.NO_WRAP + Base64.NO_PAD
|
|||
@Throws(MalformedURLException::class)
|
||||
fun Uri.toChannelSet(): ChannelSet {
|
||||
if (fragment.isNullOrBlank() ||
|
||||
!host.equals(MESHTASTIC_DOMAIN, true) ||
|
||||
!path.equals(MESHTASTIC_CHANNEL_CONFIG_PATH, true)
|
||||
!host.equals(MESHTASTIC_HOST, true) ||
|
||||
!path.equals(MESHTASTIC_PATH, true)
|
||||
) {
|
||||
throw MalformedURLException("Not a valid Meshtastic URL: ${toString().take(40)}")
|
||||
}
|
||||
|
||||
// Older versions of Meshtastic clients (Apple/web) included `?add=true` within the URL fragment.
|
||||
// This gracefully handles those cases until the newer version are generally available/used.
|
||||
return ChannelSet.parseFrom(Base64.decode(fragment!!.substringBefore('?'), BASE64FLAGS))
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a [Boolean] if the URL indicates the associated [ChannelSet] should be added to the
|
||||
* existing configuration.
|
||||
* @throws MalformedURLException when not recognized as a valid Meshtastic URL
|
||||
*/
|
||||
@Throws(MalformedURLException::class)
|
||||
fun Uri.shouldAddChannels(): Boolean {
|
||||
if (fragment.isNullOrBlank() ||
|
||||
!host.equals(MESHTASTIC_DOMAIN, true) ||
|
||||
!path.equals(MESHTASTIC_CHANNEL_CONFIG_PATH, true)
|
||||
) {
|
||||
throw MalformedURLException("Not a valid Meshtastic URL: ${toString().take(40)}")
|
||||
}
|
||||
|
||||
// Older versions of Meshtastic clients (Apple/web) included `?add=true` within the URL fragment.
|
||||
// This gracefully handles those cases until the newer version are generally available/used.
|
||||
return fragment?.substringAfter('?', "")
|
||||
val url = ChannelSet.parseFrom(Base64.decode(fragment!!.substringBefore('?'), BASE64FLAGS))
|
||||
val shouldAdd = fragment?.substringAfter('?', "")
|
||||
?.takeUnless { it.isBlank() }
|
||||
?.equals("add=true")
|
||||
?: getBooleanQueryParameter("add", false)
|
||||
|
||||
return url.toBuilder().apply { if (shouldAdd) clearLoraConfig() }.build()
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -451,18 +451,18 @@ class UIViewModel @Inject constructor(
|
|||
val connectionState get() = radioConfigRepository.connectionState
|
||||
fun isConnected() = connectionState.value != MeshService.ConnectionState.DISCONNECTED
|
||||
|
||||
private val _requestChannelUrl = MutableLiveData<Uri?>(null)
|
||||
val requestChannelUrl: LiveData<Uri?> get() = _requestChannelUrl
|
||||
private val _requestChannelSet = MutableStateFlow<AppOnlyProtos.ChannelSet?>(null)
|
||||
val requestChannelSet: StateFlow<AppOnlyProtos.ChannelSet?> get() = _requestChannelSet
|
||||
|
||||
fun setRequestChannelUrl(channelUrl: Uri) {
|
||||
_requestChannelUrl.value = channelUrl
|
||||
fun requestChannelSet(channelSet: AppOnlyProtos.ChannelSet) {
|
||||
_requestChannelSet.value = channelSet
|
||||
}
|
||||
|
||||
/**
|
||||
* Called immediately after activity observes requestChannelUrl
|
||||
*/
|
||||
fun clearRequestChannelUrl() {
|
||||
_requestChannelUrl.value = null
|
||||
_requestChannelSet.value = null
|
||||
}
|
||||
|
||||
fun showSnackbar(resString: Any) {
|
||||
|
@ -538,24 +538,14 @@ class UIViewModel @Inject constructor(
|
|||
}
|
||||
|
||||
/**
|
||||
* Set the radio config (also updates our saved copy in preferences). By default, this will replace
|
||||
* all channels in the existing radio config. Otherwise, it will append all [ChannelSettings] that
|
||||
* are unique in [channelSet] to the existing radio config.
|
||||
* Set the radio config (also updates our saved copy in preferences).
|
||||
*/
|
||||
fun setChannels(channelSet: AppOnlyProtos.ChannelSet, overwrite: Boolean = true) = viewModelScope.launch {
|
||||
val newRadioSettings: List<ChannelSettings> = if (overwrite) {
|
||||
channelSet.settingsList
|
||||
} else {
|
||||
// To guarantee consistent ordering, using a LinkedHashSet which iterates through it's
|
||||
// entries according to the order an item was *first* inserted.
|
||||
// https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-linked-hash-set/
|
||||
LinkedHashSet(channels.value.settingsList + channelSet.settingsList).toList()
|
||||
}
|
||||
fun setChannels(channelSet: AppOnlyProtos.ChannelSet) = viewModelScope.launch {
|
||||
getChannelList(channelSet.settingsList, channels.value.settingsList).forEach(::setChannel)
|
||||
radioConfigRepository.replaceAllSettings(channelSet.settingsList)
|
||||
|
||||
getChannelList(newRadioSettings, channels.value.settingsList).forEach(::setChannel)
|
||||
radioConfigRepository.replaceAllSettings(newRadioSettings)
|
||||
val newConfig = config { lora = channelSet.loraConfig }
|
||||
if (overwrite && config.lora != newConfig.lora) setConfig(newConfig)
|
||||
if (config.lora != newConfig.lora) setConfig(newConfig)
|
||||
}
|
||||
|
||||
val provideLocation = object : MutableLiveData<Boolean>(preferences.getBoolean("provide-location", false)) {
|
||||
|
|
|
@ -85,7 +85,6 @@ import com.geeksville.mesh.service.MeshService
|
|||
import com.geeksville.mesh.ui.components.AdaptiveTwoPane
|
||||
import com.geeksville.mesh.ui.components.DropDownPreference
|
||||
import com.geeksville.mesh.ui.components.PreferenceFooter
|
||||
import com.geeksville.mesh.ui.components.ScannedQrCodeDialog
|
||||
import com.geeksville.mesh.ui.components.config.ChannelCard
|
||||
import com.geeksville.mesh.ui.components.config.ChannelSelection
|
||||
import com.geeksville.mesh.ui.components.config.EditChannelDialog
|
||||
|
@ -147,11 +146,10 @@ fun ChannelScreen(
|
|||
val channelUrl = channelSet.getChannelUrl()
|
||||
val modemPresetName = Channel(loraConfig = channelSet.loraConfig).name
|
||||
|
||||
var scannedChannelSet by remember { mutableStateOf<ChannelSet?>(null) }
|
||||
val barcodeLauncher = rememberLauncherForActivityResult(ScanContract()) { result ->
|
||||
if (result.contents != null) {
|
||||
try {
|
||||
scannedChannelSet = Uri.parse(result.contents).toChannelSet()
|
||||
viewModel.requestChannelSet(Uri.parse(result.contents).toChannelSet())
|
||||
} catch (ex: Throwable) {
|
||||
errormsg("Channel url error: ${ex.message}")
|
||||
viewModel.showSnackbar(R.string.channel_invalid)
|
||||
|
@ -266,17 +264,6 @@ fun ChannelScreen(
|
|||
.show()
|
||||
}
|
||||
|
||||
if (scannedChannelSet != null) {
|
||||
val incoming = scannedChannelSet ?: return
|
||||
/* Prompt the user to modify channels after scanning a QR code. */
|
||||
ScannedQrCodeDialog(
|
||||
channels = channels,
|
||||
incoming = incoming,
|
||||
onDismiss = { scannedChannelSet = null },
|
||||
onConfirm = { newChannelSet -> installSettings(newChannelSet) }
|
||||
)
|
||||
}
|
||||
|
||||
var showEditChannelDialog: Int? by remember { mutableStateOf(null) }
|
||||
|
||||
if (showEditChannelDialog != null) {
|
||||
|
@ -375,7 +362,7 @@ fun ChannelScreen(
|
|||
IconButton(onClick = {
|
||||
when {
|
||||
isError -> valueState = channelUrl
|
||||
!isUrlEqual -> viewModel.setRequestChannelUrl(channelUrl)
|
||||
!isUrlEqual -> viewModel.requestChannelSet(channels)
|
||||
else -> {
|
||||
// track how many times users share channels
|
||||
GeeksvilleApplication.analytics.track(
|
||||
|
|
|
@ -51,13 +51,16 @@ fun ScannedQrCodeDialog(
|
|||
onDismiss: () -> Unit,
|
||||
onConfirm: (ChannelSet) -> Unit
|
||||
) {
|
||||
var shouldReplace by remember { mutableStateOf(true) }
|
||||
var shouldReplace by remember { mutableStateOf(incoming.hasLoraConfig()) }
|
||||
|
||||
val channelSet = remember(shouldReplace) {
|
||||
if (shouldReplace) {
|
||||
incoming
|
||||
} else {
|
||||
channels.copy {
|
||||
// To guarantee consistent ordering, using a LinkedHashSet which iterates through
|
||||
// it's entries according to the order an item was *first* inserted.
|
||||
// https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-linked-hash-set/
|
||||
val result = LinkedHashSet(settings + incoming.settingsList)
|
||||
settings.clear()
|
||||
settings.addAll(result)
|
||||
|
@ -134,6 +137,7 @@ fun ScannedQrCodeDialog(
|
|||
modifier = Modifier
|
||||
.height(48.dp)
|
||||
.weight(1f),
|
||||
enabled = incoming.hasLoraConfig(),
|
||||
colors = if (shouldReplace) selectedColors else unselectedColors,
|
||||
) { Text(text = stringResource(R.string.replace)) }
|
||||
}
|
||||
|
|
|
@ -72,4 +72,9 @@
|
|||
android:layout_height="match_parent"
|
||||
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" />
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
||||
<androidx.compose.ui.platform.ComposeView
|
||||
android:id="@+id/composeView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</FrameLayout>
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Промени канал</string>
|
||||
<string name="are_you_sure_channel">Сигурни ли сте, че искате да смените канала? Цялата комуникация с други възли ще спре, докато не споделите новите настройки на канала.</string>
|
||||
<string name="new_channel_rcvd">Получен е URL адрес на нов канал</string>
|
||||
<string name="do_you_want_switch">Искате ли да превключите към канала \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic се нуждае от разрешение за местоположение. Местоположението трябва да е включено, за да намира нови устройства чрез Bluetooth. Можете да го изключите отново след това.</string>
|
||||
<string name="report_bug">Докладване за грешка</string>
|
||||
<string name="report_a_bug">Докладвайте грешка</string>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Canviar canal</string>
|
||||
<string name="are_you_sure_channel">Estàs segur que vols canviar el canal? Totes les comunicacions amb els altres nodes s\'aturaran fins que comparteixis la nova configuració del nou canal.</string>
|
||||
<string name="new_channel_rcvd">Nova URL de canal rebuda</string>
|
||||
<string name="do_you_want_switch">Vols canviar al canal \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic necessita permisos de posicionament i la posició ha d\'estar activada per trobar nous dispositius Bluetooth. Els podràs apagar posteriorment.</string>
|
||||
<string name="report_bug">Informar d\'error</string>
|
||||
<string name="report_a_bug">Informar d\'un error</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Změnit kanál</string>
|
||||
<string name="are_you_sure_channel">Jste si jistý, že chcete změnit kanál? Veškerá komunikace s ostatními vysílači přestane fungovat až do momentu distribuce stejného nastavení na ostatní vysílače.</string>
|
||||
<string name="new_channel_rcvd">Nová URL kanálu přijata</string>
|
||||
<string name="do_you_want_switch">Chcete se připojit ke kanálu \'%s\' ?</string>
|
||||
<string name="permission_missing">Chybí požadovaná oprávnění, Meshtastic nebude fungovat správně. Prosím změntě oprávnění pro aplikaci.</string>
|
||||
<string name="report_bug">Nahlášení chyby</string>
|
||||
<string name="report_a_bug">Nahlásit chybu</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Kanal wechseln</string>
|
||||
<string name="are_you_sure_channel">Möchten Sie wirklich den Kanal wechseln? Die gesamte Kommunikation mit anderen Knoten wird unterbrochen, bis Sie die neuen Kanaleinstellungen freigeben.</string>
|
||||
<string name="new_channel_rcvd">Neue Kanal-URL empfangen</string>
|
||||
<string name="do_you_want_switch">Möchten Sie zum Kanal \'%s\' wechseln?</string>
|
||||
<string name="permission_missing">Meshtastic benötigt Standortberechtigung und Standort muss eingeschaltet werden, um neue Geräte über Bluetooth zu finden. Sie können es später wieder deaktivieren.</string>
|
||||
<string name="report_bug">Fehler melden</string>
|
||||
<string name="report_a_bug">Fehler melden</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Αλλαγή καναλιού</string>
|
||||
<string name="are_you_sure_channel">Είστε βέβαιοι ότι θέλετε να αλλάξετε κανάλι? Η επικοινωνία με άλλες συσκευές θα σταματήσεις μέχρι να μοιραστείτε τις ρυθμίσεις του νέου καναλιού.</string>
|
||||
<string name="new_channel_rcvd">Λήψη URL νέου καναλιού</string>
|
||||
<string name="do_you_want_switch">Θέλετε να αλλάξετε ‘%s’ κανάλι?</string>
|
||||
<string name="permission_missing">Λείπει μια απαιτούμενη άδεια, Meshtastic δεν θα λειτοργεί σωστά. Ενεργοποιήστε τις ρυθμίσεις εφαρμογής Android.</string>
|
||||
<string name="report_bug">Αναφορά Σφάλματος</string>
|
||||
<string name="report_a_bug">Αναφέρετε ένα σφάλμα</string>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Cambia el canal</string>
|
||||
<string name="are_you_sure_channel">¿Estás seguro de que quieres cambiar el canal? Toda comunicación con otros nodos se detendrá hasta que compartas la nueva configuración del canal.</string>
|
||||
<string name="new_channel_rcvd">Nueva URL de canal recibida</string>
|
||||
<string name="do_you_want_switch">¿Quieres cambiar al canal de \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic necesita permiso de ubicación y la ubicación debe estar encendida para encontrar nuevos dispositivos a través de Bluetooth. Puedes apagarla después.</string>
|
||||
<string name="report_bug">Informar de un fallo</string>
|
||||
<string name="report_a_bug">Informar de un fallo</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Vaheta kanalit</string>
|
||||
<string name="are_you_sure_channel">Kas soovid kindlasti kanalit vahetada? Kõik ühendused katkevad seniks, kuni oled uued kanalite seadeid jaganud.</string>
|
||||
<string name="new_channel_rcvd">Uued kanalid vastu võetud</string>
|
||||
<string name="do_you_want_switch">Kas soovid minna kanalile \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic vajab sinihamba kaudu uute seadmete tuvastamiseks luba asukoha kasutamiseks, asukoht peab olema sisse lülitatud. Hiljem saad asukoha uuesti välja lülitada.</string>
|
||||
<string name="report_bug">Teata veast</string>
|
||||
<string name="report_a_bug">Teata veast</string>
|
||||
|
@ -216,10 +215,6 @@
|
|||
<string name="mute_8_hours">8 tundi</string>
|
||||
<string name="mute_1_week">1 nädal</string>
|
||||
<string name="mute_always">Alati</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Kas soovite lisada uue kanali?</item>
|
||||
<item quantity="other">Kas soovite lisada %d uut kanalit?</item>
|
||||
</plurals>
|
||||
<string name="replace">Asenda</string>
|
||||
<string name="wifi_qr_code_scan">Skaneeri WiFi QR kood</string>
|
||||
<string name="wifi_qr_code_error">Vigane WiFi tõendi QR koodi vorming</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Vaihda kanavaa</string>
|
||||
<string name="are_you_sure_channel">Oletko varma, että haluat vaihtaa kanavaa? Kaikki yhteydet katkeavat, ennen kuin olet jakanut uudet kanavan asetukset.</string>
|
||||
<string name="new_channel_rcvd">Vastaanotettu uuden kanavan URL</string>
|
||||
<string name="do_you_want_switch">Haluatko siirtyä kanavalle \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic tarvitsee sijaintiluvan, ja sijainnin on oltava päällä uusien laitteiden löytämiseksi Bluetoothin kautta. Voit sammuttaa sen jälkeen sijainnin uudelleen.</string>
|
||||
<string name="report_bug">Ilmoita virheestä</string>
|
||||
<string name="report_a_bug">Ilmoita virheestä</string>
|
||||
|
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Chanje kanal</string>
|
||||
<string name="are_you_sure_channel">Èske ou sèten ou vle chanje kanal? Tout kominikasyon ak lòt nœuds elektwonik yo ap kanpe jiskaske ou pataje nouvo paramèt kanal yo.</string>
|
||||
<string name="new_channel_rcvd">Nouvo kanal URL resevwa</string>
|
||||
<string name="do_you_want_switch">Eske ou vle chanje a kanal \'%s\'?</string>
|
||||
<string name="permission_missing">Manke pèmisyon obligatwa, Meshtastic p ap ka fonksyone byen. Tanpri ale bay pèmisyon an nan paramèt aplikasyon android ou.</string>
|
||||
<string name="report_bug">Rapòte yon pwoblèm</string>
|
||||
<string name="report_a_bug">Rapòte pwoblèm</string>
|
||||
|
@ -225,10 +224,6 @@
|
|||
<string name="mute_8_hours">8 èdtan</string>
|
||||
<string name="mute_1_week">1 semèn</string>
|
||||
<string name="mute_always">Toujou</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Eske ou vle ajoute yon nouvo kanal?</item>
|
||||
<item quantity="other">Eske ou vle ajoute %d nouvo kanal?</item>
|
||||
</plurals>
|
||||
<string name="replace">Ranplase</string>
|
||||
<string name="wifi_qr_code_scan">Skan QR Kòd WiFi</string>
|
||||
<string name="wifi_qr_code_error">Fòma QR Kòd Kredi WiFi Invalid</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Changer de canal</string>
|
||||
<string name="are_you_sure_channel">Êtes-vous sûr de vouloir modifier le canal ? Toutes les communications avec les autres nœuds s\'arrêteront jusqu\'à ce que vous partagiez les nouveaux paramètres du canal.</string>
|
||||
<string name="new_channel_rcvd">Nouvel URL canal reçu</string>
|
||||
<string name="do_you_want_switch">Voulez-vous basculer sur le canal \'%s\' ?</string>
|
||||
<string name="permission_missing">Une permission indispensable manque, Meshtastic ne peut pas fonctionner. Veuillez modifier dans Réglages.</string>
|
||||
<string name="report_bug">Rapporter Bogue</string>
|
||||
<string name="report_a_bug">Rapporter un Bogue</string>
|
||||
|
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Athraigh cainéal</string>
|
||||
<string name="are_you_sure_channel">An bhfuil tú cinnte gur mhaith leat an cainéal a athrú? Stopfaidh gach cumarsáid le nóid eile go dtí go roinnfidh tú na socruithe nua cainéil.</string>
|
||||
<string name="new_channel_rcvd">URL Cainéal nua faighte</string>
|
||||
<string name="do_you_want_switch">Ar mhaith leat aistriú go dtí an cainéal \'%s\'?</string>
|
||||
<string name="permission_missing">Tá cead riachtanach ar iarraidh, ní bheidh Meshtastic in ann oibriú i gceart. Cumasaigh i socruithe feidhmchláir le do thoil.</string>
|
||||
<string name="report_bug">Tuairiscigh fabht</string>
|
||||
<string name="report_a_bug">Tuairiscigh fabht</string>
|
||||
|
@ -228,13 +227,6 @@
|
|||
<string name="mute_8_hours">8 uair an chloig</string>
|
||||
<string name="mute_1_week">1 seachtain</string>
|
||||
<string name="mute_always">I gcónaí</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">An bhfuil tú ag iarraidh cainéal nua a chur leis?</item>
|
||||
<item quantity="two">An bhfuil tú ag iarraidh %d cainéil nua a chur leis?</item>
|
||||
<item quantity="few">An bhfuil tú ag iarraidh %d cainéil nua a chur leis?</item>
|
||||
<item quantity="many">An bhfuil tú ag iarraidh %d cainéil nua a chur leis?</item>
|
||||
<item quantity="other">An bhfuil tú ag iarraidh %d cainéil nua a chur leis?</item>
|
||||
</plurals>
|
||||
<string name="replace">Ionad</string>
|
||||
<string name="wifi_qr_code_scan">Scan QR cód WiFi</string>
|
||||
<string name="wifi_qr_code_error">Formáid QR cód Creidiúnachtaí WiFi neamhbhailí</string>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Cambiar canle</string>
|
||||
<string name="are_you_sure_channel">Seguro que queres cambiar a canle? Toda comunicación con outros nodos vai parar ata que compartas a nova configuración da canle.</string>
|
||||
<string name="new_channel_rcvd">Novo enlace de canle recibida</string>
|
||||
<string name="do_you_want_switch">Queres cambiar ao canle \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtástic precisa permisos de ubicación e ten que estar prendida para atopar novos dispositivos vía Bluetooth. Podes apagala despois.</string>
|
||||
<string name="report_bug">Reportar erro</string>
|
||||
<string name="report_a_bug">Reporta un erro</string>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Promjena kanala</string>
|
||||
<string name="are_you_sure_channel">Jeste li sigurni da želite promijeniti kanal? Sva komunikacija s drugim čvorovima prekinut će se dok ne podijelite nove postavke kanala.</string>
|
||||
<string name="new_channel_rcvd">Primljen je URL novog kanala</string>
|
||||
<string name="do_you_want_switch">Želite li prijeći na kanal \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic treba dopuštenje za lokaciju i lokacija mora biti uključena kako bi pronašao nove uređaje putem Bluetootha. Nakon toga ga možete ponovno isključiti.</string>
|
||||
<string name="report_bug">Prijavi grešku</string>
|
||||
<string name="report_a_bug">Prijavi grešku</string>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Csatorna váltás</string>
|
||||
<string name="are_you_sure_channel">Biztosan csatornát akarsz váltani? Összes kommunikáció a többi állomással megszakad, amíg nem osztja meg velük az új csatorna beállításokat.</string>
|
||||
<string name="new_channel_rcvd">Új csatorna URL érkezett</string>
|
||||
<string name="do_you_want_switch">Átkapcsol a(z) \'%s\' csatornára?</string>
|
||||
<string name="permission_missing">Egy szükséges engedély hiányzik, ezért a Meshtastic nem fog tudni rendesen működni. Kérem engedélyezze az Android alkalmazások beállításai között.</string>
|
||||
<string name="report_bug">Hiba jelentése</string>
|
||||
<string name="report_a_bug">Hiba jelentése</string>
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
<string name="change_channel">Skipta um rás</string>
|
||||
<string name="are_you_sure_channel">Ertu viss um að þú viljir skipta um rás? Öll samskipti við aðrar nóður mun ljúka þar til þú deilir nýjum stillingum fyrir rás.</string>
|
||||
<string name="new_channel_rcvd">Ný slóð fyrir rás móttekin</string>
|
||||
<string name="do_you_want_switch">Viltu skipta yfir á \'%s\' rás?</string>
|
||||
<string name="permission_missing">Meshtastic þarf leyfi til að nota staðsetningu símans og verður að vera kveikt á staðsetningu til að finna nýjan búnað yfir Blátönn. Þú getur slökkt á henni að því loknu.</string>
|
||||
<string name="report_bug">Tilkynna villu</string>
|
||||
<string name="report_a_bug">Tilkynna villu</string>
|
||||
|
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Cambia canale</string>
|
||||
<string name="are_you_sure_channel">Sei sicuro di voler cambiare canale ? Tutte le comunicazioni con gli altri nodi termineranno fino a quando non condividi le impostazioni del nuovo canale.</string>
|
||||
<string name="new_channel_rcvd">Ricevuta URL del Nuovo Canale</string>
|
||||
<string name="do_you_want_switch">Passare al canale \'%s\' ?</string>
|
||||
<string name="permission_missing">Meshtastic necessita dei permessi di geolocalizzazione e la geolocalizzazione deve essere attiva per cercare nuovi dispositivi via Bluetooth. È possibile disattivarla successivamente.</string>
|
||||
<string name="report_bug">Segnala Bug</string>
|
||||
<string name="report_a_bug">Segnalazione di bug</string>
|
||||
|
@ -225,10 +224,6 @@
|
|||
<string name="mute_8_hours">8 ore</string>
|
||||
<string name="mute_1_week">1 settimana</string>
|
||||
<string name="mute_always">Sempre</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Si desidera aggiungere un nuovo canale?</item>
|
||||
<item quantity="other">Si desidera aggiungere %d nuovi canali?</item>
|
||||
</plurals>
|
||||
<string name="replace">Sostituisci</string>
|
||||
<string name="wifi_qr_code_scan">Scansiona codice QR WiFi</string>
|
||||
<string name="wifi_qr_code_error">Formato codice QR delle Credenziali WiFi non valido</string>
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
<string name="change_channel">שנה ערוץ</string>
|
||||
<string name="are_you_sure_channel">בטוח שתרצה לשנות ערוץ? כל תקשורת עם מכשירים אחרים תיפסק עד שתשתף להם את הגדרות הערוץ החדשות.</string>
|
||||
<string name="new_channel_rcvd">התקבל כתובת ערוץ חדשה</string>
|
||||
<string name="do_you_want_switch">תרצה לשנות לערוץ \'%s\'?</string>
|
||||
<string name="permission_missing">משטסטיק צריך גישה למיקום ועל מיקום להיות דולק בכדי למצוא מכשירי בלוטוס. ניתן לכבות חזרה לאחר מכן.</string>
|
||||
<string name="report_bug">דווח על באג</string>
|
||||
<string name="report_a_bug">דווח על באג</string>
|
||||
|
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">チャンネルの変更</string>
|
||||
<string name="are_you_sure_channel">チャンネルを変更しますか?新しいチャンネル設定をシェアするまで他のノードとの通信はすべて停止します。</string>
|
||||
<string name="new_channel_rcvd">新しいチャンネルURLを受信しました</string>
|
||||
<string name="do_you_want_switch">\'%s\チャンネルに変更しますか?</string>
|
||||
<string name="permission_missing">必要なアクセス権限が拒否されているため、アプリが正常に動作しません。設定により権限を許可してください。</string>
|
||||
<string name="report_bug">バグ報告</string>
|
||||
<string name="report_a_bug">バグの報告</string>
|
||||
|
@ -224,9 +223,6 @@
|
|||
<string name="mute_8_hours"></string>
|
||||
<string name="mute_1_week">8時間</string>
|
||||
<string name="mute_always">常時</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="other">%d の新しいチャンネルを追加しますか?</item>
|
||||
</plurals>
|
||||
<string name="replace">置き換え</string>
|
||||
<string name="wifi_qr_code_scan">WiFiのQRコードをスキャン</string>
|
||||
<string name="wifi_qr_code_error">WiFi認証QRコードの形式が無効です</string>
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
<string name="change_channel">채널 변경</string>
|
||||
<string name="are_you_sure_channel">채널 변경을 원하세요? 채널 설정이 공유되기 전까지 다른 노드와의 통신은 중단됩니다.</string>
|
||||
<string name="new_channel_rcvd">새로운 채널 URL 수신</string>
|
||||
<string name="do_you_want_switch">\'%s\' 채널로 변경할 까요?</string>
|
||||
<string name="permission_missing">Meshtastic 작동에 필요한 권한을 얻지 못했습니다. 정상적으로 작동하지 않을 수도 있습니다. 스마트폰 설정에서 권한 허용 설정해주세요.</string>
|
||||
<string name="report_bug">버그 보고</string>
|
||||
<string name="report_a_bug">버그 보고</string>
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
<string name="change_channel">Pakeisti kanalą</string>
|
||||
<string name="are_you_sure_channel">Ar tikrai norite pakeisti kanalą? Visi ryšiai su kitais mazgais bus nutraukti, kol nepasidalinsite naujais kanalo nustatymais.</string>
|
||||
<string name="new_channel_rcvd">Gautas naujo kanalo URL</string>
|
||||
<string name="do_you_want_switch">Ar norite pereiti prie \'%s\' kanalo?</string>
|
||||
<string name="permission_missing">Meshtastic reikalauja vietos nustatymo leidimo, ir vietos nustatymas turi būti įjungtas, kad būtų galima rasti naujus įrenginius per „Bluetooth“. Vėliau jį galite išjungti.</string>
|
||||
<string name="report_bug">Pranešti apie klaidą</string>
|
||||
<string name="report_a_bug">Pranešti apie klaidą</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Endre kanal</string>
|
||||
<string name="are_you_sure_channel">Er du sikker på at du vil endre kanalen? All kommunikasjon med andre noder vil stanse, intill du deler de nye kanalinstillingene.</string>
|
||||
<string name="new_channel_rcvd">Ny kanal URL mottatt</string>
|
||||
<string name="do_you_want_switch">Vil du bytte til \'%s\' kanal?</string>
|
||||
<string name="permission_missing">En påkrevet tilgang mangler, Meshtastic vil ikke fungere korrekt. Vennligst slå på i Android appliksjonsinstillinger.</string>
|
||||
<string name="report_bug">Rapporter Feil</string>
|
||||
<string name="report_a_bug">Rapporter en feil</string>
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
<string name="change_channel">Verander kanaal</string>
|
||||
<string name="are_you_sure_channel">Ben je zeker van kanaal te willen veranderen? Alle communicatie met andere nodes wordt gestopt tot je de nieuwe instellingen deelt.</string>
|
||||
<string name="new_channel_rcvd">Nieuw kanaal URL ontvangen</string>
|
||||
<string name="do_you_want_switch">Wil je veranderen naar kanaal \'%s\' ?</string>
|
||||
<string name="permission_missing">Een vereiste toelating ontbreekt, Meshtastic kan niet goed werken. Graag aanzetten in Instellingen.</string>
|
||||
<string name="report_bug">Rapporteer Bug</string>
|
||||
<string name="report_a_bug">Rapporteer een Bug</string>
|
||||
|
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Zmień kanał</string>
|
||||
<string name="are_you_sure_channel">Czy na pewno chcesz zmienić kanał? Komunikacja z innymi węzłami komunikacyjnymi zostanie wstrzymana do czasu udostępnienia nowych ustawień kanału.</string>
|
||||
<string name="new_channel_rcvd">Otrzymano nowy URL kanału</string>
|
||||
<string name="do_you_want_switch">Chcesz przełączyć na \'%s\' kanał?</string>
|
||||
<string name="permission_missing">Meshtastic potrzebuje zezwolenia na lokalizacje. Lokalizacja musi być włączona, aby można było znaleźć nowe urządzenia przez Bluetooth. Możesz je później wyłączyć.</string>
|
||||
<string name="report_bug">Zgłoś błąd</string>
|
||||
<string name="report_a_bug">Zgłoś błąd</string>
|
||||
|
@ -227,12 +226,6 @@
|
|||
<string name="mute_8_hours">8 godzin</string>
|
||||
<string name="mute_1_week">1 tydzień</string>
|
||||
<string name="mute_always">Na zawsze</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Czy chcesz dodać nowy kanał?</item>
|
||||
<item quantity="few">Czy chcesz dodać %d nowe kanały?</item>
|
||||
<item quantity="many">Czy chcesz dodać %d nowych kanałów?</item>
|
||||
<item quantity="other">Czy chcesz dodać %d nowych kanałów?</item>
|
||||
</plurals>
|
||||
<string name="replace">Zastąp</string>
|
||||
<string name="wifi_qr_code_scan">Skanuj kod QR Wi-Fi</string>
|
||||
<string name="wifi_qr_code_error">Nieprawidłowy format kodu QR</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Mudar canal</string>
|
||||
<string name="are_you_sure_channel">Tem certeza que deseja mudar de canal? Toda comunicação com os outros dispositivos será interrompida até serem compartilhadas as novas configurações do canal.</string>
|
||||
<string name="new_channel_rcvd">Novo link de canal recebido</string>
|
||||
<string name="do_you_want_switch">Deseja mudar para o canal \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic precisa da permissão de localização e localização ativada para encontrar novos dispositivos via Bluetooth. Você pode desativar novamente depois.</string>
|
||||
<string name="report_bug">Informar Bug</string>
|
||||
<string name="report_a_bug">Informar um bug</string>
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
<string name="change_channel">Mudar de canal</string>
|
||||
<string name="are_you_sure_channel">Tem certeza que deseja mudar de canal? Todas as comunicações com outros nós serão interrompidas até que partilhe as novas configurações do canal.</string>
|
||||
<string name="new_channel_rcvd">Novo Link Recebido do Canal</string>
|
||||
<string name="do_you_want_switch">Pretende mudar para o canal \'%s\' ?</string>
|
||||
<string name="permission_missing">Meshtastic precisa da permissão de localização e localização ativada para encontrar novos dispositivos via bluetooth. Você pode desativar novamente depois.</string>
|
||||
<string name="report_bug">Reportar Bug</string>
|
||||
<string name="report_a_bug">Reportar a bug</string>
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
<string name="change_channel">Schimbă canalul</string>
|
||||
<string name="are_you_sure_channel">Ești sigur că vrei să schimbi canalul? Toate comunicațiile cu alte noduri vor fi oprite până când setezi aceleași detalii pe alte noduri.</string>
|
||||
<string name="new_channel_rcvd">Am primit un nou URL de canal</string>
|
||||
<string name="do_you_want_switch">Vrei să faci schimbul \'%s\' canalului?</string>
|
||||
<string name="permission_missing">O permisiune necesară lipsește, Meshtastic nu o să funcționeze corespunzător. Te rugăm activează-o în setările Android.</string>
|
||||
<string name="report_bug">Raportează Bug</string>
|
||||
<string name="report_a_bug">Raportează un bug</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Смена канала</string>
|
||||
<string name="are_you_sure_channel">Вы уверены, что хотите изменить канал? Связь с другими устройствами будет прервана, пока вы не поделитесь новыми настройками канала.</string>
|
||||
<string name="new_channel_rcvd">URL нового канала получен</string>
|
||||
<string name="do_you_want_switch">Вы хотите переключиться на \'%s\' канал?</string>
|
||||
<string name="permission_missing">Требуемое разрешение отсутствует, Meshtastic не сможет работать должным образом. Пожалуйста, включите в настройках приложения.</string>
|
||||
<string name="report_bug">Сообщить об ошибке</string>
|
||||
<string name="report_a_bug">Сообщить об ошибке</string>
|
||||
|
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Zmeniť kanál</string>
|
||||
<string name="are_you_sure_channel">Ste si istý, že chcete zmeniť kanál? Všetka komunikácia s ostatnými uzlovými bodmi prestane, až kým budete zdieľať nové nastavenia kanálu.</string>
|
||||
<string name="new_channel_rcvd">Prijatá nová URL kanálu</string>
|
||||
<string name="do_you_want_switch">Chcete sa prepnúť na kanál \'%s\'?</string>
|
||||
<string name="permission_missing">Aplikácia Meshtastic nemá pridelené požadované oprávnenie a pravdepodobne nebude fungovať správne. Prosím povoľte tieto oprávnenia v nastaveniach aplikácie.</string>
|
||||
<string name="report_bug">Nahlásiť chybu</string>
|
||||
<string name="report_a_bug">Nahlásiť chybu</string>
|
||||
|
@ -227,12 +226,6 @@
|
|||
<string name="mute_8_hours">8 hodín</string>
|
||||
<string name="mute_1_week">1 týždeň</string>
|
||||
<string name="mute_always">Vždy</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Chcete pridať nový kanál?</item>
|
||||
<item quantity="few">Chcete pridať %d nové kanále?</item>
|
||||
<item quantity="many">Chcete pridať %d nových kanálov?</item>
|
||||
<item quantity="other">Chcete pridať %d nové kanále?</item>
|
||||
</plurals>
|
||||
<string name="replace">Nahradiť</string>
|
||||
<string name="wifi_qr_code_scan">Skenuj WiFi QR kód</string>
|
||||
<string name="wifi_qr_code_error">Neplatný formát QR kódu poverenia WiFi</string>
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
<string name="change_channel">Zamenjava kanala</string>
|
||||
<string name="are_you_sure_channel">Ali ste prepričani, da želite spremeniti kanal? Vsa komunikacija z drugimi vozlišči se ustavi, dokler ne delite novih nastavitev kanala.</string>
|
||||
<string name="new_channel_rcvd">Prejet je bil novi URL kanala</string>
|
||||
<string name="do_you_want_switch">Ali želite preklopiti na kanal \'%s\'?</string>
|
||||
<string name="permission_missing">Meshtastic potrebuje dovoljenje za lokacijo in za iskanje novih naprav prek povezave Bluetooth mora biti lokacija vklopljena. Pozneje jo lahko znova izklopite.</string>
|
||||
<string name="report_bug">Prijavi napako</string>
|
||||
<string name="report_a_bug">Prijavite napako</string>
|
||||
|
|
|
@ -67,7 +67,6 @@
|
|||
<string name="change_channel">Ndërro kanalin radio</string>
|
||||
<string name="are_you_sure_channel">Je i sigurtë për ndërrimin e kanalit radio? I gjithë komunikimi me nyjet e tjera do të përfundojë derisa të shprëndani parametrat e reja të kanalit radio.</string>
|
||||
<string name="new_channel_rcvd">Ju keni një kanal radio të ri URL</string>
|
||||
<string name="do_you_want_switch">Dëshiron të kalosh në këtë kanal radio? \'%s\' ?</string>
|
||||
<string name="permission_missing">Meshtastic ka nevojë për leje vendndodhjeje dhe vendndodhja duhet të jetë e aktivizuar për të gjetur paisje të reja përmes Bluetooth. Mund ta fikni përsëri pas kësaj.</string>
|
||||
<string name="report_bug">Raporto Bug</string>
|
||||
<string name="report_a_bug">Raporto një bug</string>
|
||||
|
@ -225,10 +224,6 @@
|
|||
<string name="mute_8_hours">8 orë</string>
|
||||
<string name="mute_1_week">1 javë</string>
|
||||
<string name="mute_always">Gjithmonë</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">A dëshironi të shtoni një kanal të ri?</item>
|
||||
<item quantity="other">A dëshironi të shtoni %d kanale të reja?</item>
|
||||
</plurals>
|
||||
<string name="replace">Zëvendëso</string>
|
||||
<string name="wifi_qr_code_scan">Skano QR kodi WiFi</string>
|
||||
<string name="wifi_qr_code_error">Formati i gabuar i kodit QR të kredencialeve WiFi</string>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Byt kanal</string>
|
||||
<string name="are_you_sure_channel">Är du säker på att du vill byta kanal? All kommunikation med andra noder avbryts tills du delar de nya kanalinställningarna.</string>
|
||||
<string name="new_channel_rcvd">Ny kanal-länk mottagen</string>
|
||||
<string name="do_you_want_switch">Vill du växla till kanalen \'%s\' </string>
|
||||
<string name="permission_missing">Meshtastic behöver platsbehörighet och Plats måste vara aktiverad för att hitta nya enheter via Bluetooth. Du kan stänga av Plats igen efteråt.</string>
|
||||
<string name="report_bug">Rapportera bugg</string>
|
||||
<string name="report_a_bug">Rapportera bugg</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">Kanalı değiştir</string>
|
||||
<string name="are_you_sure_channel">Kanalı değiştirmek istediğinizden emin misiniz? Yeni kanal ayarlarını paylaşana dek tüm cihazlar ile iletişim sonlanacak.</string>
|
||||
<string name="new_channel_rcvd">Yeni Kanal Adresi(URL) alındı</string>
|
||||
<string name="do_you_want_switch">\'%s\' kanalına geçmek istiyor musunuz?</string>
|
||||
<string name="permission_missing">Meshtastic\'in konum iznine ihtiyacı var ve Bluetooth ile yeni cihazlar bulmak için konumun açık olması gerekiyor. Daha sonra isterseniz kapatabilirsiniz.</string>
|
||||
<string name="report_bug">Hata Bildir</string>
|
||||
<string name="report_a_bug">Hata Bildir</string>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
<string name="change_channel">Змінити канал</string>
|
||||
<string name="are_you_sure_channel">Ви впевнені, що хочете змінити канал? Усі зв’язки з іншими вузлами припиниться, доки ви не поділитеся новими налаштуваннями каналу.</string>
|
||||
<string name="new_channel_rcvd">Отримано URL-адресу нового каналу</string>
|
||||
<string name="do_you_want_switch">Ви хочете підключитися до \'%s\' каналу?</string>
|
||||
<string name="permission_missing">Meshtastic потрібний дозвіл до геоданих для пошуку нових пристроїв через Bluetooth. Ви можете вимкнути його пізніше.</string>
|
||||
<string name="report_bug">Повідомити про помилку</string>
|
||||
<string name="report_a_bug">Повідомити про помилку</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">切换频道</string>
|
||||
<string name="are_you_sure_channel">您确定要更改频道吗?在您分享新的频道设定之前,与其他节点的所有通讯都将停止。</string>
|
||||
<string name="new_channel_rcvd">收到新的频道 URL</string>
|
||||
<string name="do_you_want_switch">您要切换到 \'%s\' 频道吗?</string>
|
||||
<string name="permission_missing">Meshtastic 需要位置权限并启用位置信息才能通过蓝牙查找新设备。找到之后可以再关闭这权限。</string>
|
||||
<string name="report_bug">報告BUG</string>
|
||||
<string name="report_a_bug">回报问题</string>
|
||||
|
|
|
@ -58,7 +58,6 @@
|
|||
<string name="change_channel">切換頻道</string>
|
||||
<string name="are_you_sure_channel">您確定要更改頻道嗎?在您分享新的頻道設定之前,與其他節點的所有通訊都將停止。</string>
|
||||
<string name="new_channel_rcvd">收到新的頻道 URL</string>
|
||||
<string name="do_you_want_switch">您要切換到 \'%s\' 頻道嗎?</string>
|
||||
<string name="permission_missing">Meshtastic 需要位置權限並啟用位置信息才能通過藍牙查找新設備。找到之後可以再關閉這權限。</string>
|
||||
<string name="report_bug">回報BUG</string>
|
||||
<string name="report_a_bug">回報問題</string>
|
||||
|
|
|
@ -93,7 +93,6 @@
|
|||
<string name="change_channel">Change channel</string>
|
||||
<string name="are_you_sure_channel">Are you sure you want to change the channel? All communication with other nodes will stop until you share the new channel settings.</string>
|
||||
<string name="new_channel_rcvd">New Channel URL received</string>
|
||||
<string name="do_you_want_switch">Do you want to switch to the \'%s\' channel?</string>
|
||||
<string name="permission_missing">Meshtastic needs location permission and location must be turned on to find new devices via Bluetooth. You can turn it off again afterwards.</string>
|
||||
<string name="report_bug">Report Bug</string>
|
||||
<string name="report_a_bug">Report a bug</string>
|
||||
|
@ -251,10 +250,6 @@
|
|||
<string name="mute_8_hours">8 hours</string>
|
||||
<string name="mute_1_week">1 week</string>
|
||||
<string name="mute_always">Always</string>
|
||||
<plurals name="add_channel_from_qr">
|
||||
<item quantity="one">Do you want to add a new channel?</item>
|
||||
<item quantity="other">Do you want to add %d new channels?</item>
|
||||
</plurals>
|
||||
<string name="replace">Replace</string>
|
||||
<string name="wifi_qr_code_scan">Scan WiFi QR code</string>
|
||||
<string name="wifi_qr_code_error">Invalid WiFi Credential QR code format</string>
|
||||
|
|
|
@ -400,7 +400,6 @@
|
|||
<ID>MaxLineLength:MQTTRepository.kt$MQTTRepository.Companion$*</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$/* UI design material setup instructions: https://material.io/develop/android/docs/getting-started/ dark theme (or use system eventually) https://material.io/develop/android/theming/dark/ NavDrawer is a standard draw which can be dragged in from the left or the menu icon inside the app title. Fragments: SettingsFragment shows "Settings" username shortname bluetooth pairing list (eventually misc device settings that are not channel related) Channel fragment "Channel" qr code, copy link button ch number misc other settings (eventually a way of choosing between past channels) ChatFragment "Messages" a text box to enter new texts a scrolling list of rows. each row is a text and a sender info layout NodeListFragment "Users" a node info row for every node ViewModels: BTScanModel starts/stops bt scan and provides list of devices (manages entire scan lifecycle) MeshModel contains: (manages entire service relationship) current received texts current radio macaddr current node infos (updated dynamically) eventually use bottom navigation bar to switch between, Members, Chat, Channel, Settings. https://material.io/develop/android/components/bottom-navigation-view/ use numbers of # chat messages and # of members in the badges. (per this recommendation to not use top tabs: https://ux.stackexchange.com/questions/102439/android-ux-when-to-use-bottom-navigation-and-when-to-use-tabs ) eventually: make a custom theme: https://github.com/material-components/material-components-android/tree/master/material-theme-builder */</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$/* This problem can occur if we unbind, but there is already an onConnected job waiting to run. That job runs and then makes meshService != null again I think I've fixed this by cancelling connectionJob. We'll see! */</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$// If our app is too old/new, we probably don't understand the new DeviceConfig messages, so we don't read them until here</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$// Old samsung phones have a race condition andthis might rarely fail. Which is probably find because the bind will be sufficient most of the time</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$// We now wait for the device to connect, once connected, we ask the user if they want to switch to the new channel</ID>
|
||||
<ID>MaxLineLength:MainActivity.kt$MainActivity$// pager.offscreenPageLimit = 0 // Don't keep any offscreen pages around, because we want to make sure our bluetooth scanning stops</ID>
|
||||
|
@ -622,10 +621,6 @@
|
|||
<ID>NoWildcardImports:BluetoothInterface.kt$import com.geeksville.mesh.service.*</ID>
|
||||
<ID>NoWildcardImports:DeviceVersionTest.kt$import org.junit.Assert.*</ID>
|
||||
<ID>NoWildcardImports:ExampleUnitTest.kt$import org.junit.Assert.*</ID>
|
||||
<ID>NoWildcardImports:MainActivity.kt$import android.content.*</ID>
|
||||
<ID>NoWildcardImports:MainActivity.kt$import com.geeksville.mesh.android.*</ID>
|
||||
<ID>NoWildcardImports:MainActivity.kt$import com.geeksville.mesh.service.*</ID>
|
||||
<ID>NoWildcardImports:MainActivity.kt$import com.geeksville.mesh.ui.*</ID>
|
||||
<ID>NoWildcardImports:MeshService.kt$import com.geeksville.mesh.*</ID>
|
||||
<ID>NoWildcardImports:MeshService.kt$import com.geeksville.mesh.util.*</ID>
|
||||
<ID>NoWildcardImports:MockInterface.kt$import com.geeksville.mesh.*</ID>
|
||||
|
@ -745,10 +740,6 @@
|
|||
<ID>WildcardImport:BluetoothInterface.kt$import com.geeksville.mesh.service.*</ID>
|
||||
<ID>WildcardImport:DeviceVersionTest.kt$import org.junit.Assert.*</ID>
|
||||
<ID>WildcardImport:ExampleUnitTest.kt$import org.junit.Assert.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import android.content.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import com.geeksville.mesh.android.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import com.geeksville.mesh.service.*</ID>
|
||||
<ID>WildcardImport:MainActivity.kt$import com.geeksville.mesh.ui.*</ID>
|
||||
<ID>WildcardImport:MeshService.kt$import com.geeksville.mesh.*</ID>
|
||||
<ID>WildcardImport:MeshService.kt$import com.geeksville.mesh.util.*</ID>
|
||||
<ID>WildcardImport:MockInterface.kt$import com.geeksville.mesh.*</ID>
|
||||
|
|
Ładowanie…
Reference in New Issue