Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kotlin 2.0.0 #782

Merged
merged 59 commits into from
Jun 13, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
5f9147e
WIP 2.0
Daeda88 May 31, 2024
044b248
Base module compiling
Daeda88 Jun 3, 2024
08a29ad
Scientific
Daeda88 Jun 3, 2024
c58a289
Fixing for Compose
Daeda88 Jun 3, 2024
374dc89
Gradle syncing for most modules
Daeda88 Jun 4, 2024
396cfc2
Remaining gradle files for modules
Daeda88 Jun 4, 2024
a68b9e7
Fixed expect/actuals
Daeda88 Jun 4, 2024
e01d034
Fixed kapt issue
Daeda88 Jun 4, 2024
410b0c6
Fixed Publish/Compiling tests
Daeda88 Jun 4, 2024
5a39e11
API Dump + Lint
Daeda88 Jun 4, 2024
e102e17
Fixed broken iOS tests
Daeda88 Jun 4, 2024
83945ca
Lint fixes on plugin
Daeda88 Jun 4, 2024
9f1d720
Plugin package fixes
Daeda88 Jun 4, 2024
c0ab5a0
Ignore .kotlin folder
Daeda88 Jun 4, 2024
8564cc4
More api dump
Daeda88 Jun 5, 2024
26a7da5
Align emulator tests with minSDK
Daeda88 Jun 5, 2024
4411978
Fixed signing key path for publication
Daeda88 Jun 5, 2024
47280ae
Making publish logic more readable
Daeda88 Jun 5, 2024
a59855b
Fixed version format
Daeda88 Jun 5, 2024
1dd15ea
Fix typo
Daeda88 Jun 5, 2024
2de07b8
Fixes for UITests running on wrong target
Daeda88 Jun 5, 2024
538127e
Adding New Module fixes
Daeda88 Jun 5, 2024
ec2735d
Example building for iOS
Daeda88 Jun 6, 2024
bb65780
Moving embedding to plugin and got all Gradle building
Daeda88 Jun 7, 2024
9dbce59
Move to Material3
Daeda88 Jun 7, 2024
edda4d6
Fixed Kover plugin
Daeda88 Jun 7, 2024
1eb7cd3
Attempt to do some sort of sleep on JS runBlocking
Daeda88 Jun 7, 2024
0c64b52
Removed JVM/JS support in modules with TODO implementations
Daeda88 Jun 10, 2024
88c8bac
Add flags for support JVM/JS in adding new module tasks
Daeda88 Jun 10, 2024
a3a5295
Adding Kover to CI
Daeda88 Jun 10, 2024
2310a53
Fixed JVM issues for Kover
Daeda88 Jun 10, 2024
6f7720d
Add Kover reporting in CI
Daeda88 Jun 10, 2024
2c9354e
Trying to fix kover path
Daeda88 Jun 10, 2024
42c0998
Try diffent path
Daeda88 Jun 11, 2024
456d3e0
Removing old deprecated code
Daeda88 Jun 10, 2024
9de68a9
Merge remote-tracking branch 'origin/develop' into feature/kotlin-2.0
Daeda88 Jun 11, 2024
281354c
Merge branch 'feature/kotlin-2.0' into feature/2.0.0-ci-improvements
Daeda88 Jun 11, 2024
c1a28e1
Merge branch 'feature/2.0.0-ci-improvements' into feature/remove-depr…
Daeda88 Jun 11, 2024
a385e08
try relative paths
thoutbeckers Jun 11, 2024
6da8053
Remove if for now
Daeda88 Jun 11, 2024
8ea6b04
More filesystem inspections
Daeda88 Jun 11, 2024
2aea86b
Trying to use different syntax
Daeda88 Jun 11, 2024
65f33a2
More debugging
Daeda88 Jun 12, 2024
c841281
Attempt to get if statement back & add artifacts
Daeda88 Jun 12, 2024
36618a0
Trying to fix syntax
Daeda88 Jun 12, 2024
3720ce6
Try with format
Daeda88 Jun 12, 2024
8eedc82
Use latest artifacts
Daeda88 Jun 12, 2024
efa24dc
Attempting to fix publishing
Daeda88 Jun 12, 2024
666653c
Fixes for publishing
Daeda88 Jun 12, 2024
e10f93e
Merge branch 'feature/kotlin-2.0' into feature/2.0.0-ci-improvements
Daeda88 Jun 12, 2024
69e7ddf
Update Gradle action versions
Daeda88 Jun 12, 2024
67a0873
Merge branch 'feature/2.0.0-ci-improvements' into feature/remove-depr…
Daeda88 Jun 12, 2024
bca15dd
API dump
Daeda88 Jun 12, 2024
27651c0
Minor warning fix
Daeda88 Jun 12, 2024
cd15afa
Stabilizing a few tests
Daeda88 Jun 12, 2024
af2f870
Merge pull request #786 from splendo/feature/2.0.0-ci-improvements
Daeda88 Jun 12, 2024
4993190
Merge pull request #788 from splendo/feature/remove-deprecated-methods
Daeda88 Jun 12, 2024
1e019d2
Lint fix
Daeda88 Jun 12, 2024
5fb062e
Track latest versions
Daeda88 Jun 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fixed expect/actuals
  • Loading branch information
