diff --git a/app/src/main/java/eu/ztsh/garmin/MainActivity.kt b/app/src/main/java/eu/ztsh/garmin/MainActivity.kt index 4a0dec4..5a41afa 100644 --- a/app/src/main/java/eu/ztsh/garmin/MainActivity.kt +++ b/app/src/main/java/eu/ztsh/garmin/MainActivity.kt @@ -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() } diff --git a/app/src/main/java/eu/ztsh/garmin/util/PermissionsHelper.kt b/app/src/main/java/eu/ztsh/garmin/util/PermissionsHelper.kt new file mode 100644 index 0000000..573e457 --- /dev/null +++ b/app/src/main/java/eu/ztsh/garmin/util/PermissionsHelper.kt @@ -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) { + 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) { + 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, + grantResults: IntArray + ) { + permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults) + } +} \ No newline at end of file