Skip to content

Commit

Permalink
fix double tap crash and show when out of data range for alert
Browse files Browse the repository at this point in the history
  • Loading branch information
wuan committed Jan 17, 2025
1 parent 9de09b2 commit a90babf
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 17 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ android {
applicationId "org.blitzortung.android.app"
minSdkVersion 21
targetSdkVersion 34
versionCode 327
versionName '2.3-beta1'
versionCode 328
versionName '2.3-beta2'
multiDexEnabled false
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@ package org.blitzortung.android.alert.handler

import android.content.res.Resources
import android.location.Location
import android.util.Log
import org.blitzortung.android.alert.AlertParameters
import org.blitzortung.android.alert.AlertResult
import org.blitzortung.android.alert.data.AlertSector
import org.blitzortung.android.app.Main.Companion.LOG_TAG
import org.blitzortung.android.data.beans.GridElement
import org.blitzortung.android.data.beans.GridParameters
import org.blitzortung.android.data.beans.Strike
Expand All @@ -39,7 +41,13 @@ open class AlertDataHandler @Inject internal constructor(
fun checkStrikes(
strikes: Strikes, location: Location, parameters: AlertParameters,
referenceTime: Long = System.currentTimeMillis()
): AlertResult {
): AlertResult? {
val gridParameters: GridParameters? = strikes.gridParameters
if (gridParameters != null && !gridParameters.isGlobal && !gridParameters.contains(location.longitude, location.latitude, 0.2)) {
Log.v(LOG_TAG, "Location $location is not in grid ${gridParameters.longitudeInterval} + ${gridParameters.latitudeInterval}")
return null
}

val sectors = createSectors(parameters)

val thresholdTime = referenceTime - parameters.alarmInterval
Expand All @@ -54,7 +62,7 @@ open class AlertDataHandler @Inject internal constructor(
checkStrike(
alertSector,
strike,
strikes.gridParameters,
gridParameters,
parameters.measurementSystem,
location,
thresholdTime
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -473,9 +473,9 @@ class MainDataHandler @Inject constructor(
}

private fun addUpdateAfterAnimationListener(mapView: OwnMapView) {
val animator = mapView.animator()!!
val animator = mapView.animator()

if (!animator.listeners.contains(animatorListener)) {
if (animator != null && !animator.listeners.contains(animatorListener)) {
animator.addListener(animatorListener)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,18 +50,20 @@ data class GridParameters(
return latitudeStart - latitudeDelta * (offset + 0.5)
}

private val rectLongitudeDelta: Double = longitudeDelta * longitudeBins
val longitudeInterval: Double = longitudeDelta * longitudeBins

private val rectLatitudeDelta: Double = latitudeDelta * latitudeBins
val latitudeInterval: Double = latitudeDelta * latitudeBins

val isGlobal = longitudeInterval > 350 && latitudeInterval > 170

fun getRect(projection: Projection): RectF {
var leftTop = Point()
leftTop = projection.toPixels(
Coordsys.toMapCoords(longitudeStart, latitudeStart), leftTop
)
var bottomRight = Point()
val longitudeEnd = longitudeStart + rectLongitudeDelta
val latitudeEnd = latitudeStart - rectLatitudeDelta
val longitudeEnd = longitudeStart + longitudeInterval
val latitudeEnd = latitudeStart - latitudeInterval
bottomRight = projection.toPixels(
Coordsys.toMapCoords(
longitudeEnd,
Expand All @@ -72,4 +74,10 @@ data class GridParameters(
// Log.d(Main.LOG_TAG, "GridParameters.getRect() $longitudeStart - $longitudeEnd ($longitudeDelta, #$longitudeBins) $latitudeEnd - $latitudeStart ($latitudeDelta, #$latitudeBins)")
return RectF(leftTop.x.toFloat(), leftTop.y.toFloat(), bottomRight.x.toFloat(), bottomRight.y.toFloat())
}

fun contains(longitude: Double, latitude: Double, inset: Double = 0.0): Boolean {
val inLongitude = longitude in longitudeStart + inset..longitudeEnd - inset
val inLatitude = latitude in latitudeStart - latitudeDelta * latitudeBins + inset .. latitudeStart - inset
return inLongitude && inLatitude
}
}
6 changes: 2 additions & 4 deletions app/src/main/java/org/blitzortung/android/map/OwnMapView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,8 @@ import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import androidx.appcompat.app.AlertDialog
import androidx.core.animation.doOnCancel
import androidx.core.animation.doOnEnd
import androidx.core.view.GestureDetectorCompat
import org.blitzortung.android.app.Main
import org.blitzortung.android.app.Main.Companion.LOG_TAG
import org.blitzortung.android.app.R
import org.blitzortung.android.app.view.PreferenceKey
import org.blitzortung.android.location.LocationHandler
Expand Down Expand Up @@ -113,7 +110,8 @@ class OwnMapView(context: Context) : MapView(context) {
if (!isAnimating) return null

animatorField.isAccessible = true
return animatorField.get(controller) as ValueAnimator
val value = animatorField.get(controller)
return value?.let { value as ValueAnimator }
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package org.blitzortung.android.data

import org.assertj.core.api.Assertions.assertThat
import org.blitzortung.android.data.beans.GridParameters
import org.junit.Test


class GridParametersTest {

private val parameters = GridParameters(10.0, 45.0, 0.2, 0.2, 20, 15)

@Test
fun testRectCenter() {
assertThat(parameters.rectCenterLongitude).isEqualTo(12.0)
assertThat(parameters.rectCenterLatitude).isEqualTo(43.5)
}

@Test
fun testElementCenter() {
assertThat(parameters.getCenterLongitude(0)).isEqualTo(10.1)
assertThat(parameters.getCenterLatitude(0)).isEqualTo(44.9)

assertThat(parameters.getCenterLongitude(19)).isEqualTo(13.9)
assertThat(parameters.getCenterLatitude(19)).isEqualTo(41.1)
}

// @Test
// fun testGetRect() {
// val screenRect = Rect(10, 20, 30, 40)
// val center = GeoPoint(42.5, 12.5)
// val projection = Projection(5.0, screenRect, center, 0.0, 0, 0.0, false, false, null, 0, 0)
// parameters.getRect(projection)
// }

@Test
fun containsWithoutInset() {
assertThat(parameters.contains(10.0, 42.0)).isTrue
assertThat(parameters.contains(14.0, 42.0)).isTrue
assertThat(parameters.contains(14.0, 45.0)).isTrue
assertThat(parameters.contains(10.0, 45.0)).isTrue
assertThat(parameters.contains(12.0, 43.5)).isTrue

assertThat(parameters.contains(9.9, 42.0)).isFalse
assertThat(parameters.contains(10.0, 41.9)).isFalse
assertThat(parameters.contains(14.1, 45.0)).isFalse
assertThat(parameters.contains(14.0, 45.1)).isFalse
}

@Test
fun containsWithPositiveInset() {
assertThat(parameters.contains(10.5, 42.5, 0.5)).isTrue
assertThat(parameters.contains(13.5, 42.5, 0.5)).isTrue
assertThat(parameters.contains(13.5, 44.5, 0.5)).isTrue
assertThat(parameters.contains(10.5, 44.5, 0.5)).isTrue

assertThat(parameters.contains(10.4, 42.5, 0.5)).isFalse
assertThat(parameters.contains(10.5, 42.4, 0.5)).isFalse
assertThat(parameters.contains(13.6, 44.5, 0.5)).isFalse
assertThat(parameters.contains(13.5, 44.6, 0.5)).isFalse
}
}
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '8.7.3' apply false
id 'com.android.library' version '8.7.3' apply false
id 'com.android.application' version '8.8.0' apply false
id 'com.android.library' version '8.8.0' apply false
id 'org.jetbrains.kotlin.android' version '2.0.20' apply false
id "org.sonarqube" version "5.1.0.4882"
}
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip

0 comments on commit a90babf

Please sign in to comment.