feat: Location permissions check

This commit is contained in:
Piotr Dec 2024-07-15 00:44:49 +02:00
parent 9a2b0dd187
commit c923f8825d
Signed by: stawros
GPG key ID: F89F27AD8F881A91
2 changed files with 61 additions and 6 deletions

View file

@ -21,6 +21,8 @@ import com.mapbox.navigation.base.options.NavigationOptions
import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp
import eu.ztsh.garmin.databinding.ActivityMainBinding
import eu.ztsh.garmin.mapbox.NavigationObserver
import eu.ztsh.garmin.util.PermissionsHelper
import java.lang.ref.WeakReference
@SuppressLint("MissingPermission")
class MainActivity : AppCompatActivity() {
@ -29,6 +31,7 @@ class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private val navigationObserver = NavigationObserver()
val permissionsHelper = PermissionsHelper(WeakReference(this))
init {
lifecycle.addObserver(object : DefaultLifecycleObserver {
@ -48,14 +51,16 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
if (!MapboxNavigationApp.isSetup()) {
MapboxNavigationApp.setup {
NavigationOptions.Builder(applicationContext)
// .accessToken(BuildConfig.MAPBOX_DOWNLOADS_TOKEN)
.build()
permissionsHelper.checkPermissions {
if (!MapboxNavigationApp.isSetup()) {
MapboxNavigationApp.setup {
NavigationOptions.Builder(applicationContext)
// .accessToken(BuildConfig.MAPBOX_DOWNLOADS_TOKEN)
.build()
}
}
MapboxNavigationApp.current()?.startTripSession()
}
MapboxNavigationApp.current()?.startTripSession()
bluetoothInit()
}

View file

@ -0,0 +1,50 @@
package eu.ztsh.garmin.util
import android.app.Activity
import android.widget.Toast
import com.mapbox.android.core.permissions.PermissionsListener
import com.mapbox.android.core.permissions.PermissionsManager
import java.lang.ref.WeakReference
class PermissionsHelper(val activityRef: WeakReference<Activity>) {
private lateinit var permissionsManager: PermissionsManager
fun checkPermissions(onMapReady: () -> Unit) {
activityRef.get()?.let { activity: Activity ->
if (PermissionsManager.areLocationPermissionsGranted(activity)) {
onMapReady()
} else {
permissionsManager = PermissionsManager(object : PermissionsListener {
override fun onExplanationNeeded(permissionsToExplain: List<String>) {
activityRef.get()?.let {
Toast.makeText(
it, "You need to accept location permissions.",
Toast.LENGTH_SHORT
).show()
}
}
override fun onPermissionResult(granted: Boolean) {
activityRef.get()?.let {
if (granted) {
onMapReady()
} else {
it.finish()
}
}
}
})
permissionsManager.requestLocationPermissions(activity)
}
}
}
fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}