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

This commit is contained in:
Jan-Peter Klein
2024-09-04 13:23:36 +02:00
parent d65beb632d
commit 7cdb2025dc
9 changed files with 131 additions and 25 deletions

View File

@@ -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"), //

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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 *

View File

@@ -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 *

View File

@@ -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 Cryptomators 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="LINK"/>
<FontAwesome5IconView glyph="TRASH"/>
</graphic>
</Hyperlink>
</VBox>
</HBox>
</Button>
<Button text="Donate" minWidth="100" onAction="#showDonate">
<graphic>
<FontAwesome5IconView glyph="DONATE"/>
</graphic>
</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>

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB