39
39
import haveno .core .payment .payload .PaymentMethod ;
40
40
import haveno .core .payment .validation .XmrValidator ;
41
41
import haveno .core .trade .HavenoUtils ;
42
+ import haveno .core .user .DontShowAgainLookup ;
42
43
import haveno .core .user .Preferences ;
43
44
import haveno .core .user .User ;
44
45
import haveno .core .util .FormattingUtils ;
@@ -111,7 +112,7 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Preferenc
111
112
private int gridRow = 0 ;
112
113
private int displayCurrenciesGridRowIndex = 0 ;
113
114
private InputTextField ignoreTradersListInputTextField ,
114
- autoConfRequiredConfirmationsTf , autoConfServiceAddressTf , autoConfTradeLimitTf , /*referralIdInputTextField,*/
115
+ autoConfRequiredConfirmationsTf , autoConfServiceAddressTf , autoConfTradeLimitTf , clearDataAfterDaysInputTextField ,
115
116
rpcUserTextField , blockNotifyPortTextField ;
116
117
private PasswordTextField rpcPwTextField ;
117
118
@@ -135,7 +136,7 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Preferenc
135
136
private ObservableList <TradeCurrency > tradeCurrencies ;
136
137
private InputTextField deviationInputTextField ;
137
138
private ChangeListener <String > deviationListener , ignoreTradersListListener ,
138
- rpcUserListener , rpcPwListener , blockNotifyPortListener ,
139
+ rpcUserListener , rpcPwListener , blockNotifyPortListener , clearDataAfterDaysListener ,
139
140
autoConfTradeLimitListener , autoConfServiceAddressListener ;
140
141
private ChangeListener <Boolean > deviationFocusedListener ;
141
142
private final boolean displayStandbyModeFeature ;
@@ -184,6 +185,24 @@ public void initialize() {
184
185
185
186
@ Override
186
187
protected void activate () {
188
+ String key = "sensitiveDataRemovalInfo" ;
189
+ if (DontShowAgainLookup .showAgain (key ) &&
190
+ (preferences .getClearDataAfterDays () == 0 ||
191
+ preferences .getClearDataAfterDays () == Preferences .CLEAR_DATA_AFTER_DAYS_DISABLED )) { // existing users must agree to new feature
192
+ new Popup ()
193
+ .headLine (Res .get ("setting.info.headline" ))
194
+ .backgroundInfo (Res .get ("settings.preferences.sensitiveDataRemoval.msg" ))
195
+ .actionButtonText (Res .get ("shared.iUnderstand" ))
196
+ .onAction (() -> {
197
+ DontShowAgainLookup .dontShowAgain (key , true );
198
+ // user has acknowledged, enable the feature with a reasonable default value
199
+ preferences .setClearDataAfterDays (Preferences .CLEAR_DATA_AFTER_DAYS_DEFAULT );
200
+ clearDataAfterDaysInputTextField .setText (String .valueOf (preferences .getClearDataAfterDays ()));
201
+ })
202
+ .closeButtonText (Res .get ("shared.cancel" ))
203
+ .show ();
204
+ }
205
+
187
206
// We want to have it updated in case an asset got removed
188
207
allCryptoCurrencies = FXCollections .observableArrayList (CurrencyUtil .getActiveSortedCryptoCurrencies (filterManager ));
189
208
allCryptoCurrencies .removeAll (cryptoCurrencies );
@@ -207,7 +226,7 @@ protected void deactivate() {
207
226
///////////////////////////////////////////////////////////////////////////////////////////
208
227
209
228
private void initializeGeneralOptions () {
210
- int titledGroupBgRowSpan = displayStandbyModeFeature ? 7 : 6 ;
229
+ int titledGroupBgRowSpan = displayStandbyModeFeature ? 8 : 7 ;
211
230
TitledGroupBg titledGroupBg = addTitledGroupBg (root , gridRow , titledGroupBgRowSpan , Res .get ("setting.preferences.general" ));
212
231
GridPane .setColumnSpan (titledGroupBg , 1 );
213
232
@@ -257,14 +276,30 @@ private void initializeGeneralOptions() {
257
276
}
258
277
};
259
278
279
+ // clearDataAfterDays
280
+ clearDataAfterDaysInputTextField = addInputTextField (root , ++gridRow , Res .get ("setting.preferences.clearDataAfterDays" ));
281
+ IntegerValidator clearDataAfterDaysValidator = new IntegerValidator ();
282
+ clearDataAfterDaysValidator .setMinValue (1 );
283
+ clearDataAfterDaysValidator .setMaxValue (Preferences .CLEAR_DATA_AFTER_DAYS_DISABLED );
284
+ clearDataAfterDaysInputTextField .setValidator (clearDataAfterDaysValidator );
285
+ clearDataAfterDaysListener = (observable , oldValue , newValue ) -> {
286
+ try {
287
+ int value = Integer .parseInt (newValue );
288
+ if (!newValue .equals (oldValue )) {
289
+ preferences .setClearDataAfterDays (value );
290
+ }
291
+ } catch (Throwable ignore ) {
292
+ }
293
+ };
294
+
260
295
if (displayStandbyModeFeature ) {
261
296
// AvoidStandbyModeService feature works only on OSX & Windows
262
297
avoidStandbyMode = addSlideToggleButton (root , ++gridRow ,
263
298
Res .get ("setting.preferences.avoidStandbyMode" ));
264
299
}
265
300
266
301
useSoundForNotifications = addSlideToggleButton (root , ++gridRow ,
267
- Res .get ("setting.preferences.useSoundForNotifications" ));
302
+ Res .get ("setting.preferences.useSoundForNotifications" ), - 5 ); // TODO: why must negative value be used to place toggle consistently?
268
303
}
269
304
270
305
private void initializeSeparator () {
@@ -613,6 +648,7 @@ private void activateGeneralOptions() {
613
648
ignoreTradersListInputTextField .setText (String .join (", " , preferences .getIgnoreTradersList ()));
614
649
/* referralIdService.getOptionalReferralId().ifPresent(referralId -> referralIdInputTextField.setText(referralId));
615
650
referralIdInputTextField.setPromptText(Res.get("setting.preferences.refererId.prompt"));*/
651
+ clearDataAfterDaysInputTextField .setText (String .valueOf (preferences .getClearDataAfterDays ()));
616
652
userLanguageComboBox .setItems (languageCodes );
617
653
userLanguageComboBox .getSelectionModel ().select (preferences .getUserLanguage ());
618
654
userLanguageComboBox .setConverter (new StringConverter <>() {
@@ -672,6 +708,7 @@ public Country fromString(String string) {
672
708
673
709
ignoreTradersListInputTextField .textProperty ().addListener (ignoreTradersListListener );
674
710
//referralIdInputTextField.textProperty().addListener(referralIdListener);
711
+ clearDataAfterDaysInputTextField .textProperty ().addListener (clearDataAfterDaysListener );
675
712
}
676
713
677
714
private void activateDisplayCurrencies () {
@@ -805,6 +842,7 @@ private void deactivateGeneralOptions() {
805
842
deviationInputTextField .focusedProperty ().removeListener (deviationFocusedListener );
806
843
ignoreTradersListInputTextField .textProperty ().removeListener (ignoreTradersListListener );
807
844
//referralIdInputTextField.textProperty().removeListener(referralIdListener);
845
+ clearDataAfterDaysInputTextField .textProperty ().removeListener (clearDataAfterDaysListener );
808
846
}
809
847
810
848
private void deactivateDisplayCurrencies () {
0 commit comments