mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Swapped the splash dialog for immediate initial setup
This commit is contained in:
1 parent
e3e621e55f
commit
5de8787368
5 files changed
+42
-24
No files matched your search
@@ -40,7 +40,7 @@ class PreferencesProvider @Inject constructor(
|
|||||||
const val keyTimeUTC = "timeUTC"
|
const val keyTimeUTC = "timeUTC"
|
||||||
const val keyHoursAhead = "hoursAhead"
|
const val keyHoursAhead = "hoursAhead"
|
||||||
const val keyMinElevation = "minElevation"
|
const val keyMinElevation = "minElevation"
|
||||||
const val keyIsFirstLaunch = "shouldShowSplash"
|
const val keyInitialSetup = "initialSetupDone"
|
||||||
const val keyRotator = "isRotatorEnabled"
|
const val keyRotator = "isRotatorEnabled"
|
||||||
const val keyRotatorAddress = "rotatorAddress"
|
const val keyRotatorAddress = "rotatorAddress"
|
||||||
const val keyRotatorPort = "rotatorPort"
|
const val keyRotatorPort = "rotatorPort"
|
||||||
@@ -123,12 +123,12 @@ class PreferencesProvider @Inject constructor(
|
|||||||
return preferences.getBoolean(keyCompass, true)
|
return preferences.getBoolean(keyCompass, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isFirstLaunch(): Boolean {
|
override fun isSetupDone(): Boolean {
|
||||||
return preferences.getBoolean(keyIsFirstLaunch, true)
|
return preferences.getBoolean(keyInitialSetup, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setFirstLaunchDone() {
|
override fun setSetupDone() {
|
||||||
preferences.edit { putBoolean(keyIsFirstLaunch, false) }
|
preferences.edit { putBoolean(keyInitialSetup, true) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun saveModesSelection(modes: List<String>) {
|
override fun saveModesSelection(modes: List<String>) {
|
||||||
|
|||||||
@@ -24,18 +24,12 @@ import androidx.appcompat.app.AppCompatActivity
|
|||||||
import androidx.navigation.fragment.NavHostFragment
|
import androidx.navigation.fragment.NavHostFragment
|
||||||
import androidx.navigation.ui.setupWithNavController
|
import androidx.navigation.ui.setupWithNavController
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
import com.rtbishop.look4sat.data.PreferencesSource
|
|
||||||
import com.rtbishop.look4sat.databinding.ActivityMainBinding
|
import com.rtbishop.look4sat.databinding.ActivityMainBinding
|
||||||
import com.rtbishop.look4sat.utility.navigateSafe
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class Look4SatActivity : AppCompatActivity() {
|
class Look4SatActivity : AppCompatActivity() {
|
||||||
|
|
||||||
@Inject
|
|
||||||
lateinit var preferenceSource: PreferencesSource
|
|
||||||
|
|
||||||
@SuppressLint("SourceLockedOrientationActivity")
|
@SuppressLint("SourceLockedOrientationActivity")
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||||
@@ -45,9 +39,5 @@ class Look4SatActivity : AppCompatActivity() {
|
|||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
val navHost = supportFragmentManager.findFragmentById(R.id.nav_host) as NavHostFragment
|
val navHost = supportFragmentManager.findFragmentById(R.id.nav_host) as NavHostFragment
|
||||||
binding.navBottom.setupWithNavController(navHost.navController)
|
binding.navBottom.setupWithNavController(navHost.navController)
|
||||||
if (preferenceSource.isFirstLaunch()) {
|
|
||||||
preferenceSource.setFirstLaunchDone()
|
|
||||||
navHost.navController.navigateSafe(R.id.nav_dialog_splash)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+11
-2
@@ -17,8 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.rtbishop.look4sat.presentation.satPassScreen
|
package com.rtbishop.look4sat.presentation.satPassScreen
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.core.os.bundleOf
|
import androidx.core.os.bundleOf
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
@@ -26,12 +28,12 @@ import androidx.navigation.fragment.findNavController
|
|||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||||
import com.rtbishop.look4sat.R
|
import com.rtbishop.look4sat.R
|
||||||
import com.rtbishop.look4sat.framework.model.Result
|
|
||||||
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
|
||||||
import com.rtbishop.look4sat.domain.predict4kotlin.SatPass
|
import com.rtbishop.look4sat.domain.predict4kotlin.SatPass
|
||||||
|
import com.rtbishop.look4sat.framework.model.Result
|
||||||
import com.rtbishop.look4sat.utility.RecyclerDivider
|
import com.rtbishop.look4sat.utility.RecyclerDivider
|
||||||
import com.rtbishop.look4sat.utility.toTimerString
|
|
||||||
import com.rtbishop.look4sat.utility.navigateSafe
|
import com.rtbishop.look4sat.utility.navigateSafe
|
||||||
|
import com.rtbishop.look4sat.utility.toTimerString
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -39,6 +41,10 @@ import java.util.*
|
|||||||
class SatPassFragment : Fragment(R.layout.fragment_passes), SatPassAdapter.PassesClickListener {
|
class SatPassFragment : Fragment(R.layout.fragment_passes), SatPassAdapter.PassesClickListener {
|
||||||
|
|
||||||
private val viewModel: SatPassViewModel by viewModels()
|
private val viewModel: SatPassViewModel by viewModels()
|
||||||
|
private val permRequest = ActivityResultContracts.RequestPermission()
|
||||||
|
private val permRequestLauncher = registerForActivityResult(permRequest) {
|
||||||
|
viewModel.triggerInitialSetup()
|
||||||
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -61,6 +67,9 @@ class SatPassFragment : Fragment(R.layout.fragment_passes), SatPassAdapter.Passe
|
|||||||
viewModel.passes.observe(viewLifecycleOwner, { passesResult ->
|
viewModel.passes.observe(viewLifecycleOwner, { passesResult ->
|
||||||
handleNewPasses(passesResult, passesAdapter, binding)
|
handleNewPasses(passesResult, passesAdapter, binding)
|
||||||
})
|
})
|
||||||
|
viewModel.isFirstLaunchDone.observe(viewLifecycleOwner, { setupDone ->
|
||||||
|
if (!setupDone) permRequestLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleNewPasses(
|
private fun handleNewPasses(
|
||||||
|
|||||||
+24
-5
@@ -35,17 +35,23 @@ import javax.inject.Inject
|
|||||||
class SatPassViewModel @Inject constructor(
|
class SatPassViewModel @Inject constructor(
|
||||||
private val satDataRepository: SatDataRepository,
|
private val satDataRepository: SatDataRepository,
|
||||||
private val satPassRepository: SatPassRepository,
|
private val satPassRepository: SatPassRepository,
|
||||||
private val preferenceSource: PreferencesSource
|
private val preferencesSource: PreferencesSource
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
|
|
||||||
private val _passes = MutableLiveData<Result<List<SatPass>>>(Result.InProgress)
|
private val _passes = MutableLiveData<Result<List<SatPass>>>(Result.InProgress)
|
||||||
|
private val _isFirstLaunchDone = MutableLiveData<Boolean>()
|
||||||
private var passesProcessing: Job? = null
|
private var passesProcessing: Job? = null
|
||||||
val passes: LiveData<Result<List<SatPass>>> = _passes
|
val passes: LiveData<Result<List<SatPass>>> = _passes
|
||||||
|
val isFirstLaunchDone: LiveData<Boolean> = _isFirstLaunchDone
|
||||||
|
|
||||||
init {
|
init {
|
||||||
viewModelScope.launch {
|
if (preferencesSource.isSetupDone()) {
|
||||||
_passes.postValue(Result.InProgress)
|
viewModelScope.launch {
|
||||||
satPassRepository.triggerCalculation(satDataRepository.getSelectedSatellites())
|
_passes.postValue(Result.InProgress)
|
||||||
|
satPassRepository.triggerCalculation(satDataRepository.getSelectedSatellites())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_isFirstLaunchDone.value = false
|
||||||
}
|
}
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
satPassRepository.passes.collect { passes ->
|
satPassRepository.passes.collect { passes ->
|
||||||
@@ -55,6 +61,19 @@ class SatPassViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun triggerInitialSetup() {
|
||||||
|
preferencesSource.updatePositionFromGPS()
|
||||||
|
viewModelScope.launch {
|
||||||
|
_passes.postValue(Result.InProgress)
|
||||||
|
satDataRepository.updateEntriesFromWeb()
|
||||||
|
val defaultCatNums = listOf(43700, 25544, 25338, 28654, 33591, 40069, 27607, 24278)
|
||||||
|
satDataRepository.updateEntriesSelection(defaultCatNums, true)
|
||||||
|
satPassRepository.forceCalculation(satDataRepository.getSelectedSatellites())
|
||||||
|
preferencesSource.setSetupDone()
|
||||||
|
_isFirstLaunchDone.value = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun forceCalculation() {
|
fun forceCalculation() {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
_passes.postValue(Result.InProgress)
|
_passes.postValue(Result.InProgress)
|
||||||
@@ -64,7 +83,7 @@ class SatPassViewModel @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun shouldUseUTC(): Boolean {
|
fun shouldUseUTC(): Boolean {
|
||||||
return preferenceSource.shouldUseUTC()
|
return preferencesSource.shouldUseUTC()
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun tickPasses(passes: List<SatPass>) = withContext(Dispatchers.Default) {
|
private suspend fun tickPasses(passes: List<SatPass>) = withContext(Dispatchers.Default) {
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ interface PreferencesSource {
|
|||||||
|
|
||||||
fun shouldUseCompass(): Boolean
|
fun shouldUseCompass(): Boolean
|
||||||
|
|
||||||
fun isFirstLaunch(): Boolean
|
fun isSetupDone(): Boolean
|
||||||
|
|
||||||
fun setFirstLaunchDone()
|
fun setSetupDone()
|
||||||
|
|
||||||
fun saveModesSelection(modes: List<String>)
|
fun saveModesSelection(modes: List<String>)
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user