فهرست منبع

deduplicated code

Sebastian Stenzel 5 سال پیش
والد
کامیت
54fca93bba

+ 12 - 4
main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java

@@ -20,6 +20,7 @@ import org.cryptomator.ui.common.FxControllerKey;
 import org.cryptomator.ui.common.FxmlFile;
 import org.cryptomator.ui.common.FxmlScene;
 import org.cryptomator.ui.mainwindow.MainWindow;
+import org.cryptomator.ui.recoverykey.RecoveryKeyDisplayController;
 
 import javax.inject.Named;
 import javax.inject.Provider;
@@ -170,11 +171,18 @@ public abstract class AddVaultModule {
 
 	@Binds
 	@IntoMap
-	@FxControllerKey(AddVaultSuccessController.class)
-	abstract FxController bindAddVaultSuccessController(AddVaultSuccessController controller);
+	@FxControllerKey(CreateNewVaultRecoveryKeyController.class)
+	abstract FxController bindCreateNewVaultRecoveryKeyController(CreateNewVaultRecoveryKeyController controller);
+
+	@Provides
+	@IntoMap
+	@FxControllerKey(RecoveryKeyDisplayController.class)
+	static FxController provideRecoveryKeyDisplayController(@AddVaultWizardWindow Stage window, @Named("vaultName") StringProperty vaultName, @Named("recoveryKey") StringProperty recoveryKey) {
+		return new RecoveryKeyDisplayController(window, vaultName.get(), recoveryKey.get());
+	}
 
 	@Binds
 	@IntoMap
-	@FxControllerKey(CreateNewVaultRecoveryKeyController.class)
-	abstract FxController bindCreateNewVaultRecoveryKeyController(CreateNewVaultRecoveryKeyController controller);
+	@FxControllerKey(AddVaultSuccessController.class)
+	abstract FxController bindAddVaultSuccessController(AddVaultSuccessController controller);
 }

+ 1 - 85
main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/CreateNewVaultRecoveryKeyController.java

@@ -1,112 +1,28 @@
 package org.cryptomator.ui.addvaultwizard;
 
 import dagger.Lazy;
-import javafx.beans.property.ReadOnlyBooleanProperty;
-import javafx.beans.property.SimpleBooleanProperty;
-import javafx.beans.property.StringProperty;
 import javafx.fxml.FXML;
-import javafx.print.PageLayout;
-import javafx.print.Printer;
-import javafx.print.PrinterJob;
 import javafx.scene.Scene;
-import javafx.scene.control.TextArea;
-import javafx.scene.input.Clipboard;
-import javafx.scene.input.ClipboardContent;
-import javafx.scene.text.Font;
-import javafx.scene.text.FontSmoothingType;
-import javafx.scene.text.FontWeight;
-import javafx.scene.text.Text;
-import javafx.scene.text.TextFlow;
 import javafx.stage.Stage;
 import org.cryptomator.ui.common.FxController;
 import org.cryptomator.ui.common.FxmlFile;
 import org.cryptomator.ui.common.FxmlScene;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import javax.inject.Inject;
