mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-02 10:23:51 +00:00
Bug 2800 - No process after Recalls
This commit is contained in:
1 parent
b2f80282b1
commit
d2af05a983
7 files changed
+158
-26
No files matched your search
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
@@ -9,5 +10,12 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="3"
|
||||
android:orientation="horizontal" />
|
||||
android:orientation="horizontal"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/individual_recall"
|
||||
layout="@layout/race_individual_recall"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/flag"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_margin="@dimen/default_margin_half"
|
||||
tools:src="@drawable/flag_xray_96dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/xray_down"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_margin="@dimen/default_margin_half"
|
||||
android:text="@string/until_xray_removed"
|
||||
android:textAppearance="?textNormal"/>
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_margin="@dimen/default_margin_half"
|
||||
android:src="?arrow_down_normal"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/flag_down"
|
||||
style="?buttonSolidNormal"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_margin="@dimen/default_margin_half"
|
||||
android:text="@string/finishing_done"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
@@ -397,5 +397,6 @@
|
||||
<string name="theme_changed_message">Die Änderung am Theme wird nach einem Neustart der App wirksam.</string>
|
||||
<string name="url_refresh_title">Die Server URL wurde geändert</string>
|
||||
<string name="url_refresh_message">Bitte melden Sie sich vom aktuellen Event ab, um die Daten des neuen Servers zu laden.</string>
|
||||
<string name="until_xray_removed">XRAY wird eingeholt in #TIME#</string>
|
||||
|
||||
</resources>
|
||||
@@ -419,5 +419,6 @@
|
||||
<string name="theme_changed_message">Changes to the theme will take action after an app restart.</string>
|
||||
<string name="url_refresh_title">Server URL Changed</string>
|
||||
<string name="url_refresh_message">Please logout from the current event to load the data from the new server.</string>
|
||||
<string name="until_xray_removed">XRAY will be removed in #TIME#</string>
|
||||
|
||||
</resources>
|
||||
+8
-5
@@ -7,6 +7,7 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.*;
|
||||
import com.sap.sailing.android.shared.util.ViewHolder;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure;
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.utils.FlagsResources;
|
||||
@@ -17,8 +18,8 @@ public class RecallFlagsAdapter extends BaseFlagsAdapter {
|
||||
|
||||
public class RecallFlag extends FlagItem {
|
||||
|
||||
public RecallFlag(String line1, String line2, String fileName) {
|
||||
super(line1, line2, fileName, false, null);
|
||||
public RecallFlag(String line1, String line2, Flags flags) {
|
||||
super(line1, line2, flags.name(), false, flags);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,13 +27,15 @@ public class RecallFlagsAdapter extends BaseFlagsAdapter {
|
||||
private ArrayList<RecallFlag> mFlags;
|
||||
private RecallFlagItemClick mListener;
|
||||
|
||||
public RecallFlagsAdapter(Context context, RecallFlagItemClick listener) {
|
||||
public RecallFlagsAdapter(Context context, RacingProcedure procedure, RecallFlagItemClick listener) {
|
||||
mContext = context;
|
||||
mListener = listener;
|
||||
|
||||
mFlags = new ArrayList<>();
|
||||
mFlags.add(new RecallFlag(context.getString(R.string.flag_xray), context.getString(R.string.flag_xray_desc), Flags.XRAY.name()));
|
||||
mFlags.add(new RecallFlag(context.getString(R.string.flag_first_subst), context.getString(R.string.flag_first_subst_desc), Flags.FIRSTSUBSTITUTE.name()));
|
||||
if (procedure.hasIndividualRecall()) {
|
||||
mFlags.add(new RecallFlag(context.getString(R.string.flag_xray), context.getString(R.string.flag_xray_desc), Flags.XRAY));
|
||||
}
|
||||
mFlags.add(new RecallFlag(context.getString(R.string.flag_first_subst), context.getString(R.string.flag_first_subst_desc), Flags.FIRSTSUBSTITUTE));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+63
-10
@@ -8,10 +8,12 @@ import android.view.ViewGroup;
|
||||
import android.widget.*;
|
||||
import com.sap.sailing.android.shared.util.ViewHolder;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.FlagPoleState;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure;
|
||||
import com.sap.sailing.domain.common.racelog.FlagPole;
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.utils.FlagsResources;
|
||||
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
@@ -22,6 +24,11 @@ import java.util.List;
|
||||
public class RaceFlagViewerFragment extends BaseFragment {
|
||||
|
||||
private LinearLayout mLayout;
|
||||
private View mRecall;
|
||||
|
||||
private ImageView mXrayFlag;
|
||||
private TextView mXrayCountdown;
|
||||
private Button mXrayButton;
|
||||
|
||||
public RaceFlagViewerFragment() {
|
||||
|
||||
@@ -39,6 +46,23 @@ public class RaceFlagViewerFragment extends BaseFragment {
|
||||
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.race_flag_screen, container, false);
|
||||
|
||||
mLayout = ViewHolder.get(layout, R.id.flags);
|
||||
mRecall = ViewHolder.get(layout, R.id.individual_recall);
|
||||
|
||||
mXrayButton = ViewHolder.get(layout, R.id.flag_down);
|
||||
if (mXrayButton != null) {
|
||||
mXrayButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
RacingProcedure procedure = getRaceState().getTypedRacingProcedure();
|
||||
procedure.removeIndividualRecall(MillisecondsTimePoint.now());
|
||||
}
|
||||
});
|
||||
}
|
||||
mXrayFlag = ViewHolder.get(layout, R.id.flag);
|
||||
if (mXrayFlag != null) {
|
||||
mXrayFlag.setImageDrawable(FlagsResources.getFlagDrawable(getActivity(), Flags.XRAY.name(), 96));
|
||||
}
|
||||
mXrayCountdown = ViewHolder.get(layout, R.id.xray_down);
|
||||
|
||||
return layout;
|
||||
}
|
||||
@@ -55,15 +79,44 @@ public class RaceFlagViewerFragment extends BaseFragment {
|
||||
return;
|
||||
}
|
||||
|
||||
FlagPoleState poleState = getRaceState().getRacingProcedure().getActiveFlags(getRaceState().getStartTime(),
|
||||
MillisecondsTimePoint.now());
|
||||
List<FlagPole> currentState = poleState.getCurrentState();
|
||||
List<FlagPole> upcoming = poleState.computeUpcomingChanges();
|
||||
mLayout.removeAllViews();
|
||||
int size = 0;
|
||||
for (FlagPole flagPole : currentState) {
|
||||
size++;
|
||||
mLayout.addView(renderFlag(poleState, flagPole, FlagPoleState.getMostInterestingFlagPole(upcoming), currentState.size() == size));
|
||||
if (mLayout != null) {
|
||||
mLayout.setVisibility(View.GONE);
|
||||
}
|
||||
if (mRecall != null) {
|
||||
mRecall.setVisibility(View.GONE);
|
||||
}
|
||||
RacingProcedure procedure = getRaceState().getTypedRacingProcedure();
|
||||
if (!procedure.isIndividualRecallDisplayed()) {
|
||||
if (mLayout != null) {
|
||||
mLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
FlagPoleState poleState = getRaceState().getRacingProcedure()
|
||||
.getActiveFlags(getRaceState().getStartTime(), MillisecondsTimePoint.now());
|
||||
List<FlagPole> currentState = poleState.getCurrentState();
|
||||
List<FlagPole> upcoming = poleState.computeUpcomingChanges();
|
||||
mLayout.removeAllViews();
|
||||
int size = 0;
|
||||
for (FlagPole flagPole : currentState) {
|
||||
size++;
|
||||
mLayout.addView(renderFlag(poleState, flagPole, FlagPoleState.getMostInterestingFlagPole(upcoming),
|
||||
currentState.size() == size));
|
||||
}
|
||||
} else {
|
||||
if (mRecall != null) {
|
||||
mRecall.setVisibility(View.VISIBLE);
|
||||
}
|
||||
String time = getString(R.string.until_xray_removed);
|
||||
if (mXrayCountdown != null) {
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
TimePoint flagDown = procedure.getIndividualRecallRemovalTime();
|
||||
if (now.before(flagDown)) {
|
||||
time = time.replace("#TIME#", getDuration(flagDown.asDate(), MillisecondsTimePoint.now().asDate())
|
||||
.replace("-", ""));
|
||||
mXrayCountdown.setText(time);
|
||||
} else {
|
||||
procedure.removeIndividualRecall(now);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +155,7 @@ public class RaceFlagViewerFragment extends BaseFragment {
|
||||
textView.setText("");
|
||||
if (changeAt != null && next) {
|
||||
textView.setVisibility(View.VISIBLE);
|
||||
textView.setText(getDuration(changeAt.asDate(), Calendar.getInstance().getTime()).replace("-", ""));
|
||||
textView.setText(getDuration(changeAt.asDate(), MillisecondsTimePoint.now().asDate()).replace("-", ""));
|
||||
if (flag.isDisplayed()) {
|
||||
downView.setVisibility(View.VISIBLE);
|
||||
upView.setVisibility(View.GONE);
|
||||
|
||||
+28
-9
@@ -5,13 +5,16 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ListView;
|
||||
import android.widget.Toast;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure;
|
||||
import com.sap.sailing.domain.common.racelog.Flags;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.RecallFlagsAdapter;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.RecallFlagsAdapter.RecallFlag;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.RecallFlagsAdapter.RecallFlagItemClick;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class RecallFlagsFragment extends RaceFragment implements RecallFlagItemClick{
|
||||
|
||||
@@ -28,21 +31,37 @@ public class RecallFlagsFragment extends RaceFragment implements RecallFlagItemC
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View layout = inflater.inflate(R.layout.flag_list, container, false);
|
||||
return inflater.inflate(R.layout.flag_list, container, false);
|
||||
}
|
||||
|
||||
ListView listView = (ListView) layout.findViewById(R.id.listView);
|
||||
if (listView != null) {
|
||||
mAdapter = new RecallFlagsAdapter(getActivity(), this);
|
||||
listView.setAdapter(mAdapter);
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
if (getView() != null) {
|
||||
ListView listView = (ListView) getView().findViewById(R.id.listView);
|
||||
if (listView != null) {
|
||||
mAdapter = new RecallFlagsAdapter(getActivity(), getRaceState().getTypedRacingProcedure(), this);
|
||||
listView.setAdapter(mAdapter);
|
||||
}
|
||||
}
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(RecallFlag flag) {
|
||||
mAdapter.notifyDataSetChanged();
|
||||
Toast.makeText(getActivity(), flag.file_name, Toast.LENGTH_SHORT).show();
|
||||
if (flag.flag.equals(Flags.XRAY)) {
|
||||
RacingProcedure procedure = getRaceState().getTypedRacingProcedure();
|
||||
procedure.displayIndividualRecall(MillisecondsTimePoint.now());
|
||||
sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
|
||||
sendIntent(AppConstants.INTENT_ACTION_CLEAR_TOGGLE);
|
||||
}
|
||||
if (flag.flag.equals(Flags.FIRSTSUBSTITUTE)) {
|
||||
TimePoint now = MillisecondsTimePoint.now();
|
||||
getRaceState().setGeneralRecall(now);
|
||||
// TODO see bug 1649: Explicit passing of pass identifier in RaceState interface
|
||||
getRaceState().setAdvancePass(now);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in new issue
Block a user