mirror of
https://github.com/home-assistant/android
synced 2024-09-19 08:01:31 +00:00
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:
parent
010b63a5c3
commit
30cc3230bd
|
@ -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,6 +72,14 @@ 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)) {
|
||||||
|
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(
|
this@MobileAppIntegrationFragment.requestPermissions(
|
||||||
LocationSensorManager().requiredPermissions(sensorId),
|
LocationSensorManager().requiredPermissions(sensorId),
|
||||||
LOCATION_REQUEST_CODE
|
LOCATION_REQUEST_CODE
|
||||||
|
@ -78,6 +87,7 @@ class MobileAppIntegrationFragment : Fragment(), MobileAppIntegrationView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
findViewById<AppCompatButton>(R.id.finish).setOnClickListener {
|
findViewById<AppCompatButton>(R.id.finish).setOnClickListener {
|
||||||
presenter.onRegistrationAttempt(false, deviceName.text.toString())
|
presenter.onRegistrationAttempt(false, deviceName.text.toString())
|
||||||
|
@ -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
|
||||||
|
|
|
@ -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 }
|
||||||
|
|
||||||
|
|
|
@ -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())
|
||||||
|
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)
|
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
|
||||||
|
|
Loading…
Reference in a new issue