diff --git a/app/src/main/java/eu/ztsh/garmin/Garmin.kt b/app/src/main/java/eu/ztsh/garmin/Garmin.kt index f71221f..b393203 100644 --- a/app/src/main/java/eu/ztsh/garmin/Garmin.kt +++ b/app/src/main/java/eu/ztsh/garmin/Garmin.kt @@ -10,7 +10,6 @@ import java.io.IOException import java.util.* import java.util.concurrent.SynchronousQueue - @SuppressLint("MissingPermission") class Garmin( val context: MainActivity, @@ -100,14 +99,26 @@ class Garmin( // Cancel discovery because it otherwise slows down the connection. context.checkBt() adapter.cancelDiscovery() - socket?.connect() - sleep(3000) - readAll() - while (true) { - val newCurrent = Optional.ofNullable(queue.poll()).orElse(current) - current = newCurrent - send(current) - sleep(900) + try { + socket?.connect() + context.setConnectionStatus(true) + sleep(3000) + readAll() + while (true) { + val newCurrent = Optional.ofNullable(queue.poll()).orElse(current) + current = newCurrent + send(current) + sleep(900) + } + } catch (e: IOException) { + Log.d(TAG, "Not connected", e) + context.setConnectionStatus(false) + while (true) { + // Just dequeue + // TODO: Add option to reconnect + queue.poll() + sleep(900) + } } } diff --git a/app/src/main/java/eu/ztsh/garmin/MainActivity.kt b/app/src/main/java/eu/ztsh/garmin/MainActivity.kt index 4d02d83..ec61546 100644 --- a/app/src/main/java/eu/ztsh/garmin/MainActivity.kt +++ b/app/src/main/java/eu/ztsh/garmin/MainActivity.kt @@ -5,11 +5,13 @@ import android.annotation.SuppressLint import android.bluetooth.BluetoothAdapter import android.bluetooth.BluetoothDevice import android.bluetooth.BluetoothManager +import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.os.Build import android.os.Bundle import android.util.Log +import android.widget.Toast import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult import androidx.appcompat.app.AppCompatActivity @@ -66,6 +68,7 @@ class MainActivity : AppCompatActivity() { super.onStart() MapboxNavigationApp.current()?.registerRouteProgressObserver(routeProgressObserver) } + override fun onStop() { super.onStop() MapboxNavigationApp.current()?.unregisterRouteProgressObserver(routeProgressObserver) @@ -77,7 +80,6 @@ class MainActivity : AppCompatActivity() { maneuverApi.cancel() } - // Define distance formatter options private val distanceFormatter: DistanceFormatterOptions by lazy { DistanceFormatterOptions.Builder(this).build() @@ -88,7 +90,13 @@ class MainActivity : AppCompatActivity() { } private val routeProgressObserver = - RouteProgressObserver { routeProgress -> maneuverApi.getManeuvers(routeProgress).value?.apply { garmin.process(this[0]) } } + RouteProgressObserver { routeProgress -> + maneuverApi.getManeuvers(routeProgress).value?.apply { + garmin.process( + this[0] + ) + } + } private fun bluetoothInit() { val bluetoothManager: BluetoothManager = getSystemService(BluetoothManager::class.java) @@ -136,7 +144,19 @@ class MainActivity : AppCompatActivity() { return true } + fun setConnectionStatus(success: Boolean) { + this.runOnUiThread { + if (success) { + Toast.makeText(this, "Garmin connected", Toast.LENGTH_LONG).show() + } else { + // TODO: Make snackbar with reconnect option + Toast.makeText(this, "Garmin not connected", Toast.LENGTH_LONG).show() + } + } + } + companion object { + private const val TAG = "bt" }