From b3789700e1b82fe54e8f56e8741cd85f4589919e Mon Sep 17 00:00:00 2001 From: Jan-Peter Klein Date: Tue, 5 Mar 2024 12:56:38 +0100 Subject: [PATCH] add upToDateLabel and fix update indicator issue --- .../cryptomator/ui/fxapp/UpdateChecker.java | 2 +- .../mainwindow/MainWindowTitleController.java | 2 +- .../UpdatesPreferencesController.java | 27 +++++++++++++++++-- .../resources/fxml/preferences_updates.fxml | 5 ++++ src/main/resources/i18n/strings.properties | 1 + 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java b/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java index a29a06e59..e2e423f84 100644 --- a/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java +++ b/src/main/java/org/cryptomator/ui/fxapp/UpdateChecker.java @@ -68,9 +68,9 @@ public class UpdateChecker { private void checkSucceeded(WorkerStateEvent event) { String latestVersion = updateCheckerService.getValue(); LOG.info("Current version: {}, latest version: {}", getCurrentVersion(), latestVersion); - state.set(UpdateCheckState.CHECK_SUCCESSFUL); updateCheckTimeProperty.set(LocalDateTime.now()); latestVersionProperty.set(latestVersion); + state.set(UpdateCheckState.CHECK_SUCCESSFUL); } private void checkFailed(WorkerStateEvent event) { diff --git a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java index 479a2d860..2dcbd6095 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java @@ -46,7 +46,7 @@ public class MainWindowTitleController implements FxController { this.appWindows = appWindows; this.trayMenuInitialized = trayMenu.isInitialized(); this.updateChecker = updateChecker; - this.updateAvailable = updateChecker.latestVersionProperty().isNotNull(); + this.updateAvailable = updateChecker.updateCheckStateProperty().isEqualTo(UpdateChecker.UpdateCheckState.CHECK_SUCCESSFUL).and(updateChecker.latestVersionProperty().isNotEqualTo(updateChecker.getCurrentVersion())); this.licenseHolder = licenseHolder; this.settings = settings; this.showMinimizeButton = Bindings.createBooleanBinding(this::isShowMinimizeButton, settings.showMinimizeButton, settings.showTrayIcon); diff --git a/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java b/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java index fb5fd964c..57ebc9706 100644 --- a/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java +++ b/src/main/java/org/cryptomator/ui/preferences/UpdatesPreferencesController.java @@ -8,6 +8,7 @@ import org.cryptomator.ui.controls.FormattedLabel; import org.cryptomator.ui.fxapp.UpdateChecker; import javax.inject.Inject; +import javafx.animation.PauseTransition; import javafx.application.Application; import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanBinding; @@ -17,13 +18,17 @@ import javafx.beans.property.ReadOnlyStringProperty; import javafx.fxml.FXML; import javafx.scene.control.CheckBox; import javafx.scene.control.ContentDisplay; +import javafx.scene.control.Label; import javafx.scene.layout.HBox; +import javafx.util.Duration; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; import java.util.Comparator; import java.util.Locale; + + @PreferencesScoped public class UpdatesPreferencesController implements FxController { @@ -46,6 +51,7 @@ public class UpdatesPreferencesController implements FxController { public FormattedLabel updateCheckDateFormattedLabel; public HBox checkFailedHBox; public FormattedLabel latestVersionFormattedLabel; + public Label upToDateLabel; @Inject UpdatesPreferencesController(Application application, Environment environment, Settings settings, UpdateChecker updateChecker) { @@ -73,11 +79,28 @@ public class UpdatesPreferencesController implements FxController { DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).withLocale(Locale.getDefault()); updateCheckDateFormattedLabel.arg1Property().bind(Bindings.createStringBinding(() -> (updateCheckDateProperty.get() != null) ? updateCheckDateProperty.get().format(formatter) : "-", updateCheckDateProperty)); - checkFailedHBox.managedProperty().bind(updateCheckStateProperty.isEqualTo(UpdateChecker.UpdateCheckState.CHECK_FAILED)); - checkFailedHBox.visibleProperty().bind(updateCheckStateProperty.isEqualTo(UpdateChecker.UpdateCheckState.CHECK_FAILED)); + BooleanBinding isUpdateCheckFailed = updateCheckStateProperty.isEqualTo(UpdateChecker.UpdateCheckState.CHECK_FAILED); + checkFailedHBox.managedProperty().bind(isUpdateCheckFailed); + checkFailedHBox.visibleProperty().bind(isUpdateCheckFailed); latestVersionFormattedLabel.arg1Property().bind(Bindings.createStringBinding(() -> (latestVersion.get() != null) ? latestVersion.get() : "-", latestVersion)); + BooleanBinding isUpdateSuccessfulAndCurrent = updateCheckStateProperty.isEqualTo(UpdateChecker.UpdateCheckState.CHECK_SUCCESSFUL) + .and(latestVersion.isEqualTo(currentVersion)); + + updateCheckStateProperty.addListener((_, _, _) -> { + if (isUpdateSuccessfulAndCurrent.get()) { + upToDateLabel.setVisible(true); + upToDateLabel.setManaged(true); + + PauseTransition delay = new PauseTransition(Duration.seconds(5)); + delay.setOnFinished(_ -> { + upToDateLabel.setVisible(false); + upToDateLabel.setManaged(false); + }); + delay.play(); + } + }); } @FXML diff --git a/src/main/resources/fxml/preferences_updates.fxml b/src/main/resources/fxml/preferences_updates.fxml index ef037580f..3db4824f5 100644 --- a/src/main/resources/fxml/preferences_updates.fxml +++ b/src/main/resources/fxml/preferences_updates.fxml @@ -42,6 +42,11 @@ + diff --git a/src/main/resources/i18n/strings.properties b/src/main/resources/i18n/strings.properties index 0a4c795a0..96b49d119 100644 --- a/src/main/resources/i18n/strings.properties +++ b/src/main/resources/i18n/strings.properties @@ -324,6 +324,7 @@ preferences.updates.checkNowBtn=Check Now preferences.updates.updateAvailable=Update to version %s available. preferences.updates.lastUpdateCheck=The last update check was performed on: %s preferences.updates.checkFailed=Check failed +preferences.updates.upToDate=Cryptomator is up-to-date. ## Contribution preferences.contribute=Support Us