Relocates RadioController, AdminController, MessagingController,
NodeController, and RequestController from core:model to core:repository
where they belong (alongside their consumers and the ServiceRepository
they mirror).
Splits the monolithic RadioController into 4 focused sub-interfaces
following the Interface Segregation Principle:
- AdminController: config, channels, device lifecycle
- MessagingController: send packets, reactions, contacts
- NodeController: favorite, ignore, mute, remove
- RequestController: traceroute, telemetry, position queries
RadioController remains as a composite extending all four for backward
compatibility. Feature modules can now inject the narrower interface
for better testability.
Also fixes ScannerViewModelTest by adding Dispatchers.setMain/resetMain
to match the pattern used by all other ViewModel tests.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove x86/x86_64 from ABI filters (armeabi-v7a/arm64-v8a only)
- Remove unused takpacket-sdk-jvm from version catalog
- Raise core/proto minSdk from 21 to 26 (ATAK compat no longer needed)
- Remove stale FIXME comment about foreground service in manifest
- Replace Executors.newSingleThreadExecutor with Dispatchers.Default.asExecutor
in BarcodeScannerProvider (removes manual thread pool management)
- Convert formatAgo() to @Composable with stringResource(), eliminating
runBlocking from the UI rendering path. Non-composable callers (map views,
accessibility) use a 3-arg overload with pre-resolved strings.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>