Skip to content

Commit

Permalink
Merge pull request #245 from wuan/2.2
Browse files Browse the repository at this point in the history
New Version 2.2
  • Loading branch information
wuan authored Oct 20, 2023
2 parents 483cd1d + 695d457 commit d053287
Show file tree
Hide file tree
Showing 52 changed files with 1,261 additions and 450 deletions.
13 changes: 6 additions & 7 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 15
targetSdkVersion 33
versionCode 305
versionName '2.1.15'
versionCode 312
versionName '2.2.0'
multiDexEnabled false
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Expand All @@ -31,11 +31,11 @@ android {
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlin {
jvmToolchain(11)
jvmToolchain(17)
}
testOptions {
unitTests {
Expand Down Expand Up @@ -67,8 +67,7 @@ dependencies {
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.recyclerview:recyclerview:1.3.1'
implementation 'androidx.work:work-runtime-ktx:2.8.1'
implementation 'org.osmdroid:osmdroid-android:6.1.11'
// waiting for https://github.com/osmdroid/osmdroid/issues/1822
implementation 'org.osmdroid:osmdroid-android:6.1.17'

// Dagger2
implementation "com.google.dagger:dagger:$dagger_version"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import org.blitzortung.android.app.controller.NotificationHandler
import org.blitzortung.android.app.view.OnSharedPreferenceChangeListener
import org.blitzortung.android.app.view.PreferenceKey
import org.blitzortung.android.app.view.get
import org.blitzortung.android.data.MainDataHandler
import org.blitzortung.android.data.beans.RasterParameters
import org.blitzortung.android.data.beans.Strike
import org.blitzortung.android.data.provider.result.ResultEvent
Expand Down Expand Up @@ -96,14 +97,16 @@ class AlertHandler @Inject constructor(
val dataEventConsumer: (Event) -> Unit = { event ->
if (event is ResultEvent) {
Log.v(Main.LOG_TAG, "AlertHandler.dataEventConsumer $event")
if (!event.failed && event.containsRealtimeData() && event.strikes != null) {
val strikes = Strikes(event.strikes, event.rasterParameters)
checkStrikes(strikes, locationHandler.location)
} else {
if (!event.containsRealtimeData()) {
lastStrikes = null
if (!event.flags.ignoreForAlerting) {
if (!event.failed && event.containsRealtimeData() && event.strikes != null) {
val strikes = Strikes(event.strikes, event.rasterParameters)
checkStrikes(strikes, locationHandler.location)
} else {
if (!event.containsRealtimeData()) {
lastStrikes = null
}
broadcastResult(null)
}
broadcastResult(null)
}
}
}
Expand Down Expand Up @@ -166,6 +169,7 @@ class AlertHandler @Inject constructor(
"AlertHandler.onSharedPreferenceChanged() signalingThresholdTime = $signalingThresholdTime"
)
}

else -> {}
}
}
Expand Down
42 changes: 34 additions & 8 deletions app/src/main/java/org/blitzortung/android/app/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ import android.view.View
import android.view.ViewConfiguration
import android.view.WindowManager
import android.widget.ImageButton
import android.widget.SeekBar
import android.widget.SeekBar.OnSeekBarChangeListener
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.FragmentActivity
Expand All @@ -61,6 +63,7 @@ import org.blitzortung.android.app.view.get
import org.blitzortung.android.app.view.put
import org.blitzortung.android.data.DataChannel
import org.blitzortung.android.data.MainDataHandler
import org.blitzortung.android.data.Mode
import org.blitzortung.android.data.provider.LOCAL_REGION
import org.blitzortung.android.data.provider.result.DataEvent
import org.blitzortung.android.data.provider.result.RequestStartedEvent
Expand Down Expand Up @@ -172,8 +175,9 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
mapFragment.mapView.invalidate()

binding.legendView.requestLayout()
binding.timeSlider.update(event.parameters, event.history!!)

if (!event.containsRealtimeData()) {
if (event.flags.mode == Mode.ANIMATION || !event.containsRealtimeData()) {
setHistoricStatusString()
}
}
Expand Down Expand Up @@ -233,8 +237,8 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
buttonColumnHandler = ButtonColumnHandler(if (TabletAwareView.isTablet(this)) 75f else 55f)
configureMenuAccess()
historyController = HistoryController(this, binding, buttonColumnHandler, dataHandler)

buttonColumnHandler.addAllElements(historyController.getButtons(), ButtonGroup.DATA_UPDATING)
val historyButtons = historyController.getButtons()
buttonColumnHandler.addAllElements(historyButtons, ButtonGroup.DATA_UPDATING)

//setupDetailModeButton()

Expand All @@ -246,6 +250,27 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
if (versionComponent.state == VersionComponent.State.FIRST_RUN_AFTER_UPDATE) {
changeLogComponent.showChangeLogDialog(this)
}

binding.timeSlider.setOnSeekBarChangeListener(object : OnSeekBarChangeListener {
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
if (p2) {
val changed = dataHandler.setPosition(p1)
if (changed) {
if (dataHandler.isRealtime) {
dataHandler.restart()
} else {
dataHandler.updateData(setOf(DataChannel.STRIKES))
}
}
}
}

override fun onStartTrackingTouch(p0: SeekBar?) {
}

override fun onStopTrackingTouch(p0: SeekBar?) {
}
})
}

private fun initializeOsmDroid() {
Expand Down Expand Up @@ -415,7 +440,7 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
PreferenceKey.ALERT_NOTIFICATION_DISTANCE_LIMIT,
PreferenceKey.ALERT_SIGNALING_DISTANCE_LIMIT,
PreferenceKey.DO_NOT_SLEEP,
PreferenceKey.BACKGROUND_QUERY_PERIOD
PreferenceKey.BACKGROUND_QUERY_PERIOD,
)

val overlays = mapFragment.mapView.overlays
Expand Down Expand Up @@ -451,6 +476,9 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
locationHandler.shutdown()
locationHandler.disableBackgroundMode()
}

historyController.onResume()

locationHandler.start()

dataHandler.start()
Expand Down Expand Up @@ -741,10 +769,8 @@ class Main : FragmentActivity(), OnSharedPreferenceChangeListener {
}

private fun setHistoricStatusString() {
if (!strikeListOverlay.hasRealtimeData()) {
val timeString = DateFormat.format("@ kk:mm", strikeListOverlay.referenceTime) as String
setStatusString(timeString)
}
val timeString = DateFormat.format("@ kk:mm", strikeListOverlay.referenceTime) as String
setStatusString(timeString)
}

private fun setStatusString(runStatus: String) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@

package org.blitzortung.android.app.controller

import android.util.Log
import android.view.View
import android.widget.RelativeLayout
import org.blitzortung.android.app.Main
import org.blitzortung.android.app.helper.ViewHelper.pxFromSp

class ButtonColumnHandler<V : View, G : Enum<G>>(private val buttonSize: Float) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,11 @@ package org.blitzortung.android.app.controller
import android.content.Context
import android.view.View
import android.widget.ImageButton
import android.widget.Toast
import org.blitzortung.android.app.ButtonGroup
import org.blitzortung.android.app.R
import org.blitzortung.android.app.databinding.MainBinding
import org.blitzortung.android.data.DataChannel
import org.blitzortung.android.data.MainDataHandler
import org.blitzortung.android.data.Mode
import org.blitzortung.android.data.provider.result.ResultEvent
import org.blitzortung.android.protocol.Event

Expand All @@ -39,56 +38,50 @@ class HistoryController(

private val buttons: MutableCollection<ImageButton> = arrayListOf()

private var animationRunning = false

val dataConsumer = { event: Event ->
if (event is ResultEvent) {
setRealtimeData(event.containsRealtimeData())
}
}

init {
setupHistoryRewindButton()
setupHistoryForwardButton()
setupStartStopAnimationButton()
setupGoRealtimeButton()

setRealtimeData(true)
}

private fun setRealtimeData(realtimeData: Boolean) {
binding.historyRew.visibility = View.VISIBLE
val historyButtonsVisibility = if (realtimeData) View.INVISIBLE else View.VISIBLE
binding.historyFfwd.visibility = historyButtonsVisibility
val historyButtonsVisibility = if (realtimeData || animationRunning) View.INVISIBLE else View.VISIBLE
binding.goRealtime.visibility = historyButtonsVisibility
if (realtimeData) {
binding.timeSlider.progress = binding.timeSlider.max
}
updateButtonColumn()
}

private fun setupHistoryRewindButton() {
addButtonWithOnClickAction(binding.historyRew) {
if (dataHandler.rewInterval()) {
binding.historyFfwd.visibility = View.VISIBLE
binding.goRealtime.visibility = View.VISIBLE
updateButtonColumn()
updateData()
private fun setupStartStopAnimationButton() {
addButtonWithOnClickAction(binding.startStopAnimation) {
if (animationRunning) {
dataHandler.stop()
binding.startStopAnimation.setImageResource(android.R.drawable.ic_media_play)
dataHandler.goRealtime()
configureForRealtimeOperation()

animationRunning = false
setRealtimeData(true)
binding.timeSlider.isEnabled = true
} else {
val toast = Toast.makeText(
context,
context.resources.getText(R.string.historic_timestep_limit_reached),
Toast.LENGTH_SHORT
)
toast.show()
dataHandler.stop()
binding.startStopAnimation.setImageResource(android.R.drawable.ic_media_pause)
animationRunning = true
binding.timeSlider.isEnabled = false
dataHandler.startAnimation()
}
}
}

private fun setupHistoryForwardButton() {
addButtonWithOnClickAction(binding.historyFfwd) {
if (dataHandler.ffwdInterval()) {
if (dataHandler.isRealtime) {
configureForRealtimeOperation()
} else {
dataHandler.updateData()
}
}
}
binding.startStopAnimation.visibility = View.VISIBLE
}

private fun setupGoRealtimeButton() {
Expand All @@ -108,11 +101,13 @@ class HistoryController(
}

private fun configureForRealtimeOperation() {
binding.historyFfwd.visibility = View.INVISIBLE
binding.goRealtime.visibility = View.INVISIBLE
updateButtonColumn()

dataHandler.restart()
val historySteps = dataHandler.historySteps()
binding.timeSlider.max = historySteps
binding.timeSlider.progress = historySteps
}

private fun updateButtonColumn() {
Expand All @@ -126,4 +121,12 @@ class HistoryController(
private fun updateData() {
dataHandler.updateData(setOf(DataChannel.STRIKES))
}

fun onResume() {
animationRunning = dataHandler.mode == Mode.ANIMATION
if (animationRunning) {
binding.startStopAnimation.setImageResource(android.R.drawable.ic_media_pause)
binding.timeSlider.isEnabled = false
}
}
}
13 changes: 11 additions & 2 deletions app/src/main/java/org/blitzortung/android/app/view/AlertView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,14 @@
package org.blitzortung.android.app.view

import android.content.Context
import android.graphics.*
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Paint.Align
import android.graphics.Paint.Style
import android.graphics.PorterDuff
import android.graphics.PorterDuffXfermode
import android.graphics.RectF
import android.location.Location
import android.preference.PreferenceManager
import android.util.AttributeSet
Expand All @@ -33,6 +38,7 @@ import org.blitzortung.android.alert.event.AlertResultEvent
import org.blitzortung.android.alert.handler.AlertHandler
import org.blitzortung.android.app.Main
import org.blitzortung.android.app.R
import org.blitzortung.android.app.helper.ViewHelper
import org.blitzortung.android.data.MainDataHandler
import org.blitzortung.android.dialogs.AlertDialog
import org.blitzortung.android.dialogs.AlertDialogColorHandler
Expand Down Expand Up @@ -130,7 +136,7 @@ class AlertView @JvmOverloads constructor(

override fun onDraw(canvas: Canvas) {
val size = max(width, height)
val pad = 4
val pad = ViewHelper.pxFromDp(context, 5f)

val center = size / 2.0f
val radius = center - pad
Expand Down Expand Up @@ -213,6 +219,9 @@ class AlertView @JvmOverloads constructor(
val leftTop = center - (radiusIndex + 1) * radiusIncrement
val bottomRight = center + (radiusIndex + 1) * radiusIncrement
arcArea.set(leftTop, leftTop, bottomRight, bottomRight)
if (radiusIndex == rangeStepCount - 1) {
lines.strokeWidth = (size / 80).toFloat()
}
temporaryCanvas.drawArc(arcArea, 0f, 360f, false, lines)

if (enableDescriptionText && size > TEXT_MINIMUM_SIZE) {
Expand Down
Loading

0 comments on commit d053287

Please sign in to comment.