Added several utility extension functions, further code cleanup

This commit is contained in:
Arty Bishop committed 2020-10-06 23:24:16 +01:00
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)
}
}
-1
View File
@@ -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>