From 1d191858fef41ed0114cb2dc74ae5583f03dc49a Mon Sep 17 00:00:00 2001 From: delvh Date: Thu, 8 Oct 2020 22:07:37 +0200 Subject: [PATCH] Apply suggestions by @kske --- .../envoy/client/event/OwnStatusChange.java | 6 ++---- .../envoy/client/helper/ShutdownHelper.java | 14 ++++++++++++-- .../java/envoy/client/ui/StatusTrayIcon.java | 17 +++++++++++------ .../client/ui/chatscene/ChatSceneCommands.java | 2 +- .../envoy/client/ui/controller/ChatScene.java | 6 ++---- .../client/ui/settings/GeneralSettingsPane.java | 6 +----- 6 files changed, 29 insertions(+), 22 deletions(-) diff --git a/client/src/main/java/envoy/client/event/OwnStatusChange.java b/client/src/main/java/envoy/client/event/OwnStatusChange.java index ab3c0ac..8962d6f 100644 --- a/client/src/main/java/envoy/client/event/OwnStatusChange.java +++ b/client/src/main/java/envoy/client/event/OwnStatusChange.java @@ -1,12 +1,10 @@ package envoy.client.event; -import envoy.data.User; import envoy.data.User.UserStatus; import envoy.event.Event; /** - * Conveys the action that the currently logged in {@link User} has changed his - * status (manually). + * Signifies a manual status change of the client user. * * @author Leon Hofmeister * @since Envoy Client v0.3-beta @@ -16,7 +14,7 @@ public class OwnStatusChange extends Event { private static final long serialVersionUID = 1L; /** - * @param value the new user status of the currently logged in user + * @param value the new user status of the client user * @since Envoy Client v0.3-beta */ public OwnStatusChange(UserStatus value) { super(value); } diff --git a/client/src/main/java/envoy/client/helper/ShutdownHelper.java b/client/src/main/java/envoy/client/helper/ShutdownHelper.java index 75fba02..0371f50 100644 --- a/client/src/main/java/envoy/client/helper/ShutdownHelper.java +++ b/client/src/main/java/envoy/client/helper/ShutdownHelper.java @@ -22,8 +22,18 @@ public final class ShutdownHelper { * * @since Envoy Client v0.2-beta */ - public static void exit() { - if (Settings.getInstance().isHideOnClose() && StatusTrayIcon.isSupported()) Context.getInstance().getStage().setIconified(true); + public static void exit() { exit(false); } + + /** + * Exits Envoy immediately if {@code force = true}, + * else it can exit or minimize Envoy, depending on the current state of + * {@link Settings#isHideOnClose()} and {@link StatusTrayIcon#isSupported()}. + * + * @param force whether to close in any case. + * @since Envoy Client v0.2-beta + */ + public static void exit(boolean force) { + if (!force && Settings.getInstance().isHideOnClose() && StatusTrayIcon.isSupported()) Context.getInstance().getStage().setIconified(true); else { EventBus.getInstance().dispatch(new EnvoyCloseEvent()); System.exit(0); diff --git a/client/src/main/java/envoy/client/ui/StatusTrayIcon.java b/client/src/main/java/envoy/client/ui/StatusTrayIcon.java index 10d0a4b..cf0fcb0 100644 --- a/client/src/main/java/envoy/client/ui/StatusTrayIcon.java +++ b/client/src/main/java/envoy/client/ui/StatusTrayIcon.java @@ -6,6 +6,7 @@ import java.awt.TrayIcon.MessageType; import javafx.application.Platform; import javafx.stage.Stage; +import envoy.client.event.OwnStatusChange; import envoy.client.helper.ShutdownHelper; import envoy.client.util.*; import envoy.data.Message; @@ -56,27 +57,28 @@ public final class StatusTrayIcon implements EventListener { // Adding the exit menu item final var exitMenuItem = new MenuItem("Exit"); - exitMenuItem.addActionListener(evt -> ShutdownHelper.exit()); + exitMenuItem.addActionListener(evt -> ShutdownHelper.exit(true)); popup.add(exitMenuItem); // Adding the logout menu item final var logoutMenuItem = new MenuItem("Logout"); - logoutMenuItem.addActionListener(evt -> { hide(); UserUtil.logout(); }); - popup.add(exitMenuItem); + logoutMenuItem.addActionListener(evt -> { hide(); Platform.runLater(UserUtil::logout); }); + popup.add(logoutMenuItem); // Adding the status change items final var statusSubMenu = new Menu("Change status"); for (final var status : UserStatus.values()) { final var statusMenuItem = new MenuItem(status.toString().toLowerCase()); - statusMenuItem.addActionListener(evt -> UserUtil.changeStatus(status)); + statusMenuItem.addActionListener(evt -> Platform.runLater(() -> UserUtil.changeStatus(status))); statusSubMenu.add(statusMenuItem); } popup.add(statusSubMenu); trayIcon.setPopupMenu(popup); - // Only display messages if the stage is not focused - stage.focusedProperty().addListener((ov, onHidden, onShown) -> displayMessages = !ov.getValue()); + // Only display messages if the stage is not focused and the current user status + // is not BUSY (if BUSY, displayMessages will be false) + stage.focusedProperty().addListener((ov, wasFocused, isFocused) -> displayMessages = !displayMessages && wasFocused ? false : !isFocused); // Show the window if the user clicks on the icon trayIcon.addActionListener(evt -> Platform.runLater(() -> { stage.setIconified(false); stage.toFront(); stage.requestFocus(); })); @@ -103,6 +105,9 @@ public final class StatusTrayIcon implements EventListener { */ public void hide() { SystemTray.getSystemTray().remove(trayIcon); } + @Event + private void onOwnStatusChange(OwnStatusChange statusChange) { displayMessages = !statusChange.get().equals(UserStatus.BUSY); } + @Event private void onMessage(Message message) { if (displayMessages) trayIcon diff --git a/client/src/main/java/envoy/client/ui/chatscene/ChatSceneCommands.java b/client/src/main/java/envoy/client/ui/chatscene/ChatSceneCommands.java index ea4a646..475d210 100644 --- a/client/src/main/java/envoy/client/ui/chatscene/ChatSceneCommands.java +++ b/client/src/main/java/envoy/client/ui/chatscene/ChatSceneCommands.java @@ -74,7 +74,7 @@ public final class ChatSceneCommands { alert.setContentText("Please provide an existing status"); alert.showAndWait(); } - }).setDescription("Changes your status to the given status.").setNumberOfArguments(1).setDefaults("OFFLINE").build("status"); + }).setDescription("Changes your status to the given status.").setNumberOfArguments(1).setDefaults("").build("status"); // Selection of a new message initialization messageDependantAction("s", diff --git a/client/src/main/java/envoy/client/ui/controller/ChatScene.java b/client/src/main/java/envoy/client/ui/controller/ChatScene.java index cc9cd50..d28afc0 100644 --- a/client/src/main/java/envoy/client/ui/controller/ChatScene.java +++ b/client/src/main/java/envoy/client/ui/controller/ChatScene.java @@ -194,7 +194,6 @@ public final class ChatScene implements EventListener, Restorable { settingsButton.setAlignment(Pos.BOTTOM_RIGHT); HBox.setHgrow(spaceBetweenUserAndSettingsButton, Priority.ALWAYS); generateOwnStatusControl(); - System.out.println(ownContactControl.getChildren()); Platform.runLater(() -> { final var online = client.isOnline(); @@ -270,9 +269,6 @@ public final class ChatScene implements EventListener, Restorable { }); } - @Event(eventType = OwnStatusChange.class, priority = 50) - private void onOwnStatusChange() { generateOwnStatusControl(); } - @Event private void onContactOperation(ContactOperation operation) { final var contact = operation.get(); @@ -379,6 +375,7 @@ public final class ChatScene implements EventListener, Restorable { recipientProfilePic.setImage(IconUtil.loadIconThemeSensitive("user_icon", 43)); } else { topBarStatusLabel.setText(currentChat.getRecipient().getContacts().size() + " members"); + topBarStatusLabel.getStyleClass().clear(); recipientProfilePic.setImage(IconUtil.loadIconThemeSensitive("group_icon", 43)); } final var clip = new Rectangle(); @@ -719,6 +716,7 @@ public final class ChatScene implements EventListener, Restorable { attachmentView.setVisible(visible); } + @Event(eventType = OwnStatusChange.class, priority = 50) private void generateOwnStatusControl() { final var ownUserControl = new ContactControl(localDB.getUser()); ownUserControl.setAlignment(Pos.CENTER_LEFT); diff --git a/client/src/main/java/envoy/client/ui/settings/GeneralSettingsPane.java b/client/src/main/java/envoy/client/ui/settings/GeneralSettingsPane.java index 4c0ce19..bed9af9 100644 --- a/client/src/main/java/envoy/client/ui/settings/GeneralSettingsPane.java +++ b/client/src/main/java/envoy/client/ui/settings/GeneralSettingsPane.java @@ -59,11 +59,7 @@ public final class GeneralSettingsPane extends SettingsPane { statusComboBox.getItems().setAll(UserStatus.values()); statusComboBox.setValue(context.getLocalDB().getUser().getStatus()); statusComboBox.setTooltip(new Tooltip("Change your current status")); - statusComboBox.setOnAction(e -> { - final var status = statusComboBox.getValue(); - if (status == null) return; - else UserUtil.changeStatus(status); - }); + statusComboBox.setOnAction(e -> UserUtil.changeStatus(statusComboBox.getValue())); getChildren().add(statusComboBox); final var logoutButton = new Button("Logout");