diff --git a/sdk/build.gradle b/sdk/build.gradle index 499536f5..c491554a 100644 --- a/sdk/build.gradle +++ b/sdk/build.gradle @@ -10,7 +10,7 @@ apply plugin: "org.jetbrains.dokka" apply plugin: 'io.radar.mvnpublish' ext { - radarVersion = '3.13.3' + radarVersion = '3.13.4-beta.1' } String buildNumber = ".${System.currentTimeMillis()}" diff --git a/sdk/src/main/java/io/radar/sdk/RadarLocationPermissionManager.kt b/sdk/src/main/java/io/radar/sdk/RadarLocationPermissionManager.kt index f3112036..4074f9c1 100644 --- a/sdk/src/main/java/io/radar/sdk/RadarLocationPermissionManager.kt +++ b/sdk/src/main/java/io/radar/sdk/RadarLocationPermissionManager.kt @@ -5,18 +5,23 @@ import android.app.Activity import android.app.Application import android.content.Context import android.content.Intent +import android.content.pm.PackageManager import android.net.Uri import android.os.Build import android.os.Bundle import android.provider.Settings +import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.RequiresApi +import androidx.core.app.ActivityCompat import io.radar.sdk.model.RadarLocationPermissionStatus class RadarLocationPermissionManager(private val context: Context, private val activity: Activity?): Application.ActivityLifecycleCallbacks { + private var danglingSettingsPermissionRequest = false + private var danglingForegroundPermissionRequest = false private var danglingBackgroundPermissionRequest = false private lateinit var requestForegroundLocationPermissionLauncher: ActivityResultLauncher @@ -25,6 +30,7 @@ class RadarLocationPermissionManager(private val context: Context, private val a init { if (activity is ComponentActivity) { + Log.d("LocPermissionManager", "Activity is a ComponentActivity") requestForegroundLocationPermissionLauncher = activity.registerForActivityResult( ActivityResultContracts.RequestPermission() ) { isGranted: Boolean -> @@ -44,27 +50,46 @@ class RadarLocationPermissionManager(private val context: Context, private val a Radar.sendLocationPermissionStatus(RadarLocationPermissionStatus.initWithStatus(context, activity)) // TODO: sync the user's permissions status here } - } + } else { + Log.d("LocPermissionManager", "Activity is not a ComponentActivity") + } } @RequiresApi(Build.VERSION_CODES.Q) fun requestBackgroundLocationPermission() { + Log.d("LocPermissionManager", "requesting background") if (activity is ComponentActivity) { + Log.d("LocPermissionManager", "calling activity") + context.getSharedPreferences("RadarSDK", Context.MODE_PRIVATE).getString("x_platform_sdk_type",null)?.let { + if (it != null) { + Log.d("LocPermissionManager", "x platform side channel") + danglingBackgroundPermissionRequest = true + } + } requestBackgroundLocationPermissionLauncher.launch(Manifest.permission.ACCESS_BACKGROUND_LOCATION) // TODO: sync the user's location permissions action with the their permissions status here } } fun requestForegroundLocationPermission() { + Log.d("LocPermissionManager", "requesting foreground") if (activity is ComponentActivity) { + Log.d("LocPermissionManager", "calling activity") + context.getSharedPreferences("RadarSDK", Context.MODE_PRIVATE).getString("x_platform_sdk_type",null)?.let { + if (it != null) { + Log.d("LocPermissionManager", "x platform side channel") + danglingForegroundPermissionRequest = true + } + } Radar.sendLocationPermissionStatus(RadarLocationPermissionStatus.initWithStatus(context,activity,true)) requestForegroundLocationPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION) + // TODO: sync the user's location permissions action with the their permissions status here } } fun openAppSettings() { - danglingBackgroundPermissionRequest = true + danglingSettingsPermissionRequest = true val intent = Intent().apply { action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS val uri = Uri.fromParts("package", context.packageName, null) @@ -106,11 +131,25 @@ class RadarLocationPermissionManager(private val context: Context, private val a } override fun onActivityResumed(activity: Activity) { - if (danglingBackgroundPermissionRequest) { + if (danglingSettingsPermissionRequest) { Radar.sendLocationPermissionStatus(RadarLocationPermissionStatus.initWithStatus(context,activity)) // TODO: sync the user's location permissions action with the their permissions status here } + if (danglingForegroundPermissionRequest) { + if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ + RadarLocationPermissionStatus.savePreviouslyDeniedForeground(context,true) + } + Radar.sendLocationPermissionStatus(RadarLocationPermissionStatus.initWithStatus(context,activity)) + } + if (danglingBackgroundPermissionRequest) { + if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED){ + RadarLocationPermissionStatus.savePreviouslyDeniedBackground(context,true) + } + Radar.sendLocationPermissionStatus(RadarLocationPermissionStatus.initWithStatus(context,activity)) + } + danglingSettingsPermissionRequest = false danglingBackgroundPermissionRequest = false + danglingForegroundPermissionRequest = false } } \ No newline at end of file