From 1a2ee767c2b1c1f04ada957f55be494803ed1571 Mon Sep 17 00:00:00 2001 From: cyberarm Date: Tue, 25 Aug 2020 10:48:08 -0500 Subject: [PATCH] Fixed active config not updated when renamed, TACNET Connection 'works' (send/receive heartbeats to/from server), added functions for playing error sound to Backend --- .../MainActivity.java | 2 + .../backend/Backend.java | 49 +++++++++++++++++++ .../backend/TACNET.java | 17 ++++++- .../dialogs/ConfigurationDialog.java | 8 +++ .../tacnet/Connection.java | 4 +- .../ui/tacnet/TACNETFragment.java | 2 + 6 files changed, 79 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java index 7daad24..29d19ee 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/MainActivity.java @@ -46,6 +46,8 @@ public class MainActivity extends AppCompatActivity { new Backend(); } } + + Backend.instance().applicationContext = getApplicationContext(); } @Override diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java index 5daa4bc..6432e0a 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/Backend.java @@ -1,10 +1,18 @@ package org.timecrafters.TimeCraftersConfigurationTool.backend; +import android.content.Context; +import android.media.AudioAttributes; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.SoundPool; +import android.net.Uri; +import android.os.Build; import android.util.Log; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import org.timecrafters.TimeCraftersConfigurationTool.R; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Action; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Configuration; import org.timecrafters.TimeCraftersConfigurationTool.backend.config.Group; @@ -47,12 +55,15 @@ public class Backend { private static final String TAG = "Backend"; static private HashMap storage = new HashMap<>(); static private Backend instance; + public Context applicationContext; private TACNET tacnet; private Server server; private Exception lastServerError; private Config config; private Settings settings; private boolean configChanged, settingsChanged; + private MediaPlayer mediaPlayer; + private SoundPool soundPool; public static HashMap getStorage() { return storage; @@ -349,4 +360,42 @@ public class Backend { configsPath.mkdir(); } } + + public void startErrorSound(Context context) { + if (isPlayingErrorSound()) { + return; + } + + mediaPlayer = new MediaPlayer(); + try { + mediaPlayer.setDataSource(context, Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.error_alarm)); + + if (Build.VERSION.SDK_INT >= 21) { + mediaPlayer.setAudioAttributes(new AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_ALARM) + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .build()); + } else { + mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); + } + + mediaPlayer.prepare(); + mediaPlayer.start(); + mediaPlayer.setLooping(true); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public boolean isPlayingErrorSound() { + return mediaPlayer != null && mediaPlayer.isPlaying(); + } + + public void stopErrorSound() { + if (mediaPlayer != null) { + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayer = null; + } + } } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/TACNET.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/TACNET.java index b01323b..333ca60 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/TACNET.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/backend/TACNET.java @@ -1,6 +1,7 @@ package org.timecrafters.TimeCraftersConfigurationTool.backend; import android.os.SystemClock; +import android.util.Log; import org.timecrafters.TimeCraftersConfigurationTool.tacnet.Client; import org.timecrafters.TimeCraftersConfigurationTool.tacnet.Connection; @@ -8,6 +9,7 @@ import org.timecrafters.TimeCraftersConfigurationTool.tacnet.Connection; import java.io.IOException; public class TACNET { + private final static String TAG = "TACNET|TACNET"; public static final String DEFAULT_HOSTNAME = "192.168.49.1"; public static final int DEFAULT_PORT = 8962; @@ -29,7 +31,20 @@ public class TACNET { } connection = new Connection(hostname, port); - connection.connect(null); + Backend.instance().stopErrorSound(); + + connection.connect(new Runnable() { + @Override + public void run() { + Log.d(TAG, "run: " + connection.lastError()); + Backend.instance().startErrorSound(Backend.instance().applicationContext); + try { + connection.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); } public Status status() { diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java index 36b8588..54adebc 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/dialogs/ConfigurationDialog.java @@ -81,6 +81,14 @@ public class ConfigurationDialog extends TimeCraftersDialog { if (validated(newConfigName)) { if (configName != null) { Backend.instance().moveConfig(configName, newConfigName); + + // If config being renamed is the active config then update Backend to use + // the correct config name/file, and save settings. + if (Backend.instance().getSettings().config.equals(configName)) { + Backend.instance().loadConfig(newConfigName); + Backend.instance().getSettings().config = newConfigName; + Backend.instance().saveSettings(); + } } else { Backend.instance().writeNewConfig(newConfigName); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/Connection.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/Connection.java index 256bce3..dd66b23 100755 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/Connection.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/tacnet/Connection.java @@ -37,7 +37,7 @@ public class Connection { }; } - public void connect(final Runnable callback) { + public void connect(final Runnable errorCallback) { if (client != null) { return; } @@ -62,7 +62,7 @@ public class Connection { socketError = true; lastSocketError = e.getMessage(); - callback.run(); + errorCallback.run(); Log.e(TAG, e.toString()); } diff --git a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETFragment.java b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETFragment.java index 1b32ef5..66beb7c 100644 --- a/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETFragment.java +++ b/app/src/main/java/org/timecrafters/TimeCraftersConfigurationTool/ui/tacnet/TACNETFragment.java @@ -72,6 +72,8 @@ public class TACNETFragment extends TimeCraftersFragment { // ConnectDialog dialog = new ConnectDialog(); // dialog.show(getFragmentManager(), null); Backend.instance().saveSettings(); + + Backend.instance().tacnet().connect(hostname.getText().toString(), Integer.parseInt(port.getText().toString())); } });