86 lines
3.4 KiB
Kotlin
86 lines
3.4 KiB
Kotlin
package com.helible.pilot
|
|
|
|
import android.annotation.SuppressLint
|
|
import android.app.Activity
|
|
import android.bluetooth.BluetoothAdapter
|
|
import android.bluetooth.BluetoothDevice
|
|
import android.content.BroadcastReceiver
|
|
import android.content.Intent
|
|
import android.content.IntentFilter
|
|
import android.location.LocationManager
|
|
import android.os.Build
|
|
import android.util.Log
|
|
|
|
|
|
fun registerIntentFilters(activity: Activity, receiver: BroadcastReceiver) {
|
|
activity.registerReceiver(receiver, IntentFilter(BluetoothDevice.ACTION_FOUND))
|
|
activity.registerReceiver(receiver, IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED))
|
|
activity.registerReceiver(receiver, IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED))
|
|
activity.registerReceiver(receiver, IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED))
|
|
if (Build.VERSION.SDK_INT <= 30)
|
|
activity.registerReceiver(receiver, IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION))
|
|
}
|
|
|
|
@SuppressLint("MissingPermission")
|
|
fun receiveIntentChanges(
|
|
intent: Intent,
|
|
mainViewModel: MainViewModel,
|
|
bluetoothAdapter: BluetoothAdapter?,
|
|
locationManager: LocationManager,
|
|
) {
|
|
when (intent.action) {
|
|
BluetoothDevice.ACTION_FOUND -> {
|
|
val device = if (Build.VERSION.SDK_INT >= 33) {
|
|
intent.getParcelableExtra(
|
|
BluetoothDevice.EXTRA_DEVICE,
|
|
BluetoothDevice::class.java
|
|
)
|
|
} else {
|
|
@Suppress("DEPRECATION") intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)
|
|
}
|
|
|
|
val rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI, Short.MIN_VALUE)
|
|
if (device?.name != null)
|
|
mainViewModel.devices.add(Device(device, rssi))
|
|
Log.i(
|
|
"ScanActivity",
|
|
"Found new device: ${device?.name} ${device?.address} $rssi"
|
|
)
|
|
}
|
|
|
|
BluetoothAdapter.ACTION_STATE_CHANGED -> {
|
|
val state: Int = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1)
|
|
Log.i("ScanActvity", "Bluetooth state: $state")
|
|
when (state) {
|
|
BluetoothAdapter.STATE_ON -> {
|
|
Log.i("ScanActvity", "Bluetooth turned on")
|
|
mainViewModel.bluetoothTurnOnState.value = true
|
|
mainViewModel.devices.clear()
|
|
bluetoothAdapter?.startDiscovery()
|
|
}
|
|
|
|
BluetoothAdapter.STATE_OFF -> {
|
|
Log.i("ScanActvity", "Bluetooth turned off")
|
|
mainViewModel.bluetoothTurnOnState.value = false
|
|
}
|
|
}
|
|
}
|
|
LocationManager.PROVIDERS_CHANGED_ACTION -> {
|
|
mainViewModel.locationTurnOnState.value = locationManager.isLocationEnabled
|
|
if (mainViewModel.locationTurnOnState.value == true) {
|
|
Log.i("ScanActivity", "LOCATION IS ON")
|
|
} else if (mainViewModel.locationTurnOnState.value == false)
|
|
Log.i("ScanActivity", "LOCATION IS OFF")
|
|
}
|
|
|
|
BluetoothAdapter.ACTION_DISCOVERY_FINISHED -> {
|
|
mainViewModel.isBluetoothDiscoveryRunning.value = false
|
|
Log.i("ScanActivity", "DISCOVERY FINISHED")
|
|
}
|
|
|
|
BluetoothAdapter.ACTION_DISCOVERY_STARTED -> {
|
|
mainViewModel.isBluetoothDiscoveryRunning.value = true
|
|
Log.i("ScanActivity", "DISCOVERY STARTED")
|
|
}
|
|
}
|
|
} |