Animate spinner in health check

This commit is contained in:
Armin Schrenk
2021-07-26 18:55:28 +02:00
parent c81ef1c109
commit 9b57c8fc71
2 changed files with 17 additions and 1 deletions

View File

@@ -3,6 +3,8 @@ package org.cryptomator.ui.health;
import com.tobiasdiez.easybind.EasyBind;
import com.tobiasdiez.easybind.Subscription;
import org.cryptomator.cryptofs.health.api.DiagnosticResult;
import org.cryptomator.ui.common.Animations;
import org.cryptomator.ui.common.AutoAnimator;
import org.cryptomator.ui.controls.FontAwesome5Icon;
import org.cryptomator.ui.controls.FontAwesome5IconView;
@@ -22,6 +24,7 @@ public class CheckStateIconView extends FontAwesome5IconView {
private final ObservableObjectValue<Check.CheckState> state;
private final ObservableObjectValue<DiagnosticResult.Severity> severity;
private final List<Subscription> subscriptions;
private final AutoAnimator onRunningRotator;
public CheckStateIconView() {
this.state = EasyBind.wrapNullable(check).mapObservable(Check::stateProperty).asOrdinary();
@@ -33,6 +36,11 @@ public class CheckStateIconView extends FontAwesome5IconView {
EasyBind.includeWhen(getStyleClass(), "glyph-icon-orange", Bindings.equal(severity, DiagnosticResult.Severity.WARN).or(Bindings.equal(severity, DiagnosticResult.Severity.CRITICAL))), //
EasyBind.includeWhen(getStyleClass(), "glyph-icon-red", Bindings.equal(state, Check.CheckState.ERROR)) //
);
var animation = Animations.createDiscrete360Rotation(this);
this.onRunningRotator = AutoAnimator.animate(animation) //
.onCondition(Bindings.equal(state, Check.CheckState.RUNNING)) //
.afterStop(() -> setRotate(0)) //
.build();
}
private FontAwesome5Icon glyphForState() {

View File

@@ -3,6 +3,8 @@ package org.cryptomator.ui.health;
import com.tobiasdiez.easybind.EasyBind;
import com.tobiasdiez.easybind.Subscription;
import org.cryptomator.cryptofs.health.api.DiagnosticResult;
import org.cryptomator.ui.common.Animations;
import org.cryptomator.ui.common.AutoAnimator;
import org.cryptomator.ui.common.FxController;
import org.cryptomator.ui.controls.FontAwesome5Icon;
import org.cryptomator.ui.controls.FontAwesome5IconView;
@@ -51,6 +53,8 @@ public class ResultListCellController implements FxController {
private final Tooltip fixSuccess;
private final Tooltip fixFail;
private AutoAnimator fixRunningRotator;
/* FXML */
public FontAwesome5IconView severityView;
public FontAwesome5IconView fixView;
@@ -83,8 +87,12 @@ public class ResultListCellController implements FxController {
EasyBind.includeWhen(severityView.getStyleClass(), "glyph-icon-primary", Bindings.equal(severity, DiagnosticResult.Severity.GOOD)), //
EasyBind.includeWhen(severityView.getStyleClass(), "glyph-icon-orange", Bindings.equal(severity, DiagnosticResult.Severity.WARN)), //
EasyBind.includeWhen(severityView.getStyleClass(), "glyph-icon-red", Bindings.equal(severity, DiagnosticResult.Severity.CRITICAL)) //
// EasyBind.includeWhen(fixView.getStyleClass(), "glyph-icon-muted", fixView.glyphProperty().isNotNull())) // TODO not really needed, right?
));
var animation = Animations.createDiscrete360Rotation(fixView);
this.fixRunningRotator = AutoAnimator.animate(animation) //
.onCondition(Bindings.equal(fixState, Result.FixState.FIXING)) //
.afterStop(() -> fixView.setRotate(0)) //
.build();
}
@FXML