@@ -136,8 +136,6 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
136136
137137 private var currentResult: ResultEvent ? = null
138138
139- private var justReturnedFromSettings = false
140-
141139 private val keepZoomOnGotoOwnLocation: Boolean
142140 inline get() = preferences.get(PreferenceKey .KEEP_ZOOM_GOTO_OWN_LOCATION , false )
143141
@@ -152,51 +150,51 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
152150
153151 statusComponent.indicateError(event.failed)
154152 if (! event.failed && sequenceValidator.isUpdate(event.sequenceNumber)) {
155- currentResult = event
153+ currentResult = event
156154
157- Log .d(LOG_TAG , " Main.onDataUpdate() $event " )
155+ Log .d(LOG_TAG , " Main.onDataUpdate() $event " )
158156
159- val resultParameters = event.parameters
157+ val resultParameters = event.parameters
160158
161- clearDataIfRequested()
159+ clearDataIfRequested()
162160
163- val initializeOverlay = strikeListOverlay.parameters != resultParameters
164- with (strikeListOverlay) {
165- parameters = resultParameters
166- gridParameters = event.gridParameters
167- referenceTime = event.referenceTime
168- }
161+ val initializeOverlay = strikeListOverlay.parameters != resultParameters
162+ with (strikeListOverlay) {
163+ parameters = resultParameters
164+ gridParameters = event.gridParameters
165+ referenceTime = event.referenceTime
166+ }
169167
170- if (event.updated >= 0 && ! initializeOverlay) {
171- strikeListOverlay.expireStrikes()
172- } else {
173- strikeListOverlay.clear()
174- }
168+ if (event.updated >= 0 && ! initializeOverlay) {
169+ strikeListOverlay.expireStrikes()
170+ } else {
171+ strikeListOverlay.clear()
172+ }
175173
176- if (event.strikes != null ) {
177- val strikes = if (event.updated > 0 && ! initializeOverlay) {
178- val size = event.strikes.size
179- event.strikes.subList(size - event.updated, size)
180- } else {
181- event.strikes
182- }
183- strikeListOverlay.addStrikes(strikes)
174+ if (event.strikes != null ) {
175+ val strikes = if (event.updated > 0 && ! initializeOverlay) {
176+ val size = event.strikes.size
177+ event.strikes.subList(size - event.updated, size)
178+ } else {
179+ event.strikes
184180 }
181+ strikeListOverlay.addStrikes(strikes)
182+ }
185183
186- binding.alertView.setColorHandler(
187- strikeColorHandler,
188- strikeListOverlay.parameters.intervalDuration
189- )
184+ binding.alertView.setColorHandler(
185+ strikeColorHandler,
186+ strikeListOverlay.parameters.intervalDuration
187+ )
190188
191- strikeListOverlay.refresh()
192- mapFragment.mapView.invalidate()
189+ strikeListOverlay.refresh()
190+ mapFragment.mapView.invalidate()
193191
194- binding.legendView.requestLayout()
195- binding.timeSlider.update(event.parameters, event.history!! )
192+ binding.legendView.requestLayout()
193+ binding.timeSlider.update(event.parameters, event.history!! )
196194
197- if (event.flags.mode == Mode .ANIMATION || ! event.containsRealtimeData()) {
198- setHistoricStatusString()
199- }
195+ if (event.flags.mode == Mode .ANIMATION || ! event.containsRealtimeData()) {
196+ setHistoricStatusString()
197+ }
200198 }
201199
202200 statusComponent.stopProgress()
@@ -456,18 +454,20 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
456454
457455 stopService()
458456
459- Log .v(LOG_TAG , " Main.onResume() justReturnedFromSettings: $justReturnedFromSettings " )
460-
461- val cameFromSettings = justReturnedFromSettings
462- if (justReturnedFromSettings) {
463- justReturnedFromSettings = false
464- }
457+ Log .v(LOG_TAG , " Main.onResume()" )
465458
466459 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) {
467- if (! cameFromSettings) {
468- requestLocationPermissions(preferences)
469- requestWakeupPermissions(baseContext)
470- requestNotificationPermissions()
460+ val calls: List <Pair <String , () - > Boolean >> = listOf (
461+ Pair (" location" , { requestLocationPermissions(preferences) }),
462+ Pair (" wakeup" , { requestWakeupPermissions(baseContext) }),
463+ Pair (" notification" , { requestNotificationPermissions() })
464+ )
465+ for (pair in calls) {
466+ val result = pair.second()
467+ Log .v(LOG_TAG , " Main.onResume() permission ${pair.first} : result: $result " )
468+ if (result) {
469+ break
470+ }
471471 }
472472 }
473473
@@ -603,28 +603,37 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
603603 if (providerRelation != null ) {
604604 val providerName = providerRelation.providerName
605605 if (grantResults.size == 1 && grantResults[0 ] == PackageManager .PERMISSION_GRANTED ) {
606- Log .i(LOG_TAG , " $providerName permission has now been granted." )
606+ Log .i(
607+ LOG_TAG ,
608+ " Main..onRequestPermissionResult() $providerName permission has now been granted. (code $requestCode )"
609+ )
607610 preferences.edit {
608611 put(PreferenceKey .LOCATION_MODE , providerName)
609612 }
610613 locationHandler.update(preferences)
611614 } else {
612- Log .i(LOG_TAG , " $providerName permission was NOT granted." )
615+ Log .i(
616+ LOG_TAG ,
617+ " Main..onRequestPermissionResult() $providerName permission was NOT granted. (code $requestCode )"
618+ )
613619 locationHandler.shutdown()
614620 }
615621 } else {
616622 super .onRequestPermissionsResult(requestCode, permissions, grantResults)
617623 }
618624 }
619625
620- private fun requestNotificationPermissions () {
621- if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
626+ private fun requestNotificationPermissions (): Boolean {
627+ return if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
622628 requestPermission(POST_NOTIFICATIONS , REQUEST_CODE_POST_NOTIFICATIONS , R .string.post_notifications_request)
629+ true
630+ } else {
631+ false
623632 }
624633 }
625634
626635 @RequiresApi(Build .VERSION_CODES .M )
627- private fun requestLocationPermissions (sharedPreferences : SharedPreferences ) {
636+ private fun requestLocationPermissions (sharedPreferences : SharedPreferences ): Boolean {
628637 val locationProviderName = sharedPreferences.get(PreferenceKey .LOCATION_MODE , PASSIVE_PROVIDER )
629638 val permission = when (locationProviderName) {
630639 PASSIVE_PROVIDER , GPS_PROVIDER -> ACCESS_FINE_LOCATION
@@ -650,7 +659,6 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
650659 )
651660
652661 val requestCode = (LocationProviderRelation .byProviderName[locationProviderName]?.ordinal ? : Int .MAX_VALUE )
653-
654662 if (requiresBackgroundPermission && isAtLeast(Build .VERSION_CODES .Q )) {
655663 Log .v(
656664 LOG_TAG ,
@@ -668,14 +676,17 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
668676 }.setNegativeButton(android.R .string.cancel) { _, _ ->
669677 preferences.edit { put(PreferenceKey .BACKGROUND_QUERY_PERIOD , " 0" ) }
670678 }.show()
671- }
672- if (requiresPermission) {
679+ } else if (requiresPermission) {
673680 requestPermission(
674681 permission, requestCode,
675682 R .string.location_permission_required
676683 )
684+ } else {
685+ return false
677686 }
687+ return true
678688 }
689+ return false
679690 }
680691
681692
@@ -685,7 +696,7 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
685696 val permissionIsGranted = checkSelfPermission(permission) == PackageManager .PERMISSION_GRANTED
686697 Log .v(
687698 LOG_TAG ,
688- " Main.requestPermission() permission: $permission , isGranted: $permissionIsGranted , shouldShowRationale: ${! shouldShowPermissionRationale} "
699+ " Main.requestPermission() permission: $permission , requestCode: $requestCode , isGranted: $permissionIsGranted , shouldShowRationale: ${! shouldShowPermissionRationale} "
689700 )
690701
691702 if (! permissionIsGranted) {
@@ -712,13 +723,12 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
712723 AlertDialog .Builder (this ).setMessage(locationText).setCancelable(false )
713724 .setPositiveButton(android.R .string.ok) { dialog, count ->
714725 dialog.dismiss()
715- justReturnedFromSettings = true
716726 requestPermissions(arrayOf(permission), requestCode)
717727 }.show()
718728 }
719729
720730 @RequiresApi(Build .VERSION_CODES .M )
721- private fun requestWakeupPermissions (context : Context ) {
731+ private fun requestWakeupPermissions (context : Context ): Boolean {
722732 Log .v(LOG_TAG , " requestWakeupPermissions() background alerts: $backgroundAlertEnabled " )
723733
724734 if (backgroundAlertEnabled) {
@@ -737,7 +747,6 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
737747 val allowIgnoreBatteryOptimization =
738748 context.checkSelfPermission(REQUEST_IGNORE_BATTERY_OPTIMIZATIONS ) == PackageManager .PERMISSION_GRANTED
739749 val intent = if (allowIgnoreBatteryOptimization) {
740- justReturnedFromSettings = true
741750 Intent (
742751 Settings .ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS ,
743752 " package:$packageName " .toUri()
@@ -771,11 +780,13 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
771780 AlertDialog .Builder (this ).setMessage(locationText)
772781 .setPositiveButton(android.R .string.ok, dialogClickListener)
773782 .setNegativeButton(android.R .string.cancel, dialogClickListener).show()
783+ return true
774784 }
775785 } else {
776786 Log .w(LOG_TAG , " requestWakeupPermissions() could not get PowerManager" )
777787 }
778788 }
789+ return false
779790 }
780791
781792 private enum class LocationProviderRelation (val providerName : String ) {
0 commit comments