From 75e10c1579b1fb77466d15c36a23b5f6dc7d418b Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Wed, 31 Jul 2024 18:38:42 +0200 Subject: [PATCH] fix: Proces threading fix --- app/src/main/java/eu/ztsh/garmin/Garmin.kt | 21 ++++++++++++------- .../main/java/eu/ztsh/garmin/MainActivity.kt | 6 +++--- .../eu/ztsh/garmin/mapbox/RouteControl.kt | 9 +++----- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/eu/ztsh/garmin/Garmin.kt b/app/src/main/java/eu/ztsh/garmin/Garmin.kt index 0c08154..46a702b 100644 --- a/app/src/main/java/eu/ztsh/garmin/Garmin.kt +++ b/app/src/main/java/eu/ztsh/garmin/Garmin.kt @@ -23,7 +23,7 @@ class Garmin( ) { private lateinit var connection: ConnectThread - private lateinit var processing: ProcessingThread + private val observer = ProcessingThreadObserver() private val cache = DataCache() fun start() { @@ -36,15 +36,11 @@ class Garmin( } fun process(maneuver: Maneuver) { - processing = ManeuverProcessingThread(maneuver) - processing.start() - processing.join() + ManeuverProcessingThread(maneuver).start() } fun process(location: LocationMatcherResult) { - processing = LocationProcessingThread(location) - processing.start() - processing.join() + LocationProcessingThread(location).start() } fun process(navigationSessionState: NavigationSessionState) { @@ -83,6 +79,15 @@ class Garmin( connection.enqueue(GarminMapper.setDirection(incoming)) } cache.update(incoming) + observer.join(this) + } + + } + + private inner class ProcessingThreadObserver { + + fun join(thread: ProcessingThread) { + thread.join() } } @@ -165,6 +170,8 @@ class Garmin( companion object { + lateinit var instance: Garmin + fun prepareData(input: IntArray): IntArray { val n = input.size var crc = (0xeb + n + n).toUInt() diff --git a/app/src/main/java/eu/ztsh/garmin/MainActivity.kt b/app/src/main/java/eu/ztsh/garmin/MainActivity.kt index 01e8cd2..b7ae97f 100644 --- a/app/src/main/java/eu/ztsh/garmin/MainActivity.kt +++ b/app/src/main/java/eu/ztsh/garmin/MainActivity.kt @@ -30,7 +30,7 @@ import java.lang.ref.WeakReference @SuppressLint("MissingPermission") class MainActivity : AppCompatActivity() { - lateinit var garmin: Garmin +// lateinit var garmin: Garmin private lateinit var binding: ActivityMainBinding private lateinit var mapControl: MapControl @@ -95,8 +95,8 @@ class MainActivity : AppCompatActivity() { Log.d(TAG, device.name) device.name.equals("GARMIN HUD") }?.apply { - garmin = Garmin(context, this, bluetoothAdapter) - garmin.start() + Garmin.instance = Garmin(context, this, bluetoothAdapter) + Garmin.instance.start() } } diff --git a/app/src/main/java/eu/ztsh/garmin/mapbox/RouteControl.kt b/app/src/main/java/eu/ztsh/garmin/mapbox/RouteControl.kt index 2e3237c..37bd0d6 100644 --- a/app/src/main/java/eu/ztsh/garmin/mapbox/RouteControl.kt +++ b/app/src/main/java/eu/ztsh/garmin/mapbox/RouteControl.kt @@ -35,6 +35,7 @@ import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineApiOptions import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineViewOptions +import eu.ztsh.garmin.Garmin import eu.ztsh.garmin.UI class RouteControl(private val mapControl: MapControl, ui: UI, private val context: Context) { @@ -166,12 +167,8 @@ class RouteControl(private val mapControl: MapControl, ui: UI, private val conte { mapControl.ui.maneuverView.visibility = View.VISIBLE mapControl.ui.maneuverView.renderManeuvers(maneuvers) - - /* - dump(maneuvers.value[0]) - garmin.process(maneuvers.value[0]) - */ - + Garmin.instance.process(it[0]) + // dump(maneuvers.value[0]) } )