MainActivity.kt 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package com.flacksta.chef.journeygpstracker
  2. import android.Manifest
  3. import android.app.ActivityManager
  4. import android.content.Context
  5. import android.content.Intent
  6. import android.content.pm.PackageManager
  7. import android.os.Bundle
  8. import android.util.Log
  9. import androidx.activity.result.contract.ActivityResultContracts
  10. import androidx.appcompat.app.AppCompatActivity
  11. import androidx.core.content.ContextCompat
  12. import androidx.fragment.app.Fragment
  13. import com.flacksta.chef.journeygpstracker.databinding.ActivityMainScreenBinding
  14. class MainActivity : AppCompatActivity() {
  15. private lateinit var binding: ActivityMainScreenBinding
  16. private var mPermApproved: Boolean = false
  17. private val mTag: String = "MainActivity"
  18. override fun onCreate(savedInstanceState: Bundle?) {
  19. super.onCreate(savedInstanceState)
  20. binding = ActivityMainScreenBinding.inflate(layoutInflater)
  21. setContentView(binding.root)
  22. /*binding.bottomNavigationView.setOnItemSelectedListener {
  23. val fragment = when (it.itemId) {
  24. R.id.map -> {
  25. MapFragment()
  26. }
  27. R.id.settings -> {
  28. SettingsFragment()
  29. }
  30. else -> {
  31. null//HomeFragment()
  32. }
  33. }
  34. if( fragment == null ) closeFragment() else loadFragment(fragment)
  35. true
  36. }*/
  37. //loadFragment(HomeFragment())
  38. val locationPermissionRequest = registerForActivityResult(
  39. ActivityResultContracts.RequestMultiplePermissions()
  40. ) { permissions ->
  41. when {
  42. permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
  43. Log.i(mTag,"Fine permission granted")
  44. mPermApproved = true
  45. }
  46. permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
  47. Log.i(mTag,"Only Coarse permission granted")
  48. } else -> {
  49. Log.i(mTag,"No Permission granted")
  50. }
  51. }
  52. }
  53. if( ContextCompat.checkSelfPermission(
  54. this,
  55. Manifest.permission.ACCESS_FINE_LOCATION
  56. ) != PackageManager.PERMISSION_GRANTED ) {
  57. locationPermissionRequest.launch(arrayOf(
  58. Manifest.permission.ACCESS_FINE_LOCATION,
  59. Manifest.permission.ACCESS_COARSE_LOCATION))
  60. }
  61. else {
  62. mPermApproved = true
  63. }
  64. val serviceRunning : Boolean = isServiceActuallyRunning<TrackingService>()
  65. Log.i(mTag,"Service is actually running: $serviceRunning")
  66. val state : Boolean = isServiceStateRunning(this)
  67. if( state != serviceRunning ) {
  68. Log.e(mTag,"Missmatch state=$state vs actual=$serviceRunning. Correcting...")
  69. setServiceState(this, if( serviceRunning) ServiceState.STARTED else ServiceState.STOPPED)
  70. }
  71. binding.buttonStart.isEnabled = !serviceRunning
  72. binding.buttonStop.isEnabled = serviceRunning
  73. binding.buttonStart.setOnClickListener {
  74. actionOnService(Actions.START)
  75. binding.buttonStart.isEnabled = false
  76. binding.buttonStop.isEnabled = true
  77. }
  78. binding.buttonStop.setOnClickListener{
  79. actionOnService(Actions.STOP)
  80. binding.buttonStart.isEnabled = true
  81. binding.buttonStop.isEnabled = false
  82. }
  83. }
  84. private fun actionOnService(action: Actions) {
  85. Log.i(mTag, "actionOnService() ${action.toString()}")
  86. val state : ServiceState = getServiceState(this)
  87. if( state == ServiceState.STOPPED && action == Actions.STOP) return
  88. if( state == ServiceState.STARTED && action == Actions.START) return
  89. Intent(this, TrackingService::class.java).also {
  90. it.action = action.name
  91. startForegroundService(it)
  92. }
  93. }
  94. private fun loadFragment(fragment: Fragment) {
  95. supportFragmentManager
  96. .beginTransaction()
  97. .replace(R.id.main_frame_layout, fragment)
  98. .commit()
  99. }
  100. private fun closeFragment() {
  101. val fragment = supportFragmentManager.findFragmentById(R.id.main_frame_layout)
  102. if( fragment != null ) {
  103. supportFragmentManager
  104. .beginTransaction()
  105. .remove(fragment)
  106. .commit()
  107. }
  108. }
  109. override fun onDestroy() {
  110. /* if (::mTrackingServiceIntent.isInitialized) {
  111. stopService(mTrackingServiceIntent)
  112. Log.i(mTag,"Stopping service")
  113. }*/
  114. Log.i(mTag,"onDestroy()")
  115. super.onDestroy()
  116. }
  117. }