Added FINE_LOCATION permission checks. Added location update and save logic.

This commit is contained in:
Arty Bishop committed 2019-10-20 22:20:43 +01:00
1 parent ad3900a17f
commit f2e3d99a85
6 files changed
+92 -17

No files matched your search

+4 -1
View File
@@ -54,11 +54,14 @@ dependencies {
// retrofit // retrofit
implementation "com.squareup.retrofit2:retrofit:$retrofit" implementation "com.squareup.retrofit2:retrofit:$retrofit"
implementation"com.squareup.retrofit2:converter-gson:$retrofit" implementation "com.squareup.retrofit2:converter-gson:$retrofit"
// predict4java // predict4java
implementation "com.github.davidmoten:predict4java:$predict4java" implementation "com.github.davidmoten:predict4java:$predict4java"
// location
implementation "com.google.android.gms:play-services-location:$google_play"
// testing // testing
testImplementation "junit:junit:$junit" testImplementation "junit:junit:$junit"
androidTestImplementation "androidx.test:runner:$runner" androidTestImplementation "androidx.test:runner:$runner"
+3
View File
@@ -3,6 +3,9 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
package="com.rtbishop.lookingsat"> package="com.rtbishop.lookingsat">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<application <application
android:allowBackup="false" android:allowBackup="false"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
@@ -1,6 +1,10 @@
package com.rtbishop.lookingsat package com.rtbishop.lookingsat
import android.Manifest
import android.content.SharedPreferences
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.content.pm.PackageManager
import android.location.Location
import android.os.Bundle import android.os.Bundle
import android.os.CountDownTimer import android.os.CountDownTimer
import android.view.Menu import android.view.Menu
@@ -11,6 +15,9 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.content.edit
import androidx.drawerlayout.widget.DrawerLayout import androidx.drawerlayout.widget.DrawerLayout
import androidx.lifecycle.ViewModelProviders import androidx.lifecycle.ViewModelProviders
import androidx.navigation.findNavController import androidx.navigation.findNavController
@@ -18,27 +25,38 @@ import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController import androidx.navigation.ui.setupWithNavController
import androidx.preference.PreferenceManager
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices
import com.google.android.material.navigation.NavigationView import com.google.android.material.navigation.NavigationView
import java.util.* import java.util.*
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
const val LOCATION_REQ = 101
const val LOCATION_PERM = Manifest.permission.ACCESS_FINE_LOCATION
const val GRANTED = PackageManager.PERMISSION_GRANTED
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
private lateinit var appBarConfig: AppBarConfiguration private lateinit var appBarConfig: AppBarConfiguration
private lateinit var mainViewModel: MainViewModel private lateinit var viewModel: MainViewModel
private lateinit var timerLayout: ConstraintLayout private lateinit var timerLayout: ConstraintLayout
private lateinit var timeToAos: TextView private lateinit var timeToAos: TextView
private lateinit var fusedLocationClient: FusedLocationProviderClient
private lateinit var preferences: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
setupViews() setupComponents()
setupNavigation() setupNavigation()
setupTimer() setupTimer()
} }
private fun setupViews() { private fun setupComponents() {
mainViewModel = ViewModelProviders.of(this).get(MainViewModel::class.java) viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
preferences = PreferenceManager.getDefaultSharedPreferences(this)
timerLayout = findViewById(R.id.timer_layout) timerLayout = findViewById(R.id.timer_layout)
timeToAos = findViewById(R.id.time_to_aos) timeToAos = findViewById(R.id.time_to_aos)
} }
@@ -99,6 +117,47 @@ class MainActivity : AppCompatActivity() {
timer.start() timer.start()
} }
private fun updateLocation() {
fusedLocationClient.lastLocation.addOnSuccessListener { location: Location? ->
val currentLat = location?.latitude
val currentLon = location?.longitude
val currentHeight = location?.altitude
preferences.edit {
putString("LATITUDE", currentLat.toString())
putString("LONGITUDE", currentLon.toString())
putString("HEIGHT", currentHeight.toString())
apply()
}
}
}
private fun checkPermissions() {
if (ContextCompat.checkSelfPermission(this, LOCATION_PERM) != GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, LOCATION_PERM)) {
Toast.makeText(this, "Missing permissions", Toast.LENGTH_LONG).show()
} else {
ActivityCompat.requestPermissions(this, arrayOf(LOCATION_PERM), LOCATION_REQ)
}
} else {
updateLocation()
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
when (requestCode) {
LOCATION_REQ -> {
if (grantResults.isNotEmpty() && grantResults[0] == GRANTED) {
updateLocation()
}
}
}
}
override fun onSupportNavigateUp(): Boolean { override fun onSupportNavigateUp(): Boolean {
val navController = findNavController(R.id.nav_host) val navController = findNavController(R.id.nav_host)
return navController.navigateUp(appBarConfig) || super.onSupportNavigateUp() return navController.navigateUp(appBarConfig) || super.onSupportNavigateUp()
@@ -111,11 +170,8 @@ class MainActivity : AppCompatActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.fetch_trans -> Toast.makeText( R.id.update_location -> checkPermissions()
this, R.id.fetch_trans -> Toast.makeText(this, "Fetch transmit", Toast.LENGTH_SHORT).show()
"Fetching transmitters",
Toast.LENGTH_SHORT
).show()
R.id.save_to_db -> Toast.makeText(this, "Saving to DB", Toast.LENGTH_SHORT).show() R.id.save_to_db -> Toast.makeText(this, "Saving to DB", Toast.LENGTH_SHORT).show()
R.id.load_from_db -> Toast.makeText(this, "Loading from DB", Toast.LENGTH_SHORT).show() R.id.load_from_db -> Toast.makeText(this, "Loading from DB", Toast.LENGTH_SHORT).show()
R.id.fetch_tle -> Toast.makeText(this, "Fetching TLE", Toast.LENGTH_SHORT).show() R.id.fetch_tle -> Toast.makeText(this, "Fetching TLE", Toast.LENGTH_SHORT).show()
+9 -6
View File
@@ -1,22 +1,25 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/update_location"
android:title="@string/menu_update_location" />
<item <item
android:id="@+id/fetch_trans" android:id="@+id/fetch_trans"
android:title="Fetch Transmitters" /> android:title="@string/menu_fetch_transmitters" />
<item <item
android:id="@+id/save_to_db" android:id="@+id/save_to_db"
android:title="Save to DB" /> android:title="@string/menu_save_to_db" />
<item <item
android:id="@+id/load_from_db" android:id="@+id/load_from_db"
android:title="Load from DB" /> android:title="@string/menu_load_from_db" />
<item <item
android:id="@+id/fetch_tle" android:id="@+id/fetch_tle"
android:title="Fetch TLE" /> android:title="@string/menu_fetch_tle" />
<item <item
android:id="@+id/load_tle" android:id="@+id/load_tle"
android:title="Load TLE" /> android:title="@string/menu_load_tle" />
<item <item
android:id="@+id/action_exit" android:id="@+id/action_exit"
android:title="Exit" /> android:title="@string/menu_exit" />
</menu> </menu>
+8
View File
@@ -22,6 +22,14 @@
<string name="height_def">64</string> <string name="height_def">64</string>
<string name="height_summary">Ground station height in meters AMSL</string> <string name="height_summary">Ground station height in meters AMSL</string>
<string name="menu_update_location">Update location</string>
<string name="menu_fetch_transmitters">Fetch Transmitters</string>
<string name="menu_save_to_db">Save to DB</string>
<string name="menu_load_from_db">Load from DB</string>
<string name="menu_fetch_tle">Fetch TLE</string>
<string name="menu_load_tle">Load TLE</string>
<string name="menu_exit">Exit</string>
<string name="next_aos_pattern">Next AOS in %02d:%02d:%02d</string> <string name="next_aos_pattern">Next AOS in %02d:%02d:%02d</string>
<string name="map_content">Nasa Map</string> <string name="map_content">Nasa Map</string>
<string name="placeholder">Placeholder</string> <string name="placeholder">Placeholder</string>
+3 -1
View File
@@ -5,7 +5,7 @@ buildscript {
repositories { repositories {
google() google()
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.5.1' classpath 'com.android.tools.build:gradle:3.5.1'
@@ -41,6 +41,8 @@ ext {
predict4java = '1.3.1' predict4java = '1.3.1'
google_play = '17.0.0'
junit = "4.12" junit = "4.12"
runner = '1.1.1' runner = '1.1.1'
espresso = '3.2.0' espresso = '3.2.0'