improve username setting flow

This commit is contained in:
Arnaud Vergnet 2020-12-16 17:12:04 +01:00
parent 5cf0279279
commit c13b589054
5 changed files with 46 additions and 20 deletions

View file

@ -63,15 +63,18 @@ public class MainController implements Initializable {
} }
private void openEditUsernameDialog(EditUsernameDialogController.Mode mode) { private void openEditUsernameDialog(EditUsernameDialogController.Mode mode) {
editUserDialogController.setOnDismissListener(() -> { final boolean initialMode = mode == EditUsernameDialogController.Mode.INITIAL;
if (mode == EditUsernameDialogController.Mode.INITIAL) { editUserDialogController.setOnCancelListener(() -> {
if (initialMode) {
System.exit(0); System.exit(0);
} else { } else {
showChat(); showChat();
} }
}); });
editUserDialogController.setOnSuccessListener(() -> { editUserDialogController.setOnSuccessListener(() -> {
showSnackbarEvent("Nom d'utilisateur changé !", SnackbarController.Mode.SUCCESS); if (!initialMode) {
showSnackbarEvent("Nom d'utilisateur changé !", SnackbarController.Mode.SUCCESS);
}
}); });
editUserDialogController.show(root, mode); editUserDialogController.show(root, mode);
} }
@ -109,23 +112,27 @@ public class MainController implements Initializable {
} }
private void startChat() { private void startChat() {
Log.v(this.getClass().getSimpleName(), "Chat started");
discoverActiveUsers(); discoverActiveUsers();
startListening(); startListening();
Platform.runLater(this::showChat); Platform.runLater(this::showChat);
} }
private void showChat() { private void showChat() {
Log.v(this.getClass().getSimpleName(), "Chat shown");
loadingController.hide(); loadingController.hide();
mainContainer.setVisible(true); mainContainer.setVisible(true);
} }
private void showLogin(boolean isError) { private void showLogin(boolean isError) {
Log.v(this.getClass().getSimpleName(), "Login shown");
mainContainer.setVisible(false); mainContainer.setVisible(false);
loadingController.hide(); loadingController.hide();
openEditUsernameDialog(isError ? EditUsernameDialogController.Mode.ERROR : EditUsernameDialogController.Mode.INITIAL); openEditUsernameDialog(isError ? EditUsernameDialogController.Mode.ERROR : EditUsernameDialogController.Mode.INITIAL);
} }
private void showError() { private void showError() {
Log.v(this.getClass().getSimpleName(), "Error shown");
mainContainer.setVisible(false); mainContainer.setVisible(false);
loadingController.hide(); loadingController.hide();
errorController.show(); errorController.show();
@ -138,8 +145,9 @@ public class MainController implements Initializable {
try { try {
currentUser.init(); currentUser.init();
Log.v("INIT", "Current user: " + currentUser.getUsername() + " / " + currentUser.getId()); Log.v("INIT", "Current user: " + currentUser.getId());
} catch (SocketException e) { } catch (SocketException e) {
Log.e("INIT", "Could not init user", e);
showError(); showError();
} }

View file

@ -5,6 +5,7 @@ import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import java.beans.PropertyChangeEvent;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -33,9 +34,16 @@ public class ToolbarController implements Initializable {
aboutListeners.forEach(ButtonPressEvent::onPress); aboutListeners.forEach(ButtonPressEvent::onPress);
} }
private void onUsernameChange(PropertyChangeEvent propertyChangeEvent) {
if (propertyChangeEvent.getPropertyName().equals("username")) {
final String newUsername = (String) propertyChangeEvent.getNewValue();
currentUsernameLabel.setText(newUsername);
}
}
@Override @Override
public void initialize(URL location, ResourceBundle resources) { public void initialize(URL location, ResourceBundle resources) {
currentUsernameLabel.setText(CurrentUser.getInstance().getUsername()); CurrentUser.getInstance().addObserver(this::onUsernameChange);
editListeners = new ArrayList<>(); editListeners = new ArrayList<>();
aboutListeners = new ArrayList<>(); aboutListeners = new ArrayList<>();
} }

View file

@ -5,6 +5,7 @@ import com.jfoenix.controls.JFXDialog;
import com.jfoenix.controls.JFXTextField; import com.jfoenix.controls.JFXTextField;
import com.jfoenix.validation.base.ValidatorBase; import com.jfoenix.validation.base.ValidatorBase;
import fr.insa.clavardator.ui.ButtonPressEvent; import fr.insa.clavardator.ui.ButtonPressEvent;
import fr.insa.clavardator.users.CurrentUser;
import javafx.beans.property.ReadOnlyBooleanWrapper; import javafx.beans.property.ReadOnlyBooleanWrapper;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML; import javafx.fxml.FXML;
@ -42,11 +43,12 @@ public class EditUsernameDialogController implements Initializable {
private State currentState; private State currentState;
private Validator validator; private Validator validator;
private ButtonPressEvent successListener; private ButtonPressEvent successListener;
private ButtonPressEvent dismissListener; private ButtonPressEvent cancelListener;
@FXML @FXML
private void onConfirm() { private void onConfirm() {
setLocked(true); setLocked(true);
CurrentUser.getInstance().setUsername(textField.getText());
// TODO replace by network call // TODO replace by network call
Timer t = new Timer(); Timer t = new Timer();
t.schedule(new TimerTask() { t.schedule(new TimerTask() {
@ -61,15 +63,17 @@ public class EditUsernameDialogController implements Initializable {
@FXML @FXML
private void onCancel() { private void onCancel() {
if (cancelListener != null) {
cancelListener.onPress();
}
hide(); hide();
} }
public void setOnSuccessListener(ButtonPressEvent listener) { public void setOnSuccessListener(ButtonPressEvent listener) {
this.successListener = listener; this.successListener = listener;
} }
public void setOnCancelListener(ButtonPressEvent listener) {
public void setOnDismissListener(ButtonPressEvent listener) { this.cancelListener = listener;
this.dismissListener = listener;
} }
public void show(StackPane root, Mode mode) { public void show(StackPane root, Mode mode) {
@ -82,9 +86,6 @@ public class EditUsernameDialogController implements Initializable {
public void hide() { public void hide() {
dialog.close(); dialog.close();
if (dismissListener != null) {
dismissListener.onPress();
}
} }
private void setLocked(boolean state) { private void setLocked(boolean state) {
@ -148,7 +149,9 @@ public class EditUsernameDialogController implements Initializable {
setFieldError(State.VALID); setFieldError(State.VALID);
setLocked(false); setLocked(false);
hide(); hide();
successListener.onPress(); if (successListener != null) {
successListener.onPress();
}
} }
private void onError() { private void onError() {

View file

@ -5,6 +5,7 @@ import fr.insa.clavardator.ui.UserSelectedEvent;
import fr.insa.clavardator.users.PeerUser; import fr.insa.clavardator.users.PeerUser;
import fr.insa.clavardator.users.User; import fr.insa.clavardator.users.User;
import fr.insa.clavardator.users.UserList; import fr.insa.clavardator.users.UserList;
import fr.insa.clavardator.util.Log;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
@ -54,10 +55,12 @@ public class UserListController implements Initializable {
} }
private void onUserConnected(PeerUser user) { private void onUserConnected(PeerUser user) {
Log.v(this.getClass().getSimpleName(), "Add user to UI");
Platform.runLater(() -> peerUserListView.getItems().add(user)); Platform.runLater(() -> peerUserListView.getItems().add(user));
} }
private void onUserDisconnected(PeerUser user) { private void onUserDisconnected(PeerUser user) {
Log.v(this.getClass().getSimpleName(), "Remove user from UI");
Platform.runLater(() -> peerUserListView.getItems().remove(user)); Platform.runLater(() -> peerUserListView.getItems().remove(user));
} }

View file

@ -1,6 +1,7 @@
package fr.insa.clavardator.users; package fr.insa.clavardator.users;
import fr.insa.clavardator.network.NetUtil; import fr.insa.clavardator.network.NetUtil;
import fr.insa.clavardator.util.Log;
import javafx.application.Platform; import javafx.application.Platform;
import java.net.InetAddress; import java.net.InetAddress;
@ -37,29 +38,32 @@ public class CurrentUser extends User {
} else { } else {
throw new SocketException(); throw new SocketException();
} }
setUsername("Moi2"); // TODO replace by db username fetching
// TODO place by db username fetching
Timer t = new Timer(); Timer t = new Timer();
t.schedule(new TimerTask() { t.schedule(new TimerTask() {
@Override @Override
public void run() { public void run() {
Platform.runLater(() -> setState(CurrentUser.State.VALID)); setState(State.NONE);
t.cancel(); t.cancel();
} }
}, 500); }, 500);
} }
public State getState() { @Override
return state; public void setUsername(String newUsername) {
Log.v(this.getClass().getSimpleName(),
"Username changed from " + getUsername() + " to " + newUsername);
super.setUsername(newUsername);
setState(State.VALID);
} }
public void setState(State state) { public void setState(State state) {
Log.v(this.getClass().getSimpleName(),
"State changed from " + this.state.toString() + " to " + state.toString());
instance.pcs.firePropertyChange("state", this.state, state); instance.pcs.firePropertyChange("state", this.state, state);
this.state = state; this.state = state;
} }
public enum State { public enum State {
UNINITIALIZED, UNINITIALIZED,
VALID, VALID,