diff --git a/app/src/androidTest/java/com/geeksville/mesh/ChannelSetTest.kt b/app/src/androidTest/java/com/geeksville/mesh/ChannelSetTest.kt index 0832f4abf..d65d9f924 100644 --- a/app/src/androidTest/java/com/geeksville/mesh/ChannelSetTest.kt +++ b/app/src/androidTest/java/com/geeksville/mesh/ChannelSetTest.kt @@ -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()) } } diff --git a/app/src/main/java/com/geeksville/mesh/MainActivity.kt b/app/src/main/java/com/geeksville/mesh/MainActivity.kt index 9294629b2..4efba6bbc 100644 --- a/app/src/main/java/com/geeksville/mesh/MainActivity.kt +++ b/app/src/main/java/com/geeksville/mesh/MainActivity.kt @@ -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) diff --git a/app/src/main/java/com/geeksville/mesh/model/ChannelSet.kt b/app/src/main/java/com/geeksville/mesh/model/ChannelSet.kt index e10d615ec..3060b92be 100644 --- a/app/src/main/java/com/geeksville/mesh/model/ChannelSet.kt +++ b/app/src/main/java/com/geeksville/mesh/model/ChannelSet.kt @@ -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() } /** diff --git a/app/src/main/java/com/geeksville/mesh/model/UIState.kt b/app/src/main/java/com/geeksville/mesh/model/UIState.kt index 95fe93ab8..c97b38847 100644 --- a/app/src/main/java/com/geeksville/mesh/model/UIState.kt +++ b/app/src/main/java/com/geeksville/mesh/model/UIState.kt @@ -451,18 +451,18 @@ class UIViewModel @Inject constructor( val connectionState get() = radioConfigRepository.connectionState fun isConnected() = connectionState.value != MeshService.ConnectionState.DISCONNECTED - private val _requestChannelUrl = MutableLiveData(null) - val requestChannelUrl: LiveData get() = _requestChannelUrl + private val _requestChannelSet = MutableStateFlow(null) + val requestChannelSet: StateFlow 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 = 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(preferences.getBoolean("provide-location", false)) { diff --git a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt index 6ff8ac25d..5e815e306 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/ChannelFragment.kt @@ -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(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( diff --git a/app/src/main/java/com/geeksville/mesh/ui/components/ScannedQrCodeDialog.kt b/app/src/main/java/com/geeksville/mesh/ui/components/ScannedQrCodeDialog.kt index 7fcc173c9..0ae988362 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/components/ScannedQrCodeDialog.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/components/ScannedQrCodeDialog.kt @@ -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)) } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 512220495..f30961e2d 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -72,4 +72,9 @@ android:layout_height="match_parent" app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior" /> + + \ No newline at end of file diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 23221f304..1852817e8 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -30,7 +30,6 @@ Промени канал Сигурни ли сте, че искате да смените канала? Цялата комуникация с други възли ще спре, докато не споделите новите настройки на канала. Получен е URL адрес на нов канал - Искате ли да превключите към канала \'%s\'? Meshtastic се нуждае от разрешение за местоположение. Местоположението трябва да е включено, за да намира нови устройства чрез Bluetooth. Можете да го изключите отново след това. Докладване за грешка Докладвайте грешка diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 3c63a8c09..e7b8e265b 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -30,7 +30,6 @@ Canviar canal 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. Nova URL de canal rebuda - Vols canviar al canal \'%s\'? Meshtastic necessita permisos de posicionament i la posició ha d\'estar activada per trobar nous dispositius Bluetooth. Els podràs apagar posteriorment. Informar d\'error Informar d\'un error diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index f2be5da15..4d84df103 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -58,7 +58,6 @@ Změnit kanál 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. Nová URL kanálu přijata - Chcete se připojit ke kanálu \'%s\' ? Chybí požadovaná oprávnění, Meshtastic nebude fungovat správně. Prosím změntě oprávnění pro aplikaci. Nahlášení chyby Nahlásit chybu diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 26cfa9892..e9039f6e6 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -58,7 +58,6 @@ Kanal wechseln Möchten Sie wirklich den Kanal wechseln? Die gesamte Kommunikation mit anderen Knoten wird unterbrochen, bis Sie die neuen Kanaleinstellungen freigeben. Neue Kanal-URL empfangen - Möchten Sie zum Kanal \'%s\' wechseln? 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. Fehler melden Fehler melden diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index da88991e4..5124e8fd3 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -58,7 +58,6 @@ Αλλαγή καναλιού Είστε βέβαιοι ότι θέλετε να αλλάξετε κανάλι? Η επικοινωνία με άλλες συσκευές θα σταματήσεις μέχρι να μοιραστείτε τις ρυθμίσεις του νέου καναλιού. Λήψη URL νέου καναλιού - Θέλετε να αλλάξετε ‘%s’ κανάλι? Λείπει μια απαιτούμενη άδεια, Meshtastic δεν θα λειτοργεί σωστά. Ενεργοποιήστε τις ρυθμίσεις εφαρμογής Android. Αναφορά Σφάλματος Αναφέρετε ένα σφάλμα diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ee07d6922..bdc57c8a8 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -30,7 +30,6 @@ Cambia el canal ¿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. Nueva URL de canal recibida - ¿Quieres cambiar al canal de \'%s\'? 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. Informar de un fallo Informar de un fallo diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 6fd47742d..cec905931 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -58,7 +58,6 @@ Vaheta kanalit Kas soovid kindlasti kanalit vahetada? Kõik ühendused katkevad seniks, kuni oled uued kanalite seadeid jaganud. Uued kanalid vastu võetud - Kas soovid minna kanalile \'%s\'? Meshtastic vajab sinihamba kaudu uute seadmete tuvastamiseks luba asukoha kasutamiseks, asukoht peab olema sisse lülitatud. Hiljem saad asukoha uuesti välja lülitada. Teata veast Teata veast @@ -216,10 +215,6 @@ 8 tundi 1 nädal Alati - - Kas soovite lisada uue kanali? - Kas soovite lisada %d uut kanalit? - Asenda Skaneeri WiFi QR kood Vigane WiFi tõendi QR koodi vorming diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 38b6e36cc..9e8fd968b 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -58,7 +58,6 @@ Vaihda kanavaa Oletko varma, että haluat vaihtaa kanavaa? Kaikki yhteydet katkeavat, ennen kuin olet jakanut uudet kanavan asetukset. Vastaanotettu uuden kanavan URL - Haluatko siirtyä kanavalle \'%s\'? Meshtastic tarvitsee sijaintiluvan, ja sijainnin on oltava päällä uusien laitteiden löytämiseksi Bluetoothin kautta. Voit sammuttaa sen jälkeen sijainnin uudelleen. Ilmoita virheestä Ilmoita virheestä diff --git a/app/src/main/res/values-fr-rHT/strings.xml b/app/src/main/res/values-fr-rHT/strings.xml index fd3027b84..bfb758d4a 100644 --- a/app/src/main/res/values-fr-rHT/strings.xml +++ b/app/src/main/res/values-fr-rHT/strings.xml @@ -67,7 +67,6 @@ Chanje kanal È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. Nouvo kanal URL resevwa - Eske ou vle chanje a kanal \'%s\'? Manke pèmisyon obligatwa, Meshtastic p ap ka fonksyone byen. Tanpri ale bay pèmisyon an nan paramèt aplikasyon android ou. Rapòte yon pwoblèm Rapòte pwoblèm @@ -225,10 +224,6 @@ 8 èdtan 1 semèn Toujou - - Eske ou vle ajoute yon nouvo kanal? - Eske ou vle ajoute %d nouvo kanal? - Ranplase Skan QR Kòd WiFi Fòma QR Kòd Kredi WiFi Invalid diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 5743bde09..712d6f0fc 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -58,7 +58,6 @@ Changer de canal Ê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. Nouvel URL canal reçu - Voulez-vous basculer sur le canal \'%s\' ? Une permission indispensable manque, Meshtastic ne peut pas fonctionner. Veuillez modifier dans Réglages. Rapporter Bogue Rapporter un Bogue diff --git a/app/src/main/res/values-ga/strings.xml b/app/src/main/res/values-ga/strings.xml index a791cfb58..15f818346 100644 --- a/app/src/main/res/values-ga/strings.xml +++ b/app/src/main/res/values-ga/strings.xml @@ -67,7 +67,6 @@ Athraigh cainéal 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. URL Cainéal nua faighte - Ar mhaith leat aistriú go dtí an cainéal \'%s\'? Tá cead riachtanach ar iarraidh, ní bheidh Meshtastic in ann oibriú i gceart. Cumasaigh i socruithe feidhmchláir le do thoil. Tuairiscigh fabht Tuairiscigh fabht @@ -228,13 +227,6 @@ 8 uair an chloig 1 seachtain I gcónaí - - An bhfuil tú ag iarraidh cainéal nua a chur leis? - An bhfuil tú ag iarraidh %d cainéil nua a chur leis? - An bhfuil tú ag iarraidh %d cainéil nua a chur leis? - An bhfuil tú ag iarraidh %d cainéil nua a chur leis? - An bhfuil tú ag iarraidh %d cainéil nua a chur leis? - Ionad Scan QR cód WiFi Formáid QR cód Creidiúnachtaí WiFi neamhbhailí diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 7a667dcec..99812a360 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -30,7 +30,6 @@ Cambiar canle Seguro que queres cambiar a canle? Toda comunicación con outros nodos vai parar ata que compartas a nova configuración da canle. Novo enlace de canle recibida - Queres cambiar ao canle \'%s\'? Meshtástic precisa permisos de ubicación e ten que estar prendida para atopar novos dispositivos vía Bluetooth. Podes apagala despois. Reportar erro Reporta un erro diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index c8e1c8bcf..f030b5b5a 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -30,7 +30,6 @@ Promjena kanala Jeste li sigurni da želite promijeniti kanal? Sva komunikacija s drugim čvorovima prekinut će se dok ne podijelite nove postavke kanala. Primljen je URL novog kanala - Želite li prijeći na kanal \'%s\'? 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. Prijavi grešku Prijavi grešku diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index b57d3ad30..3fba781e7 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -30,7 +30,6 @@ Csatorna váltás 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. Új csatorna URL érkezett - Átkapcsol a(z) \'%s\' csatornára? 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. Hiba jelentése Hiba jelentése diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 5b1d1f356..da96b2a61 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -21,7 +21,6 @@ Skipta um rás 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. Ný slóð fyrir rás móttekin - Viltu skipta yfir á \'%s\' rás? 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. Tilkynna villu Tilkynna villu diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 38ef836d9..74c157412 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -67,7 +67,6 @@ Cambia canale Sei sicuro di voler cambiare canale ? Tutte le comunicazioni con gli altri nodi termineranno fino a quando non condividi le impostazioni del nuovo canale. Ricevuta URL del Nuovo Canale - Passare al canale \'%s\' ? Meshtastic necessita dei permessi di geolocalizzazione e la geolocalizzazione deve essere attiva per cercare nuovi dispositivi via Bluetooth. È possibile disattivarla successivamente. Segnala Bug Segnalazione di bug @@ -225,10 +224,6 @@ 8 ore 1 settimana Sempre - - Si desidera aggiungere un nuovo canale? - Si desidera aggiungere %d nuovi canali? - Sostituisci Scansiona codice QR WiFi Formato codice QR delle Credenziali WiFi non valido diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index cae1e5965..f4e7d1b32 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -21,7 +21,6 @@ שנה ערוץ בטוח שתרצה לשנות ערוץ? כל תקשורת עם מכשירים אחרים תיפסק עד שתשתף להם את הגדרות הערוץ החדשות. התקבל כתובת ערוץ חדשה - תרצה לשנות לערוץ \'%s\'? משטסטיק צריך גישה למיקום ועל מיקום להיות דולק בכדי למצוא מכשירי בלוטוס. ניתן לכבות חזרה לאחר מכן. דווח על באג דווח על באג diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index a55abdb7d..5f5b7139a 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -67,7 +67,6 @@ チャンネルの変更 チャンネルを変更しますか?新しいチャンネル設定をシェアするまで他のノードとの通信はすべて停止します。 新しいチャンネルURLを受信しました - \'%s\チャンネルに変更しますか? 必要なアクセス権限が拒否されているため、アプリが正常に動作しません。設定により権限を許可してください。 バグ報告 バグの報告 @@ -224,9 +223,6 @@ 8時間 常時 - - %d の新しいチャンネルを追加しますか? - 置き換え WiFiのQRコードをスキャン WiFi認証QRコードの形式が無効です diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 612798aeb..3d39197fc 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -19,7 +19,6 @@ 채널 변경 채널 변경을 원하세요? 채널 설정이 공유되기 전까지 다른 노드와의 통신은 중단됩니다. 새로운 채널 URL 수신 - \'%s\' 채널로 변경할 까요? Meshtastic 작동에 필요한 권한을 얻지 못했습니다. 정상적으로 작동하지 않을 수도 있습니다. 스마트폰 설정에서 권한 허용 설정해주세요. 버그 보고 버그 보고 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index fb3bc94ae..52d326561 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -21,7 +21,6 @@ Pakeisti kanalą Ar tikrai norite pakeisti kanalą? Visi ryšiai su kitais mazgais bus nutraukti, kol nepasidalinsite naujais kanalo nustatymais. Gautas naujo kanalo URL - Ar norite pereiti prie \'%s\' kanalo? 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. Pranešti apie klaidą Pranešti apie klaidą diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 904c1e611..adea89c75 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -58,7 +58,6 @@ Endre kanal Er du sikker på at du vil endre kanalen? All kommunikasjon med andre noder vil stanse, intill du deler de nye kanalinstillingene. Ny kanal URL mottatt - Vil du bytte til \'%s\' kanal? En påkrevet tilgang mangler, Meshtastic vil ikke fungere korrekt. Vennligst slå på i Android appliksjonsinstillinger. Rapporter Feil Rapporter en feil diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index a410cb5e3..8bb75feca 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -23,7 +23,6 @@ Verander kanaal Ben je zeker van kanaal te willen veranderen? Alle communicatie met andere nodes wordt gestopt tot je de nieuwe instellingen deelt. Nieuw kanaal URL ontvangen - Wil je veranderen naar kanaal \'%s\' ? Een vereiste toelating ontbreekt, Meshtastic kan niet goed werken. Graag aanzetten in Instellingen. Rapporteer Bug Rapporteer een Bug diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 739d05c18..96a312931 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -67,7 +67,6 @@ Zmień kanał Czy na pewno chcesz zmienić kanał? Komunikacja z innymi węzłami komunikacyjnymi zostanie wstrzymana do czasu udostępnienia nowych ustawień kanału. Otrzymano nowy URL kanału - Chcesz przełączyć na \'%s\' kanał? 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ć. Zgłoś błąd Zgłoś błąd @@ -227,12 +226,6 @@ 8 godzin 1 tydzień Na zawsze - - Czy chcesz dodać nowy kanał? - Czy chcesz dodać %d nowe kanały? - Czy chcesz dodać %d nowych kanałów? - Czy chcesz dodać %d nowych kanałów? - Zastąp Skanuj kod QR Wi-Fi Nieprawidłowy format kodu QR diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 25deebf0f..5c3f4280b 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -58,7 +58,6 @@ Mudar canal 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. Novo link de canal recebido - Deseja mudar para o canal \'%s\'? Meshtastic precisa da permissão de localização e localização ativada para encontrar novos dispositivos via Bluetooth. Você pode desativar novamente depois. Informar Bug Informar um bug diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 1f57d06ae..62c8289b5 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -20,7 +20,6 @@ Mudar de canal 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. Novo Link Recebido do Canal - Pretende mudar para o canal \'%s\' ? Meshtastic precisa da permissão de localização e localização ativada para encontrar novos dispositivos via bluetooth. Você pode desativar novamente depois. Reportar Bug Reportar a bug diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index e5e7ed17f..10d9e8d51 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -21,7 +21,6 @@ Schimbă canalul 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. Am primit un nou URL de canal - Vrei să faci schimbul \'%s\' canalului? O permisiune necesară lipsește, Meshtastic nu o să funcționeze corespunzător. Te rugăm activează-o în setările Android. Raportează Bug Raportează un bug diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index a55318a75..8c36de16e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -58,7 +58,6 @@ Смена канала Вы уверены, что хотите изменить канал? Связь с другими устройствами будет прервана, пока вы не поделитесь новыми настройками канала. URL нового канала получен - Вы хотите переключиться на \'%s\' канал? Требуемое разрешение отсутствует, Meshtastic не сможет работать должным образом. Пожалуйста, включите в настройках приложения. Сообщить об ошибке Сообщить об ошибке diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 0078f3431..76ab05692 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -67,7 +67,6 @@ Zmeniť kanál 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. Prijatá nová URL kanálu - Chcete sa prepnúť na kanál \'%s\'? 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. Nahlásiť chybu Nahlásiť chybu @@ -227,12 +226,6 @@ 8 hodín 1 týždeň Vždy - - Chcete pridať nový kanál? - Chcete pridať %d nové kanále? - Chcete pridať %d nových kanálov? - Chcete pridať %d nové kanále? - Nahradiť Skenuj WiFi QR kód Neplatný formát QR kódu poverenia WiFi diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index f93d6f7c1..fd0453f26 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -21,7 +21,6 @@ Zamenjava kanala Ali ste prepričani, da želite spremeniti kanal? Vsa komunikacija z drugimi vozlišči se ustavi, dokler ne delite novih nastavitev kanala. Prejet je bil novi URL kanala - Ali želite preklopiti na kanal \'%s\'? Meshtastic potrebuje dovoljenje za lokacijo in za iskanje novih naprav prek povezave Bluetooth mora biti lokacija vklopljena. Pozneje jo lahko znova izklopite. Prijavi napako Prijavite napako diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index ece92bf62..9ca3967ab 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -67,7 +67,6 @@ Ndërro kanalin radio 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. Ju keni një kanal radio të ri URL - Dëshiron të kalosh në këtë kanal radio? \'%s\' ? 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. Raporto Bug Raporto një bug @@ -225,10 +224,6 @@ 8 orë 1 javë Gjithmonë - - A dëshironi të shtoni një kanal të ri? - A dëshironi të shtoni %d kanale të reja? - Zëvendëso Skano QR kodi WiFi Formati i gabuar i kodit QR të kredencialeve WiFi diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 5f9c97453..ca07fceb1 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -30,7 +30,6 @@ Byt kanal Är du säker på att du vill byta kanal? All kommunikation med andra noder avbryts tills du delar de nya kanalinställningarna. Ny kanal-länk mottagen - Vill du växla till kanalen \'%s\' 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. Rapportera bugg Rapportera bugg diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index bd3b94553..891b4ea27 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -58,7 +58,6 @@ Kanalı değiştir Kanalı değiştirmek istediğinizden emin misiniz? Yeni kanal ayarlarını paylaşana dek tüm cihazlar ile iletişim sonlanacak. Yeni Kanal Adresi(URL) alındı - \'%s\' kanalına geçmek istiyor musunuz? Meshtastic\'in konum iznine ihtiyacı var ve Bluetooth ile yeni cihazlar bulmak için konumun açık olması gerekiyor. Daha sonra isterseniz kapatabilirsiniz. Hata Bildir Hata Bildir diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e521f0e79..f9bad9d24 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -30,7 +30,6 @@ Змінити канал Ви впевнені, що хочете змінити канал? Усі зв’язки з іншими вузлами припиниться, доки ви не поділитеся новими налаштуваннями каналу. Отримано URL-адресу нового каналу - Ви хочете підключитися до \'%s\' каналу? Meshtastic потрібний дозвіл до геоданих для пошуку нових пристроїв через Bluetooth. Ви можете вимкнути його пізніше. Повідомити про помилку Повідомити про помилку diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d89b6ba75..26b6bf236 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -58,7 +58,6 @@ 切换频道 您确定要更改频道吗?在您分享新的频道设定之前,与其他节点的所有通讯都将停止。 收到新的频道 URL - 您要切换到 \'%s\' 频道吗? Meshtastic 需要位置权限并启用位置信息才能通过蓝牙查找新设备。找到之后可以再关闭这权限。 報告BUG 回报问题 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e8a9aece0..69af30c08 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -58,7 +58,6 @@ 切換頻道 您確定要更改頻道嗎?在您分享新的頻道設定之前,與其他節點的所有通訊都將停止。 收到新的頻道 URL - 您要切換到 \'%s\' 頻道嗎? Meshtastic 需要位置權限並啟用位置信息才能通過藍牙查找新設備。找到之後可以再關閉這權限。 回報BUG 回報問題 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0ed5ff660..d6c44a40d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -93,7 +93,6 @@ Change channel Are you sure you want to change the channel? All communication with other nodes will stop until you share the new channel settings. New Channel URL received - Do you want to switch to the \'%s\' channel? Meshtastic needs location permission and location must be turned on to find new devices via Bluetooth. You can turn it off again afterwards. Report Bug Report a bug @@ -251,10 +250,6 @@ 8 hours 1 week Always - - Do you want to add a new channel? - Do you want to add %d new channels? - Replace Scan WiFi QR code Invalid WiFi Credential QR code format diff --git a/config/detekt/detekt-baseline.xml b/config/detekt/detekt-baseline.xml index 2d010cf40..b12339f1d 100644 --- a/config/detekt/detekt-baseline.xml +++ b/config/detekt/detekt-baseline.xml @@ -400,7 +400,6 @@ MaxLineLength:MQTTRepository.kt$MQTTRepository.Companion$* 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 */ 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! */ - 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 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 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 MaxLineLength:MainActivity.kt$MainActivity$// pager.offscreenPageLimit = 0 // Don't keep any offscreen pages around, because we want to make sure our bluetooth scanning stops @@ -622,10 +621,6 @@ NoWildcardImports:BluetoothInterface.kt$import com.geeksville.mesh.service.* NoWildcardImports:DeviceVersionTest.kt$import org.junit.Assert.* NoWildcardImports:ExampleUnitTest.kt$import org.junit.Assert.* - NoWildcardImports:MainActivity.kt$import android.content.* - NoWildcardImports:MainActivity.kt$import com.geeksville.mesh.android.* - NoWildcardImports:MainActivity.kt$import com.geeksville.mesh.service.* - NoWildcardImports:MainActivity.kt$import com.geeksville.mesh.ui.* NoWildcardImports:MeshService.kt$import com.geeksville.mesh.* NoWildcardImports:MeshService.kt$import com.geeksville.mesh.util.* NoWildcardImports:MockInterface.kt$import com.geeksville.mesh.* @@ -745,10 +740,6 @@ WildcardImport:BluetoothInterface.kt$import com.geeksville.mesh.service.* WildcardImport:DeviceVersionTest.kt$import org.junit.Assert.* WildcardImport:ExampleUnitTest.kt$import org.junit.Assert.* - WildcardImport:MainActivity.kt$import android.content.* - WildcardImport:MainActivity.kt$import com.geeksville.mesh.android.* - WildcardImport:MainActivity.kt$import com.geeksville.mesh.service.* - WildcardImport:MainActivity.kt$import com.geeksville.mesh.ui.* WildcardImport:MeshService.kt$import com.geeksville.mesh.* WildcardImport:MeshService.kt$import com.geeksville.mesh.util.* WildcardImport:MockInterface.kt$import com.geeksville.mesh.*