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$;