mirror of
https://github.com/home-assistant/android
synced 2024-09-19 16:11:37 +00:00
Split permissions per sensor enity (#991)
This commit is contained in:
parent
eeb3ab49da
commit
9473cbcce8
|
@ -108,7 +108,7 @@ class ActivitySensorManager : BroadcastReceiver(), SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(activity)
|
get() = listOf(activity)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
arrayOf(
|
arrayOf(
|
||||||
Manifest.permission.ACTIVITY_RECOGNITION
|
Manifest.permission.ACTIVITY_RECOGNITION
|
||||||
|
|
|
@ -33,7 +33,7 @@ class GeocodeSensorManager : SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(geocodedLocation)
|
get() = listOf(geocodedLocation)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
arrayOf(
|
arrayOf(
|
||||||
Manifest.permission.ACCESS_FINE_LOCATION,
|
Manifest.permission.ACCESS_FINE_LOCATION,
|
||||||
|
@ -51,7 +51,7 @@ class GeocodeSensorManager : SensorManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateGeocodedLocation(context: Context) {
|
private fun updateGeocodedLocation(context: Context) {
|
||||||
if (!isEnabled(context, geocodedLocation.id) || !checkPermission(context))
|
if (!isEnabled(context, geocodedLocation.id) || !checkPermission(context, geocodedLocation.id))
|
||||||
return
|
return
|
||||||
val locApi = LocationServices.getFusedLocationProviderClient(context)
|
val locApi = LocationServices.getFusedLocationProviderClient(context)
|
||||||
locApi.lastLocation.addOnSuccessListener { location ->
|
locApi.lastLocation.addOnSuccessListener { location ->
|
||||||
|
|
|
@ -107,7 +107,7 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupLocationTracking() {
|
private fun setupLocationTracking() {
|
||||||
if (!checkPermission(latestContext)) {
|
if (!checkPermission(latestContext, backgroundLocation.id)) {
|
||||||
Log.w(TAG, "Not starting location reporting because of permissions.")
|
Log.w(TAG, "Not starting location reporting because of permissions.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -149,7 +149,7 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun requestLocationUpdates() {
|
private fun requestLocationUpdates() {
|
||||||
if (!checkPermission(latestContext)) {
|
if (!checkPermission(latestContext, backgroundLocation.id)) {
|
||||||
Log.w(TAG, "Not registering for location updates because of permissions.")
|
Log.w(TAG, "Not registering for location updates because of permissions.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun requestZoneUpdates() {
|
private suspend fun requestZoneUpdates() {
|
||||||
if (!checkPermission(latestContext)) {
|
if (!checkPermission(latestContext, zoneLocation.id)) {
|
||||||
Log.w(TAG, "Not registering for zone based updates because of permissions.")
|
Log.w(TAG, "Not registering for zone based updates because of permissions.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -308,7 +308,7 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun requestSingleAccurateLocation() {
|
private fun requestSingleAccurateLocation() {
|
||||||
if (!checkPermission(latestContext)) {
|
if (!checkPermission(latestContext, singleAccurateLocation.id)) {
|
||||||
Log.w(TAG, "Not getting single accurate location because of permissions.")
|
Log.w(TAG, "Not getting single accurate location because of permissions.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -402,7 +402,7 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(singleAccurateLocation, backgroundLocation, zoneLocation)
|
get() = listOf(singleAccurateLocation, backgroundLocation, zoneLocation)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
arrayOf(
|
arrayOf(
|
||||||
Manifest.permission.ACCESS_FINE_LOCATION,
|
Manifest.permission.ACCESS_FINE_LOCATION,
|
||||||
|
|
|
@ -66,12 +66,13 @@ class MobileAppIntegrationFragment : Fragment(), MobileAppIntegrationView {
|
||||||
findViewById<TextInputEditText>(R.id.deviceName).setText(Build.MODEL)
|
findViewById<TextInputEditText>(R.id.deviceName).setText(Build.MODEL)
|
||||||
|
|
||||||
findViewById<SwitchMaterial>(R.id.locationTracking)?.let {
|
findViewById<SwitchMaterial>(R.id.locationTracking)?.let {
|
||||||
it.isChecked = LocationSensorManager().checkPermission(context)
|
val sensorId = LocationSensorManager.backgroundLocation.id
|
||||||
|
it.isChecked = LocationSensorManager().checkPermission(context, sensorId)
|
||||||
it.setOnCheckedChangeListener { _, isChecked ->
|
it.setOnCheckedChangeListener { _, isChecked ->
|
||||||
setLocationTracking(isChecked)
|
setLocationTracking(isChecked)
|
||||||
if (isChecked && !LocationSensorManager().checkPermission(requireContext())) {
|
if (isChecked && !LocationSensorManager().checkPermission(requireContext(), sensorId)) {
|
||||||
this@MobileAppIntegrationFragment.requestPermissions(
|
this@MobileAppIntegrationFragment.requestPermissions(
|
||||||
LocationSensorManager().requiredPermissions(),
|
LocationSensorManager().requiredPermissions(sensorId),
|
||||||
LOCATION_REQUEST_CODE
|
LOCATION_REQUEST_CODE
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ class AudioSensorManager : SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(audioSensor, audioState, headphoneState, micMuted, speakerphoneState, musicActive, volAlarm, volCall, volMusic, volRing)
|
get() = listOf(audioSensor, audioState, headphoneState, micMuted, speakerphoneState, musicActive, volAlarm, volCall, volMusic, volRing)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ class BatterySensorManager : SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(batteryLevel, batteryState, isChargingState, chargerTypeState, batteryHealthState)
|
get() = listOf(batteryLevel, batteryState, isChargingState, chargerTypeState, batteryHealthState)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ class BluetoothSensorManager : SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(bluetoothConnection, bluetoothState)
|
get() = listOf(bluetoothConnection, bluetoothState)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return arrayOf(Manifest.permission.BLUETOOTH)
|
return arrayOf(Manifest.permission.BLUETOOTH)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ class BluetoothSensorManager : SensorManager {
|
||||||
var bondedString = ""
|
var bondedString = ""
|
||||||
var isBtOn = false
|
var isBtOn = false
|
||||||
|
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, bluetoothConnection.id)) {
|
||||||
|
|
||||||
val bluetoothManager =
|
val bluetoothManager =
|
||||||
(context.applicationContext.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager)
|
(context.applicationContext.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager)
|
||||||
|
@ -110,7 +110,7 @@ class BluetoothSensorManager : SensorManager {
|
||||||
|
|
||||||
var isBtOn = false
|
var isBtOn = false
|
||||||
|
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, bluetoothState.id)) {
|
||||||
|
|
||||||
val bluetoothManager =
|
val bluetoothManager =
|
||||||
(context.applicationContext.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager)
|
(context.applicationContext.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager)
|
||||||
|
|
|
@ -25,7 +25,7 @@ class DNDSensorManager : SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(dndSensor)
|
get() = listOf(dndSensor)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ class LastRebootSensorManager : SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(lastRebootSensor)
|
get() = listOf(lastRebootSensor)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ class LightSensorManager : SensorManager, SensorEventListener {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(lightSensor)
|
get() = listOf(lightSensor)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,16 +91,22 @@ class NetworkSensorManager : SensorManager {
|
||||||
publicIp
|
publicIp
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
return when {
|
||||||
|
sensorId == publicIp.id -> {
|
||||||
|
arrayOf()
|
||||||
|
}
|
||||||
|
Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q -> {
|
||||||
arrayOf(
|
arrayOf(
|
||||||
Manifest.permission.ACCESS_FINE_LOCATION,
|
Manifest.permission.ACCESS_FINE_LOCATION,
|
||||||
Manifest.permission.ACCESS_BACKGROUND_LOCATION
|
Manifest.permission.ACCESS_BACKGROUND_LOCATION
|
||||||
)
|
)
|
||||||
} else {
|
}
|
||||||
|
else -> {
|
||||||
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION)
|
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun requestSensorUpdate(
|
override fun requestSensorUpdate(
|
||||||
context: Context
|
context: Context
|
||||||
|
@ -124,7 +130,7 @@ class NetworkSensorManager : SensorManager {
|
||||||
var lastScanStrength = -1
|
var lastScanStrength = -1
|
||||||
var wifiEnabled = false
|
var wifiEnabled = false
|
||||||
|
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, wifiConnection.id)) {
|
||||||
val wifiManager =
|
val wifiManager =
|
||||||
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
conInfo = wifiManager.connectionInfo
|
conInfo = wifiManager.connectionInfo
|
||||||
|
@ -171,7 +177,7 @@ class NetworkSensorManager : SensorManager {
|
||||||
|
|
||||||
var conInfo: WifiInfo? = null
|
var conInfo: WifiInfo? = null
|
||||||
|
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, bssidState.id)) {
|
||||||
val wifiManager =
|
val wifiManager =
|
||||||
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
conInfo = wifiManager.connectionInfo
|
conInfo = wifiManager.connectionInfo
|
||||||
|
@ -215,7 +221,7 @@ class NetworkSensorManager : SensorManager {
|
||||||
var conInfo: WifiInfo? = null
|
var conInfo: WifiInfo? = null
|
||||||
var deviceIp = "Unknown"
|
var deviceIp = "Unknown"
|
||||||
|
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, wifiIp.id)) {
|
||||||
val wifiManager =
|
val wifiManager =
|
||||||
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
conInfo = wifiManager.connectionInfo
|
conInfo = wifiManager.connectionInfo
|
||||||
|
@ -246,7 +252,7 @@ class NetworkSensorManager : SensorManager {
|
||||||
var linkSpeed = 0
|
var linkSpeed = 0
|
||||||
var lastScanStrength = -1
|
var lastScanStrength = -1
|
||||||
|
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, wifiLinkSpeed.id)) {
|
||||||
val wifiManager =
|
val wifiManager =
|
||||||
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
conInfo = wifiManager.connectionInfo
|
conInfo = wifiManager.connectionInfo
|
||||||
|
@ -288,7 +294,7 @@ class NetworkSensorManager : SensorManager {
|
||||||
|
|
||||||
var wifiEnabled = false
|
var wifiEnabled = false
|
||||||
|
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, wifiState.id)) {
|
||||||
val wifiManager =
|
val wifiManager =
|
||||||
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
|
|
||||||
|
@ -312,7 +318,7 @@ class NetworkSensorManager : SensorManager {
|
||||||
var conInfo: WifiInfo? = null
|
var conInfo: WifiInfo? = null
|
||||||
var frequency = 0
|
var frequency = 0
|
||||||
|
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, wifiFrequency.id)) {
|
||||||
val wifiManager =
|
val wifiManager =
|
||||||
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
conInfo = wifiManager.connectionInfo
|
conInfo = wifiManager.connectionInfo
|
||||||
|
@ -342,7 +348,7 @@ class NetworkSensorManager : SensorManager {
|
||||||
var conInfo: WifiInfo? = null
|
var conInfo: WifiInfo? = null
|
||||||
var lastScanStrength = -1
|
var lastScanStrength = -1
|
||||||
|
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, wifiSignalStrength.id)) {
|
||||||
val wifiManager =
|
val wifiManager =
|
||||||
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
(context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager)
|
||||||
conInfo = wifiManager.connectionInfo
|
conInfo = wifiManager.connectionInfo
|
||||||
|
|
|
@ -34,7 +34,7 @@ class NextAlarmManager : SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(nextAlarm)
|
get() = listOf(nextAlarm)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ class PhoneStateSensorManager : SensorManager {
|
||||||
listOf(phoneState, sim_1, sim_2)
|
listOf(phoneState, sim_1, sim_2)
|
||||||
else listOf(phoneState)
|
else listOf(phoneState)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return arrayOf(Manifest.permission.READ_PHONE_STATE)
|
return arrayOf(Manifest.permission.READ_PHONE_STATE)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ class PhoneStateSensorManager : SensorManager {
|
||||||
if (!isEnabled(context, phoneState.id))
|
if (!isEnabled(context, phoneState.id))
|
||||||
return
|
return
|
||||||
var currentPhoneState = "unavailable"
|
var currentPhoneState = "unavailable"
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, phoneState.id)) {
|
||||||
val telephonyManager =
|
val telephonyManager =
|
||||||
(context.applicationContext.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager)
|
(context.applicationContext.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager)
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ class PhoneStateSensorManager : SensorManager {
|
||||||
var displayName = "Unavailable"
|
var displayName = "Unavailable"
|
||||||
val attrs = mutableMapOf<String, Any>()
|
val attrs = mutableMapOf<String, Any>()
|
||||||
|
|
||||||
if (checkPermission(context)) {
|
if (checkPermission(context, basicSimSensor.id)) {
|
||||||
val subscriptionManager =
|
val subscriptionManager =
|
||||||
(context.applicationContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE)) as SubscriptionManager
|
(context.applicationContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE)) as SubscriptionManager
|
||||||
val info: SubscriptionInfo? = subscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(slotIndex)
|
val info: SubscriptionInfo? = subscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(slotIndex)
|
||||||
|
|
|
@ -44,7 +44,7 @@ class PowerSensorManager : SensorManager {
|
||||||
listOf(interactiveDevice, powerSave)
|
listOf(interactiveDevice, powerSave)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ class PressureSensorManager : SensorManager, SensorEventListener {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(pressureSensor)
|
get() = listOf(pressureSensor)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ class ProximitySensorManager : SensorManager, SensorEventListener {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(proximitySensor)
|
get() = listOf(proximitySensor)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ class SensorDetailFragment(
|
||||||
|
|
||||||
findPreference<SwitchPreference>("enabled")?.let {
|
findPreference<SwitchPreference>("enabled")?.let {
|
||||||
val dao = sensorDao.get(basicSensor.id)
|
val dao = sensorDao.get(basicSensor.id)
|
||||||
val perm = sensorManager.checkPermission(requireContext())
|
val perm = sensorManager.checkPermission(requireContext(), basicSensor.id)
|
||||||
if (dao == null && sensorManager.enabledByDefault) {
|
if (dao == null && sensorManager.enabledByDefault) {
|
||||||
it.isChecked = perm
|
it.isChecked = perm
|
||||||
}
|
}
|
||||||
|
@ -66,8 +66,8 @@ class SensorDetailFragment(
|
||||||
it.setOnPreferenceChangeListener { _, newState ->
|
it.setOnPreferenceChangeListener { _, newState ->
|
||||||
val isEnabled = newState as Boolean
|
val isEnabled = newState as Boolean
|
||||||
|
|
||||||
if (isEnabled && !sensorManager.checkPermission(requireContext())) {
|
if (isEnabled && !sensorManager.checkPermission(requireContext(), basicSensor.id)) {
|
||||||
requestPermissions(sensorManager.requiredPermissions(), 0)
|
requestPermissions(sensorManager.requiredPermissions(basicSensor.id), 0)
|
||||||
return@setOnPreferenceChangeListener false
|
return@setOnPreferenceChangeListener false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,10 +24,10 @@ interface SensorManager {
|
||||||
val unitOfMeasurement: String? = null
|
val unitOfMeasurement: String? = null
|
||||||
)
|
)
|
||||||
|
|
||||||
fun requiredPermissions(): Array<String>
|
fun requiredPermissions(sensorId: String): Array<String>
|
||||||
|
|
||||||
fun checkPermission(context: Context): Boolean {
|
fun checkPermission(context: Context, sensorId: String): Boolean {
|
||||||
return requiredPermissions().all {
|
return requiredPermissions(sensorId).all {
|
||||||
context.checkPermission(it, myPid(), myUid()) == PackageManager.PERMISSION_GRANTED
|
context.checkPermission(it, myPid(), myUid()) == PackageManager.PERMISSION_GRANTED
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ interface SensorManager {
|
||||||
fun isEnabled(context: Context, sensorId: String): Boolean {
|
fun isEnabled(context: Context, sensorId: String): Boolean {
|
||||||
val sensorDao = AppDatabase.getInstance(context).sensorDao()
|
val sensorDao = AppDatabase.getInstance(context).sensorDao()
|
||||||
var sensor = sensorDao.get(sensorId)
|
var sensor = sensorDao.get(sensorId)
|
||||||
val permission = checkPermission(context)
|
val permission = checkPermission(context, sensorId)
|
||||||
|
|
||||||
// If we haven't created the entity yet do so and default to enabled if required
|
// If we haven't created the entity yet do so and default to enabled if required
|
||||||
if (sensor == null) {
|
if (sensor == null) {
|
||||||
|
|
|
@ -39,7 +39,7 @@ class StepsSensorManager : SensorManager, SensorEventListener {
|
||||||
private lateinit var latestContext: Context
|
private lateinit var latestContext: Context
|
||||||
private lateinit var mySensorManager: android.hardware.SensorManager
|
private lateinit var mySensorManager: android.hardware.SensorManager
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
arrayOf(
|
arrayOf(
|
||||||
Manifest.permission.ACTIVITY_RECOGNITION
|
Manifest.permission.ACTIVITY_RECOGNITION
|
||||||
|
@ -65,7 +65,7 @@ class StepsSensorManager : SensorManager, SensorEventListener {
|
||||||
if (!isEnabled(latestContext, stepsSensor.id))
|
if (!isEnabled(latestContext, stepsSensor.id))
|
||||||
return
|
return
|
||||||
|
|
||||||
if (checkPermission(latestContext)) {
|
if (checkPermission(latestContext, stepsSensor.id)) {
|
||||||
mySensorManager =
|
mySensorManager =
|
||||||
latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager
|
latestContext.getSystemService(SENSOR_SERVICE) as android.hardware.SensorManager
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ class StorageSensorManager : SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf(storageSensor, externalStorage)
|
get() = listOf(storageSensor, externalStorage)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ class TrafficStatsManager : SensorManager {
|
||||||
listOf(rxBytesMobile, txBytesMobile, rxBytesTotal, txBytesTotal)
|
listOf(rxBytesMobile, txBytesMobile, rxBytesTotal, txBytesTotal)
|
||||||
} else listOf(rxBytesTotal, txBytesTotal)
|
} else listOf(rxBytesTotal, txBytesTotal)
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(senorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class ActivitySensorManager : BroadcastReceiver(), SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf()
|
get() = listOf()
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
// Noop
|
// Noop
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ class GeocodeSensorManager : SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf()
|
get() = listOf()
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ class LocationSensorManager : BroadcastReceiver(), SensorManager {
|
||||||
override val availableSensors: List<SensorManager.BasicSensor>
|
override val availableSensors: List<SensorManager.BasicSensor>
|
||||||
get() = listOf()
|
get() = listOf()
|
||||||
|
|
||||||
override fun requiredPermissions(): Array<String> {
|
override fun requiredPermissions(sensorId: String): Array<String> {
|
||||||
// Noop
|
// Noop
|
||||||
return emptyArray()
|
return emptyArray()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue