CommentSpacing:BLEException.kt$BLEConnectionClosing$/// Our interface is being shut down CommentSpacing:Constants.kt$/// a bool true means we expect this condition to continue until, false means device might come back CommentSpacing:Coroutines.kt$/// Wrap launch with an exception handler, FIXME, move into a utility lib CommentSpacing:DeferredExecution.kt$DeferredExecution$/// Queue some new work CommentSpacing:DeferredExecution.kt$DeferredExecution$/// run all work in the queue and clear it to be ready to accept new work CommentSpacing:Exceptions.kt$/// Convert any exceptions in this service call into a RemoteException that the client can CommentSpacing:Exceptions.kt$/// then handle CommentSpacing:Exceptions.kt$Exceptions$/// Set in Application.onCreate CommentWrapping:SignalMetrics.kt$Metric.SNR$/* Selected 12 as the max to get 4 equal vertical sections. */ ComposableNaming:NodeDetail.kt$notesSection ComposableParamOrder:AlertDialogs.kt$SimpleAlertDialog ComposableParamOrder:BatteryInfo.kt$BatteryInfo ComposableParamOrder:ChannelSettingsItemList.kt$ChannelSettingsItemList ComposableParamOrder:Debug.kt$DebugMenuActions ComposableParamOrder:Debug.kt$DecodedPayloadBlock ComposableParamOrder:DebugSearch.kt$DebugSearchState ComposableParamOrder:DebugSearch.kt$DebugSearchStateviewModelDefaults ComposableParamOrder:DeviceMetrics.kt$DeviceMetricsChart ComposableParamOrder:EditBase64Preference.kt$EditBase64Preference ComposableParamOrder:EditTextPreference.kt$EditTextPreference ComposableParamOrder:ElevationInfo.kt$ElevationInfo ComposableParamOrder:EmptyStateContent.kt$EmptyStateContent ComposableParamOrder:EnvironmentCharts.kt$ChartContent ComposableParamOrder:EnvironmentCharts.kt$EnvironmentMetricsChart ComposableParamOrder:EnvironmentCharts.kt$MetricPlottingCanvas ComposableParamOrder:HostMetricsLog.kt$HostMetricsItem ComposableParamOrder:HostMetricsLog.kt$LogLine ComposableParamOrder:LastHeardInfo.kt$LastHeardInfo ComposableParamOrder:LinkedCoordinates.kt$LinkedCoordinates ComposableParamOrder:MainAppBar.kt$MainAppBar ComposableParamOrder:MapReportingPreference.kt$MapReportingPreference ComposableParamOrder:MaterialBatteryInfo.kt$MaterialBatteryInfo ComposableParamOrder:Message.kt$MessageScreen ComposableParamOrder:Message.kt$QuickChatRow ComposableParamOrder:MessageActions.kt$MessageActions ComposableParamOrder:MessageActions.kt$MessageStatusButton ComposableParamOrder:MessageItem.kt$MessageItem ComposableParamOrder:MessageList.kt$DeliveryInfo ComposableParamOrder:MessageList.kt$MessageList ComposableParamOrder:NodeChip.kt$NodeChip ComposableParamOrder:NodeDetail.kt$DeviceActions ComposableParamOrder:NodeDetail.kt$EnvironmentMetrics ComposableParamOrder:NodeDetail.kt$NodeActionButton ComposableParamOrder:NodeDetail.kt$NodeDetailList ComposableParamOrder:NodeFilterTextField.kt$NodeFilterTextField ComposableParamOrder:NodeItem.kt$NodeItem ComposableParamOrder:NodeKeyStatusIcon.kt$NodeKeyStatusIcon ComposableParamOrder:NodeMenu.kt$NodeMenu ComposableParamOrder:NodeScreen.kt$NodeScreen ComposableParamOrder:PaxMetrics.kt$PaxMetricsChart ComposableParamOrder:PermissionScreenLayout.kt$PermissionScreenLayout ComposableParamOrder:PowerMetrics.kt$PowerMetricsChart ComposableParamOrder:QuickChat.kt$OutlinedTextFieldWithCounter ComposableParamOrder:SatelliteCountInfo.kt$SatelliteCountInfo ComposableParamOrder:SettingsItem.kt$SettingsItem ComposableParamOrder:SignalInfo.kt$SignalInfo ComposableParamOrder:SignalMetrics.kt$SignalMetricsChart ComposableParamOrder:SwitchPreference.kt$SwitchPreference ComposableParamOrder:TopLevelNavIcon.kt$ConnectionsNavIcon ComposableParamOrder:TracerouteButton.kt$TracerouteButton ComposableParamOrder:WarningDialog.kt$WarningDialog ConstructorParameterNaming:MeshLog.kt$MeshLog$@ColumnInfo(name = "message") val raw_message: String ConstructorParameterNaming:MeshLog.kt$MeshLog$@ColumnInfo(name = "received_date") val received_date: Long ConstructorParameterNaming:MeshLog.kt$MeshLog$@ColumnInfo(name = "type") val message_type: String ConstructorParameterNaming:Packet.kt$ContactSettings$@PrimaryKey val contact_key: String ConstructorParameterNaming:Packet.kt$Packet$@ColumnInfo(name = "contact_key") val contact_key: String ConstructorParameterNaming:Packet.kt$Packet$@ColumnInfo(name = "port_num") val port_num: Int ConstructorParameterNaming:Packet.kt$Packet$@ColumnInfo(name = "received_time") val received_time: Long ContentSlotReused:AdaptiveTwoPane.kt$second CyclomaticComplexMethod:MeshService.kt$MeshService$private fun handleReceivedData(packet: MeshPacket) CyclomaticComplexMethod:NetworkConfigItemList.kt$@Composable fun NetworkConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) CyclomaticComplexMethod:PositionConfigItemList.kt$@OptIn(ExperimentalPermissionsApi::class) @Composable fun PositionConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) CyclomaticComplexMethod:RadioConfigViewModel.kt$RadioConfigViewModel$private fun processPacketResponse(packet: MeshProtos.MeshPacket) EmptyCatchBlock:MeshLog.kt$MeshLog${ } EmptyClassBlock:DebugLogFile.kt$BinaryLogFile${ } EmptyFunctionBlock:NopInterface.kt$NopInterface${ } EmptyFunctionBlock:NsdManager.kt$<no name provided>${ } EmptyFunctionBlock:TrustAllX509TrustManager.kt$TrustAllX509TrustManager${} FinalNewline:BLEException.kt$com.geeksville.mesh.service.BLEException.kt FinalNewline:BluetoothInterfaceFactory.kt$com.geeksville.mesh.repository.radio.BluetoothInterfaceFactory.kt FinalNewline:BluetoothRepositoryModule.kt$com.geeksville.mesh.repository.bluetooth.BluetoothRepositoryModule.kt FinalNewline:BootCompleteReceiver.kt$com.geeksville.mesh.service.BootCompleteReceiver.kt FinalNewline:CoroutineDispatchers.kt$com.geeksville.mesh.CoroutineDispatchers.kt FinalNewline:Coroutines.kt$com.geeksville.mesh.concurrent.Coroutines.kt FinalNewline:DateUtils.kt$com.geeksville.mesh.android.DateUtils.kt FinalNewline:DebugLogFile.kt$com.geeksville.mesh.android.DebugLogFile.kt FinalNewline:DeferredExecution.kt$com.geeksville.mesh.concurrent.DeferredExecution.kt FinalNewline:DeviceVersion.kt$com.geeksville.mesh.model.DeviceVersion.kt FinalNewline:InterfaceId.kt$com.geeksville.mesh.repository.radio.InterfaceId.kt FinalNewline:InterfaceSpec.kt$com.geeksville.mesh.repository.radio.InterfaceSpec.kt FinalNewline:MockInterfaceFactory.kt$com.geeksville.mesh.repository.radio.MockInterfaceFactory.kt FinalNewline:NopInterface.kt$com.geeksville.mesh.repository.radio.NopInterface.kt FinalNewline:NopInterfaceFactory.kt$com.geeksville.mesh.repository.radio.NopInterfaceFactory.kt FinalNewline:ProbeTableProvider.kt$com.geeksville.mesh.repository.usb.ProbeTableProvider.kt FinalNewline:QuickChatActionRepository.kt$com.geeksville.mesh.database.QuickChatActionRepository.kt FinalNewline:RadioNotConnectedException.kt$com.geeksville.mesh.service.RadioNotConnectedException.kt FinalNewline:RegularPreference.kt$com.geeksville.mesh.ui.common.components.RegularPreference.kt FinalNewline:SerialConnection.kt$com.geeksville.mesh.repository.usb.SerialConnection.kt FinalNewline:SerialConnectionListener.kt$com.geeksville.mesh.repository.usb.SerialConnectionListener.kt FinalNewline:SerialInterface.kt$com.geeksville.mesh.repository.radio.SerialInterface.kt FinalNewline:SerialInterfaceFactory.kt$com.geeksville.mesh.repository.radio.SerialInterfaceFactory.kt FinalNewline:TCPInterfaceFactory.kt$com.geeksville.mesh.repository.radio.TCPInterfaceFactory.kt FinalNewline:UsbBroadcastReceiver.kt$com.geeksville.mesh.repository.usb.UsbBroadcastReceiver.kt FinalNewline:UsbRepositoryModule.kt$com.geeksville.mesh.repository.usb.UsbRepositoryModule.kt ForbiddenComment:SafeBluetooth.kt$SafeBluetooth$// TODO: display some kind of UI about restarting BLE FunctionNaming:PacketDao.kt$PacketDao$@Query("DELETE FROM packet WHERE uuid=:uuid") suspend fun _delete(uuid: Long) FunctionNaming:QuickChatActionDao.kt$QuickChatActionDao$@Query("Delete from quick_chat where uuid=:uuid") fun _delete(uuid: Long) ImplicitDefaultLocale:NodeInfo.kt$NodeInfo$String.format("%d%%", batteryLevel) LambdaParameterEventTrailing:Channel.kt$onConfirm LambdaParameterEventTrailing:MainAppBar.kt$onAction LambdaParameterEventTrailing:Message.kt$onClick LambdaParameterEventTrailing:Message.kt$onSendMessage LambdaParameterEventTrailing:MessageList.kt$onReply LambdaParameterEventTrailing:NodeChip.kt$onAction LambdaParameterEventTrailing:NodeDetail.kt$onClick LambdaParameterEventTrailing:NodeDetail.kt$onSaveNotes LambdaParameterInRestartableEffect:Channel.kt$onConfirm LambdaParameterInRestartableEffect:MessageList.kt$onUnreadChanged LargeClass:MeshService.kt$MeshService : ServiceLogging LongMethod:AmbientLightingConfigItemList.kt$@Composable fun AmbientLightingConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:AudioConfigItemList.kt$@Composable fun AudioConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:CannedMessageConfigItemList.kt$@Composable fun CannedMessageConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:DetectionSensorConfigItemList.kt$@Composable fun DetectionSensorConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:DeviceConfigItemList.kt$@Composable fun DeviceConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:DisplayConfigItemList.kt$@Composable fun DisplayConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:ExternalNotificationConfigItemList.kt$@Composable fun ExternalNotificationConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:LoRaConfigItemList.kt$@Composable fun LoRaConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:MeshService.kt$MeshService$private fun handleReceivedData(packet: MeshPacket) LongMethod:NetworkConfigItemList.kt$@Composable fun NetworkConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:PositionConfigItemList.kt$@OptIn(ExperimentalPermissionsApi::class) @Composable fun PositionConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:PowerConfigItemList.kt$@Composable fun PowerConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:RadioConfigViewModel.kt$RadioConfigViewModel$private fun processPacketResponse(packet: MeshProtos.MeshPacket) LongMethod:SecurityConfigItemList.kt$@OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun SecurityConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:SerialConfigItemList.kt$@Composable fun SerialConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:StoreForwardConfigItemList.kt$@Composable fun StoreForwardConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:TelemetryConfigItemList.kt$@Composable fun TelemetryConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) LongMethod:UserConfigItemList.kt$@Composable fun UserConfigScreen(navController: NavController, viewModel: RadioConfigViewModel = hiltViewModel()) MagicNumber:BatteryInfo.kt$100 MagicNumber:BatteryInfo.kt$101 MagicNumber:BatteryInfo.kt$14 MagicNumber:BatteryInfo.kt$15 MagicNumber:BatteryInfo.kt$34 MagicNumber:BatteryInfo.kt$35 MagicNumber:BatteryInfo.kt$4 MagicNumber:BatteryInfo.kt$5 MagicNumber:BatteryInfo.kt$79 MagicNumber:BatteryInfo.kt$80 MagicNumber:BluetoothInterface.kt$BluetoothInterface$1000 MagicNumber:BluetoothInterface.kt$BluetoothInterface$500 MagicNumber:BluetoothInterface.kt$BluetoothInterface$512 MagicNumber:ChannelSet.kt$40 MagicNumber:ChannelSet.kt$960 MagicNumber:Contacts.kt$7 MagicNumber:Contacts.kt$8 MagicNumber:DataPacket.kt$DataPacket.CREATOR$16 MagicNumber:Debug.kt$3 MagicNumber:DeviceVersion.kt$DeviceVersion$100 MagicNumber:DeviceVersion.kt$DeviceVersion$10000 MagicNumber:EditChannelDialog.kt$16 MagicNumber:EditChannelDialog.kt$32 MagicNumber:EditIPv4Preference.kt$0xff MagicNumber:EditIPv4Preference.kt$16 MagicNumber:EditIPv4Preference.kt$24 MagicNumber:EditIPv4Preference.kt$8 MagicNumber:EditListPreference.kt$12 MagicNumber:EditListPreference.kt$12345 MagicNumber:EditListPreference.kt$67890 MagicNumber:Extensions.kt$1000 MagicNumber:Extensions.kt$1440000 MagicNumber:Extensions.kt$24 MagicNumber:Extensions.kt$2880 MagicNumber:Extensions.kt$60 MagicNumber:LazyColumnDragAndDropDemo.kt$50 MagicNumber:LocationRepository.kt$LocationRepository$1000L MagicNumber:LocationRepository.kt$LocationRepository$30 MagicNumber:LocationRepository.kt$LocationRepository$31 MagicNumber:LocationUtils.kt$1e-7 MagicNumber:LocationUtils.kt$360 MagicNumber:MQTTRepository.kt$MQTTRepository$512 MagicNumber:MeshService.kt$MeshService$0xffffffff MagicNumber:MeshService.kt$MeshService$1000 MagicNumber:MeshService.kt$MeshService$1000.0 MagicNumber:MeshService.kt$MeshService$1000L MagicNumber:MeshService.kt$MeshService$16 MagicNumber:MeshService.kt$MeshService$30 MagicNumber:MeshService.kt$MeshService$32 MagicNumber:MeshService.kt$MeshService$60000 MagicNumber:MeshService.kt$MeshService$8 MagicNumber:MetricsViewModel.kt$MetricsViewModel$1000L MagicNumber:MetricsViewModel.kt$MetricsViewModel$1e-5 MagicNumber:MetricsViewModel.kt$MetricsViewModel$1e-7 MagicNumber:NodeInfo.kt$DeviceMetrics.Companion$1000 MagicNumber:NodeInfo.kt$EnvironmentMetrics.Companion$1000 MagicNumber:NodeInfo.kt$NodeInfo$0.114 MagicNumber:NodeInfo.kt$NodeInfo$0.299 MagicNumber:NodeInfo.kt$NodeInfo$0.587 MagicNumber:NodeInfo.kt$NodeInfo$0x0000FF MagicNumber:NodeInfo.kt$NodeInfo$0x00FF00 MagicNumber:NodeInfo.kt$NodeInfo$0xFF0000 MagicNumber:NodeInfo.kt$NodeInfo$1000 MagicNumber:NodeInfo.kt$NodeInfo$1000.0 MagicNumber:NodeInfo.kt$NodeInfo$16 MagicNumber:NodeInfo.kt$NodeInfo$1609 MagicNumber:NodeInfo.kt$NodeInfo$1609.34 MagicNumber:NodeInfo.kt$NodeInfo$255 MagicNumber:NodeInfo.kt$NodeInfo$3.281 MagicNumber:NodeInfo.kt$NodeInfo$8 MagicNumber:NodeInfo.kt$Position$180 MagicNumber:NodeInfo.kt$Position$90 MagicNumber:NodeInfo.kt$Position$90.0 MagicNumber:NodeInfo.kt$Position.Companion$1000 MagicNumber:NodeInfo.kt$Position.Companion$1e-7 MagicNumber:NodeInfo.kt$Position.Companion$1e7 MagicNumber:PacketRepository.kt$PacketRepository$500 MagicNumber:PacketResponseStateDialog.kt$100 MagicNumber:PowerConfigItemList.kt$3600 MagicNumber:ProbeTableProvider.kt$ProbeTableProvider$21972 MagicNumber:ProbeTableProvider.kt$ProbeTableProvider$32809 MagicNumber:ProbeTableProvider.kt$ProbeTableProvider$6790 MagicNumber:ProbeTableProvider.kt$ProbeTableProvider$9114 MagicNumber:SafeBluetooth.kt$SafeBluetooth$10 MagicNumber:SafeBluetooth.kt$SafeBluetooth$100 MagicNumber:SafeBluetooth.kt$SafeBluetooth$1000 MagicNumber:SafeBluetooth.kt$SafeBluetooth$2500 MagicNumber:SafeBluetooth.kt$SafeBluetooth.<no name provided>$2500 MagicNumber:SerialConnectionImpl.kt$SerialConnectionImpl$115200 MagicNumber:SerialConnectionImpl.kt$SerialConnectionImpl$200 MagicNumber:ServiceClient.kt$ServiceClient$500 MagicNumber:StreamInterface.kt$StreamInterface$0xff MagicNumber:StreamInterface.kt$StreamInterface$3 MagicNumber:StreamInterface.kt$StreamInterface$4 MagicNumber:StreamInterface.kt$StreamInterface$8 MagicNumber:TCPInterface.kt$TCPInterface$1000 MagicNumber:TCPInterface.kt$TCPInterface$180 MagicNumber:TCPInterface.kt$TCPInterface$500 MagicNumber:UIState.kt$4 MatchingDeclarationName:AnalyticsClient.kt$AnalyticsProvider MatchingDeclarationName:DistanceExtensions.kt$DistanceUnit MatchingDeclarationName:LocationUtils.kt$GPSFormat MatchingDeclarationName:MeshServiceStarter.kt$ServiceStarter : Worker MatchingDeclarationName:SortOption.kt$NodeSortOption MaxLineLength:BluetoothInterface.kt$/* Info for the esp32 device side code. See that source for the 'gold' standard docs on this interface. MeshBluetoothService UUID 6ba1b218-15a8-461f-9fa8-5dcae273eafd FIXME - notify vs indication for fromradio output. Using notify for now, not sure if that is best FIXME - in the esp32 mesh management code, occasionally mirror the current net db to flash, so that if we reboot we still have a good guess of users who are out there. FIXME - make sure this protocol is guaranteed robust and won't drop packets "According to the BLE specification the notification length can be max ATT_MTU - 3. The 3 bytes subtracted is the 3-byte header(OP-code (operation, 1 byte) and the attribute handle (2 bytes)). In BLE 4.1 the ATT_MTU is 23 bytes (20 bytes for payload), but in BLE 4.2 the ATT_MTU can be negotiated up to 247 bytes." MAXPACKET is 256? look into what the lora lib uses. FIXME Characteristics: UUID properties description 8ba2bcc2-ee02-4a55-a531-c525c5e454d5 read fromradio - contains a newly received packet destined towards the phone (up to MAXPACKET bytes? per packet). After reading the esp32 will put the next packet in this mailbox. If the FIFO is empty it will put an empty packet in this mailbox. f75c76d2-129e-4dad-a1dd-7866124401e7 write toradio - write ToRadio protobufs to this charstic to send them (up to MAXPACKET len) ed9da18c-a800-4f66-a670-aa7547e34453 read|notify|write fromnum - the current packet # in the message waiting inside fromradio, if the phone sees this notify it should read messages until it catches up with this number. The phone can write to this register to go backwards up to FIXME packets, to handle the rare case of a fromradio packet was dropped after the esp32 callback was called, but before it arrives at the phone. If the phone writes to this register the esp32 will discard older packets and put the next packet >= fromnum in fromradio. When the esp32 advances fromnum, it will delay doing the notify by 100ms, in the hopes that the notify will never actally need to be sent if the phone is already pulling from fromradio. Note: that if the phone ever sees this number decrease, it means the esp32 has rebooted. Re: queue management Not all messages are kept in the fromradio queue (filtered based on SubPacket): * only the most recent Position and User messages for a particular node are kept * all Data SubPackets are kept * No WantNodeNum / DenyNodeNum messages are kept A variable keepAllPackets, if set to true will suppress this behavior and instead keep everything for forwarding to the phone (for debugging) */ MaxLineLength:BluetoothState.kt$BluetoothState$"BluetoothState(hasPermissions=$hasPermissions, enabled=$enabled, bondedDevices=${bondedDevices.map { it.anonymize }})" MaxLineLength:DataPacket.kt$DataPacket$val dataType: Int MaxLineLength:LocationRepository.kt$LocationRepository$info("Starting location updates with $providerList intervalMs=${intervalMs}ms and minDistanceM=${minDistanceM}m") MaxLineLength:MQTTRepository.kt$MQTTRepository.Companion$* MaxLineLength:ServiceClient.kt$ServiceClient$// Some phones seem to ahve a race where if you unbind and quickly rebind bindService returns false. Try MaxLineLength:ServiceClient.kt$ServiceClient.<no name provided>$// If we start to close a service, it seems that there is a possibility a onServiceConnected event is the queue ModifierClickableOrder:Channel.kt$clickable(onClick = onClick) ModifierListSpacing:Packet.kt$Packet$@Entity( tableName = "packet", indices = [ Index(value = ["myNodeNum"]), Index(value = ["port_num"]), Index(value = ["contact_key"]), ] ) data ModifierMissing:AdaptiveTwoPane.kt$AdaptiveTwoPane ModifierMissing:BLEDevices.kt$BLEDevices ModifierMissing:Channel.kt$ChannelScreen ModifierMissing:ChannelSettingsItemList.kt$ChannelSelection ModifierMissing:CleanNodeDatabaseScreen.kt$CleanNodeDatabaseScreen ModifierMissing:CommonCharts.kt$ChartHeader ModifierMissing:CommonCharts.kt$Legend ModifierMissing:CommonCharts.kt$TimeLabels ModifierMissing:ContactSharing.kt$SharedContactDialog ModifierMissing:Contacts.kt$ContactListView ModifierMissing:Contacts.kt$ContactsScreen ModifierMissing:Contacts.kt$SelectionToolbar ModifierMissing:DeviceMetrics.kt$DeviceMetricsScreen ModifierMissing:EmojiPicker.kt$EmojiPicker ModifierMissing:EmojiPicker.kt$EmojiPickerDialog ModifierMissing:EmptyStateContent.kt$EmptyStateContent ModifierMissing:EnvironmentMetrics.kt$EnvironmentMetricsScreen ModifierMissing:HostMetricsLog.kt$HostMetricsLogScreen ModifierMissing:IndoorAirQuality.kt$IndoorAirQuality ModifierMissing:LoraSignalIndicator.kt$LoraSignalIndicator ModifierMissing:LoraSignalIndicator.kt$Rssi ModifierMissing:LoraSignalIndicator.kt$Snr ModifierMissing:LoraSignalIndicator.kt$SnrAndRssi ModifierMissing:Main.kt$MainScreen ModifierMissing:MapReportingPreference.kt$MapReportingPreference ModifierMissing:MessageActions.kt$MessageStatusButton ModifierMissing:MessageActions.kt$ReactionButton ModifierMissing:MessageActions.kt$ReplyButton ModifierMissing:NetworkConfigItemList.kt$NetworkConfigScreen ModifierMissing:NetworkDevices.kt$NetworkDevices ModifierMissing:NodeMenu.kt$NodeMenu ModifierMissing:NodeScreen.kt$NodeScreen ModifierMissing:NodeStatusIcons.kt$NodeStatusIcons ModifierMissing:PaxMetrics.kt$PaxMetricsItem ModifierMissing:PaxMetrics.kt$PaxMetricsScreen ModifierMissing:PositionConfigItemList.kt$PositionConfigScreen ModifierMissing:PositionLog.kt$PositionItem ModifierMissing:PositionLog.kt$PositionLogScreen ModifierMissing:PowerMetrics.kt$PowerMetricsScreen ModifierMissing:RadioConfig.kt$RadioConfigItemList ModifierMissing:RadioConfigScreenList.kt$RadioConfigScreenList ModifierMissing:Reaction.kt$ReactionDialog ModifierMissing:SecurityConfigItemList.kt$SecurityConfigScreen ModifierMissing:SecurityIcon.kt$SecurityIcon ModifierMissing:SettingsItem.kt$SettingsItem ModifierMissing:SettingsItem.kt$SettingsItemDetail ModifierMissing:SettingsItem.kt$SettingsItemSwitch ModifierMissing:SettingsScreen.kt$SettingsScreen ModifierMissing:Share.kt$ShareScreen ModifierMissing:SignalMetrics.kt$SignalMetricsScreen ModifierMissing:SimpleAlertDialog.kt$SimpleAlertDialog ModifierMissing:SlidingSelector.kt$OptionLabel ModifierMissing:TopLevelNavIcon.kt$TopLevelNavIcon ModifierNotUsedAtRoot:DeviceMetrics.kt$modifier = modifier.weight(weight = Y_AXIS_WEIGHT) ModifierNotUsedAtRoot:DeviceMetrics.kt$modifier = modifier.width(dp) ModifierNotUsedAtRoot:DeviceMetrics.kt$modifier.width(dp) ModifierNotUsedAtRoot:EditChannelDialog.kt$modifier = modifier.weight(1f) ModifierNotUsedAtRoot:EditDeviceProfileDialog.kt$modifier = modifier.weight(1f) ModifierNotUsedAtRoot:EnvironmentCharts.kt$modifier = modifier.width(dp) ModifierNotUsedAtRoot:EnvironmentCharts.kt$modifier.width(dp) ModifierNotUsedAtRoot:NodeChip.kt$modifier = modifier.width(IntrinsicSize.Min).defaultMinSize(minWidth = 72.dp).semantics { contentDescription = node.user.shortName.ifEmpty { "Node" } } ModifierNotUsedAtRoot:PaxMetrics.kt$modifier.width(dp) ModifierNotUsedAtRoot:PowerMetrics.kt$modifier = modifier.weight(weight = Y_AXIS_WEIGHT) ModifierNotUsedAtRoot:PowerMetrics.kt$modifier = modifier.width(dp) ModifierNotUsedAtRoot:PowerMetrics.kt$modifier.width(dp) ModifierNotUsedAtRoot:PreferenceFooter.kt$modifier = modifier .height(48.dp) .weight(1f) ModifierNotUsedAtRoot:SignalInfo.kt$modifier = modifier ModifierNotUsedAtRoot:SignalMetrics.kt$modifier = modifier.weight(weight = Y_AXIS_WEIGHT) ModifierNotUsedAtRoot:SignalMetrics.kt$modifier = modifier.width(dp) ModifierNotUsedAtRoot:SignalMetrics.kt$modifier.width(dp) ModifierNotUsedAtRoot:TextDividerPreference.kt$modifier = modifier .fillMaxWidth() .padding(all = 16.dp) ModifierNotUsedAtRoot:TextDividerPreference.kt$modifier = modifier .fillMaxWidth() .wrapContentWidth(Alignment.End) ModifierReused:DeviceMetrics.kt$Canvas(modifier = modifier.width(dp)) { val height = size.height val width = size.width for (i in telemetries.indices) { val telemetry = telemetries[i] /* x-value time */ val xRatio = (telemetry.time - oldest.time).toFloat() / timeDiff val x = xRatio * width /* Channel Utilization */ plotPoint( drawContext = drawContext, color = Device.CH_UTIL.color, x = x, value = telemetry.deviceMetrics.channelUtilization, divisor = MAX_PERCENT_VALUE, ) /* Air Utilization Transmit */ plotPoint( drawContext = drawContext, color = Device.AIR_UTIL.color, x = x, value = telemetry.deviceMetrics.airUtilTx, divisor = MAX_PERCENT_VALUE, ) } /* Battery Line */ var index = 0 while (index < telemetries.size) { val path = Path() index = createPath( telemetries = telemetries, index = index, path = path, oldestTime = oldest.time, timeRange = timeDiff, width = width, timeThreshold = selectedTime.timeThreshold(), ) { i -> val telemetry = telemetries.getOrNull(i) ?: telemetries.last() val ratio = telemetry.deviceMetrics.batteryLevel / MAX_PERCENT_VALUE val y = height - (ratio * height) return@createPath y } drawPath( path = path, color = Device.BATTERY.color, style = Stroke(width = GraphUtil.RADIUS, cap = StrokeCap.Round), ) } } ModifierReused:DeviceMetrics.kt$HorizontalLinesOverlay( modifier.width(dp), lineColors = listOf(graphColor, Color.Yellow, Color.Red, graphColor, graphColor), ) ModifierReused:DeviceMetrics.kt$TimeAxisOverlay(modifier.width(dp), oldest = oldest.time, newest = newest.time, selectedTime.lineInterval()) ModifierReused:EnvironmentCharts.kt$Box( contentAlignment = Alignment.TopStart, modifier = modifier.horizontalScroll(state = scrollState, reverseScrolling = true), ) { HorizontalLinesOverlay(modifier.width(dp), lineColors = List(size = 5) { graphColor }) TimeAxisOverlay(modifier = modifier.width(dp), oldest = oldest, newest = newest, selectedTime.lineInterval()) MetricPlottingCanvas( modifier = modifier.width(dp), telemetries = telemetries, graphData = graphData, selectedTime = selectedTime, oldest = oldest, timeDiff = timeDiff, rightMin = rightMin, rightMax = rightMax, ) } ModifierReused:EnvironmentCharts.kt$HorizontalLinesOverlay(modifier.width(dp), lineColors = List(size = 5) { graphColor }) ModifierReused:EnvironmentCharts.kt$MetricPlottingCanvas( modifier = modifier.width(dp), telemetries = telemetries, graphData = graphData, selectedTime = selectedTime, oldest = oldest, timeDiff = timeDiff, rightMin = rightMin, rightMax = rightMax, ) ModifierReused:EnvironmentCharts.kt$TimeAxisOverlay(modifier = modifier.width(dp), oldest = oldest, newest = newest, selectedTime.lineInterval()) ModifierReused:PaxMetrics.kt$HorizontalLinesOverlay(modifier.width(dp), lineColors = List(size = 5) { Color.LightGray }) ModifierReused:PaxMetrics.kt$Row(modifier = modifier.fillMaxWidth().fillMaxHeight(fraction = 0.33f)) { YAxisLabels( modifier = Modifier.weight(Y_AXIS_WEIGHT).fillMaxHeight().padding(start = 8.dp), labelColor = MaterialTheme.colorScheme.onSurface, minValue = minValue, maxValue = maxValue, ) Box( contentAlignment = Alignment.TopStart, modifier = Modifier.horizontalScroll(state = scrollState, reverseScrolling = true).weight(CHART_WEIGHT), ) { HorizontalLinesOverlay(modifier.width(dp), lineColors = List(size = 5) { Color.LightGray }) TimeAxisOverlay(modifier.width(dp), oldest = minTime, newest = maxTime, timeFrame.lineInterval()) Canvas(modifier = Modifier.width(dp).fillMaxHeight()) { val width = size.width val height = size.height fun xForTime(t: Int): Float = if (maxTime == minTime) width / 2 else (t - minTime).toFloat() / (maxTime - minTime) * width fun yForValue(v: Int): Float = height - (v - minValue) / (maxValue - minValue) * height fun drawLine(series: List<Pair<Int, Int>>, color: Color) { for (i in 1 until series.size) { drawLine( color = color, start = Offset(xForTime(series[i - 1].first), yForValue(series[i - 1].second)), end = Offset(xForTime(series[i].first), yForValue(series[i].second)), strokeWidth = 2.dp.toPx(), ) } } drawLine(bleSeries, PaxSeries.BLE.color) drawLine(wifiSeries, PaxSeries.WIFI.color) drawLine(totalSeries, PaxSeries.PAX.color) } } YAxisLabels( modifier = Modifier.weight(Y_AXIS_WEIGHT).fillMaxHeight().padding(end = 8.dp), labelColor = MaterialTheme.colorScheme.onSurface, minValue = minValue, maxValue = maxValue, ) } ModifierReused:PaxMetrics.kt$TimeAxisOverlay(modifier.width(dp), oldest = minTime, newest = maxTime, timeFrame.lineInterval()) ModifierReused:PowerMetrics.kt$Canvas(modifier = modifier.width(dp)) { val width = size.width val height = size.height /* Voltage */ var index = 0 while (index < telemetries.size) { val path = Path() index = createPath( telemetries = telemetries, index = index, path = path, oldestTime = oldest.time, timeRange = timeDiff, width = width, timeThreshold = selectedTime.timeThreshold(), ) { i -> val telemetry = telemetries.getOrNull(i) ?: telemetries.last() val ratio = (retrieveVoltage(selectedChannel, telemetry) - voltageMin) / voltageDiff val y = height - (ratio * height) return@createPath y } drawPath( path = path, color = VOLTAGE_COLOR, style = Stroke(width = GraphUtil.RADIUS, cap = StrokeCap.Round), ) } /* Current */ index = 0 while (index < telemetries.size) { val path = Path() index = createPath( telemetries = telemetries, index = index, path = path, oldestTime = oldest.time, timeRange = timeDiff, width = width, timeThreshold = selectedTime.timeThreshold(), ) { i -> val telemetry = telemetries.getOrNull(i) ?: telemetries.last() val ratio = (retrieveCurrent(selectedChannel, telemetry) - Power.CURRENT.min) / currentDiff val y = height - (ratio * height) return@createPath y } drawPath( path = path, color = Power.CURRENT.color, style = Stroke(width = GraphUtil.RADIUS, cap = StrokeCap.Round), ) } } ModifierReused:PowerMetrics.kt$HorizontalLinesOverlay(modifier.width(dp), lineColors = List(size = 5) { graphColor }) ModifierReused:PowerMetrics.kt$TimeAxisOverlay(modifier.width(dp), oldest = oldest.time, newest = newest.time, selectedTime.lineInterval()) ModifierReused:PowerMetrics.kt$YAxisLabels( modifier = modifier.weight(weight = Y_AXIS_WEIGHT), Power.CURRENT.color, minValue = Power.CURRENT.min, maxValue = Power.CURRENT.max, ) ModifierReused:PowerMetrics.kt$YAxisLabels( modifier = modifier.weight(weight = Y_AXIS_WEIGHT), VOLTAGE_COLOR, minValue = voltageMin, maxValue = voltageMax, ) ModifierReused:PreferenceCategory.kt$Card( modifier = modifier.padding(bottom = 8.dp), ) { Column( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp, vertical = 16.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { ProvideTextStyle(MaterialTheme.typography.bodyLarge) { content() } } } ModifierReused:PreferenceCategory.kt$Text( text, modifier = modifier.padding(start = 16.dp, top = 24.dp, bottom = 8.dp, end = 16.dp), style = MaterialTheme.typography.titleLarge, ) ModifierReused:PreferenceFooter.kt$OutlinedButton( modifier = modifier .height(48.dp) .weight(1f), enabled = enabled, onClick = onPositiveClicked, ) { Text( text = stringResource(id = positiveText), ) } ModifierReused:PreferenceFooter.kt$OutlinedButton( modifier = modifier .height(48.dp) .weight(1f), onClick = onNegativeClicked, ) { Text( text = stringResource(id = negativeText), ) } ModifierReused:PreferenceFooter.kt$Row( modifier = modifier .fillMaxWidth() .height(64.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), verticalAlignment = Alignment.CenterVertically, ) { OutlinedButton( modifier = modifier .height(48.dp) .weight(1f), onClick = onNegativeClicked, ) { Text( text = stringResource(id = negativeText), ) } OutlinedButton( modifier = modifier .height(48.dp) .weight(1f), enabled = enabled, onClick = onPositiveClicked, ) { Text( text = stringResource(id = positiveText), ) } } ModifierReused:SignalMetrics.kt$Canvas(modifier = modifier.width(dp)) { val width = size.width /* Plot */ for (packet in meshPackets) { val xRatio = (packet.rxTime - oldest.rxTime).toFloat() / timeDiff val x = xRatio * width /* SNR */ plotPoint( drawContext = drawContext, color = Metric.SNR.color, x = x, value = packet.rxSnr - Metric.SNR.min, divisor = snrDiff, ) /* RSSI */ plotPoint( drawContext = drawContext, color = Metric.RSSI.color, x = x, value = packet.rxRssi - Metric.RSSI.min, divisor = rssiDiff, ) } } ModifierReused:SignalMetrics.kt$HorizontalLinesOverlay(modifier.width(dp), lineColors = List(size = 5) { graphColor }) ModifierReused:SignalMetrics.kt$TimeAxisOverlay( modifier.width(dp), oldest = oldest.rxTime, newest = newest.rxTime, selectedTime.lineInterval(), ) ModifierReused:SignalMetrics.kt$YAxisLabels( modifier = modifier.weight(weight = Y_AXIS_WEIGHT), Metric.RSSI.color, minValue = Metric.RSSI.min, maxValue = Metric.RSSI.max, ) ModifierReused:SignalMetrics.kt$YAxisLabels( modifier = modifier.weight(weight = Y_AXIS_WEIGHT), Metric.SNR.color, minValue = Metric.SNR.min, maxValue = Metric.SNR.max, ) ModifierReused:TextDividerPreference.kt$Card( modifier = modifier.fillMaxWidth(), ) { Row( modifier = modifier .fillMaxWidth() .padding(all = 16.dp), verticalAlignment = Alignment.CenterVertically ) { Text( text = title, style = MaterialTheme.typography.bodyLarge, color = if (!enabled) { MaterialTheme.colorScheme.onSurface.copy(alpha = 0.38f) } else { Color.Unspecified }, ) if (trailingIcon != null) { Icon( trailingIcon, "trailingIcon", modifier = modifier .fillMaxWidth() .wrapContentWidth(Alignment.End), ) } } } ModifierReused:TextDividerPreference.kt$Icon( trailingIcon, "trailingIcon", modifier = modifier .fillMaxWidth() .wrapContentWidth(Alignment.End), ) ModifierReused:TextDividerPreference.kt$Row( modifier = modifier .fillMaxWidth() .padding(all = 16.dp), verticalAlignment = Alignment.CenterVertically ) { Text( text = title, style = MaterialTheme.typography.bodyLarge, color = if (!enabled) { MaterialTheme.colorScheme.onSurface.copy(alpha = 0.38f) } else { Color.Unspecified }, ) if (trailingIcon != null) { Icon( trailingIcon, "trailingIcon", modifier = modifier .fillMaxWidth() .wrapContentWidth(Alignment.End), ) } } ModifierWithoutDefault:CommonCharts.kt$modifier ModifierWithoutDefault:EnvironmentCharts.kt$modifier MultiLineIfElse:Exceptions.kt$Exceptions.errormsg("ignoring exception", ex) MultipleEmitters:CleanNodeDatabaseScreen.kt$NodesDeletionPreview MultipleEmitters:CommonCharts.kt$LegendLabel MultipleEmitters:DeviceMetrics.kt$DeviceMetricsChart MultipleEmitters:EnvironmentCharts.kt$EnvironmentMetricsChart MultipleEmitters:NodeDetail.kt$EncryptionErrorContent MultipleEmitters:NodeDetail.kt$MetricsSection MultipleEmitters:PaxMetrics.kt$PaxMetricsChart MultipleEmitters:PowerMetrics.kt$PowerMetricsChart MultipleEmitters:PreferenceCategory.kt$PreferenceCategory MultipleEmitters:RadioConfig.kt$RadioConfigItemList MultipleEmitters:SignalMetrics.kt$SignalMetricsChart MutableStateAutoboxing:Contacts.kt$mutableStateOf(2) MutableStateParam:MessageList.kt$selectedIds NestedBlockDepth:MeshService.kt$MeshService$private fun handleReceivedAdmin(fromNodeNum: Int, a: AdminProtos.AdminMessage) NestedBlockDepth:MeshService.kt$MeshService$private fun handleReceivedData(packet: MeshPacket) NestedBlockDepth:RadioConfigViewModel.kt$RadioConfigViewModel$private fun processPacketResponse(packet: MeshProtos.MeshPacket) NewLineAtEndOfFile:BLEException.kt$com.geeksville.mesh.service.BLEException.kt NewLineAtEndOfFile:BluetoothInterfaceFactory.kt$com.geeksville.mesh.repository.radio.BluetoothInterfaceFactory.kt NewLineAtEndOfFile:BluetoothRepositoryModule.kt$com.geeksville.mesh.repository.bluetooth.BluetoothRepositoryModule.kt NewLineAtEndOfFile:BootCompleteReceiver.kt$com.geeksville.mesh.service.BootCompleteReceiver.kt NewLineAtEndOfFile:CoroutineDispatchers.kt$com.geeksville.mesh.CoroutineDispatchers.kt NewLineAtEndOfFile:Coroutines.kt$com.geeksville.mesh.concurrent.Coroutines.kt NewLineAtEndOfFile:DateUtils.kt$com.geeksville.mesh.android.DateUtils.kt NewLineAtEndOfFile:DebugLogFile.kt$com.geeksville.mesh.android.DebugLogFile.kt NewLineAtEndOfFile:DeferredExecution.kt$com.geeksville.mesh.concurrent.DeferredExecution.kt NewLineAtEndOfFile:DeviceVersion.kt$com.geeksville.mesh.model.DeviceVersion.kt NewLineAtEndOfFile:InterfaceId.kt$com.geeksville.mesh.repository.radio.InterfaceId.kt NewLineAtEndOfFile:InterfaceSpec.kt$com.geeksville.mesh.repository.radio.InterfaceSpec.kt NewLineAtEndOfFile:MockInterfaceFactory.kt$com.geeksville.mesh.repository.radio.MockInterfaceFactory.kt NewLineAtEndOfFile:NopInterface.kt$com.geeksville.mesh.repository.radio.NopInterface.kt NewLineAtEndOfFile:NopInterfaceFactory.kt$com.geeksville.mesh.repository.radio.NopInterfaceFactory.kt NewLineAtEndOfFile:ProbeTableProvider.kt$com.geeksville.mesh.repository.usb.ProbeTableProvider.kt NewLineAtEndOfFile:QuickChatActionRepository.kt$com.geeksville.mesh.database.QuickChatActionRepository.kt NewLineAtEndOfFile:RadioNotConnectedException.kt$com.geeksville.mesh.service.RadioNotConnectedException.kt NewLineAtEndOfFile:RegularPreference.kt$com.geeksville.mesh.ui.common.components.RegularPreference.kt NewLineAtEndOfFile:SerialConnection.kt$com.geeksville.mesh.repository.usb.SerialConnection.kt NewLineAtEndOfFile:SerialConnectionListener.kt$com.geeksville.mesh.repository.usb.SerialConnectionListener.kt NewLineAtEndOfFile:SerialInterface.kt$com.geeksville.mesh.repository.radio.SerialInterface.kt NewLineAtEndOfFile:SerialInterfaceFactory.kt$com.geeksville.mesh.repository.radio.SerialInterfaceFactory.kt NewLineAtEndOfFile:TCPInterfaceFactory.kt$com.geeksville.mesh.repository.radio.TCPInterfaceFactory.kt NewLineAtEndOfFile:UsbBroadcastReceiver.kt$com.geeksville.mesh.repository.usb.UsbBroadcastReceiver.kt NewLineAtEndOfFile:UsbRepositoryModule.kt$com.geeksville.mesh.repository.usb.UsbRepositoryModule.kt NoBlankLineBeforeRbrace:DebugLogFile.kt$BinaryLogFile$ NoBlankLineBeforeRbrace:NopInterface.kt$NopInterface$ NoConsecutiveBlankLines:BootCompleteReceiver.kt$ NoConsecutiveBlankLines:Constants.kt$ NoConsecutiveBlankLines:DebugLogFile.kt$ NoConsecutiveBlankLines:DeferredExecution.kt$ NoConsecutiveBlankLines:Exceptions.kt$ NoConsecutiveBlankLines:IRadioInterface.kt$ NoEmptyClassBody:DebugLogFile.kt$BinaryLogFile${ } NoSemicolons:DateUtils.kt$DateUtils$; NoWildcardImports:UsbRepository.kt$import kotlinx.coroutines.flow.* OptionalAbstractKeyword:SyncContinuation.kt$Continuation$abstract ParameterNaming:BitwisePreference.kt$onItemSelected ParameterNaming:ChannelSettingsItemList.kt$onPositiveClicked ParameterNaming:ChannelSettingsItemList.kt$onSelected ParameterNaming:CleanNodeDatabaseScreen.kt$onCheckedChanged ParameterNaming:CleanNodeDatabaseScreen.kt$onDaysChanged ParameterNaming:Contacts.kt$onDeleteSelected ParameterNaming:Contacts.kt$onMuteSelected ParameterNaming:DropDownPreference.kt$onItemSelected ParameterNaming:EditIPv4Preference.kt$onValueChanged ParameterNaming:EditListPreference.kt$onValuesChanged ParameterNaming:EditPasswordPreference.kt$onValueChanged ParameterNaming:EditTextPreference.kt$onValueChanged ParameterNaming:MapReportingPreference.kt$onMapReportingEnabledChanged ParameterNaming:MapReportingPreference.kt$onPositionPrecisionChanged ParameterNaming:MapReportingPreference.kt$onPublishIntervalSecsChanged ParameterNaming:MapReportingPreference.kt$onShouldReportLocationChanged ParameterNaming:MessageList.kt$onUnreadChanged ParameterNaming:NodeDetail.kt$onFirmwareSelected ParameterNaming:NodeFilterTextField.kt$onToggleShowIgnored ParameterNaming:PositionPrecisionPreference.kt$onValueChanged ParameterNaming:PreferenceFooter.kt$onCancelClicked ParameterNaming:PreferenceFooter.kt$onNegativeClicked ParameterNaming:PreferenceFooter.kt$onPositiveClicked ParameterNaming:PreferenceFooter.kt$onSaveClicked ParameterNaming:SlidingSelector.kt$onOptionSelected ParameterNaming:UsbDevices.kt$onDeviceSelected ParameterNaming:WelcomeScreen.kt$onGetStarted PreviewAnnotationNaming:LargeFontPreview.kt$LargeFontPreview$LargeFontPreview PreviewPublic:BatteryInfo.kt$BatteryInfoPreview PreviewPublic:BatteryInfo.kt$BatteryInfoPreviewSimple PreviewPublic:Channel.kt$ModemPresetInfoPreview PreviewPublic:ElevationInfo.kt$ElevationInfoPreview PreviewPublic:EmptyStateContent.kt$EmptyStateContentPreview PreviewPublic:IndoorAirQuality.kt$IAQScalePreview PreviewPublic:LastHeardInfo.kt$LastHeardInfoPreview PreviewPublic:LazyColumnDragAndDropDemo.kt$LazyColumnDragAndDropDemo PreviewPublic:LinkedCoordinates.kt$LinkedCoordinatesPreview PreviewPublic:MapReportingPreference.kt$MapReportingPreview PreviewPublic:MaterialBatteryInfo.kt$MaterialBatteryInfoPreview PreviewPublic:NodeChip.kt$NodeChipPreview PreviewPublic:NodeItem.kt$NodeInfoPreview PreviewPublic:NodeItem.kt$NodeInfoSimplePreview PreviewPublic:NodeStatusIcons.kt$StatusIconsPreview PreviewPublic:Reaction.kt$ReactionItemPreview PreviewPublic:Reaction.kt$ReactionRowPreview PreviewPublic:SatelliteCountInfo.kt$SatelliteCountInfoPreview PreviewPublic:SignalInfo.kt$SignalInfoPreview PreviewPublic:SignalInfo.kt$SignalInfoSelfPreview PreviewPublic:SignalInfo.kt$SignalInfoSimplePreview PreviewPublic:SlidingSelector.kt$SlidingSelectorPreview RethrowCaughtException:SyncContinuation.kt$Continuation$throw ex ReturnCount:RadioConfigViewModel.kt$RadioConfigViewModel$private fun processPacketResponse(packet: MeshProtos.MeshPacket) SpacingAroundKeyword:Exceptions.kt$if SpacingAroundKeyword:Exceptions.kt$when SpacingAroundRangeOperator:BatteryInfo.kt$.. SwallowedException:BluetoothInterface.kt$BluetoothInterface$ex: CancellationException SwallowedException:ChannelSet.kt$ex: Throwable SwallowedException:DeviceVersion.kt$DeviceVersion$e: Exception SwallowedException:Exceptions.kt$ex: Throwable SwallowedException:MeshLog.kt$MeshLog$e: IOException SwallowedException:MeshService.kt$MeshService$ex: BLEException SwallowedException:MeshService.kt$MeshService$ex: CancellationException SwallowedException:NsdManager.kt$ex: IllegalArgumentException SwallowedException:SafeBluetooth.kt$SafeBluetooth$ex: DeadObjectException SwallowedException:SafeBluetooth.kt$SafeBluetooth$ex: NullPointerException SwallowedException:ServiceClient.kt$ServiceClient$ex: IllegalArgumentException SwallowedException:TCPInterface.kt$TCPInterface$ex: SocketTimeoutException TooGenericExceptionCaught:BTScanModel.kt$BTScanModel$ex: Throwable TooGenericExceptionCaught:BluetoothInterface.kt$BluetoothInterface$ex: Exception TooGenericExceptionCaught:ChannelSet.kt$ex: Throwable TooGenericExceptionCaught:DeviceVersion.kt$DeviceVersion$e: Exception TooGenericExceptionCaught:Exceptions.kt$ex: Throwable TooGenericExceptionCaught:LanguageUtils.kt$LanguageUtils$e: Exception TooGenericExceptionCaught:LocationRepository.kt$LocationRepository$e: Exception TooGenericExceptionCaught:MQTTRepository.kt$MQTTRepository$ex: Exception TooGenericExceptionCaught:MeshService.kt$MeshService$ex: Exception TooGenericExceptionCaught:MeshService.kt$MeshService.<no name provided>$ex: Exception TooGenericExceptionCaught:MeshServiceStarter.kt$ServiceStarter$ex: Exception TooGenericExceptionCaught:RadioConfigViewModel.kt$RadioConfigViewModel$ex: Exception TooGenericExceptionCaught:SafeBluetooth.kt$SafeBluetooth$ex: Exception TooGenericExceptionCaught:SafeBluetooth.kt$SafeBluetooth$ex: NullPointerException TooGenericExceptionCaught:SyncContinuation.kt$Continuation$ex: Throwable TooGenericExceptionCaught:TCPInterface.kt$TCPInterface$ex: Throwable TooGenericExceptionThrown:DeviceVersion.kt$DeviceVersion$throw Exception("Can't parse version $s") TooGenericExceptionThrown:MeshService.kt$MeshService$throw Exception("Can't set user without a NodeInfo") TooGenericExceptionThrown:MeshService.kt$MeshService.<no name provided>$throw Exception("Port numbers must be non-zero!") TooGenericExceptionThrown:ServiceClient.kt$ServiceClient$throw Exception("Haven't called connect") TooGenericExceptionThrown:ServiceClient.kt$ServiceClient$throw Exception("Service not bound") TooGenericExceptionThrown:SyncContinuation.kt$SyncContinuation$throw Exception("SyncContinuation timeout") TooGenericExceptionThrown:SyncContinuation.kt$SyncContinuation$throw Exception("This shouldn't happen") TooManyFunctions:BluetoothInterface.kt$BluetoothInterface : IRadioInterfaceLogging TooManyFunctions:MeshService.kt$MeshService : ServiceLogging TooManyFunctions:MeshService.kt$MeshService$<no name provided> : Stub TooManyFunctions:NodeDetail.kt$com.geeksville.mesh.ui.node.NodeDetail.kt TooManyFunctions:PacketDao.kt$PacketDao TooManyFunctions:PacketRepository.kt$PacketRepository TooManyFunctions:RadioConfigRepository.kt$RadioConfigRepository TooManyFunctions:RadioConfigViewModel.kt$RadioConfigViewModel : ViewModelLogging TooManyFunctions:RadioInterfaceService.kt$RadioInterfaceService : Logging TooManyFunctions:SafeBluetooth.kt$SafeBluetooth : LoggingCloseable TooManyFunctions:UIState.kt$UIViewModel : ViewModelLogging TopLevelPropertyNaming:Constants.kt$const val prefix = "com.geeksville.mesh" UnusedParameter:ChannelSettingsItemList.kt$onBack: () -> Unit UnusedParameter:ChannelSettingsItemList.kt$title: String UtilityClassWithPublicConstructor:NetworkRepositoryModule.kt$NetworkRepositoryModule ViewModelForwarding:Main.kt$MainAppBar( viewModel = uIViewModel, navController = navController, onAction = { action -> when (action) { is NodeMenuAction.MoreDetails -> { navController.navigate( NodesRoutes.NodeDetailGraph(action.node.num), { launchSingleTop = true restoreState = true }, ) } is NodeMenuAction.Share -> sharedContact = action.node else -> {} } }, ) ViewModelForwarding:Main.kt$ScannedQrCodeDialog(uIViewModel, newChannelSet) ViewModelForwarding:Main.kt$VersionChecks(uIViewModel) ViewModelForwarding:Message.kt$MessageList( modifier = Modifier.fillMaxSize(), listState = listState, messages = messages, selectedIds = selectedMessageIds, onUnreadChanged = { messageId -> onEvent(MessageScreenEvent.ClearUnreadCount(messageId)) }, onSendReaction = { emoji, id -> onEvent(MessageScreenEvent.SendReaction(emoji, id)) }, viewModel = viewModel, contactKey = contactKey, onReply = { message -> replyingToPacketId = message?.packetId }, onNodeMenuAction = { action -> onEvent(MessageScreenEvent.HandleNodeMenuAction(action)) }, ) ViewModelForwarding:NodeScreen.kt$AddContactFAB( modifier = Modifier.animateFloatingActionButton( visible = !isScrollInProgress && connectionState == ConnectionState.CONNECTED && shareCapable, alignment = Alignment.BottomEnd, ), model = model, onSharedContactImport = { contact -> model.addSharedContact(contact) }, ) ViewModelInjection:DebugSearch.kt$viewModel WildcardImport:UsbRepository.kt$import kotlinx.coroutines.flow.* Wrapping:DebugFilters.kt$( Wrapping:DebugFilters.kt$if (filter in filterTexts) { Icon( imageVector = Icons.Filled.Done, contentDescription = stringResource(id = R.string.debug_filter_included), ) } Wrapping:MQTTRepository.kt$MQTTRepository.<no name provided>$( Wrapping:Message.kt${ event -> when (event) { is MessageScreenEvent.SendMessage -> { viewModel.sendMessage(event.text, contactKey, event.replyingToPacketId) if (event.replyingToPacketId != null) replyingToPacketId = null messageInputState.clearText() } is MessageScreenEvent.SendReaction -> viewModel.sendReaction(event.emoji, event.messageId, contactKey) is MessageScreenEvent.DeleteMessages -> { viewModel.deleteMessages(event.ids) selectedMessageIds.value = emptySet() showDeleteDialog = false } is MessageScreenEvent.ClearUnreadCount -> viewModel.clearUnreadCount(contactKey, event.lastReadMessageId) is MessageScreenEvent.HandleNodeMenuAction -> { when (val action = event.action) { is NodeMenuAction.DirectMessage -> { val hasPKC = ourNode?.hasPKC == true && action.node.hasPKC val targetChannel = if (hasPKC) { DataPacket.PKC_CHANNEL_INDEX } else { action.node.channel } navigateToMessages("$targetChannel${action.node.user.id}") } is NodeMenuAction.MoreDetails -> navigateToNodeDetails(action.node.num) is NodeMenuAction.Share -> sharedContact = action.node else -> viewModel.handleNodeMenuAction(action) } } is MessageScreenEvent.SetTitle -> viewModel.setTitle(event.title) is MessageScreenEvent.NavigateToMessages -> navigateToMessages(event.contactKey) is MessageScreenEvent.NavigateToNodeDetails -> navigateToNodeDetails(event.nodeNum) MessageScreenEvent.NavigateBack -> onNavigateBack() is MessageScreenEvent.CopyToClipboard -> { clipboardManager.nativeClipboard.setPrimaryClip(ClipData.newPlainText(event.text, event.text)) selectedMessageIds.value = emptySet() } } } Wrapping:SerialConnectionImpl.kt$SerialConnectionImpl$( Wrapping:SerialConnectionImpl.kt$SerialConnectionImpl$(port, object : SerialInputOutputManager.Listener { override fun onNewData(data: ByteArray) { listener.onDataReceived(data) } override fun onRunError(e: Exception?) { closed.set(true) ignoreException { port.dtr = false port.rts = false port.close() } closedLatch.countDown() listener.onDisconnected(e) } }) Wrapping:SerialInterface.kt$SerialInterface$( Wrapping:SerialInterface.kt$SerialInterface$(device, object : SerialConnectionListener { override fun onMissingPermission() { errormsg("Need permissions for port") } override fun onConnected() { onConnect.invoke() } override fun onDataReceived(bytes: ByteArray) { debug("Received ${bytes.size} byte(s)") bytes.forEach(::readChar) } override fun onDisconnected(thrown: Exception?) { thrown?.let { e -> errormsg("Serial error: $e") } debug("$device disconnected") onDeviceDisconnect(false) } }) Wrapping:ServiceClient.kt$ServiceClient$Closeable, Logging Wrapping:SlidingSelector.kt$;