altosdroid: Catch log file open failures and show an error dialog
[fw/altos] / altosdroid / app / src / main / java / org / altusmetrum / AltosDroid / TelemetryService.java
index 2bec95bc4cf1d05de95ac472ff4c73ec81cb1e1d..b0b82ab9c9673643f8fead134a8a9e9445a8a1d8 100644 (file)
@@ -20,6 +20,7 @@ package org.altusmetrum.AltosDroid;
 
 import java.lang.ref.WeakReference;
 import java.util.concurrent.TimeoutException;
+import java.io.*;
 import java.util.*;
 
 import android.app.*;
@@ -33,7 +34,7 @@ import android.os.*;
 import android.widget.Toast;
 import androidx.core.app.NotificationCompat;
 
-import org.altusmetrum.altoslib_13.*;
+import org.altusmetrum.altoslib_14.*;
 
 public class TelemetryService extends Service implements AltosIdleMonitorListener {
 
@@ -133,7 +134,9 @@ public class TelemetryService extends Service implements AltosIdleMonitorListene
                        case MSG_SETFREQUENCY:
                                AltosDebug.debug("MSG_SETFREQUENCY");
                                s.telemetry_state.frequency = (Double) msg.obj;
-                               if (s.telemetry_state.connect == TelemetryState.CONNECT_CONNECTED) {
+                               if (s.idle_monitor != null) {
+                                       s.idle_monitor.set_frequency(s.telemetry_state.frequency);
+                               } else if (s.telemetry_state.connect == TelemetryState.CONNECT_CONNECTED) {
                                        try {
                                                s.altos_link.set_radio_frequency(s.telemetry_state.frequency);
                                                s.altos_link.save_frequency();
@@ -338,6 +341,21 @@ public class TelemetryService extends Service implements AltosIdleMonitorListene
                        send_idle_mode_to_client(client);
        }
 
+       private void send_file_failed_to_client(Messenger client, File f) {
+               Message m = Message.obtain(null, AltosDroid.MSG_FILE_FAILED, f);
+               try {
+                       client.send(m);
+               } catch (RemoteException e) {
+                       AltosDebug.error("Client %s disappeared", client.toString());
+                       remove_client(client);
+               }
+       }
+
+       public void send_file_failed_to_clients(File f) {
+               for (Messenger client : clients)
+                       send_file_failed_to_client(client, f);
+       }
+
        private void telemetry_start() {
                if (telemetry_reader == null && idle_monitor == null && !ignite_running) {
                        telemetry_reader = new TelemetryReader(altos_link, handler);
@@ -414,7 +432,7 @@ public class TelemetryService extends Service implements AltosIdleMonitorListene
        }
 
        private void start_altos_bluetooth(DeviceAddress address, boolean pause) {
-               if (bluetooth_adapter == null || !bluetooth_adapter.isEnabled())
+               if (bluetooth_adapter == null || !bluetooth_adapter.isEnabled() || address.address == null)
                        return;
 
                disconnect(false);