From 6d4fab6cf53b9f776414f13fade1af3b211d2047 Mon Sep 17 00:00:00 2001 From: Peter Siegmund Date: Tue, 9 Feb 2016 11:02:39 +0100 Subject: [PATCH] custom panel button (setup) --- .../res/layout/panel_button_setup.xml | 110 ++++ .../res/layout/race_main_normal.xml | 2 +- .../res/layout/race_panel_setup_hor.xml | 223 ------- .../res/layout/race_panel_setup_hor_1.xml | 62 ++ .../res/layout/race_panel_setup_hor_2.xml | 36 ++ .../res/layout/race_panel_setup_ver.xml | 273 ++------ .../res/values-de/strings.xml | 1 + .../res/values/attrs_custom_views.xml | 28 + .../res/values/references.xml | 2 +- .../res/values/strings.xml | 1 + .../app/ui/activities/RacingActivity.java | 7 +- .../app/ui/adapters/PanelsAdapter.java | 4 +- .../fragments/panels/BasePanelFragment.java | 11 + .../fragments/panels/SetupPanelFragment.java | 609 ++++++++++-------- .../raceinfo/BaseRaceInfoRaceFragment.java | 2 +- .../app/ui/views/PanelButton.java | 334 ++++++++++ 16 files changed, 963 insertions(+), 742 deletions(-) create mode 100644 mobile/com.sap.sailing.racecommittee.app/res/layout/panel_button_setup.xml delete mode 100644 mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_hor.xml create mode 100644 mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_hor_1.xml create mode 100644 mobile/com.sap.sailing.racecommittee.app/res/layout/race_panel_setup_hor_2.xml create mode 100644 mobile/com.sap.sailing.racecommittee.app/res/values/attrs_custom_views.xml create mode 100644 mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/PanelButton.java 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 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