Added fine location permission check

This commit is contained in:
Arty Bishop committed 2020-11-19 20:46:37 +00:00
1 parent 58839c3714
commit 8d123441b1
5 files changed
+33 -19

No files matched your search

@@ -9,13 +9,13 @@ import androidx.fragment.app.activityViewModels
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.snackbar.Snackbar
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.SharedViewModel
import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
import com.rtbishop.look4sat.ui.adapters.EntriesAdapter
import com.rtbishop.look4sat.utility.RecyclerDivider
import com.rtbishop.look4sat.utility.Utilities.snack
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
@@ -68,7 +68,8 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
event.getContentIfNotHandled()?.let {
if (it == 0) setLoading()
else if (it == 1) {
getString(R.string.entries_update_error).snack(requireView())
val errorMsg = getString(R.string.entries_update_error)
Snackbar.make(requireView(), errorMsg, Snackbar.LENGTH_SHORT).show()
setError()
}
}
@@ -19,21 +19,27 @@
package com.rtbishop.look4sat.ui.fragments
import android.Manifest
import android.content.pm.PackageManager
import android.location.LocationManager
import android.os.Bundle
import android.view.View
import androidx.core.content.ContextCompat
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.google.android.material.snackbar.Snackbar
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.utility.PrefsManager
import com.rtbishop.look4sat.utility.Utilities.round
import com.rtbishop.look4sat.utility.Utilities.snack
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class PrefsFragment : PreferenceFragmentCompat() {
private val locPermReqCode = 1000
private val locPermString = Manifest.permission.ACCESS_FINE_LOCATION
@Inject
lateinit var locationManager: LocationManager
@@ -56,19 +62,30 @@ class PrefsFragment : PreferenceFragmentCompat() {
}
private fun setPositionFromGPS() {
try {
val locPermResult = ContextCompat.checkSelfPermission(requireContext(), locPermString)
if (locPermResult == PackageManager.PERMISSION_GRANTED) {
val location = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER)
if (location != null) {
val latitude = location.latitude.round(4)
val longitude = location.longitude.round(4)
val altitude = location.altitude.round(1)
prefsManager.setStationPosition(latitude, longitude, altitude)
getString(R.string.pref_pos_gps_success).snack(requireView())
} else {
getString(R.string.pref_pos_gps_null).snack(requireView())
}
} catch (e: SecurityException) {
getString(R.string.pref_pos_gps_error).snack(requireView())
showSnack(getString(R.string.pref_pos_gps_success))
} else showSnack(getString(R.string.pref_pos_gps_null))
} else requestPermissions(arrayOf(locPermString), locPermReqCode)
}
private fun showSnack(message: String) {
Snackbar.make(requireView(), message, Snackbar.LENGTH_SHORT)
.setAnchorView(R.id.nav_bottom)
.show()
}
override fun onRequestPermissionsResult(code: Int, perms: Array<out String>, result: IntArray) {
if (code == locPermReqCode) {
if (result.isNotEmpty() && result[0] == PackageManager.PERMISSION_GRANTED) {
setPositionFromGPS()
} else showSnack(getString(R.string.pref_pos_gps_error))
}
}
}
@@ -52,6 +52,7 @@ class SplashActivity : FragmentActivity() {
private fun startMainActivity() {
startActivity(Intent(this, MainActivity::class.java))
finish()
}
private inner class SplashPagerAdapter(activity: FragmentActivity) :
@@ -17,10 +17,6 @@ object Utilities {
return String.format(format, hours, minutes, seconds)
}
fun String.snack(view: View) {
Snackbar.make(view, this, Snackbar.LENGTH_SHORT).show()
}
fun Double.round(decimals: Int): Double {
var multiplier = 1.0
repeat(decimals) { multiplier *= 10 }
+4 -5
View File
@@ -2,9 +2,8 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
android:viewportHeight="24">
<path
android:fillColor="@color/themeLight"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z" />
</vector>