diff --git a/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt b/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt index 9681d4d1..d043f941 100644 --- a/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt +++ b/app/src/main/java/com/rtbishop/look4sat/dagger/AppComponent.kt @@ -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) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt b/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt index a81a6c5a..e0f9db75 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/MainActivity.kt @@ -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): 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) { -// 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 -// } -// } } \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/AboutFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/AboutFragment.kt index f837efbd..838e126b 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/AboutFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/AboutFragment.kt @@ -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) + } } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt index 82b1f4da..05add19e 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt @@ -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) { +// 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) +// } } \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt index 2887ec9d..40c69279 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PassesFragment.kt @@ -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 = mutableListOf() - + private var satPassList = mutableListOf() 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(R.id.pref_et_hoursAhead) val etMinEl = satPassPrefView.findViewById(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) } } diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt index 9f0233c2..3271377c 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/PrefsFragment.kt @@ -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 { diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt b/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt deleted file mode 100644 index 8e129401..00000000 --- a/app/src/main/java/com/rtbishop/look4sat/utility/Extensions.kt +++ /dev/null @@ -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() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt b/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt index 9b6f233e..a4cd2db7 100644 --- a/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt +++ b/app/src/main/java/com/rtbishop/look4sat/utility/PrefsManager.kt @@ -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() } } diff --git a/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt b/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt new file mode 100644 index 00000000..837157ae --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/utility/Utilities.kt @@ -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) + } +} \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cfefdb76..594e20d3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -74,7 +74,6 @@ Lon: %.1f° Dst: %.0f km Alt: %.0f km - %02d:%02d:%02d %s / %s Lat: %.1f°, Lon: %.1f°