ソースを参照

improved supporter cert ui with cert stemp, donate/sponsors link buttons and remove button with dialog

Jan-Peter Klein 9 ヶ月 前
コミット
7cdb2025dc

+ 2 - 0
src/main/java/org/cryptomator/ui/controls/FontAwesome5Icon.java

@@ -17,6 +17,7 @@ public enum FontAwesome5Icon {
 	COGS("\uF085"), //
 	COPY("\uF0C5"), //
 	CROWN("\uF521"), //
+	DONATE("\uF4B9"), //
 	EDIT("\uF044"), //
 	EXCHANGE_ALT("\uF362"), //
 	EXCLAMATION("\uF12A"), //
@@ -49,6 +50,7 @@ public enum FontAwesome5Icon {
 	SEARCH("\uF002"), //
 	SHARE("\uF064"), //
 	SPINNER("\uF110"), //
+	SPONSORS("\uF2B5"), //
 	STETHOSCOPE("\uF0f1"), //
 	SYNC("\uF021"), //
 	TIMES("\uF00D"), //

+ 1 - 1
src/main/java/org/cryptomator/ui/preferences/PreferencesComponent.java

@@ -31,7 +31,7 @@ public interface PreferencesComponent {
 		Stage stage = window();
 		stage.setScene(scene().get());
 		stage.setMinWidth(420);
-		stage.setMinHeight(300);
+		stage.setMinHeight(400);
 		stage.show();
 		stage.requestFocus();
 		return stage;

+ 38 - 2
src/main/java/org/cryptomator/ui/preferences/SupporterCertificateController.java

@@ -10,24 +10,36 @@ import javax.inject.Inject;
 import javafx.application.Application;
 import javafx.beans.value.ObservableValue;
 import javafx.fxml.FXML;
+import javafx.scene.control.Alert;
+import javafx.scene.control.Button;
+import javafx.scene.control.ButtonType;
 import javafx.scene.control.TextArea;
 import javafx.scene.control.TextFormatter;
+import java.util.ResourceBundle;
 
 @PreferencesScoped
 public class SupporterCertificateController implements FxController {
 
+	private static final String DONATE_URI = "https://cryptomator.org/donate";
+	private static final String SPONSORS_URI = "https://cryptomator.org/sponsors";
 	private static final String SUPPORTER_URI = "https://store.cryptomator.org/desktop";
 
 	private final Application application;
 	private final LicenseHolder licenseHolder;
 	private final Settings settings;
-	public TextArea supporterCertificateField;
+	private final ResourceBundle resourceBundle;
+
+	@FXML
+	private TextArea supporterCertificateField;
+	@FXML
+	private Button trashButton;
 
 	@Inject
-	SupporterCertificateController(Application application, LicenseHolder licenseHolder, Settings settings) {
+	SupporterCertificateController(Application application, LicenseHolder licenseHolder, Settings settings, ResourceBundle resourceBundle) {
 		this.application = application;
 		this.licenseHolder = licenseHolder;
 		this.settings = settings;
+		this.resourceBundle = resourceBundle;
 	}
 
 	@FXML
@@ -35,6 +47,20 @@ public class SupporterCertificateController implements FxController {
 		supporterCertificateField.setText(licenseHolder.getLicenseKey().orElse(null));
 		supporterCertificateField.textProperty().addListener(this::registrationKeyChanged);
 		supporterCertificateField.setTextFormatter(new TextFormatter<>(this::removeWhitespaces));
+
+		trashButton.setOnAction(_ -> {
+			Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
+			alert.setTitle(resourceBundle.getString("removeLicenseKeyDialog.title"));
+			alert.setHeaderText(resourceBundle.getString("removeLicenseKeyDialog.header"));
+			alert.setContentText(resourceBundle.getString("removeLicenseKeyDialog.content"));
+
+			alert.showAndWait().ifPresent(response -> {
+				if (response == ButtonType.OK) {
+					supporterCertificateField.setText(null);
+					settings.licenseKey.set(null);
+				}
+			});
+		});
 	}
 
 	private TextFormatter.Change removeWhitespaces(TextFormatter.Change change) {
@@ -57,6 +83,16 @@ public class SupporterCertificateController implements FxController {
 		application.getHostServices().showDocument(SUPPORTER_URI);
 	}
 
+	@FXML
+	public void showDonate() {
+		application.getHostServices().showDocument(DONATE_URI);
+	}
+
+	@FXML
+	public void showSponsors() {
+		application.getHostServices().showDocument(SPONSORS_URI);
+	}
+
 	public LicenseHolder getLicenseHolder() {
 		return licenseHolder;
 	}

+ 20 - 0
src/main/resources/css/dark_theme.css

@@ -266,6 +266,26 @@
 	-fx-background-insets: 0, 0 1 0 0;
 }
 
+/*******************************************************************************
+ *                                                                             *
+ * Alert-Dialogs                                                               *
+ *                                                                             *
+ ******************************************************************************/
+
+.dialog-pane {
+    -fx-padding: 12px;
+}
+
+.dialog-pane .header-panel {
+	-fx-font-family: 'Open Sans SemiBold';
+	-fx-font-size: 1.2em;
+}
+
+.dialog-pane .content {
+	-fx-font-family: 'Open Sans';
+    -fx-padding: 12 0 12 0;
+}
+
 /*******************************************************************************
  *                                                                             *
  * Vault List                                                                  *

+ 20 - 0
src/main/resources/css/light_theme.css

@@ -265,6 +265,26 @@
 	-fx-background-insets: 0, 0 1 0 0;
 }
 
+/*******************************************************************************
+ *                                                                             *
+ * Alert-Dialogs                                                               *
+ *                                                                             *
+ ******************************************************************************/
+
+.dialog-pane {
+    -fx-padding: 12px;
+}
+
+.dialog-pane .header-panel {
+	-fx-font-family: 'Open Sans SemiBold';
+	-fx-font-size: 1.2em;
+}
+
+.dialog-pane .content {
+	-fx-font-family: 'Open Sans';
+    -fx-padding: 12 0 12 0;
+}
+
 /*******************************************************************************
  *                                                                             *
  * Vault List                                                                  *

+ 45 - 22
src/main/resources/fxml/preferences_contribute.fxml

@@ -10,6 +10,11 @@
 <?import javafx.scene.layout.StackPane?>
 <?import javafx.scene.layout.VBox?>
 <?import javafx.scene.shape.Circle?>
+<?import javafx.scene.image.ImageView?>
+<?import javafx.scene.image.Image?>
+<?import javafx.scene.text.Text?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.layout.Region?>
 <VBox xmlns:fx="http://javafx.com/fxml"
 	  xmlns="http://javafx.com/javafx"
 	  fx:controller="org.cryptomator.ui.preferences.SupporterCertificateController"
@@ -18,31 +23,49 @@
 		<Insets topRightBottomLeft="24"/>
 	</padding>
 	<children>
-		<StackPane VBox.vgrow="NEVER" prefHeight="60">
-			<HBox spacing="12" alignment="CENTER_LEFT" visible="${controller.licenseHolder.validLicense}">
-				<StackPane alignment="CENTER" HBox.hgrow="NEVER">
-					<Circle styleClass="glyph-icon-primary" radius="24"/>
-					<FontAwesome5IconView styleClass="glyph-icon-white" glyph="CROWN" glyphSize="24"/>
-				</StackPane>
+		<StackPane VBox.vgrow="NEVER" prefHeight="60" alignment="TOP_CENTER">
+			<VBox alignment="TOP_CENTER" visible="${controller.licenseHolder.validLicense}">
+				<Text styleClass="label-extra-large" text="Thank you for supporting Cryptomator’s open-source development!" wrappingWidth="400" textAlignment="CENTER"/>
+				<ImageView fitHeight="180">
+					<Image url="@../img/supporter_cert_stemp.png"/>
+				</ImageView>
 				<FormattedLabel format="%preferences.contribute.registeredFor" arg1="${controller.licenseHolder.licenseSubject}" wrapText="true"/>
-			</HBox>
-
-			<HBox spacing="12" alignment="CENTER_LEFT" visible="${!controller.licenseHolder.validLicense}">
-				<StackPane alignment="CENTER" HBox.hgrow="NEVER">
-					<Circle styleClass="glyph-icon-primary" radius="24"/>
-					<FontAwesome5IconView styleClass="glyph-icon-white" glyph="HAND_HOLDING_HEART" glyphSize="24"/>
-				</StackPane>
-				<VBox HBox.hgrow="ALWAYS" spacing="6">
-					<Label text="%preferences.contribute.noCertificate" wrapText="true" VBox.vgrow="ALWAYS"/>
-					<Hyperlink text="%preferences.contribute.getCertificate" onAction="#getSupporterCertificate" contentDisplay="LEFT">
+				<Region minHeight="12"/>
+				<HBox alignment="BOTTOM_CENTER" spacing="6">
+					<Button fx:id="trashButton">
+						<graphic>
+							<FontAwesome5IconView glyph="TRASH"/>
+						</graphic>
+					</Button>
+					<Button text="Donate" minWidth="100" onAction="#showDonate">
 						<graphic>
-							<FontAwesome5IconView glyph="LINK"/>
+							<FontAwesome5IconView glyph="DONATE"/>
 						</graphic>
-					</Hyperlink>
-				</VBox>
-			</HBox>
+					</Button>
+					<Button text="Sponsors" minWidth="100" onAction="#showSponsors">
+						<graphic>
+							<FontAwesome5IconView glyph="SPONSORS"/>
+						</graphic>
+					</Button>
+				</HBox>
+			</VBox>
+			<VBox spacing="12" visible="${!controller.licenseHolder.validLicense}">
+				<HBox spacing="12" alignment="CENTER_LEFT" >
+					<StackPane alignment="CENTER" HBox.hgrow="NEVER">
+						<Circle styleClass="glyph-icon-primary" radius="24"/>
+						<FontAwesome5IconView styleClass="glyph-icon-white" glyph="HAND_HOLDING_HEART" glyphSize="24"/>
+					</StackPane>
+					<VBox HBox.hgrow="ALWAYS" spacing="6">
+						<Label text="%preferences.contribute.noCertificate" wrapText="true" VBox.vgrow="ALWAYS"/>
+						<Hyperlink text="%preferences.contribute.getCertificate" onAction="#getSupporterCertificate" contentDisplay="LEFT">
+							<graphic>
+								<FontAwesome5IconView glyph="LINK"/>
+							</graphic>
+						</Hyperlink>
+					</VBox>
+				</HBox>
+				<TextArea fx:id="supporterCertificateField" promptText="%preferences.contribute.promptText" wrapText="true" VBox.vgrow="ALWAYS" prefRowCount="6"/>
+			</VBox>
 		</StackPane>
-
-		<TextArea fx:id="supporterCertificateField" promptText="%preferences.contribute.promptText" wrapText="true" VBox.vgrow="ALWAYS" prefRowCount="6"/>
 	</children>
 </VBox>

+ 5 - 0
src/main/resources/i18n/strings.properties

@@ -336,6 +336,11 @@ preferences.contribute.registeredFor=Supporter certificate registered for %s
 preferences.contribute.noCertificate=Support Cryptomator and receive a supporter certificate. It's like a license key but for awesome people using free software. ;-)
 preferences.contribute.getCertificate=Don't have one already? Learn how you can obtain it.
 preferences.contribute.promptText=Paste supporter certificate code here
+
+### Remove License Key Dialog
+removeLicenseKeyDialog.title=Confirm Removal
+removeLicenseKeyDialog.header=Remove Certificate
+removeLicenseKeyDialog.content=Are you sure you want to remove the certificate?
 #<-- Add entries for donations and code/translation/documentation contribution -->
 
 ## About

BIN
src/main/resources/img/supporter_cert_stemp.png


BIN
src/main/resources/img/supporter_cert_stemp@2x.png