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
import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.PackageManager
@ -71,10 +72,19 @@ class MobileAppIntegrationFragment : Fragment(), MobileAppIntegrationView {
it.setOnCheckedChangeListener { _, isChecked ->
setLocationTracking(isChecked)
if (isChecked && !LocationSensorManager().checkPermission(requireContext(), sensorId)) {
this@MobileAppIntegrationFragment.requestPermissions(
LocationSensorManager().requiredPermissions(sensorId),
LOCATION_REQUEST_CODE
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
this@MobileAppIntegrationFragment.requestPermissions(
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)
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) {
val hasPermission = grantResults.all { it == PackageManager.PERMISSION_GRANTED }
locationTracking.isChecked = hasPermission

View file

@ -75,6 +75,9 @@ class SensorDetailFragment(
when {
permissions.any { perm -> perm == Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE } ->
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)
}
return@setOnPreferenceChangeListener false
@ -280,6 +283,11 @@ class SensorDetailFragment(
) {
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 {
isChecked = grantResults.all { it == PackageManager.PERMISSION_GRANTED }

View file

@ -1,9 +1,12 @@
package io.homeassistant.companion.android.sensors
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.provider.Settings
import androidx.preference.Preference
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat
@ -116,7 +119,14 @@ class SensorsSettingsFragment : PreferenceFragmentCompat() {
}
}
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
}
}
@ -169,6 +179,15 @@ class SensorsSettingsFragment : PreferenceFragmentCompat() {
) {
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 {
permissionsAllGranted = grantResults.all { it == PackageManager.PERMISSION_GRANTED }
this.isChecked = permissionsAllGranted