diff --git a/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordComponent.java b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordComponent.java new file mode 100644 index 000000000..995c18f2d --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordComponent.java @@ -0,0 +1,37 @@ +package org.cryptomator.ui.changepassword; + +import dagger.BindsInstance; +import dagger.Lazy; +import dagger.Subcomponent; +import javafx.scene.Scene; +import javafx.stage.Stage; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.ui.common.FxmlFile; +import org.cryptomator.ui.common.FxmlScene; + +@ChangePasswordScoped +@Subcomponent(modules = {ChangePasswordModule.class}) +public interface ChangePasswordComponent { + + @ChangePasswordWindow + Stage window(); + + @FxmlScene(FxmlFile.CHANGEPASSWORD) + Lazy scene(); + + default void showChangePasswordWindow() { + Stage stage = window(); + stage.setScene(scene().get()); + stage.show(); + } + + @Subcomponent.Builder + interface Builder { + + @BindsInstance + Builder vault(@ChangePasswordWindow Vault vault); + + ChangePasswordComponent build(); + } + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordController.java b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordController.java new file mode 100644 index 000000000..b34ad1721 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordController.java @@ -0,0 +1,24 @@ +package org.cryptomator.ui.changepassword; + +import javafx.stage.Stage; +import org.cryptomator.common.vaults.Vault; +import org.cryptomator.ui.common.FxController; + +import javax.inject.Inject; +import java.util.ResourceBundle; + +@ChangePasswordScoped +public class ChangePasswordController implements FxController { + + private final Stage window; + private final Vault vault; + private final ResourceBundle resourceBundle; + + @Inject + public ChangePasswordController(@ChangePasswordWindow Stage window, @ChangePasswordWindow Vault vault, ResourceBundle resourceBundle) { + this.window = window; + this.vault = vault; + this.resourceBundle = resourceBundle; + } + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordModule.java b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordModule.java new file mode 100644 index 000000000..87d58f5ff --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordModule.java @@ -0,0 +1,56 @@ +package org.cryptomator.ui.changepassword; + +import dagger.Binds; +import dagger.Module; +import dagger.Provides; +import dagger.multibindings.IntoMap; +import javafx.scene.Scene; +import javafx.stage.Modality; +import javafx.stage.Stage; +import org.cryptomator.ui.common.FXMLLoaderFactory; +import org.cryptomator.ui.common.FxController; +import org.cryptomator.ui.common.FxControllerKey; +import org.cryptomator.ui.common.FxmlFile; +import org.cryptomator.ui.common.FxmlScene; + +import javax.inject.Provider; +import java.util.Map; +import java.util.ResourceBundle; + +@Module +abstract class ChangePasswordModule { + + @Provides + @ChangePasswordWindow + @ChangePasswordScoped + static FXMLLoaderFactory provideFxmlLoaderFactory(Map, Provider> factories, ResourceBundle resourceBundle) { + return new FXMLLoaderFactory(factories, resourceBundle); + } + + @Provides + @ChangePasswordWindow + @ChangePasswordScoped + static Stage provideStage(ResourceBundle resourceBundle) { + Stage stage = new Stage(); + stage.setTitle(resourceBundle.getString("changepassword.title")); + stage.setResizable(false); + stage.initModality(Modality.APPLICATION_MODAL); + return stage; + } + + @Provides + @FxmlScene(FxmlFile.CHANGEPASSWORD) + @ChangePasswordScoped + static Scene provideUnlockScene(@ChangePasswordWindow FXMLLoaderFactory fxmlLoaders) { + return fxmlLoaders.createScene("/fxml/changepassword.fxml"); + } + + + // ------------------ + + @Binds + @IntoMap + @FxControllerKey(ChangePasswordController.class) + abstract FxController bindUnlockController(ChangePasswordController controller); + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordScoped.java b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordScoped.java new file mode 100644 index 000000000..be5f2f216 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordScoped.java @@ -0,0 +1,13 @@ +package org.cryptomator.ui.changepassword; + +import javax.inject.Scope; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Scope +@Documented +@Retention(RetentionPolicy.RUNTIME) +@interface ChangePasswordScoped { + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordWindow.java b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordWindow.java new file mode 100644 index 000000000..4e4030fb0 --- /dev/null +++ b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordWindow.java @@ -0,0 +1,14 @@ +package org.cryptomator.ui.changepassword; + +import javax.inject.Qualifier; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Qualifier +@Documented +@Retention(RUNTIME) +public @interface ChangePasswordWindow { + +} diff --git a/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java b/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java index 103d01e04..24d08d85f 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java +++ b/main/ui/src/main/java/org/cryptomator/ui/common/FxmlFile.java @@ -1,12 +1,13 @@ package org.cryptomator.ui.common; public enum FxmlFile { - MAIN_WINDOW("/fxml/main_window.fxml"), // ADDVAULT_WELCOME("/fxml/addvault_welcome.fxml"), // ADDVAULT_EXISTING("/fxml/addvault_existing.fxml"), // ADDVAULT_NEW_NAME("/fxml/addvault_new_name.fxml"), // ADDVAULT_NEW_LOCATION("/fxml/addvault_new_location.fxml"), // ADDVAULT_NEW_PASSWORD("/fxml/addvault_new_password.fxml"), // + CHANGEPASSWORD("/fxml/changepassword.fxml"), + MAIN_WINDOW("/fxml/main_window.fxml"), // PREFERENCES("/fxml/preferences.fxml"), // QUIT("/fxml/quit.fxml"), UNLOCK("/fxml/unlock2.fxml"), // TODO rename diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java index d713f9777..6fbd13c7a 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowModule.java @@ -11,6 +11,7 @@ import javafx.scene.input.KeyCombination; import javafx.stage.Stage; import javafx.stage.StageStyle; import org.cryptomator.ui.addvaultwizard.AddVaultWizardComponent; +import org.cryptomator.ui.changepassword.ChangePasswordComponent; import org.cryptomator.ui.common.FXMLLoaderFactory; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.FxControllerKey; @@ -22,7 +23,7 @@ import javax.inject.Provider; import java.util.Map; import java.util.ResourceBundle; -@Module(subcomponents = {AddVaultWizardComponent.class, VaultOptionsComponent.class}) +@Module(subcomponents = {AddVaultWizardComponent.class, VaultOptionsComponent.class, ChangePasswordComponent.class}) abstract class MainWindowModule { @Provides diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java index eec1a2f79..a993cb9ba 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailController.java @@ -4,6 +4,7 @@ import javafx.beans.property.ObjectProperty; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.fxml.FXML; import org.cryptomator.common.vaults.Vault; +import org.cryptomator.ui.changepassword.ChangePasswordComponent; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.common.Tasks; import org.cryptomator.ui.fxapp.FxApplication; @@ -23,13 +24,15 @@ public class VaultDetailController implements FxController { private final ExecutorService executor; private final FxApplication application; private final VaultOptionsComponent.Builder vaultOptionsWindow; + private final ChangePasswordComponent.Builder changePasswordWindow; @Inject - VaultDetailController(ObjectProperty vault, ExecutorService executor, FxApplication application, VaultOptionsComponent.Builder vaultOptionsWindow) { + VaultDetailController(ObjectProperty vault, ExecutorService executor, FxApplication application, VaultOptionsComponent.Builder vaultOptionsWindow, ChangePasswordComponent.Builder changePasswordWindow) { this.vault = vault; this.executor = executor; this.application = application; this.vaultOptionsWindow = vaultOptionsWindow; + this.changePasswordWindow = changePasswordWindow; } @FXML @@ -50,12 +53,17 @@ public class VaultDetailController implements FxController { // TODO }).runOnce(executor); } - + @FXML public void showVaultOptions() { vaultOptionsWindow.vault(vault.get()).build().showVaultOptionsWindow(); } + @FXML + public void changePassword() { + changePasswordWindow.vault(vault.get()).build().showChangePasswordWindow(); + } + /* Observable Properties */ public ReadOnlyObjectProperty vaultProperty() { @@ -65,5 +73,5 @@ public class VaultDetailController implements FxController { public Vault getVault() { return vault.get(); } - + } diff --git a/main/ui/src/main/resources/fxml/changepassword.fxml b/main/ui/src/main/resources/fxml/changepassword.fxml new file mode 100644 index 000000000..5e735dd46 --- /dev/null +++ b/main/ui/src/main/resources/fxml/changepassword.fxml @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/main/ui/src/main/resources/fxml/vault_detail.fxml b/main/ui/src/main/resources/fxml/vault_detail.fxml index 66bcd0824..bb0fba423 100644 --- a/main/ui/src/main/resources/fxml/vault_detail.fxml +++ b/main/ui/src/main/resources/fxml/vault_detail.fxml @@ -17,5 +17,6 @@