Daeda88 committed Jun 4, 2024
commit a68b9e7f0f608d8c89773f41504931b0691fb88b
6 changes: 3 additions & 3 deletions alerts/src/androidLibMain/kotlin/AlertPresenter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import kotlinx.coroutines.launch
* @param coroutineScope The [CoroutineScope] managing changes to the alert presentation.
*/
actual class AlertPresenter(
private val alert: Alert,
alert: Alert,
private val lifecycleManagerObserver: LifecycleManagerObserver = LifecycleManagerObserver(),
coroutineScope: CoroutineScope,
logger: Logger,
Expand Down Expand Up @@ -109,11 +109,11 @@ actual class AlertPresenter(
}
}

override fun dismissAlert(animated: Boolean) {
actual override fun dismissAlert(animated: Boolean) {
presentation.value = DialogPresentation.Hidden
}

override fun showAlert(animated: Boolean, afterHandler: (Alert.Action?) -> Unit, completion: () -> Unit) {
actual override fun showAlert(animated: Boolean, afterHandler: (Alert.Action?) -> Unit, completion: () -> Unit) {
presentation.value = DialogPresentation.Showing(animated, afterHandler, completion)
}

Expand Down
5 changes: 4 additions & 1 deletion alerts/src/commonMain/kotlin/Alerts.kt
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ interface AlertActions {
* @param alert The [Alert] to present (and dismiss if needed)
* @param logger The [Logger] to log alert actions to
*/
abstract class BaseAlertPresenter(private val alert: Alert, private val logger: Logger) : AlertActions {
abstract class BaseAlertPresenter(protected val alert: Alert, private val logger: Logger) : AlertActions {

companion object {
const val TAG = "AlertDialog"
Expand Down Expand Up @@ -378,6 +378,9 @@ expect class AlertPresenter : BaseAlertPresenter {
*/
override fun create(alert: Alert, logger: Logger, coroutineScope: CoroutineScope): AlertPresenter
}

override fun showAlert(animated: Boolean, afterHandler: (Alert.Action?) -> Unit, completion: () -> Unit)
override fun dismissAlert(animated: Boolean)
}

/**
Expand Down
6 changes: 3 additions & 3 deletions alerts/src/iosMain/kotlin/AlertPresenter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ import platform.objc.sel_registerName
* This allows for presentation of [Alert.Style.ACTION_LIST] on iPad.
*/
actual class AlertPresenter(
private val alert: Alert,
alert: Alert,
private val parent: UIViewController,
logger: Logger,
private val delegateBuilder: (Alert) -> UIPopoverPresentationControllerDelegateProtocol,
Expand Down Expand Up @@ -133,11 +133,11 @@ actual class AlertPresenter(
}
}

override fun dismissAlert(animated: Boolean) {
actual override fun dismissAlert(animated: Boolean) {
parent.dismissModalViewControllerAnimated(animated)
}

override fun showAlert(animated: Boolean, afterHandler: (Alert.Action?) -> Unit, completion: () -> Unit) {
actual override fun showAlert(animated: Boolean, afterHandler: (Alert.Action?) -> Unit, completion: () -> Unit) {
UIAlertController.alertControllerWithTitle(
alert.title,
alert.message,
Expand Down
4 changes: 2 additions & 2 deletions alerts/src/jsMain/kotlin/AlertPresenter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,11 @@ actual class AlertPresenter(
TODO("not implemented")
}

override fun dismissAlert(animated: Boolean) {
actual override fun dismissAlert(animated: Boolean) {
TODO("not implemented")
}

override fun showAlert(animated: Boolean, afterHandler: (Alert.Action?) -> Unit, completion: () -> Unit) {
actual override fun showAlert(animated: Boolean, afterHandler: (Alert.Action?) -> Unit, completion: () -> Unit) {
TODO("not implemented")
}
}
4 changes: 2 additions & 2 deletions alerts/src/jvmMain/kotlin/AlertPresenter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,11 @@ actual class AlertPresenter(
TODO("not implemented")
}

override fun dismissAlert(animated: Boolean) {
actual override fun dismissAlert(animated: Boolean) {
TODO("not implemented")
}

override fun showAlert(animated: Boolean, afterHandler: (Alert.Action?) -> Unit, completion: () -> Unit) {
actual override fun showAlert(animated: Boolean, afterHandler: (Alert.Action?) -> Unit, completion: () -> Unit) {
TODO("not implemented")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,23 +69,23 @@ actual class DefaultBluetoothPermissionManager(

private val supported: Boolean = bluetoothAdapter != null

override fun requestPermissionDidStart() {
actual override fun requestPermissionDidStart() {
if (supported) {
permissionsManager.requestPermissions()
} else {
logger.error(logTag) { "Bluetooth Not Supported" }
}
}

override fun monitoringDidStart(interval: Duration) {
actual override fun monitoringDidStart(interval: Duration) {
if (supported) {
permissionsManager.startMonitoring(interval)
} else {
permissionHandler.status(AndroidPermissionState.DENIED_DO_NOT_ASK)
}
}

override fun monitoringDidStop() {
actual override fun monitoringDidStop() {
if (supported) {
permissionsManager.stopMonitoring()
}
Expand All @@ -108,7 +108,7 @@ actual class BluetoothPermissionManagerBuilder(
*/
actual constructor(context: PermissionContext) : this(context, (context.context.getSystemService(Context.BLUETOOTH_SERVICE) as? BluetoothManager)?.adapter)

override fun create(settings: Settings, coroutineScope: CoroutineScope): BluetoothPermissionManager {
actual override fun create(settings: Settings, coroutineScope: CoroutineScope): BluetoothPermissionManager {
return DefaultBluetoothPermissionManager(context.context, bluetoothAdapter, settings, coroutineScope)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,11 @@ typealias BluetoothPermissionManager = PermissionManager<BluetoothPermission>
/**
* The [BasePermissionManager] to use as a default for [BluetoothPermission]
*/
expect class DefaultBluetoothPermissionManager : BasePermissionManager<BluetoothPermission>
expect class DefaultBluetoothPermissionManager : BasePermissionManager<BluetoothPermission> {
override fun requestPermissionDidStart()
override fun monitoringDidStart(interval: Duration)
override fun monitoringDidStop()
}

/**
* A [BasePermissionsBuilder] for [BluetoothPermission]
Expand All @@ -56,7 +60,9 @@ interface BaseBluetoothPermissionManagerBuilder : BasePermissionsBuilder<Bluetoo
* A [BaseBluetoothPermissionManagerBuilder]
* @param context the [PermissionContext] this permissions manager builder runs on
*/
expect class BluetoothPermissionManagerBuilder(context: PermissionContext = defaultPermissionContext) : BaseBluetoothPermissionManagerBuilder
expect class BluetoothPermissionManagerBuilder(context: PermissionContext = defaultPermissionContext) : BaseBluetoothPermissionManagerBuilder {
override fun create(settings: BasePermissionManager.Settings, coroutineScope: CoroutineScope): BluetoothPermissionManager
}

/**
* A [PermissionStateRepo] for [BluetoothPermission]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ actual class DefaultBluetoothPermissionManager(
timerHelper = PermissionRefreshScheduler(provider, permissionHandler, coroutineScope)
}

override fun requestPermissionDidStart() {
actual override fun requestPermissionDidStart() {
if (IOSPermissionsHelper.missingDeclarationsInPList(
bundle,
NS_BLUETOOTH_ALWAYS_USAGE_DESCRIPTION,
Expand All @@ -105,13 +105,13 @@ actual class DefaultBluetoothPermissionManager(
}
}

override fun monitoringDidStart(interval: Duration) {
actual override fun monitoringDidStart(interval: Duration) {
val permissionHandler = permissionHandler
permissionHandler.status(checkAuthorization())
timerHelper.startMonitoring(interval)
}

override fun monitoringDidStop() {
actual override fun monitoringDidStop() {
timerHelper.stopMonitoring()
}
}
Expand All @@ -124,7 +124,7 @@ actual class BluetoothPermissionManagerBuilder actual constructor(
private val context: PermissionContext,
) : BaseBluetoothPermissionManagerBuilder {

override fun create(settings: Settings, coroutineScope: CoroutineScope): BluetoothPermissionManager {
actual override fun create(settings: Settings, coroutineScope: CoroutineScope): BluetoothPermissionManager {
return DefaultBluetoothPermissionManager(context, settings, coroutineScope)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ actual class DefaultBluetoothPermissionManager(
coroutineScope: CoroutineScope,
) : BasePermissionManager<BluetoothPermission>(BluetoothPermission, settings, coroutineScope) {

override fun requestPermissionDidStart() {
actual override fun requestPermissionDidStart() {
TODO("Not yet implemented")
}

override fun monitoringDidStart(interval: Duration) {
actual override fun monitoringDidStart(interval: Duration) {
TODO("Not yet implemented")
}

override fun monitoringDidStop() {
actual override fun monitoringDidStop() {
TODO("Not yet implemented")
}
}
Expand All @@ -53,7 +53,7 @@ actual class DefaultBluetoothPermissionManager(
*/
actual class BluetoothPermissionManagerBuilder actual constructor(context: PermissionContext) : BaseBluetoothPermissionManagerBuilder {

override fun create(settings: Settings, coroutineScope: CoroutineScope): PermissionManager<BluetoothPermission> {
actual override fun create(settings: Settings, coroutineScope: CoroutineScope): PermissionManager<BluetoothPermission> {
return DefaultBluetoothPermissionManager(settings, coroutineScope)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ actual class DefaultBluetoothPermissionManager(
coroutineScope: CoroutineScope,
) : BasePermissionManager<BluetoothPermission>(BluetoothPermission, settings, coroutineScope) {

override fun requestPermissionDidStart() {
actual override fun requestPermissionDidStart() {
TODO("Not yet implemented")
}

override fun monitoringDidStart(interval: Duration) {
actual override fun monitoringDidStart(interval: Duration) {
TODO("Not yet implemented")
}

override fun monitoringDidStop() {
actual override fun monitoringDidStop() {
TODO("Not yet implemented")
}
}
Expand All @@ -53,7 +53,7 @@ actual class DefaultBluetoothPermissionManager(
*/
actual class BluetoothPermissionManagerBuilder actual constructor(context: PermissionContext) : BaseBluetoothPermissionManagerBuilder {

override fun create(settings: Settings, coroutineScope: CoroutineScope): PermissionManager<BluetoothPermission> {
actual override fun create(settings: Settings, coroutineScope: CoroutineScope): PermissionManager<BluetoothPermission> {
return DefaultBluetoothPermissionManager(settings, coroutineScope)
}
}
2 changes: 1 addition & 1 deletion bluetooth/src/androidLibMain/kotlin/BluetoothBuilder.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ actual class BluetoothBuilder(
private val scannerBuilder: BaseScanner.Builder = DefaultScanner.Builder(applicationContext = applicationContext),
) : BaseBluetoothBuilder {

override fun create(scannerSettingsBuilder: (Permissions) -> BaseScanner.Settings, coroutineContext: CoroutineContext): Bluetooth = Bluetooth(
actual override fun create(scannerSettingsBuilder: (Permissions) -> BaseScanner.Settings, coroutineContext: CoroutineContext): Bluetooth = Bluetooth(
{ scannerContext ->
scannerSettingsBuilder(permissionsBuilder(scannerContext))
},
Expand Down
14 changes: 7 additions & 7 deletions bluetooth/src/androidLibMain/kotlin/device/AdvertisementData.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,23 +31,23 @@ actual class AdvertisementData(private val scanResult: ScanResult?) : BaseAdvert

private val scanRecord = scanResult?.scanRecord

override val name: String?
actual override val name: String?
get() = scanRecord?.deviceName
override val manufacturerId: Int?
actual override val manufacturerId: Int?
get() = scanRecord?.manufacturerSpecificData?.let { if (it.size() > 0) it.keyAt(0) else null }
override val manufacturerData: ByteArray?
actual override val manufacturerData: ByteArray?
get() = scanRecord?.manufacturerSpecificData?.let { manufacturerSpecificData ->
manufacturerId?.let { key ->
val keyBytes = ByteBuffer.allocate(2).order(ByteOrder.LITTLE_ENDIAN).putShort(key.toShort()).array()
byteArrayOf(*keyBytes, *manufacturerSpecificData[key])
}
}
override val serviceUUIDs: List<UUID>
actual override val serviceUUIDs: List<UUID>
get() = scanRecord?.serviceUuids?.map { it.uuid } ?: emptyList()
override val serviceData: Map<UUID, ByteArray?>
actual override val serviceData: Map<UUID, ByteArray?>
get() = scanRecord?.serviceData?.mapKeys { it.key.uuid } ?: emptyMap()
override val txPowerLevel: TxPower
actual override val txPowerLevel: TxPower
get() = scanRecord?.txPowerLevel ?: Int.MIN_VALUE
override val isConnectable: Boolean
actual override val isConnectable: Boolean
get() = scanResult?.isConnectable == true
}
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ internal actual class DefaultDeviceConnectionManager(
}
private var lastKnownState = BluetoothProfile.STATE_DISCONNECTED

override fun getCurrentState(): DeviceConnectionManager.State = when (lastKnownState) {
actual override fun getCurrentState(): DeviceConnectionManager.State = when (lastKnownState) {
BluetoothProfile.STATE_CONNECTED -> DeviceConnectionManager.State.CONNECTED
BluetoothProfile.STATE_CONNECTING -> DeviceConnectionManager.State.CONNECTING
BluetoothProfile.STATE_DISCONNECTED -> DeviceConnectionManager.State.DISCONNECTED
Expand All @@ -152,7 +152,7 @@ internal actual class DefaultDeviceConnectionManager(
}

@SuppressLint("MissingPermission")
override fun connect() {
actual override fun connect() {
when {
!gatt.isCompleted -> gatt.complete(deviceWrapper.connectGatt(context, false, callback))
lastKnownState == BluetoothProfile.STATE_CONNECTED -> handleConnect()
Expand All @@ -161,11 +161,11 @@ internal actual class DefaultDeviceConnectionManager(
}
}

override suspend fun discoverServices() {
actual override suspend fun discoverServices() {
gatt.await().discoverServices()
}

override fun disconnect() {
actual override fun disconnect() {
val gatt = gatt.getCompletedOrNull()
if (gatt != null && lastKnownState != BluetoothProfile.STATE_DISCONNECTED) {
gatt.disconnect()
Expand All @@ -185,11 +185,11 @@ internal actual class DefaultDeviceConnectionManager(
gatt.await().readRemoteRssi()
}

override suspend fun requestMtu(mtu: MTU): Boolean {
actual override suspend fun requestMtu(mtu: MTU): Boolean {
return gatt.await().requestMtu(mtu)
}

override suspend fun didStartPerformingAction(action: DeviceAction) {
actual override suspend fun didStartPerformingAction(action: DeviceAction) {
currentAction = action
val succeeded = when (action) {
is DeviceAction.Read.Characteristic -> gatt.await().readCharacteristic(action.characteristic.wrapper)
Expand All @@ -207,14 +207,14 @@ internal actual class DefaultDeviceConnectionManager(
}

@SuppressLint("MissingPermission")
override suspend fun requestStartPairing() {
actual override suspend fun requestStartPairing() {
if (deviceWrapper.bondState == DeviceWrapper.BondState.NONE) {
deviceWrapper.createBond()
}
}

@SuppressLint("MissingPermission")
override suspend fun requestStartUnpairing() {
actual override suspend fun requestStartUnpairing() {
if (deviceWrapper.bondState != DeviceWrapper.BondState.NONE) {
deviceWrapper.removeBond()
}
Expand Down
12 changes: 6 additions & 6 deletions bluetooth/src/androidLibMain/kotlin/scanner/Scanner.kt
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,9 @@ actual class DefaultScanner internal constructor(

private val locationPermissionRepo get() = permissions[locationPermission]

override val isSupported: Boolean = bluetoothAdapter != null
actual override val isSupported: Boolean = bluetoothAdapter != null
private val deviceConnectionManagerBuilder = DefaultDeviceConnectionManager.Builder(applicationContext)
override val bluetoothEnabledMonitor: BluetoothMonitor? = bluetoothAdapter?.let { BluetoothMonitor.Builder(applicationContext, it).create() }
actual override val bluetoothEnabledMonitor: BluetoothMonitor? = bluetoothAdapter?.let { BluetoothMonitor.Builder(applicationContext, it).create() }
private val locationEnabledMonitor = LocationMonitor.Builder(applicationContext).create()

override val permissionsFlow: Flow<List<PermissionState<*>>> get() = combine(
Expand All @@ -166,7 +166,7 @@ actual class DefaultScanner internal constructor(
listOf(bluetoothEnabled, locationEnabled)
}

override suspend fun didStartScanning(filter: Filter) {
actual override suspend fun didStartScanning(filter: Filter) {
bluetoothScanner.startScan(
filter.map {
ScanFilter.Builder().setServiceUuid(ParcelUuid(it)).build()
Expand All @@ -176,7 +176,7 @@ actual class DefaultScanner internal constructor(
)
}

override suspend fun didStopScanning() {
actual override suspend fun didStopScanning() {
bluetoothScanner.stopScan(callback)
}

Expand All @@ -193,7 +193,7 @@ actual class DefaultScanner internal constructor(
override suspend fun isHardwareEnabled(): Boolean = super.isHardwareEnabled() && locationEnabledMonitor.isServiceEnabled

@SuppressLint("MissingPermission") // Lint complains even with permissions
override fun generateEnableSensorsActions(): List<EnableSensorAction> {
actual override fun generateEnableSensorsActions(): List<EnableSensorAction> {
if (!isSupported) return emptyList()
return listOfNotNull(
if (bluetoothAdapter?.isEnabled != true) {
Expand Down Expand Up @@ -226,7 +226,7 @@ actual class DefaultScanner internal constructor(
}

@SuppressLint("MissingPermission") // Lint complains even with permissions
override suspend fun retrievePairedDeviceDiscoveredEvents(
actual override suspend fun retrievePairedDeviceDiscoveredEvents(
withServices: Filter,
connectionSettings: ConnectionSettings?,
): List<Scanner.DeviceDiscovered> {
Expand Down
Loading
Loading