-import javax.inject.Named;
 
 public class CreateNewVaultRecoveryKeyController implements FxController {
 
-	private static final Logger LOG = LoggerFactory.getLogger(CreateNewVaultRecoveryKeyController.class);
-
 	private final Stage window;
 	private final Lazy<Scene> successScene;
-	private final StringProperty recoveryKeyProperty;
-	private final StringProperty vaultName;
-	private final ReadOnlyBooleanProperty printerSupported;
-	public TextArea textarea;
 
 	@Inject
-	CreateNewVaultRecoveryKeyController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene, @Named("recoveryKey") StringProperty recoveryKey, @Named("vaultName") StringProperty vaultName) {
+	CreateNewVaultRecoveryKeyController(@AddVaultWizardWindow Stage window, @FxmlScene(FxmlFile.ADDVAULT_SUCCESS) Lazy<Scene> successScene) {
 		this.window = window;
 		this.successScene = successScene;
-		this.recoveryKeyProperty = recoveryKey;
-		this.vaultName = vaultName;
-		this.printerSupported = new SimpleBooleanProperty(Printer.getDefaultPrinter() != null);
-	}
-
-	@FXML
-	public void printRecoveryKey() {
-		// TODO localize
-		
-		PrinterJob job = PrinterJob.createPrinterJob();
-		if (job != null && job.showPrintDialog(window)) {
-			PageLayout pageLayout = job.getJobSettings().getPageLayout();
-
-			Text heading = new Text("Cryptomator Recovery Key\n" + vaultName.get() + "\n");
-			heading.setFont(Font.font("serif", FontWeight.BOLD, 20));
-			heading.setFontSmoothingType(FontSmoothingType.LCD);
-
-			Text key = new Text(recoveryKeyProperty.get());
-			key.setFont(Font.font("serif", FontWeight.NORMAL, 16));
-			key.setFontSmoothingType(FontSmoothingType.GRAY);
-
-			TextFlow textFlow = new TextFlow();
-			textFlow.setPrefSize(pageLayout.getPrintableWidth(), pageLayout.getPrintableHeight());
-			textFlow.getChildren().addAll(heading, key);
-			textFlow.setLineSpacing(6);
-
-			if (job.printPage(textFlow)) {
-				LOG.info("Recovery key printed.");
-				job.endJob();
-			} else {
-				LOG.warn("Printing recovery key failed.");
-			}
-		} else {
-			LOG.info("Printing recovery key canceled by user.");
-		}
-	}
-
-	@FXML
-	public void copyRecoveryKey() {
-		ClipboardContent clipboardContent = new ClipboardContent();
-		clipboardContent.putString(recoveryKeyProperty.get());
-		Clipboard.getSystemClipboard().setContent(clipboardContent);
-		LOG.info("Recovery key copied to clipboard.");
 	}
 
 	@FXML
 	public void next() {
 		window.setScene(successScene.get());
 	}
-
-	/* Getter/Setter */
-
-	public ReadOnlyBooleanProperty printerSupportedProperty() {
-		return printerSupported;
-	}
-
-	public boolean isPrinterSupported() {
-		return printerSupported.get();
-	}
-
-	public String getRecoveryKey() {
-		return recoveryKeyProperty.get();
-	}
-
-	public StringProperty recoveryKeyProperty() {
-		return recoveryKeyProperty;
-	}
 }

+ 1 - 1
main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java

