use of competitor boat in PenaltyFragment

This commit is contained in:
Peter Siegmund
2018-02-20 16:13:16 +01:00
parent aff30b8f52
commit ec9102e2cd
4 changed files with 75 additions and 22 deletions
@@ -54,18 +54,32 @@
android:src="?attr/create" />
</LinearLayout>
<TextView
android:id="@+id/item_vessel"
style="?attr/textSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:layout_toRightOf="@id/item_check"
android:padding="5dp"
android:visibility="gone"
tools:text="4"
tools:visibility="visible" />
<TextView
android:id="@+id/item_text"
style="?attr/textSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="24dp"
android:layout_marginLeft="12dp"
android:layout_toLeftOf="@id/item_right"
android:layout_toRightOf="@id/item_check"
android:layout_toRightOf="@id/item_vessel"
android:ellipsize="end"
android:maxLines="3"
tools:text="ABD 1234 - Angel Dunn" />
</RelativeLayout>
<View
@@ -55,7 +55,9 @@ public class FinishListAdapter extends BaseDraggableSwipeAdapter<FinishListAdapt
} else {
holder.position.setText(null);
}
holder.vesselId.setVisibility(View.GONE);
if (mCanBoatsOfCompetitorsChangePerRace && item.getBoat() != null) {
holder.vesselId.setVisibility(View.VISIBLE);
holder.vesselId.setText(item.getBoat().getSailID());
float color = (1 - item.getBoat().getColor().getAsHSV().getC()) * 255f;
holder.vesselId.setTextColor(Color.argb(255, (int) color, (int) color, (int) color));
@@ -1,11 +1,16 @@
package com.sap.sailing.racecommittee.app.ui.adapters;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.domain.base.Boat;
import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.domain.impl.CompetitorResultEditableImpl;
@@ -15,8 +20,10 @@ import com.sap.sse.common.Util;
import com.sap.sse.common.util.NaturalComparator;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
@@ -33,16 +40,22 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
private static final int SAILING_NUMBER_POSITION = 0;
private static final int COMPETITOR_NAME_POSITION = 1;
private Context mContext;
private final Context mContext;
private final ItemListener mListener;
private final boolean mCanBoatsOfCompetitorsChangePerRace;
private List<CompetitorResultEditableImpl> mCompetitor;
private List<CompetitorResultEditableImpl> mFiltered;
private ItemListener mListener;
private Map<Serializable, Boat> mBoats;
private OrderBy mOrderBy = OrderBy.SAILING_NUMBER;
private String mFilter;
public PenaltyAdapter(Context context, @NonNull ItemListener listener) {
public PenaltyAdapter(Context context, @NonNull ItemListener listener, boolean canBoatsOfCompetitorsChangePerRace) {
mContext = context;
mListener = listener;
mCanBoatsOfCompetitorsChangePerRace = canBoatsOfCompetitorsChangePerRace;
mBoats = new HashMap<>();
}
@Override
@@ -71,19 +84,26 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
item.setChecked(isChecked);
if (mListener != null) {
mListener.onCheckedChanged(item, isChecked);
}
mListener.onCheckedChanged(item, isChecked);
}
});
holder.mItemEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.onEditClicked(item);
}
mListener.onEditClicked(item);
}
});
holder.mItemVessel.setVisibility(View.GONE);
if (mCanBoatsOfCompetitorsChangePerRace) {
Boat boat = mBoats.get(item.getCompetitorId());
if (boat != null) {
holder.mItemVessel.setVisibility(View.VISIBLE);
holder.mItemVessel.setText(boat.getSailID());
float color = (1 - boat.getColor().getAsHSV().getC()) * 255f;
holder.mItemVessel.setTextColor(Color.argb(255, (int) color, (int) color, (int) color));
holder.mItemVessel.setBackgroundColor(Color.parseColor(boat.getColor().getAsHtml()));
}
}
Drawable mergeIcon;
switch (item.getMergeState()) {
case WARNING:
@@ -106,7 +126,13 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
return (mFiltered != null) ? mFiltered.size() : 0;
}
public void setCompetitor(List<CompetitorResultEditableImpl> competitor) {
public void setCompetitor(List<CompetitorResultEditableImpl> competitor, @Nullable Map<Competitor, Boat> data) {
if (data != null) {
mBoats.clear();
for (Map.Entry<Competitor, Boat> entry : data.entrySet()) {
mBoats.put(entry.getKey().getId(), entry.getValue());
}
}
mCompetitor = competitor;
mFiltered = filterData();
sortData();
@@ -189,8 +215,16 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
String[] left = splitDisplayName(lhs.getCompetitorDisplayName());
String[] right = splitDisplayName(rhs.getCompetitorDisplayName());
String leftItem = left[mPos];
String rightItem = right[mPos];
int leftPos = mPos;
int rightPos = mPos;
if (left.length == 1) {
leftPos = 0;
}
if (right.length == 1) {
rightPos = 0;
}
String leftItem = left[leftPos];
String rightItem = right[rightPos];
if (mPos == SAILING_NUMBER_POSITION) {
for (String leftData : Util.splitAlongWhitespaceRespectingDoubleQuotedPhrases(leftItem)) {
leftItem = leftData;
@@ -210,6 +244,7 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
public static class ViewHolder extends RecyclerView.ViewHolder {
private CheckBox mItemCheck;
private TextView mItemVessel;
private TextView mItemText;
private TextView mItemPenalty;
private View mItemEdit;
@@ -220,6 +255,7 @@ public class PenaltyAdapter extends RecyclerView.Adapter<PenaltyAdapter.ViewHold
mItemCheck = ViewHelper.get(itemView, R.id.item_check);
mItemText = ViewHelper.get(itemView, R.id.item_text);
mItemVessel = ViewHelper.get(itemView, R.id.item_vessel);
mItemPenalty = ViewHelper.get(itemView, R.id.item_penalty);
mItemEdit = ViewHelper.get(itemView, R.id.item_edit);
mItemMergeState = ViewHelper.get(itemView, R.id.item_merge_state);
@@ -202,12 +202,6 @@ public class PenaltyFragment extends BaseFragment implements PopupMenu.OnMenuIte
});
}
mEntryCount = ViewHelper.get(layout, R.id.competitor_entry_count);
mAdapter = new PenaltyAdapter(getActivity(), this);
RecyclerView recyclerView = ViewHelper.get(layout, R.id.competitor_list);
if (recyclerView != null) {
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(mAdapter);
}
return layout;
}
@@ -228,6 +222,13 @@ public class PenaltyFragment extends BaseFragment implements PopupMenu.OnMenuIte
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mAdapter = new PenaltyAdapter(getActivity(), this, getRace().getRaceGroup().canBoatsOfCompetitorsChangePerRace());
RecyclerView recyclerView = ViewHelper.get(getView(), R.id.competitor_list);
if (recyclerView != null) {
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(mAdapter);
}
if (mPenaltyDropDown != null) {
int selection = mPenaltyAdapter.getPosition(MaxPointsReason.OCS.name());
RacingProcedure procedure = getRaceState().getRacingProcedure();
@@ -436,7 +437,7 @@ public class PenaltyFragment extends BaseFragment implements PopupMenu.OnMenuIte
mCompetitorResults.add(pos, new CompetitorResultEditableImpl(result));
}
}
mAdapter.setCompetitor(mCompetitorResults);
mAdapter.setCompetitor(mCompetitorResults, data);
setPublishButton();
}
@@ -456,7 +457,7 @@ public class PenaltyFragment extends BaseFragment implements PopupMenu.OnMenuIte
}
mCompetitorResults.clear();
mCompetitorResults.addAll(sortedList);
mAdapter.setCompetitor(mCompetitorResults);
mAdapter.setCompetitor(mCompetitorResults, null);
}
@Override