diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/panel_button_setup.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/panel_button_setup.xml
new file mode 100644
index 00000000000..682403efa03
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/panel_button_setup.xml
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_main_normal.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_main_normal.xml
index 7b7fbbaa60e..2969f0dc775 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_main_normal.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_main_normal.xml
@@ -9,7 +9,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/side_button_height"
android:layout_alignParentTop="true"
- android:background="@color/colorPrimary" />
+ android:background="?attr/sap_gray" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_hor_1.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_hor_1.xml
new file mode 100644
index 00000000000..34479dea0ea
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_hor_1.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_hor_2.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_hor_2.xml
new file mode 100644
index 00000000000..d0673724c0e
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_hor_2.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_ver.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_ver.xml
index 6d453b20675..53421900330 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_ver.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_ver.xml
@@ -1,267 +1,76 @@
+ android:layout_height="match_parent">
-
+ app:buttonHeader="@string/start_procedure"
+ app:buttonType="typeValue"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:buttonHeader="@string/start_mode"
+ app:buttonType="typeImage" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:buttonHeader="@string/gate_start_pathfinder"
+ app:buttonType="typeValue" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:buttonHeader="@string/gate_start_timing"
+ app:buttonType="typeValue" />
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
Soll die Liste zum letzten bekannten Stand zurückgesetzt werden?
Scan QR-Code
Manuelle Eingabe
+ Group Race
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/attrs_custom_views.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/attrs_custom_views.xml
new file mode 100644
index 00000000000..2a9a128ae8e
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/attrs_custom_views.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/references.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/references.xml
index d30f9e1ba6f..28e9619128c 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/references.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/references.xml
@@ -21,7 +21,7 @@
- @layout/race_list_list_top
- @layout/race_main_normal
- @layout/race_panel_flags_hor
- - @layout/race_panel_setup_hor
+ - @layout/race_panel_setup_hor_1
- @layout/race_panel_time_normal
- @layout/race_tracking_list_normal
- @layout/race_schedule_button_normal
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
index f517b182051..5176f091617 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
@@ -487,5 +487,6 @@
%1$d° %2$d′ %3$.3f″
Scan QR-Code
Manual Input
+ Group Racing
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java
index 27b899fb6c0..6a67cd74e0b 100755
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java
@@ -63,6 +63,7 @@ import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.BaseFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFinishingFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFlagViewerFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceSummaryFragment;
+import com.sap.sailing.racecommittee.app.ui.views.PanelButton;
import com.sap.sailing.racecommittee.app.utils.BitmapHelper;
import com.sap.sailing.racecommittee.app.utils.RaceHelper;
import com.sap.sse.common.TimePoint;
@@ -340,10 +341,10 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks
}
public void onWindEntered(Wind windFix) {
- TextView windValue = (TextView) findViewById(R.id.wind_value);
+ PanelButton windValue = (PanelButton) findViewById(R.id.button_wind);
if (windFix != null) {
if (windValue != null) {
- windValue.setText(String.format(getString(R.string.wind_info), windFix.getKnots(), windFix.getBearing().reverse().toString()));
+ windValue.setPanelText(String.format(getString(R.string.wind_info), windFix.getKnots(), windFix.getBearing().reverse().toString()));
}
if (mSelectedRace != null) {
mSelectedRace.getState().setWindFix(MillisecondsTimePoint.now(), windFix, /* isMagnetic */ true);
@@ -352,7 +353,7 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks
mWind = windFix;
} else {
if (windValue != null) {
- windValue.setText(getString(R.string.wind_unknown));
+ windValue.setPanelText(getString(R.string.wind_unknown));
}
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/PanelsAdapter.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/PanelsAdapter.java
index f0c75e92653..bc7f3ca8175 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/PanelsAdapter.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/PanelsAdapter.java
@@ -27,11 +27,11 @@ public class PanelsAdapter extends FragmentStatePagerAdapter {
break;
case 1:
- fragment = SetupPanelFragment.newInstance(mArguments);
+ fragment = SetupPanelFragment.newInstance(mArguments, 0);
break;
case 2:
- fragment = MorePanelFragment.newInstance(mArguments);
+ fragment = SetupPanelFragment.newInstance(mArguments, 1);
break;
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/BasePanelFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/BasePanelFragment.java
index 200d9b5e8b8..cd62035d04a 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/BasePanelFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/BasePanelFragment.java
@@ -146,6 +146,17 @@ public abstract class BasePanelFragment extends RaceFragment {
}
}
+ protected void resetFragment(boolean isLocked, @IdRes int idRes, Class extends BaseFragment> cls) {
+ if (isLocked && getFragmentManager() != null) {
+ Fragment fragment = getFragmentManager().findFragmentById(idRes);
+ if (fragment != null) {
+ if (cls.getCanonicalName().equals(fragment.getClass().getCanonicalName())) {
+ sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
+ }
+ }
+ }
+ }
+
protected void replaceFragment(RaceFragment fragment) {
replaceFragment(fragment, getFrameId(getActivity(), R.id.race_edit, R.id.race_content, true));
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/SetupPanelFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/SetupPanelFragment.java
index 795637fb7ab..5064265ed09 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/SetupPanelFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/SetupPanelFragment.java
@@ -1,10 +1,7 @@
package com.sap.sailing.racecommittee.app.ui.fragments.panels;
-import android.app.Fragment;
-import android.app.FragmentTransaction;
import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
@@ -12,16 +9,14 @@ import android.support.v4.content.LocalBroadcastManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
import com.sap.sailing.android.shared.logging.ExLog;
-import com.sap.sailing.android.shared.util.AppUtils;
import com.sap.sailing.android.shared.util.ViewHelper;
+import com.sap.sailing.domain.abstractlog.race.scoring.AdditionalScoringInformationType;
import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState;
import com.sap.sailing.domain.abstractlog.race.state.impl.BaseRaceStateChangedListener;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ReadonlyRacingProcedure;
+import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.ess.ESSRacingProcedure;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.GateStartRacingProcedure;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.impl.BaseRacingProcedureChangedListener;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.rrs26.RRS26RacingProcedure;
@@ -30,97 +25,96 @@ import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.BaseFragment;
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.StartProcedureFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.WindFragment;
+import com.sap.sailing.racecommittee.app.ui.utils.FlagsResources;
+import com.sap.sailing.racecommittee.app.ui.views.PanelButton;
+import com.sap.sailing.racecommittee.app.utils.RaceHelper;
+import com.sap.sse.common.impl.MillisecondsTimePoint;
public class SetupPanelFragment extends BasePanelFragment {
+ private final static String ARGS_PAGE = "page";
+
private RaceStateChangedListener mStateListener;
private RaceProcedureChangedListener mProcedureListener;
private IntentReceiver mReceiver;
- // Start Procedure Toggle
- private View mStartProcedure;
- private View mStartProcedureLock;
- private TextView mStartProcedureValue;
- private View mStartProcedureLayer;
-
- // Start Procedure More Toggle
- private View mStartProcedureMore;
- private View mStartProcedureMoreLock;
- private FrameLayout mExtraLayout;
- private View mStartProcedureMoreLayer;
-
- // Course Toggle
- private View mCourse;
- private View mCourseLock;
- private TextView mCourseValue;
- private View mCourseLayer;
-
- // Wind Toggle
- private View mWind;
- private View mWindLock;
- private TextView mWindValue;
- private View mWindLayer;
+ private PanelButton mButtonProcedure;
+ private PanelButton mButtonMode;
+ private PanelButton mButtonPathfinder;
+ private PanelButton mButtonTiming;
+ private PanelButton mButtonRaceGroup;
+ private PanelButton mButtonCourse;
+ private PanelButton mButtonWind;
public SetupPanelFragment() {
mReceiver = new IntentReceiver();
}
- public static SetupPanelFragment newInstance(Bundle args) {
+ public static SetupPanelFragment newInstance(Bundle args, int page) {
SetupPanelFragment fragment = new SetupPanelFragment();
+ args.putInt(ARGS_PAGE, page);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View layout = inflater.inflate(R.layout.race_panel_setup, container, false);
+ View layout;
+ switch (getArguments().getInt(ARGS_PAGE, 0)) {
+ case 1:
+ layout = inflater.inflate(R.layout.race_panel_setup_hor_2, container, false);
+ break;
+
+ default:
+ layout = inflater.inflate(R.layout.race_panel_setup, container, false);
+ }
mStateListener = new RaceStateChangedListener();
mProcedureListener = new RaceProcedureChangedListener();
- mStartProcedure = ViewHelper.get(layout, R.id.start_procedure);
- if (mStartProcedure != null) {
- mStartProcedure.setOnClickListener(new StartProcedureClick());
+ mButtonProcedure = ViewHelper.get(layout, R.id.button_procedure);
+ if (mButtonProcedure != null) {
+ mButtonProcedure.setListener(new StartProcedureListener());
}
- mStartProcedureLock = ViewHelper.get(layout, R.id.start_procedure_lock);
- mStartProcedureValue = ViewHelper.get(layout, R.id.start_procedure_value);
- mStartProcedureLayer = ViewHelper.get(layout, R.id.start_procedure_layer);
- mStartProcedureMore = ViewHelper.get(layout, R.id.start_procedure_more);
- if (mStartProcedureMore != null) {
- mStartProcedureMore.setOnClickListener(new StartProcedureMoreClick());
+ mButtonMode = ViewHelper.get(layout, R.id.button_mode);
+ if (mButtonMode != null) {
+ mButtonMode.setListener(new ButtonModeListener());
}
- mStartProcedureMoreLock = ViewHelper.get(layout, R.id.start_procedure_more_lock);
- mStartProcedureMoreLayer = ViewHelper.get(layout, R.id.start_procedure_more_layer);
- mCourse = ViewHelper.get(layout, R.id.course);
- if (mCourse != null) {
- mCourse.setOnClickListener(new CourseClick());
+ mButtonPathfinder = ViewHelper.get(layout, R.id.button_pathfinder);
+ if (mButtonPathfinder != null) {
+ mButtonPathfinder.setListener(new ButtonPathfinderListener());
}
- mCourseLock = ViewHelper.get(layout, R.id.course_lock);
- mCourseValue = ViewHelper.get(layout, R.id.course_value);
- mCourseLayer = ViewHelper.get(layout, R.id.course_layer);
- mWind = ViewHelper.get(layout, R.id.wind);
- if (mWind != null) {
- mWind.setOnClickListener(new WindClick());
+ mButtonTiming = ViewHelper.get(layout, R.id.button_timing);
+ if (mButtonTiming != null) {
+ mButtonTiming.setListener(new ButtonTimingListener());
+ }
+
+ mButtonRaceGroup = ViewHelper.get(layout, R.id.button_race_group);
+ if (mButtonRaceGroup != null) {
+ mButtonRaceGroup.setListener(new ButtonRaceGroupListener());
+ }
+
+ mButtonCourse = ViewHelper.get(layout, R.id.button_course);
+ if (mButtonCourse != null) {
+ mButtonCourse.setListener(new ButtonCourseListener());
+ }
+
+ mButtonWind = ViewHelper.get(layout, R.id.button_wind);
+ if (mButtonWind != null) {
+ mButtonWind.setListener(new ButtonWindListener());
}
- mWindLock = ViewHelper.get(layout, R.id.wind_lock);
- mWindValue = ViewHelper.get(layout, R.id.wind_value);
- mWindLayer = ViewHelper.get(layout, R.id.wind_layer);
return layout;
}
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- mExtraLayout = (FrameLayout) getActivity().findViewById(R.id.race_panel_extra);
- }
-
@Override
public void onResume() {
super.onResume();
@@ -150,149 +144,208 @@ public class SetupPanelFragment extends BasePanelFragment {
}
private void refreshPanel() {
- if (mCourseValue != null) {
- mCourseValue.setText(null);
- mCourseValue.setCompoundDrawables(null, null, null, null);
- String courseName = getCourseName();
- mCourseValue.setText(courseName);
- }
+ if (getRaceState().getTypedRacingProcedure() != null) {
+ if (mButtonProcedure != null) {
+ mButtonProcedure.setPanelText(getRaceState().getTypedRacingProcedure().getType().toString());
+ }
- if (mStartProcedureValue != null && getRaceState().getTypedRacingProcedure() != null) {
- mStartProcedureValue.setText(getRaceState().getTypedRacingProcedure().getType().toString());
+ if (mButtonMode != null) {
+ mButtonMode.setVisibility(View.GONE);
+ }
+ if (mButtonPathfinder != null) {
+ mButtonPathfinder.setVisibility(View.GONE);
+ }
+ if (mButtonTiming != null) {
+ mButtonTiming.setVisibility(View.GONE);
+ }
+ if (mButtonRaceGroup != null) {
+ mButtonRaceGroup.setVisibility(View.GONE);
+ }
- if (mStartProcedureMore != null) {
- if (getRaceState().getRacingProcedure() instanceof RRS26RacingProcedure || getRaceState()
- .getRacingProcedure() instanceof GateStartRacingProcedure) {
- mStartProcedureMore.setVisibility(View.VISIBLE);
- } else {
- mStartProcedureMore.setVisibility(View.GONE);
+ if (getRaceState().getRacingProcedure() instanceof RRS26RacingProcedure) {
+ if (mButtonMode != null) {
+ RRS26RacingProcedure typedProcedure = getRaceState().getTypedRacingProcedure();
+ mButtonMode.setPanelImage(FlagsResources.getFlagDrawable(getActivity(), typedProcedure.getStartModeFlag().name(), getResources().getInteger(R.integer.flag_size)));
+ mButtonMode.setVisibility(View.VISIBLE);
+ }
+ }
+ if (getRaceState().getRacingProcedure() instanceof GateStartRacingProcedure) {
+ GateStartRacingProcedure typedProcedure = getRaceState().getTypedRacingProcedure();
+ if (mButtonPathfinder != null) {
+ mButtonPathfinder.setPanelText(typedProcedure.getPathfinder());
+ mButtonPathfinder.setVisibility(View.VISIBLE);
+ }
+ if (mButtonTiming != null) {
+ mButtonTiming.setPanelText(RaceHelper.getGateTiming(getActivity(), typedProcedure));
+ mButtonTiming.setVisibility(View.VISIBLE);
+ }
+ }
+ if (getRaceState().getRacingProcedure() instanceof ESSRacingProcedure) {
+ if (mButtonRaceGroup != null) {
+ mButtonRaceGroup.setVisibility(View.VISIBLE);
+ mButtonRaceGroup.setPanelSwitch(getRaceState().isAdditionalScoringInformationEnabled(AdditionalScoringInformationType.MAX_POINTS_DECREASE_MAX_SCORE));
}
}
}
+ if (mButtonCourse != null) {
+ mButtonCourse.setPanelText(getCourseName());
+ }
+
Wind wind = getRaceState().getWindFix();
- if (mWindValue != null && wind != null) {
+ if (mButtonWind != null && wind != null) {
String sensorData = getString(R.string.wind_panel, wind.getFrom().getDegrees(), wind.getKnots());
- mWindValue.setText(sensorData);
+ mButtonWind.setPanelText(sensorData);
}
}
private void checkStatus() {
switch (getRace().getStatus()) {
case UNSCHEDULED:
- changeVisibility(mStartProcedureLock, mStartProcedureLayer, View.GONE);
- changeVisibility(mStartProcedureMoreLock, mStartProcedureMoreLayer, View.GONE);
- changeVisibility(mCourseLock, mCourseLayer, View.GONE);
- changeVisibility(mWindLock, mWindLayer, View.GONE);
+ changeVisibility(mButtonProcedure, false);
+ changeVisibility(mButtonMode, false);
+ changeVisibility(mButtonPathfinder, false);
+ changeVisibility(mButtonTiming, false);
+ changeVisibility(mButtonRaceGroup, false);
+ changeVisibility(mButtonCourse, false);
+ changeVisibility(mButtonWind, false);
break;
case PRESCHEDULED:
- changeVisibility(mStartProcedureLock, mStartProcedureLayer, View.GONE);
- changeVisibility(mStartProcedureMoreLock, mStartProcedureMoreLayer, View.GONE);
- changeVisibility(mCourseLock, mCourseLayer, View.GONE);
- changeVisibility(mWindLock, mWindLayer, View.GONE);
+ changeVisibility(mButtonProcedure, false);
+ changeVisibility(mButtonMode, false);
+ changeVisibility(mButtonPathfinder, false);
+ changeVisibility(mButtonTiming, false);
+ changeVisibility(mButtonRaceGroup, false);
+ changeVisibility(mButtonCourse, false);
+ changeVisibility(mButtonWind, false);
break;
case SCHEDULED:
- changeVisibility(mStartProcedureLock, mStartProcedureLayer, View.GONE);
- changeVisibility(mStartProcedureMoreLock, mStartProcedureMoreLayer, View.GONE);
- changeVisibility(mCourseLock, mCourseLayer, View.GONE);
- changeVisibility(mWindLock, mWindLayer, View.GONE);
+ changeVisibility(mButtonProcedure, false);
+ changeVisibility(mButtonMode, false);
+ changeVisibility(mButtonPathfinder, false);
+ changeVisibility(mButtonTiming, false);
+ changeVisibility(mButtonRaceGroup, false);
+ changeVisibility(mButtonCourse, false);
+ changeVisibility(mButtonWind, false);
break;
case STARTPHASE:
- changeVisibility(mStartProcedureLock, mStartProcedureLayer, View.VISIBLE);
- changeVisibility(mStartProcedureMoreLock, mStartProcedureMoreLayer, View.GONE);
- changeVisibility(mCourseLock, mCourseLayer, View.GONE);
- changeVisibility(mWindLock, mWindLayer, View.GONE);
+ changeVisibility(mButtonProcedure, true);
+ changeVisibility(mButtonMode, true);
+ changeVisibility(mButtonPathfinder, true);
+ changeVisibility(mButtonTiming, true);
+ changeVisibility(mButtonRaceGroup, true);
+ changeVisibility(mButtonCourse, false);
+ changeVisibility(mButtonWind, false);
break;
case RUNNING:
- changeVisibility(mStartProcedureLock, mStartProcedureLayer, View.VISIBLE);
- changeVisibility(mStartProcedureMoreLock, mStartProcedureMoreLayer, View.GONE);
- changeVisibility(mCourseLock, mCourseLayer, View.GONE);
- changeVisibility(mWindLock, mWindLayer, View.GONE);
+ changeVisibility(mButtonProcedure, true);
+ changeVisibility(mButtonMode, true);
+ changeVisibility(mButtonPathfinder, true);
+ changeVisibility(mButtonTiming, true);
+ changeVisibility(mButtonRaceGroup, true);
+ changeVisibility(mButtonCourse, false);
+ changeVisibility(mButtonWind, false);
- uncheckMarker(mStartProcedure);
- uncheckMarker(mStartProcedureMore);
+ uncheckMarker(mButtonProcedure);
+ uncheckMarker(mButtonMode);
+ uncheckMarker(mButtonPathfinder);
+ uncheckMarker(mButtonTiming);
break;
case FINISHING:
- changeVisibility(mStartProcedureLock, mStartProcedureLayer, View.VISIBLE);
- changeVisibility(mStartProcedureMoreLock, mStartProcedureMoreLayer, View.GONE);
- changeVisibility(mCourseLock, mCourseLayer, View.VISIBLE);
- changeVisibility(mWindLock, mWindLayer, View.GONE);
+ changeVisibility(mButtonProcedure, true);
+ changeVisibility(mButtonMode, true);
+ changeVisibility(mButtonPathfinder, true);
+ changeVisibility(mButtonTiming, true);
+ changeVisibility(mButtonRaceGroup, true);
+ changeVisibility(mButtonCourse, true);
+ changeVisibility(mButtonWind, false);
- uncheckMarker(mStartProcedure);
- uncheckMarker(mStartProcedureMore);
- uncheckMarker(mCourseLock);
+ uncheckMarker(mButtonProcedure);
+ uncheckMarker(mButtonMode);
+ uncheckMarker(mButtonPathfinder);
+ uncheckMarker(mButtonTiming);
+ uncheckMarker(mButtonCourse);
break;
case FINISHED:
- changeVisibility(mStartProcedureLock, mStartProcedureLayer, View.GONE);
- changeVisibility(mStartProcedureMoreLock, mStartProcedureMoreLayer, View.GONE);
- changeVisibility(mCourseLock, mCourseLayer, View.GONE);
- changeVisibility(mWindLock, mWindLayer, View.GONE);
+ changeVisibility(mButtonProcedure, false);
+ changeVisibility(mButtonMode, false);
+ changeVisibility(mButtonPathfinder, false);
+ changeVisibility(mButtonTiming, false);
+ changeVisibility(mButtonRaceGroup, false);
+ changeVisibility(mButtonCourse, false);
+ changeVisibility(mButtonWind, false);
- uncheckMarker(mStartProcedure);
- uncheckMarker(mStartProcedureMore);
- uncheckMarker(mCourse);
- uncheckMarker(mWind);
+ uncheckMarker(mButtonProcedure);
+ uncheckMarker(mButtonMode);
+ uncheckMarker(mButtonPathfinder);
+ uncheckMarker(mButtonTiming);
+ uncheckMarker(mButtonCourse);
+ uncheckMarker(mButtonWind);
break;
default:
- changeVisibility(mStartProcedureLock, mStartProcedureLayer, View.VISIBLE);
- changeVisibility(mCourseLock, mCourseLayer, View.VISIBLE);
- changeVisibility(mWindLock, mWindLayer, View.VISIBLE);
+ changeVisibility(mButtonProcedure, true);
+ changeVisibility(mButtonMode, true);
+ changeVisibility(mButtonPathfinder, true);
+ changeVisibility(mButtonTiming, true);
+ changeVisibility(mButtonRaceGroup, true);
+ changeVisibility(mButtonCourse, true);
+ changeVisibility(mButtonWind, true);
- uncheckMarker(mStartProcedure);
- uncheckMarker(mStartProcedureMore);
- uncheckMarker(mCourse);
- uncheckMarker(mWind);
+ uncheckMarker(mButtonProcedure);
+ uncheckMarker(mButtonMode);
+ uncheckMarker(mButtonProcedure);
+ uncheckMarker(mButtonTiming);
+ uncheckMarker(mButtonCourse);
+ uncheckMarker(mButtonWind);
break;
}
}
- private void uncheckMarker(View view) {
- if (isAdded() && view != null) {
- if (!view.equals(mStartProcedure)) {
- resetFragment(mStartProcedureLock, getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), StartProcedureFragment.class);
- setMarkerLevel(mStartProcedure, R.id.start_procedure_marker, LEVEL_NORMAL);
+ private void changeVisibility(PanelButton view, boolean showLock) {
+ if (view != null) {
+ view.setLock(showLock);
+ }
+ }
+
+ private void uncheckMarker(PanelButton view) {
+ if (isAdded()) {
+ if (mButtonProcedure != null && !mButtonProcedure.equals(view)) {
+ resetFragment(mButtonProcedure.isLocked(), getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), StartProcedureFragment.class);
+ mButtonProcedure.setMarkerLevel(PanelButton.LEVEL_NORMAL);
+ }
+ if (mButtonMode != null && !mButtonMode.equals(view)) {
+ resetFragment(mButtonMode.isLocked(), getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), LineStartModeFragment.class);
+ mButtonMode.setMarkerLevel(PanelButton.LEVEL_NORMAL);
+ }
+ if (mButtonPathfinder != null && !mButtonPathfinder.equals(view)) {
+ resetFragment(mButtonPathfinder.isLocked(), getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), GateStartPathFinderFragment.class);
+ mButtonPathfinder.setMarkerLevel(PanelButton.LEVEL_NORMAL);
+ }
+ if (mButtonTiming != null && !mButtonTiming.equals(view)) {
+ resetFragment(mButtonTiming.isLocked(), getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), GateStartTimingFragment.class);
+ mButtonTiming.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 (!view.equals(mStartProcedureMore)) {
- if (AppUtils.with(getActivity()).isLand()) {
- Fragment fragment = getFragmentManager().findFragmentById(R.id.race_panel_extra);
- if (mExtraLayout != null && fragment != null) {
- mExtraLayout.setVisibility(View.GONE);
- FragmentTransaction transaction = getFragmentManager().beginTransaction();
- transaction.remove(fragment);
- transaction.commit();
- }
- }
- setMarkerLevel(mStartProcedureMore, R.id.start_procedure_more_marker, LEVEL_NORMAL);
- }
-
- if (!view.equals(mCourse)) {
- resetFragment(mCourseLock, getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), CourseFragment.class);
- setMarkerLevel(mCourse, R.id.course_marker, LEVEL_NORMAL);
- }
-
- if (!view.equals(mWind)) {
- resetFragment(mWindLock, getFrameId(getActivity(), R.id.race_edit, R.id.race_content, false), WindFragment.class);
- setMarkerLevel(mWind, R.id.wind_marker, 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);
}
}
}
private class RaceStateChangedListener extends BaseRaceStateChangedListener {
- private View mView;
-
- public RaceStateChangedListener() {
- mView = new View(getActivity());
- }
-
@Override
public void onRacingProcedureChanged(ReadonlyRaceState state) {
super.onRacingProcedureChanged(state);
@@ -300,7 +353,7 @@ public class SetupPanelFragment extends BasePanelFragment {
state.getRacingProcedure().addChangedListener(mProcedureListener);
refreshPanel();
- uncheckMarker(mView);
+ uncheckMarker(null);
}
@Override
@@ -308,7 +361,7 @@ public class SetupPanelFragment extends BasePanelFragment {
super.onCourseDesignChanged(state);
refreshPanel();
- uncheckMarker(mView);
+ uncheckMarker(null);
}
@Override
@@ -316,7 +369,7 @@ public class SetupPanelFragment extends BasePanelFragment {
super.onWindFixChanged(state);
refreshPanel();
- uncheckMarker(mView);
+ uncheckMarker(null);
}
@Override
@@ -324,16 +377,16 @@ public class SetupPanelFragment extends BasePanelFragment {
super.onStatusChanged(state);
checkStatus();
- uncheckMarker(mView);
+ uncheckMarker(null);
}
}
private class RaceProcedureChangedListener extends BaseRacingProcedureChangedListener {
- private View mView;
+ private PanelButton mView;
public RaceProcedureChangedListener() {
- mView = new View(getActivity());
+ mView = new PanelButton(getActivity());
}
@Override
@@ -345,36 +398,19 @@ public class SetupPanelFragment extends BasePanelFragment {
}
}
- private class StartProcedureClick implements View.OnClickListener, DialogInterface.OnClickListener {
+ private class StartProcedureListener implements PanelButton.PanelButtonClick {
- private final String TAG = StartProcedureClick.class.getName();
- private final View container = mStartProcedure;
- private final int markerId = R.id.start_procedure_marker;
+ private final String TAG = StartProcedureListener.class.getName();
@Override
- public void onClick(View v) {
- if (mStartProcedureLock != null) {
- if (mStartProcedureLock.getVisibility() == View.VISIBLE && isNormal(container, markerId)) {
- showChangeDialog(this);
- } else {
- toggleFragment();
- }
- }
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- toggleFragment();
- }
-
- private void toggleFragment() {
+ public void onClick(PanelButton view) {
sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_PROCEDURE);
- switch (toggleMarker(container, markerId)) {
- case LEVEL_NORMAL:
+ switch (view.toggleMarker()) {
+ case PanelButton.LEVEL_NORMAL:
sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
break;
- case LEVEL_TOGGLED:
+ case PanelButton.LEVEL_TOGGLED:
replaceFragment(StartProcedureFragment.newInstance(BaseFragment.START_MODE_PLANNED));
break;
@@ -382,94 +418,119 @@ public class SetupPanelFragment extends BasePanelFragment {
ExLog.i(getActivity(), TAG, "Unknown return value");
break;
}
- disableToggle(container, markerId);
+ view.disableToggle();
+ }
+
+ @Override
+ public void onChangedSwitch(PanelButton view, boolean isChecked) {
+
}
}
- private class StartProcedureMoreClick implements View.OnClickListener, DialogInterface.OnClickListener {
+ private class ButtonModeListener implements PanelButton.PanelButtonClick {
- private final String TAG = StartProcedureMoreClick.class.getName();
- private final View container = mStartProcedureMore;
- private final int markerId = R.id.start_procedure_more_marker;
+ private final String TAG = ButtonModeListener.class.getName();
@Override
- public void onClick(View v) {
- if (mStartProcedureMoreLock != null) {
- if (mStartProcedureMoreLock.getVisibility() == View.VISIBLE && isNormal(container, markerId)) {
- showChangeDialog(this);
- } else {
- toggleFragment();
- }
+ public void onClick(PanelButton view) {
+ sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_PROCEDURE_MORE_MODE);
+ switch (view.toggleMarker()) {
+ case PanelButton.LEVEL_NORMAL:
+ sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
+ break;
+
+ case PanelButton.LEVEL_TOGGLED:
+ replaceFragment(LineStartModeFragment.newInstance(LineStartModeFragment.START_MODE_PLANNED));
+ break;
+
+ default:
+ ExLog.i(getActivity(), TAG, "Unknown return value");
}
+ view.disableToggle();
}
@Override
- public void onClick(DialogInterface dialog, int which) {
- toggleFragment();
- }
-
- private void toggleFragment() {
- sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_PROCEDURE_MORE);
- if (getView() != null && getView().findViewById(R.id.race_panel_extra) != null) {
- FragmentTransaction transaction = getFragmentManager().beginTransaction();
- if (mExtraLayout != null) {
- switch (toggleMarker(container, markerId)) {
- case LEVEL_NORMAL:
- mExtraLayout.setVisibility(View.GONE);
- transaction.remove(getFragmentManager().findFragmentById(R.id.race_panel_extra));
- break;
-
- case LEVEL_TOGGLED:
- int multiplier = 1;
- if (getRaceState().getRacingProcedure() instanceof GateStartRacingProcedure) {
- multiplier = 2;
- }
- int height = container.getMeasuredHeight() + getResources().getDimensionPixelSize(R.dimen.thin_line);
- int width = container.getMeasuredWidth() * multiplier;
- RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height);
- params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
- params.addRule(RelativeLayout.RIGHT_OF, R.id.race_panel_setup);
- mExtraLayout.setLayoutParams(params);
- mExtraLayout.setVisibility(View.VISIBLE);
- transaction.replace(R.id.race_panel_extra, MorePanelFragment.newInstance(getArguments()));
- break;
-
- default:
- ExLog.i(getActivity(), TAG, "Unknown return value");
- break;
- }
- }
- transaction.commit();
- }
- disableToggle(container, markerId);
+ public void onChangedSwitch(PanelButton view, boolean isChecked) {
+ // no-op
}
}
- private class CourseClick implements View.OnClickListener, DialogInterface.OnClickListener {
+ private class ButtonPathfinderListener implements PanelButton.PanelButtonClick {
- private final String TAG = CourseClick.class.getName();
- private final View container = mCourse;
- private final int markerId = R.id.course_marker;
+ private final String TAG = ButtonPathfinderListener.class.getName();
@Override
- public void onClick(View v) {
- if (mCourseLock != null) {
- if (mCourseLock.getVisibility() == View.VISIBLE && isNormal(container, markerId)) {
- showChangeDialog(this);
- } else {
- toggleFragment();
- }
+ public void onClick(PanelButton view) {
+ sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_PROCEDURE_MORE_PATHFINDER);
+ switch (view.toggleMarker()) {
+ case PanelButton.LEVEL_NORMAL:
+ sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
+ break;
+
+ case PanelButton.LEVEL_TOGGLED:
+ replaceFragment(GateStartPathFinderFragment.newInstance(GateStartPathFinderFragment.START_MODE_PLANNED));
+ break;
+
+ default:
+ ExLog.i(getActivity(), TAG, "Unknown return value");
}
+ view.disableToggle();
}
@Override
- public void onClick(DialogInterface dialog, int which) {
- toggleFragment();
+ public void onChangedSwitch(PanelButton view, boolean isChecked) {
+ // no-op
+ }
+ }
+
+ private class ButtonTimingListener implements PanelButton.PanelButtonClick {
+
+ private final String TAG = ButtonTimingListener.class.getName();
+
+ @Override
+ public void onClick(PanelButton view) {
+ sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_PROCEDURE_MORE_TIMING);
+ switch (view.toggleMarker()) {
+ case PanelButton.LEVEL_NORMAL:
+ sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
+ break;
+
+ case PanelButton.LEVEL_TOGGLED:
+ replaceFragment(GateStartTimingFragment.newInstance(GateStartTimingFragment.START_MODE_PLANNED));
+ break;
+
+ default:
+ ExLog.i(getActivity(), TAG, "Unknown return value");
+ }
+ view.disableToggle();
}
- private void toggleFragment() {
+ @Override
+ public void onChangedSwitch(PanelButton view, boolean isChecked) {
+ // no-op
+ }
+ }
+
+ private class ButtonRaceGroupListener implements PanelButton.PanelButtonClick {
+
+ @Override
+ public void onClick(PanelButton view) {
+ // no-op
+ }
+
+ @Override
+ public void onChangedSwitch(PanelButton view, boolean isChecked) {
+ getRaceState().setAdditionalScoringInformationEnabled(MillisecondsTimePoint.now(), /*enable*/isChecked, AdditionalScoringInformationType.MAX_POINTS_DECREASE_MAX_SCORE);
+ }
+ }
+
+ private class ButtonCourseListener implements PanelButton.PanelButtonClick {
+ private final String TAG = ButtonCourseListener.class.getName();
+
+ @Override
+ public void onClick(PanelButton view) {
sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_COURSE);
- switch (toggleMarker(container, markerId)) {
+ switch (view.toggleMarker()) {
case LEVEL_NORMAL:
sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
break;
@@ -481,35 +542,22 @@ public class SetupPanelFragment extends BasePanelFragment {
default:
ExLog.i(getActivity(), TAG, "Unknown return value");
}
- disableToggle(container, markerId);
+ view.disableToggle();
+ }
+
+ @Override
+ public void onChangedSwitch(PanelButton view, boolean isChecked) {
+ // no-op
}
}
- private class WindClick implements View.OnClickListener, DialogInterface.OnClickListener {
-
- private final String TAG = WindClick.class.getName();
- private final View container = mWind;
- private final int markerId = R.id.wind_marker;
+ private class ButtonWindListener implements PanelButton.PanelButtonClick {
+ private final String TAG = ButtonWindListener.class.getName();
@Override
- public void onClick(View v) {
- if (mWindLock != null) {
- if (mWindLock.getVisibility() == View.VISIBLE && isNormal(container, markerId)) {
- showChangeDialog(this);
- } else {
- toggleFragment();
- }
- }
- }
-
- @Override
- public void onClick(DialogInterface dialog, int which) {
- toggleFragment();
- }
-
- private void toggleFragment() {
+ public void onClick(PanelButton view) {
sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_WIND);
- switch (toggleMarker(container, markerId)) {
+ switch (view.toggleMarker()) {
case LEVEL_NORMAL:
sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
break;
@@ -521,7 +569,12 @@ public class SetupPanelFragment extends BasePanelFragment {
default:
ExLog.i(getActivity(), TAG, "Unknown return value");
}
- disableToggle(container, markerId);
+ view.disableToggle();
+ }
+
+ @Override
+ public void onChangedSwitch(PanelButton view, boolean isChecked) {
+ // no-op
}
}
@@ -531,22 +584,20 @@ public class SetupPanelFragment extends BasePanelFragment {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (AppConstants.INTENT_ACTION_CLEAR_TOGGLE.equals(action)) {
- uncheckMarker(new View(context));
+ uncheckMarker(null);
}
if (AppConstants.INTENT_ACTION_TOGGLE.equals(action)) {
if (intent.getExtras() != null) {
String data = intent.getExtras().getString(AppConstants.INTENT_ACTION_EXTRA);
if (AppConstants.INTENT_ACTION_TOGGLE_PROCEDURE.equals(data)) {
- uncheckMarker(mStartProcedure);
- } else if (AppConstants.INTENT_ACTION_TOGGLE_PROCEDURE_MORE.equals(data)) {
- uncheckMarker(mStartProcedureMore);
+ uncheckMarker(mButtonProcedure);
} else if (AppConstants.INTENT_ACTION_TOGGLE_COURSE.equals(data)) {
- uncheckMarker(mCourse);
+ uncheckMarker(mButtonCourse);
} else if (AppConstants.INTENT_ACTION_TOGGLE_WIND.equals(data)) {
- uncheckMarker(mWind);
+ uncheckMarker(mButtonWind);
} else {
- uncheckMarker(new View(context));
+ uncheckMarker(null);
}
}
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/BaseRaceInfoRaceFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/BaseRaceInfoRaceFragment.java
index 4def1443383..a1cc9e00bb2 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/BaseRaceInfoRaceFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/BaseRaceInfoRaceFragment.java
@@ -37,7 +37,7 @@ public abstract class BaseRaceInfoRaceFragment