added RaceFactor to race setup

This commit is contained in:
Peter Siegmund
2016-04-04 16:58:22 +02:00
parent 4f4dff2132
commit 9c82b23ea5
14 changed files with 326 additions and 139 deletions
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
@@ -10,6 +10,15 @@
android:baselineAligned="false"
android:orientation="horizontal">
<com.sap.sailing.racecommittee.app.ui.views.PanelButton
android:id="@+id/button_factor"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:buttonHeader="@string/race_factor"
app:buttonType="typeValue"
app:linePosition="right" />
<com.sap.sailing.racecommittee.app.ui.views.PanelButton
android:id="@+id/button_course"
android:layout_width="0dp"
@@ -17,7 +26,7 @@
android:layout_weight="1"
app:buttonHeader="@string/course"
app:buttonType="typeValue"
app:linePosition="right"/>
app:linePosition="right" />
<com.sap.sailing.racecommittee.app.ui.views.PanelButton
android:id="@+id/button_wind"
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
@@ -16,7 +15,7 @@
android:layout_height="0dp"
android:layout_weight="1"
app:buttonHeader="@string/start_procedure"
app:buttonType="typeValue"/>
app:buttonType="typeValue" />
<com.sap.sailing.racecommittee.app.ui.views.PanelButton
android:id="@+id/button_mode"
@@ -51,6 +50,14 @@
app:buttonSwitch=""
app:buttonType="typeSwitch" />
<com.sap.sailing.racecommittee.app.ui.views.PanelButton
android:id="@+id/button_factor"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:buttonHeader="@string/race_factor"
app:buttonType="typeValue" />
<com.sap.sailing.racecommittee.app.ui.views.PanelButton
android:id="@+id/button_course"
android:layout_width="match_parent"
@@ -66,7 +73,6 @@
android:layout_weight="1"
app:buttonHeader="@string/wind"
app:buttonType="typeValue" />
</LinearLayout>
<View
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/sap_gray_black_30">
<com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:headerText="@string/gate_start_pathfinder" />
<RelativeLayout
android:id="@+id/path_finder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="center_vertical">
<Button
android:id="@+id/set_path_finder"
style="?attr/button"
android:layout_width="@dimen/default_button_width"
android:layout_height="@dimen/default_button_height"
android:layout_centerInParent="true"
android:layout_margin="@dimen/unscheduled_confirm_button_margin"
android:enabled="false"
android:text="@string/gate_start_set_pathfinder"
android:textSize="@dimen/textSize_18" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/path_finder"
android:layout_below="@id/header">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_margin="@dimen/default_margin_twice">
<com.sap.sailing.racecommittee.app.ui.layouts.FloatLabelLayout
android:layout_width="200dp"
android:layout_height="wrap_content"
app:floatLabelPaddingLeft="@dimen/float_label_padding"
app:floatLabelTextAppearance="?attr/floatLabel">
<EditText
android:id="@+id/pathfinder_nat"
style="?attr/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:hint="@string/gate_start_nationality"
android:inputType="textCapCharacters"
android:textAppearance="?attr/textNormal"
android:textColor="?attr/white" />
</com.sap.sailing.racecommittee.app.ui.layouts.FloatLabelLayout>
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
@@ -434,6 +434,8 @@
<string name="preference_allow_dependent_races_header">Relative Startzeit</string>
<string name="preference_allow_dependent_races_description">Aktiviert relative Startzeiten zwischen Rennen</string>
<string name="preference_dependent_races_offset_header">Standard Offset der relativen Startzeit (Minuten)</string>
<string name="preference_allow_edit_race_factor_header">Rennfaktor ändern</string>
<string name="preference_allow_edit_race_factor_description">Rennleiter können den Rennfaktor je Rennen ändern</string>
<string name="error_finished_time">Die ausgewählte Zielzeit liegt vor der Zeit, der ersten Schiffeinfahrt. Bitte überprüfe die Uhrzeit.</string>
<string name="error_finishing_time">Die ausgewählte Zeit is vor dem Rennstart. Bitte überprüfe die Uhrzeit.</string>
<string name="error_time_in_future">Die ausgewählte Zeit liegt in der Zukunft. Bitte überprüfe die Uhrzeit.</string>
@@ -496,5 +498,6 @@
<string name="preference_non_public_events_header">Zeige nicht öffentliche Events</string>
<string name="preference_non_public_events_summary">Lade alle Events, auch die nicht öffentlichen.</string>
<string name="race_factor">Faktor</string>
</resources>
@@ -87,6 +87,8 @@
<bool name="preference_allow_dependent_races_default">true</bool>
<string name="preference_dependent_races_offset_key" translatable="false">dependentRacesOffset</string>
<integer name="preference_dependent_races_offset_default">5</integer>
<string name="preference_allow_edit_race_factor_key" translatable="false">raceFactor</string>
<bool name="preference_allow_edit_race_factor_default">false</bool>
<string name="preference_allow_demo_key" translatable="false">allow_demo</string>
<bool name="preference_allow_demo_default">false</bool>
@@ -456,6 +456,8 @@
<string name="preference_allow_dependent_races_header">Relative Start Time (Minutes)</string>
<string name="preference_allow_dependent_races_description">Enable Relative Start Time between Races</string>
<string name="preference_dependent_races_offset_header">Default Relative Start Time Offset</string>
<string name="preference_allow_edit_race_factor_header">Race factor change</string>
<string name="preference_allow_edit_race_factor_description">Race managers can change the race factor per race</string>
<string name="error_finished_time">The given finish time is earlier than the first finisher time. Please recheck the time.</string>
<string name="error_finishing_time">The selected time is before the race start.</string>
<string name="error_time_in_future">The given time is in future. Please recheck the time.</string>
@@ -524,4 +526,5 @@
<string name="preference_non_public_events_header">Show Non Public Events</string>
<string name="preference_non_public_events_summary">Load all events including the no public one.</string>
<string name="race_factor">Factor</string>
</resources>
@@ -7,33 +7,39 @@
android:defaultValue="@string/preference_racing_procedure_override_default"
android:key="@string/preference_racing_procedure_override_key"
android:summary="@string/override_default_start_procedure_type_select_description"
android:title="@string/override_default_start_procedure_type_select_header"/>
android:title="@string/override_default_start_procedure_type_select_header" />
<ListPreference
android:defaultValue="@string/preference_course_designer_override_default"
android:key="@string/preference_course_designer_override_key"
android:title="@string/override_default_course_designer_type_select_header"/>
android:title="@string/override_default_course_designer_type_select_header" />
<CheckBoxPreference
android:defaultValue="@bool/preference_allow_dependent_races_default"
android:key="@string/preference_allow_dependent_races_key"
android:summary="@string/preference_allow_dependent_races_description"
android:title="@string/preference_allow_dependent_races_header"/>
android:title="@string/preference_allow_dependent_races_header" />
<com.sap.sailing.racecommittee.app.ui.views.IntegerEditTextPreference
android:defaultValue="@integer/preference_dependent_races_offset_default"
android:key="@string/preference_dependent_races_offset_key"
android:numeric="integer"
android:title="@string/preference_dependent_races_offset_header"/>
android:title="@string/preference_dependent_races_offset_header" />
<SwitchPreference
android:defaultValue="@bool/preference_heading_with_declination_subtracted_default"
android:key="@string/preference_heading_with_declination_subtracted_key"
android:switchTextOn="@string/preference_heading_with_declination_subtracted_is_enabled"
android:switchTextOff="@string/preference_heading_with_declination_subtracted_is_disabled"
android:summaryOn="@string/preference_heading_with_declination_subtracted_summary_is_enabled"
android:summaryOff="@string/preference_heading_with_declination_subtracted_summary_is_disabled"
android:title="@string/preference_heading_with_declination_subtracted_enabled"/>
android:summaryOn="@string/preference_heading_with_declination_subtracted_summary_is_enabled"
android:switchTextOff="@string/preference_heading_with_declination_subtracted_is_disabled"
android:switchTextOn="@string/preference_heading_with_declination_subtracted_is_enabled"
android:title="@string/preference_heading_with_declination_subtracted_enabled" />
<CheckBoxPreference
android:defaultValue="@bool/preference_allow_edit_race_factor_default"
android:key="@string/preference_allow_edit_race_factor_key"
android:summary="@string/preference_allow_edit_race_factor_description"
android:title="@string/preference_allow_edit_race_factor_header" />
</PreferenceCategory>
<PreferenceCategory android:title="RRS26">
@@ -42,19 +48,19 @@
android:defaultValue="@string/preference_racing_procedure_classflag_default"
android:key="@string/preference_racing_procedure_rrs26_classflag_key"
android:summary="@string/empty"
android:title="@string/preference_racing_procedure_classflag_header"/>
android:title="@string/preference_racing_procedure_classflag_header" />
<CheckBoxPreference
android:defaultValue="@bool/preference_racing_procedure_rrs26_hasxray_default"
android:key="@string/preference_racing_procedure_rrs26_hasxray_key"
android:summary="@string/preference_racing_procedure_hasxray_description"
android:title="@string/preference_racing_procedure_hasxray_header"/>
android:title="@string/preference_racing_procedure_hasxray_header" />
<com.sap.sailing.racecommittee.app.ui.views.FixedMultiSelectListPreference
android:defaultValue="@array/preference_racing_procedure_rrs26_startmode_flags_default"
android:key="@string/preference_racing_procedure_rrs26_startmode_flags_key"
android:summary="@string/empty"
android:title="@string/preference_racing_procedure_rrs26_startmode_flags_header"/>
android:title="@string/preference_racing_procedure_rrs26_startmode_flags_header" />
</PreferenceCategory>
@@ -64,25 +70,25 @@
android:defaultValue="@string/preference_racing_procedure_classflag_default"
android:key="@string/preference_racing_procedure_gatestart_classflag_key"
android:summary="@string/empty"
android:title="@string/preference_racing_procedure_classflag_header"/>
android:title="@string/preference_racing_procedure_classflag_header" />
<CheckBoxPreference
android:defaultValue="@bool/preference_racing_procedure_gatestart_hasxray_default"
android:key="@string/preference_racing_procedure_gatestart_hasxray_key"
android:summary="@string/preference_racing_procedure_hasxray_description"
android:title="@string/preference_racing_procedure_hasxray_header"/>
android:title="@string/preference_racing_procedure_hasxray_header" />
<CheckBoxPreference
android:defaultValue="@bool/preference_racing_procedure_gatestart_haspathfinder_default"
android:key="@string/preference_racing_procedure_gatestart_haspathfinder_key"
android:summary="@string/preference_racing_procedure_gatestart_haspathfinder_description"
android:title="@string/preference_racing_procedure_gatestart_haspathfinder_header"/>
android:title="@string/preference_racing_procedure_gatestart_haspathfinder_header" />
<CheckBoxPreference
android:defaultValue="@bool/preference_racing_procedure_gatestart_hasadditionalgolfdowntime_default"
android:key="@string/preference_racing_procedure_gatestart_hasadditionalgolfdowntime_key"
android:summary="@string/preference_racing_procedure_gatestart_hasadditionalgolfdowntime_description"
android:title="@string/preference_racing_procedure_gatestart_hasadditionalgolfdowntime_header"/>
android:title="@string/preference_racing_procedure_gatestart_hasadditionalgolfdowntime_header" />
</PreferenceCategory>
@@ -92,13 +98,13 @@
android:defaultValue="@string/preference_racing_procedure_classflag_default"
android:key="@string/preference_racing_procedure_ess_classflag_key"
android:summary="@string/empty"
android:title="@string/preference_racing_procedure_classflag_header"/>
android:title="@string/preference_racing_procedure_classflag_header" />
<CheckBoxPreference
android:defaultValue="@bool/preference_racing_procedure_ess_hasxray_default"
android:key="@string/preference_racing_procedure_ess_hasxray_key"
android:summary="@string/preference_racing_procedure_hasxray_description"
android:title="@string/preference_racing_procedure_hasxray_header"/>
android:title="@string/preference_racing_procedure_hasxray_header" />
</PreferenceCategory>
@@ -108,13 +114,13 @@
android:defaultValue="@string/preference_racing_procedure_classflag_default"
android:key="@string/preference_racing_procedure_basic_classflag_key"
android:summary="@string/empty"
android:title="@string/preference_racing_procedure_classflag_header"/>
android:title="@string/preference_racing_procedure_classflag_header" />
<CheckBoxPreference
android:defaultValue="@bool/preference_racing_procedure_basic_hasxray_default"
android:key="@string/preference_racing_procedure_basic_hasxray_key"
android:summary="@string/preference_racing_procedure_hasxray_description"
android:title="@string/preference_racing_procedure_hasxray_header"/>
android:title="@string/preference_racing_procedure_hasxray_header" />
</PreferenceCategory>
@@ -124,13 +130,13 @@
android:defaultValue="@string/preference_racing_procedure_classflag_default"
android:key="@string/preference_racing_procedure_league_classflag_key"
android:summary="@string/empty"
android:title="@string/preference_racing_procedure_classflag_header"/>
android:title="@string/preference_racing_procedure_classflag_header" />
<CheckBoxPreference
android:defaultValue="@bool/preference_racing_procedure_league_hasxray_default"
android:key="@string/preference_racing_procedure_league_hasxray_key"
android:summary="@string/preference_racing_procedure_hasxray_description"
android:title="@string/preference_racing_procedure_hasxray_header"/>
android:title="@string/preference_racing_procedure_hasxray_header" />
</PreferenceCategory>
</PreferenceScreen>
@@ -41,6 +41,7 @@ public class AppConstants {
public final static String INTENT_ACTION_TOGGLE_PROCEDURE_MORE_MODE = "more_mode";
public final static String INTENT_ACTION_TOGGLE_PROCEDURE_MORE_PATHFINDER = "more_pathfinder";
public final static String INTENT_ACTION_TOGGLE_PROCEDURE_MORE_TIMING = "more_timing";
public final static String INTENT_ACTION_TOGGLE_FACTOR = "factor";
public final static String INTENT_ACTION_TOGGLE_COURSE = "course";
public final static String INTENT_ACTION_TOGGLE_WIND = "wind";
public final static String INTENT_ACTION_TOGGLE_TIME = "time";
@@ -61,6 +61,7 @@ public class AppPreferences {
public static AppPreferences on(Context context, String preferenceName) {
return new AppPreferences(context, preferenceName);
}
protected final Context context;
private OnSharedPreferenceChangeListener pollingActiveChangedListener = new OnSharedPreferenceChangeListener() {
@@ -76,10 +77,12 @@ public class AppPreferences {
private Set<PollingActiveChangedListener> pollingActiveChangedListeners = new HashSet<>();
protected final SharedPreferences preferences;
protected AppPreferences(Context context) {
this.context = context.getApplicationContext();
this.preferences = PreferenceManager.getDefaultSharedPreferences(context);
}
public AppPreferences(Context context, String preferenceName) {
this.context = context.getApplicationContext();
this.preferences = context.getSharedPreferences(preferenceName, Context.MODE_PRIVATE);
@@ -134,8 +137,7 @@ public class AppPreferences {
}
public RacingProcedureType getDefaultRacingProcedureType() {
String defaultStartProcedureType = preferences.getString(
key(R.string.preference_racing_procedure_override_key), "");
String defaultStartProcedureType = preferences.getString(key(R.string.preference_racing_procedure_override_key), "");
return RacingProcedureType.valueOf(defaultStartProcedureType);
}
@@ -156,24 +158,24 @@ public class AppPreferences {
return preferences.getBoolean(key(R.string.preference_racing_procedure_gatestart_haspathfinder_key), true);
}
public LoginType getLoginType() {
int type = preferences.getInt(HIDDEN_PREFERENCE_LOGIN_TYPE, -1);
switch( type ){
case 0:{
return LoginType.NONE;
}
case 1:{
return LoginType.VIEWER;
}
case 2:{
return LoginType.OFFICER;
}
public LoginType getLoginType() {
int type = preferences.getInt(HIDDEN_PREFERENCE_LOGIN_TYPE, -1);
switch (type) {
case 0: {
return LoginType.NONE;
}
case 1: {
return LoginType.VIEWER;
}
case 2: {
return LoginType.OFFICER;
}
default:{
return LoginType.NONE;
}
}
}
default: {
return LoginType.NONE;
}
}
}
public String getMailRecipient() {
return preferences.getString(key(R.string.preference_mail_key), "");
@@ -205,18 +207,18 @@ public class AppPreferences {
private String getRacingProcedureClassFlagKey(RacingProcedureType type) {
switch (type) {
case RRS26:
return key(R.string.preference_racing_procedure_rrs26_classflag_key);
case GateStart:
return key(R.string.preference_racing_procedure_gatestart_classflag_key);
case ESS:
return key(R.string.preference_racing_procedure_ess_classflag_key);
case BASIC:
return key(R.string.preference_racing_procedure_basic_classflag_key);
case LEAGUE:
return key(R.string.preference_racing_procedure_league_classflag_key);
default:
throw new IllegalArgumentException("Unknown racing procedure type.");
case RRS26:
return key(R.string.preference_racing_procedure_rrs26_classflag_key);
case GateStart:
return key(R.string.preference_racing_procedure_gatestart_classflag_key);
case ESS:
return key(R.string.preference_racing_procedure_ess_classflag_key);
case BASIC:
return key(R.string.preference_racing_procedure_basic_classflag_key);
case LEAGUE:
return key(R.string.preference_racing_procedure_league_classflag_key);
default:
throw new IllegalArgumentException("Unknown racing procedure type.");
}
}
@@ -227,18 +229,18 @@ public class AppPreferences {
private String getRacingProcedureHasIndividualRecallKey(RacingProcedureType type) {
switch (type) {
case RRS26:
return key(R.string.preference_racing_procedure_rrs26_hasxray_key);
case GateStart:
return key(R.string.preference_racing_procedure_gatestart_hasxray_key);
case ESS:
return key(R.string.preference_racing_procedure_ess_hasxray_key);
case BASIC:
return key(R.string.preference_racing_procedure_basic_hasxray_key);
case LEAGUE:
return key(R.string.preference_racing_procedure_league_hasxray_key);
default:
throw new IllegalArgumentException("Unknown racing procedure type.");
case RRS26:
return key(R.string.preference_racing_procedure_rrs26_hasxray_key);
case GateStart:
return key(R.string.preference_racing_procedure_gatestart_hasxray_key);
case ESS:
return key(R.string.preference_racing_procedure_ess_hasxray_key);
case BASIC:
return key(R.string.preference_racing_procedure_basic_hasxray_key);
case LEAGUE:
return key(R.string.preference_racing_procedure_league_hasxray_key);
default:
throw new IllegalArgumentException("Unknown racing procedure type.");
}
}
@@ -265,10 +267,10 @@ public class AppPreferences {
return Double.longBitsToDouble(windSpeedAsLong);
}
public LatLng getWindPosition(){
double lat = Double.longBitsToDouble(preferences.getLong(HIDDEN_PREFERENCE_WIND_LAT, 0));
double lng = Double.longBitsToDouble(preferences.getLong(HIDDEN_PREFERENCE_WIND_LNG, 0));
return new LatLng(lat,lng);
public LatLng getWindPosition() {
double lat = Double.longBitsToDouble(preferences.getLong(HIDDEN_PREFERENCE_WIND_LAT, 0));
double lng = Double.longBitsToDouble(preferences.getLong(HIDDEN_PREFERENCE_WIND_LNG, 0));
return new LatLng(lat, lng);
}
public boolean isPollingActive() {
@@ -297,9 +299,7 @@ public class AppPreferences {
}
public void setByNameCourseDesignerCourseNames(List<String> courseNames) {
preferences
.edit()
.putStringSet(key(R.string.preference_course_designer_by_name_course_names_key), new HashSet<>(courseNames)).commit();
preferences.edit().putStringSet(key(R.string.preference_course_designer_by_name_course_names_key), new HashSet<>(courseNames)).commit();
}
public void setCourseLayout(CourseLayouts courseLayout) {
@@ -316,51 +316,47 @@ public class AppPreferences {
}
public void setGateStartHasAdditionalGolfDownTime(boolean hasAdditionalGolfDownTime) {
preferences
.edit()
.putBoolean(key(R.string.preference_racing_procedure_gatestart_hasadditionalgolfdowntime_key), hasAdditionalGolfDownTime).commit();
preferences.edit().putBoolean(key(R.string.preference_racing_procedure_gatestart_hasadditionalgolfdowntime_key), hasAdditionalGolfDownTime)
.commit();
}
public void setGateStartHasPathfinder(boolean hasPathfinder) {
preferences.edit()
.putBoolean(key(R.string.preference_racing_procedure_gatestart_haspathfinder_key), hasPathfinder)
.commit();
preferences.edit().putBoolean(key(R.string.preference_racing_procedure_gatestart_haspathfinder_key), hasPathfinder).commit();
}
public void setLoginType(LoginType type) {
ExLog.i(getContext(), this.getClass().toString(), "setLoginType: "+ type);
public void setLoginType(LoginType type) {
ExLog.i(getContext(), this.getClass().toString(), "setLoginType: " + type);
Editor setEdit = preferences.edit();
switch( type ){
case NONE:{
setEdit.putInt(HIDDEN_PREFERENCE_LOGIN_TYPE, 0);
break;
}
case VIEWER:{
setEdit.putInt(HIDDEN_PREFERENCE_LOGIN_TYPE, 1);
break;
}
case OFFICER:{
setEdit.putInt(HIDDEN_PREFERENCE_LOGIN_TYPE, 2);
break;
}
switch (type) {
case NONE: {
setEdit.putInt(HIDDEN_PREFERENCE_LOGIN_TYPE, 0);
break;
}
case VIEWER: {
setEdit.putInt(HIDDEN_PREFERENCE_LOGIN_TYPE, 1);
break;
}
case OFFICER: {
setEdit.putInt(HIDDEN_PREFERENCE_LOGIN_TYPE, 2);
break;
}
default:{
break;
}
}
default: {
break;
}
}
setEdit.commit();
}
setEdit.commit();
}
public void setMailRecipient(String mail) {
preferences.edit().putString(key(R.string.preference_mail_key), mail).commit();
}
public void setManagedCourseAreaNames(List<String> courseAreaNames) {
preferences.edit()
.putStringSet(key(R.string.preference_course_areas_key), new HashSet<>(courseAreaNames)).commit();
preferences.edit().putStringSet(key(R.string.preference_course_areas_key), new HashSet<>(courseAreaNames)).commit();
}
public void setNumberOfRounds(NumberOfRounds numberOfRounds) {
@@ -383,15 +379,12 @@ public class AppPreferences {
for (Flags flag : flags) {
flagNames.add(flag.name());
}
preferences.edit().putStringSet(key(R.string.preference_racing_procedure_rrs26_startmode_flags_key), flagNames)
.commit();
preferences.edit().putStringSet(key(R.string.preference_racing_procedure_rrs26_startmode_flags_key), flagNames).commit();
}
public void setSendingActive(boolean activate) {
ExLog.i(getContext(), this.getClass().toString(), "setSendingActive: "+ activate);
preferences.edit()
.putBoolean(context.getResources().getString(R.string.preference_isSendingActive_key), activate)
.commit();
ExLog.i(getContext(), this.getClass().toString(), "setSendingActive: " + activate);
preferences.edit().putBoolean(context.getResources().getString(R.string.preference_isSendingActive_key), activate).commit();
}
public void setWindBearingFromDirection(double enteredWindBearing) {
@@ -407,10 +400,7 @@ public class AppPreferences {
public void setWindPosition(LatLng latLng) {
long lat = Double.doubleToLongBits(latLng.latitude);
long lng = Double.doubleToLongBits(latLng.longitude);
preferences.edit()
.putLong(HIDDEN_PREFERENCE_WIND_LAT, lat)
.putLong(HIDDEN_PREFERENCE_WIND_LNG, lng)
.commit();
preferences.edit().putLong(HIDDEN_PREFERENCE_WIND_LAT, lat).putLong(HIDDEN_PREFERENCE_WIND_LNG, lng).commit();
}
public void unregisterPollingActiveChangedListener(PollingActiveChangedListener listener) {
@@ -421,33 +411,33 @@ public class AppPreferences {
}
public boolean isDemoAllowed() {
return preferences.getBoolean(context.getString(R.string.preference_allow_demo_key),
context.getResources().getBoolean(R.bool.preference_allow_demo_default));
return preferences.getBoolean(context.getString(R.string.preference_allow_demo_key), context.getResources()
.getBoolean(R.bool.preference_allow_demo_default));
}
public boolean wakelockEnabled() {
return preferences.getBoolean(context.getString(R.string.preference_wakelock_key), context.getResources()
.getBoolean(R.bool.preference_wakelock_default));
return preferences
.getBoolean(context.getString(R.string.preference_wakelock_key), context.getResources().getBoolean(R.bool.preference_wakelock_default));
}
public boolean isOfflineMode() {
return preferences.getBoolean(context.getString(R.string.preference_offline_key), context.getResources()
.getBoolean(R.bool.preference_offline_default));
return preferences
.getBoolean(context.getString(R.string.preference_offline_key), context.getResources().getBoolean(R.bool.preference_offline_default));
}
public boolean isDependentRacesAllowed() {
return preferences.getBoolean(context.getString(R.string.preference_allow_dependent_races_key),
context.getResources().getBoolean(R.bool.preference_allow_dependent_races_default));
return preferences.getBoolean(context.getString(R.string.preference_allow_dependent_races_key), context.getResources()
.getBoolean(R.bool.preference_allow_dependent_races_default));
}
public int getDependentRacesOffset() {
return preferences.getInt(context.getString(R.string.preference_dependent_races_offset_key),
context.getResources().getInteger(R.integer.preference_dependent_races_offset_default));
return preferences.getInt(context.getString(R.string.preference_dependent_races_offset_key), context.getResources()
.getInteger(R.integer.preference_dependent_races_offset_default));
}
public String getTheme() {
return preferences.getString(context.getString(R.string.preference_theme_key), context.getResources()
.getString(R.string.preference_theme_default));
return preferences
.getString(context.getString(R.string.preference_theme_key), context.getResources().getString(R.string.preference_theme_default));
}
public void setAccessToken(String accessToken) {
@@ -456,15 +446,20 @@ public class AppPreferences {
public String getAccessToken() {
return preferences.getString(context.getString(R.string.preference_access_token_key), null);
}
}
public boolean isMagnetic() {
return preferences.getBoolean(context.getString(R.string.preference_heading_with_declination_subtracted_key),
context.getResources().getBoolean(R.bool.preference_heading_with_declination_subtracted_default));
return preferences.getBoolean(context.getString(R.string.preference_heading_with_declination_subtracted_key), context.getResources()
.getBoolean(R.bool.preference_heading_with_declination_subtracted_default));
}
public boolean isRaceFactorChangeAllow() {
return preferences.getBoolean(context.getString(R.string.preference_allow_edit_race_factor_key), context.getResources()
.getBoolean(R.bool.preference_allow_edit_race_factor_default));
}
public String showNonPublic() {
return preferences.getBoolean(context.getString(R.string.preference_non_public_events_key),
context.getResources().getBoolean(R.bool.preference_non_public_events_default)) ? "true" : "false";
return preferences.getBoolean(context.getString(R.string.preference_non_public_events_key), context.getResources()
.getBoolean(R.bool.preference_non_public_events_default)) ? "true" : "false";
}
}
@@ -28,6 +28,7 @@ import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.CourseFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.GateStartPathFinderFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.GateStartTimingFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.LineStartModeFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFactorFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.StartProcedureFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.WindFragment;
import com.sap.sailing.racecommittee.app.ui.utils.FlagsResources;
@@ -48,6 +49,7 @@ public class SetupPanelFragment extends BasePanelFragment {
private PanelButton mButtonPathfinder;
private PanelButton mButtonTiming;
private PanelButton mButtonRaceGroup;
private PanelButton mButtonFactor;
private PanelButton mButtonCourse;
private PanelButton mButtonWind;
@@ -102,6 +104,11 @@ public class SetupPanelFragment extends BasePanelFragment {
mButtonRaceGroup.setListener(new ButtonRaceGroupListener());
}
mButtonFactor = ViewHelper.get(layout, R.id.button_factor);
if (mButtonFactor != null) {
mButtonFactor.setListener(new ButtonFactorListener());
}
mButtonCourse = ViewHelper.get(layout, R.id.button_course);
if (mButtonCourse != null) {
mButtonCourse.setListener(new ButtonCourseListener());
@@ -162,6 +169,11 @@ public class SetupPanelFragment extends BasePanelFragment {
mButtonRaceGroup.setVisibility(View.GONE);
}
if (mButtonFactor != null) {
mButtonFactor.setVisibility(preferences.isRaceFactorChangeAllow() ? View.VISIBLE : View.GONE);
mButtonFactor.setPanelText("");
}
if (getRaceState().getRacingProcedure() instanceof RRS26RacingProcedure) {
if (mButtonMode != null) {
RRS26RacingProcedure typedProcedure = getRaceState().getTypedRacingProcedure();
@@ -332,11 +344,14 @@ public class SetupPanelFragment extends BasePanelFragment {
resetFragment(mButtonTiming.isLocked(), getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), GateStartTimingFragment.class);
mButtonTiming.setMarkerLevel(PanelButton.LEVEL_NORMAL);
}
if (mButtonFactor != null && !mButtonFactor.equals(view)) {
resetFragment(mButtonFactor.isLocked(), getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), RaceFactorFragment.class);
mButtonFactor.setMarkerLevel(PanelButton.LEVEL_NORMAL);
}
if (mButtonCourse != null && !mButtonCourse.equals(view)) {
resetFragment(mButtonCourse.isLocked(), getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), CourseFragment.class);
mButtonCourse.setMarkerLevel(PanelButton.LEVEL_NORMAL);
}
if (mButtonWind != null && !mButtonWind.equals(view)) {
resetFragment(mButtonWind.isLocked(), getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), WindFragment.class);
mButtonWind.setMarkerLevel(PanelButton.LEVEL_NORMAL);
@@ -423,7 +438,7 @@ public class SetupPanelFragment extends BasePanelFragment {
@Override
public void onChangedSwitch(PanelButton view, boolean isChecked) {
// no-op
}
}
@@ -524,6 +539,33 @@ public class SetupPanelFragment extends BasePanelFragment {
}
}
private class ButtonFactorListener implements PanelButton.PanelButtonClick {
private final String TAG = ButtonFactorListener.class.getName();
@Override
public void onClick(PanelButton view) {
sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_FACTOR);
switch (view.toggleMarker()) {
case LEVEL_NORMAL:
sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
break;
case LEVEL_TOGGLED:
// replaceFragment(RaceFactorFragment.newInstance(BaseFragment.START_MODE_PLANNED));
break;
default:
ExLog.i(getActivity(), TAG, "Unknown return value");
}
view.disableToggle();
}
@Override
public void onChangedSwitch(PanelButton view, boolean isChecked) {
// no-op
}
}
private class ButtonCourseListener implements PanelButton.PanelButtonClick {
private final String TAG = ButtonCourseListener.class.getName();
@@ -536,7 +578,7 @@ public class SetupPanelFragment extends BasePanelFragment {
break;
case LEVEL_TOGGLED:
replaceFragment(CourseFragment.newInstance(BaseFragment.START_MODE_PLANNED, getRace(), getActivity()));
replaceFragment(CourseFragment.newInstance(BaseFragment.START_MODE_PLANNED, getRace()));
break;
default:
@@ -598,6 +640,8 @@ public class SetupPanelFragment extends BasePanelFragment {
uncheckMarker(mButtonPathfinder);
} else if (AppConstants.INTENT_ACTION_TOGGLE_PROCEDURE_MORE_TIMING.equals(data)) {
uncheckMarker(mButtonTiming);
} else if (AppConstants.INTENT_ACTION_TOGGLE_FACTOR.equals(data)) {
uncheckMarker(mButtonFactor);
} else if (AppConstants.INTENT_ACTION_TOGGLE_COURSE.equals(data)) {
uncheckMarker(mButtonCourse);
} else if (AppConstants.INTENT_ACTION_TOGGLE_WIND.equals(data)) {
@@ -1,6 +1,5 @@
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
@@ -14,7 +13,7 @@ import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
public abstract class CourseFragment extends BaseFragment {
public static RaceFragment newInstance(@START_MODE_VALUES int startMode, ManagedRace race, Context context) {
public static RaceFragment newInstance(@START_MODE_VALUES int startMode, ManagedRace race) {
CourseDesignerMode mode = race.getState().getConfiguration().getDefaultCourseDesignerMode();
RaceFragment fragment;
@@ -106,6 +106,7 @@ public class MainScheduleFragment extends BaseFragment implements View.OnClickLi
initStartTime();
initStartMode();
initFactor();
initCourse();
initWind();
lastTick = MillisecondsTimePoint.now().minus(2000);
@@ -120,11 +121,24 @@ public class MainScheduleFragment extends BaseFragment implements View.OnClickLi
}
}
private void initFactor() {
if (preferences.isRaceFactorChangeAllow()) {
Runnable runnable = new Runnable() {
@Override
public void run() {
openFragment(RaceFactorFragment.newInstance(START_MODE_PRESETUP));
}
};
SelectionItem factorItem = new SelectionItem(getString(R.string.race_factor), null, null, false, false, runnable);
mItems.add(factorItem);
}
}
private void initCourse() {
Runnable runnable = new Runnable() {
@Override
public void run() {
openFragment(CourseFragment.newInstance(START_MODE_PRESETUP, getRace(), getActivity()));
openFragment(CourseFragment.newInstance(START_MODE_PRESETUP, getRace()));
}
};
SelectionItem courseItem = new SelectionItem(getString(R.string.course), null, null, false, false, runnable);
@@ -0,0 +1,39 @@
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
public class RaceFactorFragment extends BaseFragment {
public static RaceFactorFragment newInstance(@START_MODE_VALUES int startMode) {
RaceFactorFragment fragment = new RaceFactorFragment();
Bundle args = new Bundle();
args.putInt(START_MODE, startMode);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View layout = LayoutInflater.from(getActivity()).inflate(R.layout.race_schedule_procedure_pathfinder, container, false);
HeaderLayout header = ViewHelper.get(layout, R.id.header);
if (header != null) {
header.setHeaderOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goHome();
}
});
}
return layout;
}
}
@@ -85,6 +85,8 @@ public class PanelButton extends FrameLayout implements View.OnClickListener, Di
setLinePosition(a.getInt(R.styleable.PanelButton_linePosition, -1));
a.recycle();
setMarkerLevel(LEVEL_NORMAL);
}
public void setListener(PanelButtonClick listener) {