Request background location after requesting accurate location. (#1067)

* Request background location after requesting accurate location.

* Fix enable all for location.

* Fix issue with notification access.
This commit is contained in:
Justin Bassett 2020-10-17 23:04:06 -04:00 committed by GitHub
parent 010b63a5c3
commit 30cc3230bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 47 additions and 5 deletions

View file

@ -1,5 +1,6 @@
package io.homeassistant.companion.android.onboarding.integration package io.homeassistant.companion.android.onboarding.integration
import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
@ -71,10 +72,19 @@ class MobileAppIntegrationFragment : Fragment(), MobileAppIntegrationView {
it.setOnCheckedChangeListener { _, isChecked -> it.setOnCheckedChangeListener { _, isChecked ->
setLocationTracking(isChecked) setLocationTracking(isChecked)
if (isChecked && !LocationSensorManager().checkPermission(requireContext(), sensorId)) { if (isChecked && !LocationSensorManager().checkPermission(requireContext(), sensorId)) {
this@MobileAppIntegrationFragment.requestPermissions( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
LocationSensorManager().requiredPermissions(sensorId), this@MobileAppIntegrationFragment.requestPermissions(
LOCATION_REQUEST_CODE LocationSensorManager().requiredPermissions(sensorId)
) .toList().minus(Manifest.permission.ACCESS_BACKGROUND_LOCATION)
.toTypedArray(),
LOCATION_REQUEST_CODE
)
} else {
this@MobileAppIntegrationFragment.requestPermissions(
LocationSensorManager().requiredPermissions(sensorId),
LOCATION_REQUEST_CODE
)
}
} }
} }
} }
@ -127,6 +137,11 @@ class MobileAppIntegrationFragment : Fragment(), MobileAppIntegrationView {
) { ) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (permissions.contains(Manifest.permission.ACCESS_FINE_LOCATION) &&
Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
requestPermissions(arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION), 0)
}
if (requestCode == LOCATION_REQUEST_CODE) { if (requestCode == LOCATION_REQUEST_CODE) {
val hasPermission = grantResults.all { it == PackageManager.PERMISSION_GRANTED } val hasPermission = grantResults.all { it == PackageManager.PERMISSION_GRANTED }
locationTracking.isChecked = hasPermission locationTracking.isChecked = hasPermission

View file

@ -75,6 +75,9 @@ class SensorDetailFragment(
when { when {
permissions.any { perm -> perm == Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE } -> permissions.any { perm -> perm == Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE } ->
startActivity(Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS)) startActivity(Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS))
android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q ->
requestPermissions(permissions.toSet()
.minus(Manifest.permission.ACCESS_BACKGROUND_LOCATION).toTypedArray(), 0)
else -> requestPermissions(permissions, 0) else -> requestPermissions(permissions, 0)
} }
return@setOnPreferenceChangeListener false return@setOnPreferenceChangeListener false
@ -280,6 +283,11 @@ class SensorDetailFragment(
) { ) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (permissions.contains(Manifest.permission.ACCESS_FINE_LOCATION) &&
android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
requestPermissions(arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION), 0)
}
findPreference<SwitchPreference>("enabled")?.run { findPreference<SwitchPreference>("enabled")?.run {
isChecked = grantResults.all { it == PackageManager.PERMISSION_GRANTED } isChecked = grantResults.all { it == PackageManager.PERMISSION_GRANTED }

View file

@ -1,9 +1,12 @@
package io.homeassistant.companion.android.sensors package io.homeassistant.companion.android.sensors
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.provider.Settings
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceCategory import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
@ -116,7 +119,14 @@ class SensorsSettingsFragment : PreferenceFragmentCompat() {
} }
} }
if (!permArray.isNullOrEmpty()) if (!permArray.isNullOrEmpty())
requestPermissions(permArray, 0) if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
requestPermissions(permArray.toSet()
.minus(Manifest.permission.ACCESS_BACKGROUND_LOCATION)
.toTypedArray(), 0)
} else {
requestPermissions(permArray, 0)
}
return@setOnPreferenceChangeListener true return@setOnPreferenceChangeListener true
} }
} }
@ -169,6 +179,15 @@ class SensorsSettingsFragment : PreferenceFragmentCompat() {
) { ) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (permissions.contains(Manifest.permission.ACCESS_FINE_LOCATION) &&
android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
requestPermissions(arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION), 0)
return
}
if (permissions.any { perm -> perm == Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE })
startActivity(Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS))
findPreference<SwitchPreference>("enable_disable_sensors")?.run { findPreference<SwitchPreference>("enable_disable_sensors")?.run {
permissionsAllGranted = grantResults.all { it == PackageManager.PERMISSION_GRANTED } permissionsAllGranted = grantResults.all { it == PackageManager.PERMISSION_GRANTED }
this.isChecked = permissionsAllGranted this.isChecked = permissionsAllGranted