package ee.ut.cs.lab9wprelive
import android.Manifest
import android.annotation.SuppressLint
import android.content.Context
import android.content.Context.LOCATION_SERVICE
import android.content.pm.PackageManager
import android.location.Location
import android.location.LocationListener
import android.location.LocationManager
import android.os.Bundle
import android.util.Log
import androidx.core.app.ActivityCompat
class LocationHelper(private val mContext: Context) : LocationListener {
companion object {
const val MIN_DISTANCE_CHANGE_FOR_UPDATES: Long = 10 // meters
// The minimum time between updates in milliseconds:
const val MIN_TIME_BW_UPDATES = (1000 * 60 * 1).toLong() // 1 minute
}
// Flags
var isGPSEnabled = false
var isNetworkEnabled = false
var locationManager: LocationManager
init {
locationManager = mContext.getSystemService(LOCATION_SERVICE) as LocationManager
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
}
@SuppressLint("MissingPermission")
fun getCurrenLocationUsingNetwork() : Location?{
if (!isNetworkEnabled) {
Log.v("TAG ","Network not enabled!")
return null
} else {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES.toFloat(), this
)
return locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
}
}
@SuppressLint("MissingPermission")
fun getCurrentLocationUsingGPS(): Location? {
var location: Location? = null
if (checkPermissions()) {
Log.v("TAG ","No permission Granted")
} else {
if (!isGPSEnabled) {
Log.v("TAG ","GPS not enabled!")
} else {
// If GPS enabled, get latitude/longitude using GPS Services
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES.toFloat(), this
)
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
}
}
return location
}
private fun checkPermissions(): Boolean {
return (ActivityCompat.checkSelfPermission( mContext, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission( mContext, Manifest.permission.ACCESS_COARSE_LOCATION ) != PackageManager.PERMISSION_GRANTED)
}
override fun onLocationChanged(location: Location) {}
override fun onProviderDisabled(provider: String) {}
override fun onProviderEnabled(provider: String) {}
override fun onStatusChanged(provider: String, status: Int, extras: Bundle) {}
}