Bug 2800 - No process after Recalls

This commit is contained in:
Peter Siegmund committed 2015-04-30 14:11:32 +02:00
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>
@@ -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
@@ -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);
@@ -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