From 59be22f8e3179dfc5a3635331323bf1257599cbf Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Thu, 4 Jul 2019 12:53:47 +0200 Subject: [PATCH 1/3] Catch NumberFormatException to avoid app crashes --- .../app/ui/views/IntegerEditTextPreference.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/IntegerEditTextPreference.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/IntegerEditTextPreference.java index 33ca650fb8f..5984b00a015 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/IntegerEditTextPreference.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/IntegerEditTextPreference.java @@ -25,6 +25,10 @@ public class IntegerEditTextPreference extends EditTextPreference { @Override protected boolean persistString(String value) { - return persistInt(Integer.valueOf(value)); + try { + return persistInt(Integer.valueOf(value)); + } catch (NumberFormatException e) { + return false; + } } } From 70ccfe58f8693019008f8aa7abbf688091f93f36 Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Thu, 4 Jul 2019 12:57:14 +0200 Subject: [PATCH 2/3] Simplify protest time settings and consider the custom input value --- .../res/values/preferences.xml | 3 --- .../racecommittee/app/AppPreferences.java | 21 ------------------- ...PreferencesRegattaConfigurationLoader.java | 9 +++----- .../app/ui/activities/LoginActivity.java | 1 - .../dialogs/ProtestTimeDialogFragment.java | 15 ++++--------- 5 files changed, 7 insertions(+), 42 deletions(-) diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/preferences.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/preferences.xml index 4ca558792cb..0dc9932dd42 100755 --- a/mobile/com.sap.sailing.racecommittee.app/res/values/preferences.xml +++ b/mobile/com.sap.sailing.racecommittee.app/res/values/preferences.xml @@ -116,9 +116,6 @@ true protestTimeDuration 90 - protestTimeDurationCustom - protestTimeDurationCustomEditable - true allow_demo false diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java index 88081708281..3c3c607a367 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppPreferences.java @@ -523,33 +523,12 @@ public class AppPreferences { context.getResources().getInteger(R.integer.preference_protest_time_duration_default)); } - public int getProtestTimeDurationInMinutesCustom() { - return helper.getInt(context.getString(R.string.preference_protest_time_duration_custom_key), -1); - } - - public boolean isDefaultProtestTimeCustomEditable() { - return helper.getBoolean(context.getString(R.string.preference_protest_time_duration_custom_editable_key), - context.getResources().getBoolean(R.bool.preference_protest_time_duration_custom_editable_default)); - } - public void setDefaultProtestTimeDurationInMinutes(int protestTimeInMinutes) { helper.getEditor() .putInt(context.getString(R.string.preference_protest_time_duration_key), protestTimeInMinutes) .commit(); } - public void setDefaultProtestTimeDurationInMinutesCustom(int protestTimeInMinutest) { - helper.getEditor() - .putInt(context.getString(R.string.preference_protest_time_duration_custom_key), protestTimeInMinutest) - .commit(); - } - - public void setDefaultProtestTimeDurationInMinutesCustomEditable(boolean editable) { - helper.getEditor() - .putBoolean(context.getString(R.string.preference_protest_time_duration_custom_editable_key), editable) - .commit(); - } - public void setAccessToken(String accessToken) { helper.getEditor().putString(context.getString(R.string.preference_access_token_key), accessToken).commit(); } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/configuration/impl/PreferencesRegattaConfigurationLoader.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/configuration/impl/PreferencesRegattaConfigurationLoader.java index ee70bfe07f2..6761a04c23a 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/configuration/impl/PreferencesRegattaConfigurationLoader.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/configuration/impl/PreferencesRegattaConfigurationLoader.java @@ -1,8 +1,5 @@ package com.sap.sailing.racecommittee.app.domain.configuration.impl; -import java.util.ArrayList; -import java.util.HashSet; - import com.sap.sailing.android.shared.logging.ExLog; import com.sap.sailing.domain.base.configuration.ConfigurationLoader; import com.sap.sailing.domain.base.configuration.RacingProcedureConfiguration; @@ -23,6 +20,9 @@ import com.sap.sailing.domain.common.racelog.RacingProcedureType; import com.sap.sailing.racecommittee.app.AppPreferences; import com.sap.sse.common.Duration; +import java.util.ArrayList; +import java.util.HashSet; + public class PreferencesRegattaConfigurationLoader implements ConfigurationLoader { private static final String TAG = PreferencesRegattaConfigurationLoader.class.getSimpleName(); @@ -113,9 +113,6 @@ public class PreferencesRegattaConfigurationLoader implements ConfigurationLoade if (configuration.getDefaultProtestTimeDuration() != null) { preferences.setDefaultProtestTimeDurationInMinutes( (int) configuration.getDefaultProtestTimeDuration().asMinutes()); - preferences.setDefaultProtestTimeDurationInMinutesCustomEditable(false); - } else { - preferences.setDefaultProtestTimeDurationInMinutesCustomEditable(true); } if (configuration.getRRS26Configuration() != null) { diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java index 29ffac51c1d..ecec4e0db61 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java @@ -401,7 +401,6 @@ public class LoginActivity extends BaseActivity implements EventSelectedListener public void onLoadFailed(Exception reason) { dismissProgressSpinner(); - preferences.setDefaultProtestTimeDurationInMinutesCustomEditable(true); if (reason instanceof FileNotFoundException) { Toast.makeText(getApplicationContext(), getString(R.string.loading_configuration_not_found), Toast.LENGTH_LONG).show(); diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/ProtestTimeDialogFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/ProtestTimeDialogFragment.java index 0ed8e6ca2a7..606b9b19d86 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/ProtestTimeDialogFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/dialogs/ProtestTimeDialogFragment.java @@ -319,8 +319,7 @@ public class ProtestTimeDialogFragment extends AttachedDialogFragment implements TimePoint startTime = TimeUtils.getTime(mTimePicker); TimePoint now = MillisecondsTimePoint.now(); for (ManagedRace race : selectedRaces) { - Duration duration = Duration.ONE_MINUTE - .times(AppPreferences.on(getActivity()).getProtestTimeDurationInMinutes()); + Duration duration = Duration.ONE_MINUTE.times(mDuration); TimeRange protestTime = new TimeRangeImpl(startTime, startTime.plus(duration)); race.getState().setProtestTime(now, protestTime); } @@ -404,12 +403,6 @@ public class ProtestTimeDialogFragment extends AttachedDialogFragment implements private void updateProtestRange() { if (mDuration == null) { mDuration = mPreferences.getProtestTimeDurationInMinutes(); - if (mPreferences.isDefaultProtestTimeCustomEditable()) { - int custom = mPreferences.getProtestTimeDurationInMinutesCustom(); - if (custom >= 0) { - mDuration = custom; - } - } } if (mProtestDuration != null) { mProtestDuration.setText(getString(R.string.protest_duration, mDuration)); @@ -468,9 +461,9 @@ public class ProtestTimeDialogFragment extends AttachedDialogFragment implements builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - mDuration = Integer.parseInt(duration.getText().toString()); - if (mPreferences.isDefaultProtestTimeCustomEditable()) { - mPreferences.setDefaultProtestTimeDurationInMinutesCustom(mDuration); + try { + mDuration = Integer.parseInt(duration.getText().toString()); + } catch (NumberFormatException ignored) { } updateProtestRange(); } From 1c604cb258c8f2bb83ac9a2c97a7665eceed9c45 Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Tue, 9 Jul 2019 15:37:01 +0200 Subject: [PATCH 3/3] Add release notes regarding the protest duration --- .../places/whatsnew/resources/RaceCommitteeAppNotes.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/RaceCommitteeAppNotes.html b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/RaceCommitteeAppNotes.html index 54054e529a0..cdda13a078a 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/RaceCommitteeAppNotes.html +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/RaceCommitteeAppNotes.html @@ -4,6 +4,14 @@

What's New - SAP Sailing Race Manager

+
July 2019
+
    +
  • The app no longer remembers the last entered duration when setting a protest time. + The protest duration can now be configured correctly in the app settings. + Please consider that a protest duration in the specific regatta configuration is preferred to + the protest duration in the default regatta configuration.
  • +
+
May 2019
  • The Course editor now works correctly when managing more than one regatta.