Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 27 additions & 14 deletions ORLib/src/main/java/io/openremote/orlib/service/BleProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import android.os.Handler
import android.util.Log
import androidx.core.app.ActivityCompat
import io.openremote.orlib.R
import io.openremote.orlib.ui.PermissionDisclosures
import java.util.*

class BleProvider(val context: Context) {
Expand Down Expand Up @@ -465,22 +466,34 @@ class BleProvider(val context: Context) {


private fun requestPermissions(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
ActivityCompat.requestPermissions(
activity,
arrayOf(
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT
),
BLUETOOTH_PERMISSION_REQUEST_CODE
)
val message = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
R.string.bluetooth_disclosure_body
} else {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
BLUETOOTH_PERMISSION_REQUEST_CODE
)
R.string.bluetooth_location_disclosure_body
}
PermissionDisclosures.show(
activity,
R.string.bluetooth_disclosure_title,
message,
onAccept = {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
ActivityCompat.requestPermissions(
activity,
arrayOf(
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT
),
BLUETOOTH_PERMISSION_REQUEST_CODE
)
} else {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
BLUETOOTH_PERMISSION_REQUEST_CODE
)
}
}
)
}

private fun hasPermission() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import android.util.Log
import androidx.annotation.VisibleForTesting
import androidx.core.app.ActivityCompat
import io.openremote.orlib.R
import io.openremote.orlib.ui.PermissionDisclosures
import io.openremote.orlib.service.espprovision.CallbackChannel
import io.openremote.orlib.service.espprovision.DeviceConnection
import io.openremote.orlib.service.espprovision.DeviceProvision
Expand Down Expand Up @@ -277,22 +278,34 @@ class ESPProvisionProvider(val context: Context) {
}

private fun requestPermissions(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
ActivityCompat.requestPermissions(
activity,
arrayOf(
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT
),
ESPProvisionProvider.Companion.BLUETOOTH_PERMISSION_ESPPROVISION_REQUEST_CODE
)
val message = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
R.string.bluetooth_disclosure_body
} else {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
ESPProvisionProvider.Companion.BLUETOOTH_PERMISSION_ESPPROVISION_REQUEST_CODE
)
R.string.bluetooth_location_disclosure_body
}
PermissionDisclosures.show(
activity,
R.string.bluetooth_disclosure_title,
message,
onAccept = {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
ActivityCompat.requestPermissions(
activity,
arrayOf(
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT
),
ESPProvisionProvider.Companion.BLUETOOTH_PERMISSION_ESPPROVISION_REQUEST_CODE
)
} else {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
ESPProvisionProvider.Companion.BLUETOOTH_PERMISSION_ESPPROVISION_REQUEST_CODE
)
}
}
)
}

private fun hasPermission() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
Expand Down
103 changes: 53 additions & 50 deletions ORLib/src/main/java/io/openremote/orlib/service/GeofenceProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@ import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Looper
import androidx.appcompat.app.AlertDialog
import androidx.core.app.ActivityCompat
import com.fasterxml.jackson.databind.ObjectMapper
import com.google.android.gms.location.*
import io.openremote.orlib.ORConstants
import io.openremote.orlib.R
import io.openremote.orlib.ui.PermissionDisclosures
import java.net.URL
import java.util.*
import java.util.logging.Level
Expand Down Expand Up @@ -185,6 +184,7 @@ class GeofenceProvider(val context: Context) {

private var enableCallback: GeofenceCallback? = null
private var locationCallback: GeofenceCallback? = null
private var backgroundDisclosureAsked = false

fun initialize(): Map<String, Any> {
val sharedPreferences =
Expand Down Expand Up @@ -372,66 +372,69 @@ class GeofenceProvider(val context: Context) {
private fun registerPermissions(activity: Activity) {
LOG.info("Requesting geofence permissions")
if (context.checkSelfPermission(ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
if (ActivityCompat.shouldShowRequestPermissionRationale(
activity,
ACCESS_BACKGROUND_LOCATION
)
) {
AlertDialog.Builder(activity)
.setIcon(R.mipmap.ic_launcher)
.setTitle(R.string.location_background_disabled_title)
.setMessage(R.string.background_location_alert_body)
.setNegativeButton(R.string.no, null)
.setPositiveButton(R.string.yes) { dialog, which ->
activity.requestPermissions(
arrayOf(
ACCESS_BACKGROUND_LOCATION
),
locationResponseCode
)
}
.show()
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q &&
context.checkSelfPermission(ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED
) {
requestBackgroundLocation(activity)
} else {
enableCallback?.let {
onEnable(it)
enableCallback = null
}
}
} else {
activity.requestPermissions(
arrayOf(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION),
locationResponseCode
PermissionDisclosures.show(
activity,
R.string.location_disclosure_title,
R.string.location_disclosure_body,
onAccept = {
activity.requestPermissions(
arrayOf(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION),
locationResponseCode
)
},
onDecline = {
enableCallback?.let {
onEnable(it)
enableCallback = null
}
}
)
}
}

private fun requestBackgroundLocation(activity: Activity) {
backgroundDisclosureAsked = true
PermissionDisclosures.show(
activity,
R.string.background_location_disclosure_title,
R.string.background_location_disclosure_body,
onAccept = {
activity.requestPermissions(
arrayOf(ACCESS_BACKGROUND_LOCATION),
locationResponseCode
)
},
onDecline = {
enableCallback?.let {
onEnable(it)
enableCallback = null
}
}
)
}

fun onRequestPermissionsResult(activity: Activity) {
if (enableCallback != null) {
onEnable(enableCallback!!)
enableCallback = null
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
if (context.checkSelfPermission(ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
context.checkSelfPermission(ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED
) {
if (ActivityCompat.shouldShowRequestPermissionRationale(
activity,
ACCESS_BACKGROUND_LOCATION
)
) {
AlertDialog.Builder(activity)
.setIcon(R.mipmap.ic_launcher)
.setTitle(R.string.background_location_alert_title)
.setMessage(R.string.background_location_alert_body)
.setNegativeButton(R.string.no, null)
.setPositiveButton(R.string.yes) { dialog, which ->
activity.requestPermissions(
arrayOf(
ACCESS_BACKGROUND_LOCATION
),
locationResponseCode
)
}
.show()
}
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q &&
context.checkSelfPermission(ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
context.checkSelfPermission(ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED &&
!backgroundDisclosureAsked
) {
requestBackgroundLocation(activity)
}
}

Expand Down
Loading