Added several utility extension functions, further code cleanup
This commit is contained in:
1 parent
f943268035
commit
a7bccd3b53
10 files changed
+92
-107
No files matched your search
@@ -22,6 +22,7 @@ package com.rtbishop.look4sat.dagger
|
||||
import android.content.Context
|
||||
import com.rtbishop.look4sat.dagger.modules.*
|
||||
import com.rtbishop.look4sat.ui.MainActivity
|
||||
import com.rtbishop.look4sat.ui.fragments.EntriesFragment
|
||||
import com.rtbishop.look4sat.ui.fragments.MapFragment
|
||||
import com.rtbishop.look4sat.ui.fragments.PassesFragment
|
||||
import com.rtbishop.look4sat.ui.fragments.PolarFragment
|
||||
@@ -42,6 +43,7 @@ interface AppComponent {
|
||||
}
|
||||
|
||||
fun inject(mainActivity: MainActivity)
|
||||
fun inject(entriesFragment: EntriesFragment)
|
||||
fun inject(passesFragment: PassesFragment)
|
||||
fun inject(polarFragment: PolarFragment)
|
||||
fun inject(mapFragment: MapFragment)
|
||||
|
||||
@@ -10,14 +10,6 @@ import com.rtbishop.look4sat.databinding.ActivityMainBinding
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
// private val pickFileReqCode = 1001
|
||||
// private val permissionsReqCode = 1000
|
||||
// private val permissions = arrayOf(
|
||||
// Manifest.permission.ACCESS_FINE_LOCATION,
|
||||
// Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
// Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||
// )
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
val binding = ActivityMainBinding.inflate(layoutInflater)
|
||||
@@ -25,59 +17,5 @@ class MainActivity : AppCompatActivity() {
|
||||
val navHost = supportFragmentManager.findFragmentById(R.id.nav_frag) as NavHostFragment
|
||||
binding.navBottom.setupWithNavController(navHost.navController)
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
|
||||
// viewModel.setDefaultTleSources()
|
||||
|
||||
// if (!hasPermissions(this, permissions)) {
|
||||
// ActivityCompat.requestPermissions(this, permissions, permissionsReqCode)
|
||||
// }
|
||||
}
|
||||
|
||||
// private fun hasPermissions(context: Context, permissions: Array<String>): Boolean =
|
||||
// permissions.all {
|
||||
// ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED
|
||||
// }
|
||||
//
|
||||
// private fun openFile() {
|
||||
// val openFileIntent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
|
||||
// addCategory(Intent.CATEGORY_OPENABLE)
|
||||
// type = "*/*"
|
||||
// }
|
||||
// startActivityForResult(openFileIntent, pickFileReqCode)
|
||||
// }
|
||||
|
||||
// private fun openSourcesDialog() {
|
||||
// SourcesDialog(viewModel.getTleSources()).apply {
|
||||
// setSourcesListener(this@MainActivity)
|
||||
// show(supportFragmentManager, "TleSourcesDialog")
|
||||
// }
|
||||
// }
|
||||
|
||||
// override fun onSourcesSubmit(list: List<TleSource>) {
|
||||
// viewModel.updateSatData(list)
|
||||
// }
|
||||
|
||||
// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
// if (requestCode == pickFileReqCode && resultCode == RESULT_OK) {
|
||||
// data?.data?.also { uri ->
|
||||
// viewModel.updateEntriesFromFile(uri)
|
||||
// }
|
||||
// } else {
|
||||
// super.onActivityResult(requestCode, resultCode, data)
|
||||
// }
|
||||
// }
|
||||
|
||||
// private fun gotoGitHub() {
|
||||
// val gitHubUrl = "https://github.com/rt-bishop/LookingSat"
|
||||
// val githubIntent = Intent(Intent.ACTION_VIEW, Uri.parse(gitHubUrl))
|
||||
// startActivity(githubIntent)
|
||||
// }
|
||||
//
|
||||
// private fun View.lockButton() {
|
||||
// lifecycleScope.launch {
|
||||
// this@lockButton.isEnabled = false
|
||||
// delay(3000)
|
||||
// this@lockButton.isEnabled = true
|
||||
// }
|
||||
// }
|
||||
}
|
||||
@@ -19,6 +19,8 @@
|
||||
|
||||
package com.rtbishop.look4sat.ui.fragments
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.text.method.LinkMovementMethod
|
||||
import android.view.View
|
||||
@@ -36,4 +38,10 @@ class AboutFragment : Fragment(R.layout.fragment_about) {
|
||||
message.movementMethod = LinkMovementMethod.getInstance()
|
||||
}
|
||||
}
|
||||
|
||||
private fun gotoGitHub() {
|
||||
val gitHubUrl = "https://github.com/rt-bishop/LookingSat"
|
||||
val githubIntent = Intent(Intent.ACTION_VIEW, Uri.parse(gitHubUrl))
|
||||
startActivity(githubIntent)
|
||||
}
|
||||
}
|
||||
@@ -4,14 +4,48 @@ import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.dagger.ViewModelFactory
|
||||
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
|
||||
import javax.inject.Inject
|
||||
|
||||
class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
||||
|
||||
@Inject
|
||||
lateinit var modelFactory: ViewModelFactory
|
||||
|
||||
private lateinit var binding: FragmentEntriesBinding
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
binding = FragmentEntriesBinding.bind(view)
|
||||
}
|
||||
|
||||
// private fun openSourcesDialog() {
|
||||
// SourcesDialog(viewModel.getTleSources()).apply {
|
||||
// setSourcesListener(this@MainActivity)
|
||||
// show(supportFragmentManager, "TleSourcesDialog")
|
||||
// }
|
||||
// }
|
||||
|
||||
// override fun onSourcesSubmit(list: List<TleSource>) {
|
||||
// viewModel.updateSatData(list)
|
||||
// }
|
||||
|
||||
// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
// if (requestCode == pickFileReqCode && resultCode == AppCompatActivity.RESULT_OK) {
|
||||
// data?.data?.also { uri ->
|
||||
// viewModel.updateEntriesFromFile(uri)
|
||||
// }
|
||||
// } else {
|
||||
// super.onActivityResult(requestCode, resultCode, data)
|
||||
// }
|
||||
// }
|
||||
|
||||
// private fun openFile() {
|
||||
// val openFileIntent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
|
||||
// addCategory(Intent.CATEGORY_OPENABLE)
|
||||
// type = "*/*"
|
||||
// }
|
||||
// startActivityForResult(openFileIntent, pickFileReqCode)
|
||||
// }
|
||||
}
|
||||
@@ -25,7 +25,6 @@ import android.view.View
|
||||
import android.widget.EditText
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
@@ -39,17 +38,17 @@ import com.rtbishop.look4sat.data.SatPass
|
||||
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
||||
import com.rtbishop.look4sat.ui.SharedViewModel
|
||||
import com.rtbishop.look4sat.ui.adapters.PassesAdapter
|
||||
import com.rtbishop.look4sat.utility.Extensions.snack
|
||||
import com.rtbishop.look4sat.utility.PrefsManager
|
||||
import com.rtbishop.look4sat.utility.Utilities
|
||||
import com.rtbishop.look4sat.utility.Utilities.snack
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.*
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
|
||||
class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
|
||||
@Inject
|
||||
lateinit var modelFactory: ViewModelFactory
|
||||
lateinit var factory: ViewModelFactory
|
||||
|
||||
@Inject
|
||||
lateinit var prefsManager: PrefsManager
|
||||
@@ -57,20 +56,16 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
private lateinit var viewModel: SharedViewModel
|
||||
private lateinit var passesAdapter: PassesAdapter
|
||||
private lateinit var aosTimer: CountDownTimer
|
||||
private lateinit var mainActivity: FragmentActivity
|
||||
private lateinit var binding: FragmentPassesBinding
|
||||
private var isTimerSet: Boolean = false
|
||||
private var satPassList: MutableList<SatPass> = mutableListOf()
|
||||
|
||||
private var satPassList = mutableListOf<SatPass>()
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
mainActivity = requireActivity()
|
||||
binding = FragmentPassesBinding.bind(view)
|
||||
(mainActivity.application as Look4SatApp).appComponent.inject(this)
|
||||
viewModel = ViewModelProvider(mainActivity, modelFactory).get(SharedViewModel::class.java)
|
||||
(requireActivity().application as Look4SatApp).appComponent.inject(this)
|
||||
viewModel = ViewModelProvider(requireActivity(), factory).get(SharedViewModel::class.java)
|
||||
passesAdapter = PassesAdapter(satPassList, prefsManager)
|
||||
|
||||
setupObservers()
|
||||
setupComponents()
|
||||
}
|
||||
@@ -98,7 +93,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
|
||||
private fun setupComponents() {
|
||||
binding.passesRecycler.apply {
|
||||
layoutManager = LinearLayoutManager(mainActivity)
|
||||
layoutManager = LinearLayoutManager(requireContext())
|
||||
adapter = passesAdapter
|
||||
isVerticalScrollBarEnabled = false
|
||||
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
|
||||
@@ -122,13 +117,13 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
}
|
||||
|
||||
private fun showSatPassPrefsDialog(hoursAhead: Int, minEl: Double) {
|
||||
val satPassPrefView = View.inflate(mainActivity, R.layout.dialog_passes, null)
|
||||
val satPassPrefView = View.inflate(requireContext(), R.layout.dialog_passes, null)
|
||||
val etHoursAhead = satPassPrefView.findViewById<EditText>(R.id.pref_et_hoursAhead)
|
||||
val etMinEl = satPassPrefView.findViewById<EditText>(R.id.pref_et_minEl)
|
||||
etHoursAhead.setText(hoursAhead.toString())
|
||||
etMinEl.setText(minEl.toString())
|
||||
|
||||
AlertDialog.Builder(mainActivity).apply {
|
||||
AlertDialog.Builder(requireContext()).apply {
|
||||
setPositiveButton(getString(android.R.string.ok)) { _, _ ->
|
||||
val hoursStr = etHoursAhead.text.toString()
|
||||
val elevationStr = etMinEl.text.toString()
|
||||
@@ -168,7 +163,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
|
||||
EntriesDialog(tleMainList).apply {
|
||||
setEntriesListener(listener)
|
||||
show(mainActivity.supportFragmentManager, "EntriesDialog")
|
||||
show(requireActivity().supportFragmentManager, "EntriesDialog")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,12 +193,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
}
|
||||
|
||||
override fun onTick(millisUntilFinished: Long) {
|
||||
binding.passesTimer.text = String.format(
|
||||
mainActivity.getString(R.string.pat_timer),
|
||||
TimeUnit.MILLISECONDS.toHours(millisUntilFinished) % 60,
|
||||
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) % 60,
|
||||
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60
|
||||
)
|
||||
binding.passesTimer.text = Utilities.formatForTimer(millisUntilFinished)
|
||||
passesAdapter.updateRecycler()
|
||||
}
|
||||
}
|
||||
@@ -218,12 +208,7 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
}
|
||||
|
||||
override fun onTick(millisUntilFinished: Long) {
|
||||
binding.passesTimer.text = String.format(
|
||||
mainActivity.getString(R.string.pat_timer),
|
||||
TimeUnit.MILLISECONDS.toHours(millisUntilFinished) % 60,
|
||||
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) % 60,
|
||||
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60
|
||||
)
|
||||
binding.passesTimer.text = Utilities.formatForTimer(millisUntilFinished)
|
||||
passesAdapter.updateRecycler()
|
||||
}
|
||||
}
|
||||
@@ -234,7 +219,6 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
|
||||
aosTimer.cancel()
|
||||
isTimerSet = false
|
||||
}
|
||||
if (resetToNull) binding.passesTimer.text =
|
||||
String.format(getString(R.string.pat_timer), 0, 0, 0)
|
||||
if (resetToNull) binding.passesTimer.text = String.format("%02d:%02d:%02d", 0, 0, 0)
|
||||
}
|
||||
}
|
||||
@@ -25,8 +25,8 @@ import android.text.InputType
|
||||
import androidx.preference.EditTextPreference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.utility.Extensions.snack
|
||||
import com.rtbishop.look4sat.utility.PrefsManager
|
||||
import com.rtbishop.look4sat.utility.Utilities.snack
|
||||
|
||||
class PrefsFragment : PreferenceFragmentCompat(),
|
||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
package com.rtbishop.look4sat.utility
|
||||
|
||||
import android.view.View
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
|
||||
object Extensions {
|
||||
|
||||
fun String.snack(view: View) {
|
||||
Snackbar.make(view, this, Snackbar.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,7 @@ import android.location.Location
|
||||
import android.location.LocationManager
|
||||
import androidx.core.content.edit
|
||||
import com.github.amsacode.predict4java.GroundStationPosition
|
||||
import com.rtbishop.look4sat.utility.Utilities.round
|
||||
import javax.inject.Inject
|
||||
|
||||
class PrefsManager @Inject constructor(
|
||||
@@ -83,10 +84,13 @@ class PrefsManager @Inject constructor(
|
||||
return try {
|
||||
val location = locationManager.getLastKnownLocation(provPassive)
|
||||
location?.let {
|
||||
val lat = location.latitude.round(4)
|
||||
val lon = location.longitude.round(4)
|
||||
val alt = location.altitude.round(1)
|
||||
preferences.edit {
|
||||
putString(keyLatitude, location.latitude.toString())
|
||||
putString(keyLongitude, location.longitude.toString())
|
||||
putString(keyAltitude, location.altitude.toString())
|
||||
putString(keyLatitude, lat.toString())
|
||||
putString(keyLongitude, lon.toString())
|
||||
putString(keyAltitude, alt.toString())
|
||||
apply()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.rtbishop.look4sat.utility
|
||||
|
||||
import android.view.View
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.math.round
|
||||
|
||||
object Utilities {
|
||||
|
||||
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 }
|
||||
return round(this * multiplier) / multiplier
|
||||
}
|
||||
|
||||
fun formatForTimer(millis: Long): String {
|
||||
val format = "%02d:%02d:%02d"
|
||||
val hours = TimeUnit.MILLISECONDS.toHours(millis) % 60
|
||||
val minutes = TimeUnit.MILLISECONDS.toMinutes(millis) % 60
|
||||
val seconds = TimeUnit.MILLISECONDS.toSeconds(millis) % 60
|
||||
return String.format(format, hours, minutes, seconds)
|
||||
}
|
||||
}
|
||||
@@ -74,7 +74,6 @@
|
||||
<string name="pat_longitude">Lon: %.1f°</string>
|
||||
<string name="pat_distance">Dst: %.0f km</string>
|
||||
<string name="pat_altitude">Alt: %.0f km</string>
|
||||
<string name="pat_timer" translatable="false">%02d:%02d:%02d</string>
|
||||
|
||||
<string name="pat_osm_idName" translatable="false">%s / %s</string>
|
||||
<string name="pat_osm_latLon">Lat: %.1f°, Lon: %.1f°</string>
|
||||
|
||||
Reference in new issue
Block a user