@@ -18,7 +18,7 @@ public enum FxmlFile {
 	PREFERENCES("/fxml/preferences.fxml"), //
 	QUIT("/fxml/quit.fxml"), //
 	RECOVERYKEY_CREATE("/fxml/recoverykey_create.fxml"), //
-	RECOVERYKEY_DISPLAY("/fxml/recoverykey_display.fxml"), //
+	RECOVERYKEY_SUCCESS("/fxml/recoverykey_success.fxml"), //
 	REMOVE_VAULT("/fxml/remove_vault.fxml"), //
 	UNLOCK("/fxml/unlock.fxml"),
 	UNLOCK_SUCCESS("/fxml/unlock_success.fxml"), //

+ 1 - 1
main/ui/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyCreationController.java

@@ -40,7 +40,7 @@ public class RecoveryKeyCreationController implements FxController {
 	public NiceSecurePasswordField passwordField;
 
 	@Inject
-	public RecoveryKeyCreationController(@RecoveryKeyWindow Stage window, @FxmlScene(FxmlFile.RECOVERYKEY_DISPLAY) Lazy<Scene> successScene, @RecoveryKeyWindow Vault vault, RecoveryKeyFactory recoveryKeyFactory, ExecutorService executor, @RecoveryKeyWindow StringProperty recoveryKey) {
+	public RecoveryKeyCreationController(@RecoveryKeyWindow Stage window, @FxmlScene(FxmlFile.RECOVERYKEY_SUCCESS) Lazy<Scene> successScene, @RecoveryKeyWindow Vault vault, RecoveryKeyFactory recoveryKeyFactory, ExecutorService executor, @RecoveryKeyWindow StringProperty recoveryKey) {
 		this.window = window;
 		this.successScene = successScene;
 		this.vault = vault;

+ 13 - 19
main/ui/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyDisplayController.java

@@ -23,21 +23,19 @@ import org.slf4j.LoggerFactory;
 
 import javax.inject.Inject;
 
-@RecoveryKeyScoped
 public class RecoveryKeyDisplayController implements FxController {
 	
 	private static final Logger LOG = LoggerFactory.getLogger(RecoveryKeyDisplayController.class);
 
 	private final Stage window;
-	private final Vault vault;
-	private final StringProperty recoveryKeyProperty;
+	private final String vaultName;
+	private final String recoveryKey;
 	private final ReadOnlyBooleanProperty printerSupported;
-
-	@Inject
-	public RecoveryKeyDisplayController(@RecoveryKeyWindow Stage window, @RecoveryKeyWindow Vault vault, @RecoveryKeyWindow StringProperty recoveryKey) {
+	
+	public RecoveryKeyDisplayController(Stage window, String vaultName, String recoveryKey) {
 		this.window = window;
-		this.vault = vault;
-		this.recoveryKeyProperty = recoveryKey;
+		this.vaultName = vaultName;
+		this.recoveryKey = recoveryKey;
 		this.printerSupported = new SimpleBooleanProperty(Printer.getDefaultPrinter() != null);
 	}
 
@@ -49,11 +47,11 @@ public class RecoveryKeyDisplayController implements FxController {
 		if (job != null && job.showPrintDialog(window)) {
 			PageLayout pageLayout = job.getJobSettings().getPageLayout();
 
-			Text heading = new Text("Cryptomator Recovery Key\n" + vault.getDisplayableName() + "\n");
+			Text heading = new Text("Cryptomator Recovery Key\n" + vaultName + "\n");
 			heading.setFont(Font.font("serif", FontWeight.BOLD, 20));
 			heading.setFontSmoothingType(FontSmoothingType.LCD);
 
-			Text key = new Text(recoveryKeyProperty.get());
+			Text key = new Text(recoveryKey);
 			key.setFont(Font.font("serif", FontWeight.NORMAL, 16));
 			key.setFontSmoothingType(FontSmoothingType.GRAY);
 
@@ -76,7 +74,7 @@ public class RecoveryKeyDisplayController implements FxController {
 	@FXML
 	public void copyRecoveryKey() {
 		ClipboardContent clipboardContent = new ClipboardContent();
-		clipboardContent.putString(recoveryKeyProperty.get());
+		clipboardContent.putString(recoveryKey);
 		Clipboard.getSystemClipboard().setContent(clipboardContent);
 		LOG.info("Recovery key copied to clipboard.");
 	}
@@ -88,10 +86,6 @@ public class RecoveryKeyDisplayController implements FxController {
 
 	/* Getter/Setter */
 
-	public Vault getVault() {
-		return vault;
-	}
-
 	public ReadOnlyBooleanProperty printerSupportedProperty() {
 		return printerSupported;
 	}
@@ -100,11 +94,11 @@ public class RecoveryKeyDisplayController implements FxController {
 		return printerSupported.get();
 	}
 
-	public ReadOnlyStringProperty recoveryKeyProperty() {
-		return recoveryKeyProperty;
+	public String getRecoveryKey() {
+		return recoveryKey;
 	}
 
-	public String getRecoveryKey() {
-		return recoveryKeyProperty.get();
+	public String getVaultName() {
+		return vaultName;
 	}
 }

+ 13 - 5
main/ui/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyModule.java

@@ -10,6 +10,7 @@ import javafx.scene.Scene;
 import javafx.scene.image.Image;
 import javafx.stage.Modality;
 import javafx.stage.Stage;
+import org.cryptomator.common.vaults.Vault;
 import org.cryptomator.ui.common.DefaultSceneFactory;
 import org.cryptomator.ui.common.FXMLLoaderFactory;
 import org.cryptomator.ui.common.FxController;
@@ -63,10 +64,10 @@ abstract class RecoveryKeyModule {
 	}
 
 	@Provides
-	@FxmlScene(FxmlFile.RECOVERYKEY_DISPLAY)
+	@FxmlScene(FxmlFile.RECOVERYKEY_SUCCESS)
 	@RecoveryKeyScoped
-	static Scene provideRecoveryKeyDisplayScene(@RecoveryKeyWindow FXMLLoaderFactory fxmlLoaders) {
-		return fxmlLoaders.createScene("/fxml/recoverykey_display.fxml");
+	static Scene provideRecoveryKeySuccessScene(@RecoveryKeyWindow FXMLLoaderFactory fxmlLoaders) {
+		return fxmlLoaders.createScene("/fxml/recoverykey_success.fxml");
 	}
 
 	// ------------------
@@ -76,9 +77,16 @@ abstract class RecoveryKeyModule {
 	@FxControllerKey(RecoveryKeyCreationController.class)
 	abstract FxController bindRecoveryKeyCreationController(RecoveryKeyCreationController controller);
 
-	@Binds
+	@Provides
 	@IntoMap
 	@FxControllerKey(RecoveryKeyDisplayController.class)
-	abstract FxController bindRecoveryKeyDisplayController(RecoveryKeyDisplayController controller);
+	static FxController provideRecoveryKeyDisplayController(@RecoveryKeyWindow Stage window, @RecoveryKeyWindow Vault vault, @RecoveryKeyWindow StringProperty recoveryKey) {
+		return new RecoveryKeyDisplayController(window, vault.getDisplayableName(), recoveryKey.get());
+	}
+
+	@Binds
+	@IntoMap
+	@FxControllerKey(RecoveryKeySuccessController.class)
+	abstract FxController bindRecoveryKeySuccessController(RecoveryKeySuccessController controller);
 	
 }

+ 24 - 0
main/ui/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeySuccessController.java

@@ -0,0 +1,24 @@
+package org.cryptomator.ui.recoverykey;
+
+import javafx.fxml.FXML;
+import javafx.stage.Stage;
+import org.cryptomator.ui.common.FxController;
+
+import javax.inject.Inject;
+
+@RecoveryKeyScoped
+public class RecoveryKeySuccessController implements FxController {
+
+	private final Stage window;
+
+	@Inject
+	public RecoveryKeySuccessController(@RecoveryKeyWindow Stage window) {
+		this.window = window;
+	}
+
+	@FXML
+	public void close() {
+		window.close();
+	}
+
+}

+ 1 - 24
main/ui/src/main/resources/fxml/addvault_new_recoverykey.fxml

@@ -3,11 +3,8 @@
 <?import javafx.geometry.Insets?>
 <?import javafx.scene.control.Button?>
 <?import javafx.scene.control.ButtonBar?>
-<?import javafx.scene.control.Label?>
-<?import javafx.scene.control.TextArea?>
 <?import javafx.scene.layout.Region?>
 <?import javafx.scene.layout.VBox?>
-<?import org.cryptomator.ui.controls.FontAwesome5IconView?>
 <VBox xmlns="http://javafx.com/javafx"
 	  xmlns:fx="http://javafx.com/fxml"
 	  fx:controller="org.cryptomator.ui.addvaultwizard.CreateNewVaultRecoveryKeyController"
@@ -21,27 +18,7 @@
 	<children>
 		<Region VBox.vgrow="ALWAYS"/>
 
-		<Label text="%addvaultwizard.new.recoveryKeyInstruction" wrapText="true"/>
-
-		<TextArea editable="false" text="${controller.recoveryKey}" wrapText="true" prefRowCount="4" fx:id="textarea"/>
-		<ButtonBar buttonMinWidth="120" buttonOrder="+R">
-			<buttons>
-				<Button text="%generic.button.print" ButtonBar.buttonData="RIGHT" onAction="#printRecoveryKey" visible="${controller.printerSupported}">
-					<graphic>
-						<FontAwesome5IconView glyph="PRINT"/>
-					</graphic>
-				</Button>
-				<Button text="%generic.button.copy" ButtonBar.buttonData="RIGHT" onAction="#copyRecoveryKey">
-					<graphic>
-						<FontAwesome5IconView glyph="COPY"/>
-					</graphic>
-				</Button>
-			</buttons>
-		</ButtonBar>
-
-		<Region VBox.vgrow="ALWAYS"/>
-
-		<Label text="%addvaultwizard.new.recoveryKeyStorageHints" wrapText="true"/>
+		<fx:include source="/fxml/recoverykey_display.fxml"/>
 
 		<Region VBox.vgrow="ALWAYS"/>
 

+ 24 - 42
main/ui/src/main/resources/fxml/recoverykey_display.fxml

@@ -3,58 +3,40 @@
 <?import javafx.geometry.Insets?>
 <?import javafx.scene.control.Button?>
 <?import javafx.scene.control.ButtonBar?>
+<?import javafx.scene.control.Label?>
 <?import javafx.scene.control.TextArea?>
-<?import javafx.scene.layout.HBox?>
-<?import javafx.scene.layout.StackPane?>
+<?import javafx.scene.layout.Region?>
 <?import javafx.scene.layout.VBox?>
-<?import javafx.scene.shape.Circle?>
 <?import org.cryptomator.ui.controls.FontAwesome5IconView?>
 <?import org.cryptomator.ui.controls.FormattedLabel?>
 <VBox xmlns="http://javafx.com/javafx"
 	  xmlns:fx="http://javafx.com/fxml"
 	  fx:controller="org.cryptomator.ui.recoverykey.RecoveryKeyDisplayController"
-	  minWidth="400"
-	  maxWidth="400"
-	  minHeight="145"
-	  maxHeight="180"
+	  minWidth="350"
+	  minHeight="280"
 	  spacing="12"
-	  alignment="TOP_CENTER">
-	<padding>
-		<Insets topRightBottomLeft="12"/>
-	</padding>
+	  alignment="TOP_LEFT">
 	<children>
-		<HBox spacing="12" alignment="CENTER_LEFT" VBox.vgrow="ALWAYS">
-			<StackPane alignment="CENTER" HBox.hgrow="NEVER">
-				<Circle styleClass="glyph-icon-primary" radius="24"/>
-				<FontAwesome5IconView styleClass="glyph-icon-white" glyph="CHECK" glyphSize="24"/>
-			</StackPane>
+		<FormattedLabel format="%recoveryKey.display.message" arg1="${controller.vaultName}" wrapText="true"/>
 
-			<VBox spacing="6" HBox.hgrow="ALWAYS">
-				<FormattedLabel format="%recoveryKey.display.message" arg1="${controller.vault.displayableName}" wrapText="true" VBox.vgrow="NEVER"/>
-				<TextArea editable="false" text="${controller.recoveryKey}" wrapText="true" VBox.vgrow="ALWAYS" prefRowCount="4"/>
-			</VBox>
-		</HBox>
+		<TextArea editable="false" text="${controller.recoveryKey}" wrapText="true" prefRowCount="4" fx:id="textarea"/>
+		<ButtonBar buttonMinWidth="120" buttonOrder="+R">
+			<buttons>
+				<Button text="%generic.button.print" ButtonBar.buttonData="RIGHT" onAction="#printRecoveryKey" visible="${controller.printerSupported}">
+					<graphic>
+						<FontAwesome5IconView glyph="PRINT"/>
+					</graphic>
+				</Button>
+				<Button text="%generic.button.copy" ButtonBar.buttonData="RIGHT" onAction="#copyRecoveryKey">
+					<graphic>
+						<FontAwesome5IconView glyph="COPY"/>
+					</graphic>
+				</Button>
+			</buttons>
+		</ButtonBar>
 
-		<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
-			<ButtonBar buttonMinWidth="100" buttonOrder="+UC">
-				<buttons>
-					<Button text="%generic.button.print" ButtonBar.buttonData="OTHER" onAction="#printRecoveryKey" visible="${controller.printerSupported}">
-						<graphic>
-							<FontAwesome5IconView glyph="PRINT"/>
-						</graphic>
-					</Button>
-					<Button text="%generic.button.copy" ButtonBar.buttonData="OTHER" onAction="#copyRecoveryKey">
-						<graphic>
-							<FontAwesome5IconView glyph="COPY"/>
-						</graphic>
-					</Button>
-					<Button text="%generic.button.done" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close">
-						<graphic>
-							<FontAwesome5IconView glyph="CHECK"/>
-						</graphic>
-					</Button>
-				</buttons>
-			</ButtonBar>
-		</VBox>
+		<Region VBox.vgrow="ALWAYS"/>
+
+		<Label text="%recoveryKey.display.StorageHints" wrapText="true"/>
 	</children>
 </VBox>

+ 32 - 0
main/ui/src/main/resources/fxml/recoverykey_success.fxml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.ButtonBar?>
+<?import javafx.scene.layout.VBox?>
+<?import javafx.scene.layout.Region?>
+<VBox xmlns="http://javafx.com/javafx"
+	  xmlns:fx="http://javafx.com/fxml"
+	  fx:controller="org.cryptomator.ui.recoverykey.RecoveryKeySuccessController"
+	  minWidth="400"
+	  maxWidth="400"
+	  minHeight="145"
+	  spacing="12"
+	  alignment="TOP_CENTER">
+	<padding>
+		<Insets topRightBottomLeft="12"/>
+	</padding>
+	<children>
+		<fx:include source="/fxml/recoverykey_display.fxml"/>
+
+		<Region VBox.vgrow="ALWAYS"/>
+
+		<VBox alignment="BOTTOM_CENTER" VBox.vgrow="ALWAYS">
+			<ButtonBar buttonMinWidth="120" buttonOrder="+C">
+				<buttons>
+					<Button text="%generic.button.done" ButtonBar.buttonData="CANCEL_CLOSE" cancelButton="true" onAction="#close"/>
+				</buttons>
+			</ButtonBar>
+		</VBox>
+	</children>
+</VBox>

+ 2 - 4
main/ui/src/main/resources/i18n/strings.properties

@@ -48,9 +48,6 @@ addvaultwizard.new.createVaultBtn=Create Vault
 addvaultwizard.new.generateRecoveryKeyChoice=You won't be able to access your data without your password. Do you want a recovery key for the case you lose your password?
 addvaultwizard.new.generateRecoveryKeyChoice.yes=Yes please, better safe than sorry
 addvaultwizard.new.generateRecoveryKeyChoice.no=No thanks, I will not lose my password
-### Recovery Key
-addvaultwizard.new.recoveryKeyInstruction=Wise choice! The following recovery key can be used to restore access to your data:
-addvaultwizard.new.recoveryKeyStorageHints=Keep it somewhere very secure, e.g.:\n • Store it using a password manager\n • Save it on a USB flash drive\n • Print it on paper
 ### Information
 addvault.new.readme.storageLocation.fileName=WHAT IS THIS DIRECTORY.rtf
 addvault.new.readme.storageLocation.1=\\fs40\\qc ⚠️  VAULT FILES  ⚠️
@@ -190,7 +187,8 @@ vaultOptions.mount.mountPoint.directoryPickerTitle=Pick an empty directory
 # Recovery Key
 recoveryKey.title=Recovery Key
 recoveryKey.enterPassword.prompt=Enter your password to show the recovery key for "%s":
-recoveryKey.display.message=Recovery Key for "%s":
+recoveryKey.display.message=The following recovery key can be used to restore access to "%s":
+recoveryKey.display.StorageHints=Keep it somewhere very secure, e.g.:\n • Store it using a password manager\n • Save it on a USB flash drive\n • Print it on paper
 
 # Misc
 passwordStrength.messageLabel.0=Very weak