diff --git a/src/main/java/envoy/client/data/audio/AudioRecorder.java b/src/main/java/envoy/client/data/audio/AudioRecorder.java index b55da93..a59043f 100644 --- a/src/main/java/envoy/client/data/audio/AudioRecorder.java +++ b/src/main/java/envoy/client/data/audio/AudioRecorder.java @@ -57,6 +57,12 @@ public final class AudioRecorder { */ public boolean isSupported() { return AudioSystem.isLineSupported(info); } + /** + * @return {@code true} if the recorder is active + * @since Envoy Client v0.1-beta + */ + public boolean isRecording() { return line != null && line.isActive(); } + /** * Starts the audio recording. * @@ -100,4 +106,14 @@ public final class AudioRecorder { throw new EnvoyException("Cannot save voice recording", e); } } + + /** + * Cancels the active recording. + * + * @since Envoy Client v0.1-beta + */ + public void cancel() { + line.stop(); + line.close(); + } } diff --git a/src/main/java/envoy/client/ui/controller/ChatScene.java b/src/main/java/envoy/client/ui/controller/ChatScene.java index 38a5b9a..2ebfbd8 100644 --- a/src/main/java/envoy/client/ui/controller/ChatScene.java +++ b/src/main/java/envoy/client/ui/controller/ChatScene.java @@ -17,7 +17,9 @@ import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.paint.Color; -import envoy.client.data.*; +import envoy.client.data.Chat; +import envoy.client.data.LocalDB; +import envoy.client.data.Settings; import envoy.client.data.audio.AudioRecorder; import envoy.client.event.MessageCreationEvent; import envoy.client.net.Client; @@ -179,7 +181,6 @@ public final class ChatScene { if (!client.isOnline()) updateInfoLabel("You are offline", "infoLabel-info"); recorder = new AudioRecorder(); - voiceButton.setDisable(!recorder.isSupported()); } /** @@ -211,7 +212,11 @@ public final class ChatScene { } // Discard the pending attachment - // TODO: stop running recording + if (recorder.isRecording()) { + recorder.cancel(); + recording = false; + voiceButton.setText("Record Voice Message"); + } pendingAttachment = null; remainingChars.setVisible(true); @@ -219,6 +224,7 @@ public final class ChatScene { .setText(String.format("remaining chars: %d/%d", MAX_MESSAGE_LENGTH - messageTextArea.getText().length(), MAX_MESSAGE_LENGTH)); } messageTextArea.setDisable(currentChat == null || postingPermanentlyDisabled); + voiceButton.setDisable(!recorder.isSupported()); } /** @@ -290,8 +296,7 @@ public final class ChatScene { private void checkPostConditions(boolean sendKeyPressed) { if (!postingPermanentlyDisabled) { - if (!postButton.isDisabled() && sendKeyPressed) - postMessage(); + if (!postButton.isDisabled() && sendKeyPressed) postMessage(); postButton.setDisable((messageTextArea.getText().isBlank() && pendingAttachment == null) || currentChat == null); } else { final var noMoreMessaging = "Go online to send messages"; diff --git a/src/main/resources/fxml/ChatScene.fxml b/src/main/resources/fxml/ChatScene.fxml index 5638c7a..3239307 100644 --- a/src/main/resources/fxml/ChatScene.fxml +++ b/src/main/resources/fxml/ChatScene.fxml @@ -111,8 +111,8 @@ -