package ee.ut.cs.lab7base
import android.annotation.SuppressLint
import android.content.Context
import android.os.Looper
import com.google.android.gms.location.*
import com.google.android.gms.tasks.Task
class LocationHelper(private val mContext: Context) {
// !NB Don't forget to add 'play-services-location' gradle dependency!
private val locationRequest = LocationRequest.create().apply {
interval = 10000
fastestInterval = 5000
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
var registeredCallbacks: ArrayList<LocationCallback> = arrayListOf()
fun requestLocationUpdates( callback: LocationCallback) {
val builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest)
val client: SettingsClient = LocationServices.getSettingsClient(mContext)
val task: Task<LocationSettingsResponse> = client.checkLocationSettings(builder.build())
task.addOnSuccessListener {
// All location settings are satisfied. The client can initialize location requests here.
startLocationUpdates(callback)
}
task.addOnFailureListener { exception ->
// lacking permissions //TODO
}
}
@SuppressLint("MissingPermission")
private fun startLocationUpdates(callback: LocationCallback) {
val fusedLocationClient = LocationServices.getFusedLocationProviderClient(mContext)
fusedLocationClient.requestLocationUpdates(locationRequest,
callback,
Looper.getMainLooper())
registeredCallbacks.add(callback)
}
fun stopLocationUpdates(){
registeredCallbacks.forEach {
LocationServices.getFusedLocationProviderClient(mContext)
.removeLocationUpdates(it)
}
registeredCallbacks.clear()
}
}