Migrate bluetooth sensors to common and add to wear OS (#3168)

* Migrate bluetooth sensors to common and add to wear OS

* Add missing BT permissions and register for state change events

* Update permissions again
This commit is contained in:
Daniel Shokouhi 2023-01-11 13:37:00 -08:00 committed by GitHub
parent afd8a21fbd
commit db63a38cd5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 42 additions and 20 deletions

View file

@ -53,6 +53,7 @@ import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.data.authentication.AuthenticationRepository
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.common.data.url.UrlRepository
import io.homeassistant.companion.android.common.sensors.BluetoothSensorManager
import io.homeassistant.companion.android.common.util.cancel
import io.homeassistant.companion.android.common.util.cancelGroupIfNeeded
import io.homeassistant.companion.android.common.util.generalChannel
@ -62,7 +63,6 @@ import io.homeassistant.companion.android.database.notification.NotificationItem
import io.homeassistant.companion.android.database.sensor.SensorDao
import io.homeassistant.companion.android.database.settings.SettingsDao
import io.homeassistant.companion.android.database.settings.WebsocketSetting
import io.homeassistant.companion.android.sensors.BluetoothSensorManager
import io.homeassistant.companion.android.sensors.LocationSensorManager
import io.homeassistant.companion.android.sensors.NotificationSensorManager
import io.homeassistant.companion.android.sensors.SensorReceiver

View file

@ -13,6 +13,7 @@ import dagger.hilt.android.AndroidEntryPoint
import io.homeassistant.companion.android.BuildConfig
import io.homeassistant.companion.android.common.sensors.AudioSensorManager
import io.homeassistant.companion.android.common.sensors.BatterySensorManager
import io.homeassistant.companion.android.common.sensors.BluetoothSensorManager
import io.homeassistant.companion.android.common.sensors.DNDSensorManager
import io.homeassistant.companion.android.common.sensors.DisplaySensorManager
import io.homeassistant.companion.android.common.sensors.KeyguardSensorManager

View file

@ -1,8 +1,9 @@
package io.homeassistant.companion.android.bluetooth.ble
package io.homeassistant.companion.android.common.bluetooth.ble
import android.content.Context
import io.homeassistant.companion.android.sensors.BluetoothSensorManager
import io.homeassistant.companion.android.sensors.SensorReceiver
import android.content.Intent
import io.homeassistant.companion.android.common.sensors.BluetoothSensorManager
import io.homeassistant.companion.android.common.sensors.SensorReceiverBase
import org.altbeacon.beacon.Beacon
import kotlin.math.abs
import kotlin.math.round
@ -80,6 +81,8 @@ class IBeaconMonitor {
private fun sendUpdate(context: Context, tmp: List<IBeacon>) {
beacons = tmp
sensorManager.updateBeaconMonitoringSensor(context)
SensorReceiver.updateAllSensors(context)
val intent = Intent(context, SensorReceiverBase::class.java)
intent.action = SensorReceiverBase.ACTION_UPDATE_SENSORS
context.sendBroadcast(intent)
}
}

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.bluetooth.ble
package io.homeassistant.companion.android.common.bluetooth.ble
interface IBeaconNameFormat {
val uuid: String

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.bluetooth.ble
package io.homeassistant.companion.android.common.bluetooth.ble
data class IBeaconTransmitter(
override var uuid: String,

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.bluetooth.ble
package io.homeassistant.companion.android.common.bluetooth.ble
import org.altbeacon.beacon.service.RssiFilter
import kotlin.math.pow

View file

@ -1,4 +1,4 @@
package io.homeassistant.companion.android.bluetooth.ble
package io.homeassistant.companion.android.common.bluetooth.ble
import android.content.Context
import kotlinx.coroutines.CoroutineScope

View file

@ -1,11 +1,11 @@
package io.homeassistant.companion.android.bluetooth.ble
package io.homeassistant.companion.android.common.bluetooth.ble
import android.bluetooth.BluetoothManager
import android.bluetooth.le.AdvertiseCallback
import android.bluetooth.le.AdvertiseSettings
import android.content.Context
import androidx.core.content.getSystemService
import io.homeassistant.companion.android.sensors.BluetoothSensorManager
import io.homeassistant.companion.android.common.sensors.BluetoothSensorManager
import org.altbeacon.beacon.Beacon
import org.altbeacon.beacon.BeaconParser
import org.altbeacon.beacon.BeaconTransmitter

View file

@ -1,19 +1,18 @@
package io.homeassistant.companion.android.sensors
package io.homeassistant.companion.android.common.sensors
import android.Manifest
import android.content.Context
import android.os.Build
import io.homeassistant.companion.android.bluetooth.ble.IBeacon
import io.homeassistant.companion.android.bluetooth.ble.IBeaconMonitor
import io.homeassistant.companion.android.bluetooth.ble.IBeaconTransmitter
import io.homeassistant.companion.android.bluetooth.ble.KalmanFilter
import io.homeassistant.companion.android.bluetooth.ble.MonitoringManager
import io.homeassistant.companion.android.bluetooth.ble.TransmitterManager
import io.homeassistant.companion.android.bluetooth.ble.name
import io.homeassistant.companion.android.common.bluetooth.BluetoothDevice
import io.homeassistant.companion.android.common.bluetooth.BluetoothUtils
import io.homeassistant.companion.android.common.bluetooth.BluetoothUtils.supportsTransmitter
import io.homeassistant.companion.android.common.sensors.SensorManager
import io.homeassistant.companion.android.common.bluetooth.ble.IBeacon
import io.homeassistant.companion.android.common.bluetooth.ble.IBeaconMonitor
import io.homeassistant.companion.android.common.bluetooth.ble.IBeaconTransmitter
import io.homeassistant.companion.android.common.bluetooth.ble.KalmanFilter
import io.homeassistant.companion.android.common.bluetooth.ble.MonitoringManager
import io.homeassistant.companion.android.common.bluetooth.ble.TransmitterManager
import io.homeassistant.companion.android.common.bluetooth.ble.name
import io.homeassistant.companion.android.database.AppDatabase
import io.homeassistant.companion.android.database.sensor.SensorSetting
import io.homeassistant.companion.android.database.sensor.SensorSettingType

View file

@ -11,6 +11,13 @@
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.google.android.clockwork.settings.WATCH_TOUCH" />
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-feature android:name="android.hardware.type.watch" />
@ -39,6 +46,8 @@
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.app.action.NEXT_ALARM_CLOCK_CHANGED" />
<action android:name="io.homeassistant.companion.android.UPDATE_SENSORS" />
<action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
</intent-filter>
</receiver>
<uses-library

View file

@ -2,6 +2,7 @@ package io.homeassistant.companion.android
import android.app.Application
import android.app.NotificationManager
import android.bluetooth.BluetoothAdapter
import android.content.Intent
import android.content.IntentFilter
import android.media.AudioManager
@ -92,6 +93,13 @@ open class HomeAssistantApplication : Application() {
addAction("com.google.android.clockwork.actions.WET_MODE_ENDED")
}
)
// Listen for bluetooth state changes
registerReceiver(
sensorReceiver,
IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)
)
// Update complications when the screen is on
val complicationReceiver = ComplicationReceiver()

View file

@ -15,6 +15,7 @@ import dagger.hilt.android.AndroidEntryPoint
import io.homeassistant.companion.android.BuildConfig
import io.homeassistant.companion.android.common.sensors.AudioSensorManager
import io.homeassistant.companion.android.common.sensors.BatterySensorManager
import io.homeassistant.companion.android.common.sensors.BluetoothSensorManager
import io.homeassistant.companion.android.common.sensors.DNDSensorManager
import io.homeassistant.companion.android.common.sensors.DisplaySensorManager
import io.homeassistant.companion.android.common.sensors.KeyguardSensorManager
@ -56,6 +57,7 @@ class SensorReceiver : SensorReceiverBase() {
AudioSensorManager(),
BatterySensorManager(),
BedtimeModeSensorManager(),
BluetoothSensorManager(),
DisplaySensorManager(),
DNDSensorManager(),
HeartRateSensorManager(),