Don't trigger quit handler on new non-unlocked vault states

This commit is contained in:
Sebastian Stenzel
2019-09-06 14:05:17 +02:00
parent 2bd93469bb
commit 68e69790cf

View File

@@ -5,6 +5,7 @@ import javafx.beans.Observable;
import javafx.collections.ObservableList;
import org.cryptomator.common.settings.Settings;
import org.cryptomator.common.vaults.Vault;
import org.cryptomator.common.vaults.VaultState;
import org.cryptomator.ui.fxapp.FxApplication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -18,8 +19,10 @@ import java.awt.PopupMenu;
import java.awt.desktop.QuitResponse;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EnumSet;
import java.util.EventObject;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;
@@ -35,7 +38,7 @@ class TrayMenuController {
private final Settings settings;
private final ObservableList<Vault> vaults;
private final PopupMenu menu;
private final AtomicBoolean allVaultsAreLocked;
private final AtomicBoolean allowSuddenTermination;
@Inject
TrayMenuController(ResourceBundle resourceBundle, FxApplicationStarter fxApplicationStarter, @Named("shutdownLatch") CountDownLatch shutdownLatch, Settings settings, ObservableList<Vault> vaults) {
@@ -45,7 +48,7 @@ class TrayMenuController {
this.settings = settings;
this.vaults = vaults;
this.menu = new PopupMenu();
this.allVaultsAreLocked = new AtomicBoolean(true);
this.allowSuddenTermination = new AtomicBoolean(true);
}
public PopupMenu getMenu() {
@@ -76,10 +79,16 @@ class TrayMenuController {
private void vaultListChanged(@SuppressWarnings("unused") Observable observable) {
assert Platform.isFxApplicationThread();
rebuildMenu();
boolean allLocked = vaults.stream().allMatch(Vault::isLocked);
// TODO remove logging
LOG.warn("allLocked: {}", allLocked);
allVaultsAreLocked.set(allLocked);
Set<VaultState> statesAllowingTermination = EnumSet.of(VaultState.LOCKED, VaultState.NEEDS_MIGRATION, VaultState.MISSING, VaultState.ERROR);
boolean allVaultsAllowTermination = vaults.stream().map(Vault::getState).allMatch(statesAllowingTermination::contains);
allowSuddenTermination.set(allVaultsAllowTermination);
if (Desktop.getDesktop().isSupported(Desktop.Action.APP_SUDDEN_TERMINATION)) {
if (allVaultsAllowTermination) {
Desktop.getDesktop().enableSuddenTermination();
} else {
Desktop.getDesktop().disableSuddenTermination();
}
}
}
private void rebuildMenu() {
@@ -141,7 +150,7 @@ class TrayMenuController {
}
private void handleQuitRequest(EventObject e, QuitResponse response) {
if (allVaultsAreLocked.get()) {
if (allowSuddenTermination.get()) {
response.performQuit(); // really?
} else {
fxApplicationStarter.get(true).thenAccept(app -> app.showQuitWindow(response));