From 5d72cf559d39159ead99d3638864fa3e6830fb88 Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Thu, 9 May 2019 10:04:55 +0200 Subject: [PATCH 01/21] Refactor constructors for CompetitorResultWithIdImpl --- .../impl/CompetitorResultWithIdImpl.java | 32 +-- .../fragments/raceinfo/PenaltyFragment.java | 2 +- .../raceinfo/TrackingListFragment.java | 195 +++++++++--------- .../app/ui/layouts/CompetitorEditLayout.java | 2 +- 4 files changed, 117 insertions(+), 114 deletions(-) diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/CompetitorResultWithIdImpl.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/CompetitorResultWithIdImpl.java index a5d7beea4e1..ad33809f558 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/CompetitorResultWithIdImpl.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/CompetitorResultWithIdImpl.java @@ -1,36 +1,42 @@ package com.sap.sailing.racecommittee.app.domain.impl; -import java.io.Serializable; - +import android.support.annotation.NonNull; import com.sap.sailing.domain.abstractlog.race.CompetitorResult; import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultImpl; import com.sap.sailing.domain.base.Boat; import com.sap.sailing.domain.common.MaxPointsReason; import com.sap.sse.common.TimePoint; +import java.io.Serializable; + public class CompetitorResultWithIdImpl extends CompetitorResultImpl { private static final long serialVersionUID = 4373611281142932067L; private long mId; private Boat mBoat; - public CompetitorResultWithIdImpl(long id, Boat boat, CompetitorResult result) { - this(id, boat, result.getCompetitorId(), result.getName(), result.getShortName(), - result.getOneBasedRank(), result.getMaxPointsReason(), result.getScore(), result.getFinishingTime(), - result.getComment(), result.getMergeState()); + public CompetitorResultWithIdImpl(long id, CompetitorResult result) { + this(id, result.getCompetitorId(), result.getName(), result.getShortName(), result.getBoatName(), + result.getBoatSailId(),result.getOneBasedRank(), result.getMaxPointsReason(), result.getScore(), + result.getFinishingTime(), result.getComment(), result.getMergeState()); } - public CompetitorResultWithIdImpl(long id, Boat boat, Serializable competitorId, String competitorName, - String shortName, int oneBasedRank, MaxPointsReason maxPointsReason, Double score, TimePoint finishingTime, - String comment, MergeState mergeState) { - super(competitorId, competitorName, shortName, - boat == null ? null : boat.getName(), boat == null ? null : boat.getSailID(), + public CompetitorResultWithIdImpl(long id, Serializable competitorId, String competitorName, String shortName, + @NonNull Boat boat, int oneBasedRank, MaxPointsReason maxPointsReason, + Double score, TimePoint finishingTime, String comment, MergeState mergeState) { + this(id, competitorId, competitorName, shortName, boat.getName(), boat.getSailID(), oneBasedRank, maxPointsReason, score, finishingTime, comment, mergeState); - - mId = id; mBoat = boat; } + public CompetitorResultWithIdImpl(long id, Serializable competitorId, String competitorName, String shortName, + String boatName, String sailId, int oneBasedRank, MaxPointsReason maxPointsReason, + Double score, TimePoint finishingTime, String comment, MergeState mergeState) { + super(competitorId, competitorName, shortName, boatName, sailId, oneBasedRank, maxPointsReason, score, + finishingTime, comment, mergeState); + mId = id; + } + public long getId() { return mId; } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/PenaltyFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/PenaltyFragment.java index bac84a35336..1f7fd4f039a 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/PenaltyFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/PenaltyFragment.java @@ -679,7 +679,7 @@ public class PenaltyFragment extends BaseFragment } } competitor.setMergeState(MergeState.OK); - CompetitorResultWithIdImpl item = new CompetitorResultWithIdImpl(0, getBoat(competitor.getCompetitorId()), competitor); + CompetitorResultWithIdImpl item = new CompetitorResultWithIdImpl(0, competitor); AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AppTheme_AlertDialog); builder.setTitle(CompetitorUtils.getDisplayName(item)); final CompetitorEditLayout layout = new CompetitorEditLayout(getActivity(), item, diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/TrackingListFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/TrackingListFragment.java index 2b54922c272..1cbabb2273f 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/TrackingListFragment.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/TrackingListFragment.java @@ -162,12 +162,12 @@ public class TrackingListFragment extends BaseFragment RaceFragment fragment = PenaltyFragment.newInstance(); int viewId = R.id.race_content; switch (getRaceState().getStatus()) { - case FINISHED: - viewId = getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content, true); - break; + case FINISHED: + viewId = getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content, true); + break; - default: - break; + default: + break; } replaceFragment(fragment, viewId); } @@ -379,23 +379,23 @@ public class TrackingListFragment extends BaseFragment @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { - case R.id.by_short_name: - mComparator = mComparators.get(SORT_SHORT_NAME); - break; - case R.id.by_name: - mComparator = mComparators.get(SORT_NAME); - break; - case R.id.by_start: - mComparator = mComparators.get(SORT_START); - break; - case R.id.by_goal: - mComparator = mComparators.get(SORT_GOAL); - break; - case R.id.by_boat: - mComparator = mComparators.get(SORT_SAIL_NUMBER); - break; - default: - mComparator = mComparators.get(SORT_SAIL_NUMBER); + case R.id.by_short_name: + mComparator = mComparators.get(SORT_SHORT_NAME); + break; + case R.id.by_name: + mComparator = mComparators.get(SORT_NAME); + break; + case R.id.by_start: + mComparator = mComparators.get(SORT_START); + break; + case R.id.by_goal: + mComparator = mComparators.get(SORT_GOAL); + break; + case R.id.by_boat: + mComparator = mComparators.get(SORT_SAIL_NUMBER); + break; + default: + mComparator = mComparators.get(SORT_SAIL_NUMBER); } sortCompetitors(); @@ -562,8 +562,7 @@ public class TrackingListFragment extends BaseFragment Collections.synchronizedList(new ArrayList())); if (getRaceState() != null && getRaceState().getFinishPositioningList() != null) { for (CompetitorResult result : getRaceState().getFinishPositioningList()) { - Boat boat = getBoat(result.getCompetitorId()); - positioning.add(new CompetitorResultWithIdImpl(mId, boat, result)); + positioning.add(new CompetitorResultWithIdImpl(mId, result)); mId++; } } @@ -627,8 +626,9 @@ public class TrackingListFragment extends BaseFragment @Override public void onCancel(DialogInterface dialog) { CompetitorResultWithIdImpl newItem = new CompetitorResultWithIdImpl(item.getId(), - getBoat(item.getCompetitorId()), item.getCompetitorId(), item.getName(), item.getShortName(), - item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(), + item.getCompetitorId(), item.getName(), item.getShortName(), + item.getBoatName(), item.getBoatSailId(), item.getOneBasedRank(), + item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(), item.getComment(), MergeState.OK); updateItem(item, newItem); } @@ -653,9 +653,10 @@ public class TrackingListFragment extends BaseFragment greatestOneBasedRankSoFar = result.getOneBasedRank(); } } - CompetitorResultWithIdImpl theCompetitor = new CompetitorResultWithIdImpl(mId, getBoat(competitor.getId()), competitor.getId(), - competitor.getName(), competitor.getShortName(), greatestOneBasedRankSoFar + 1, MaxPointsReason.NONE, - /* score */ null, /* finishingTime */ null, /* comment */ null, MergeState.OK); + CompetitorResultWithIdImpl theCompetitor = new CompetitorResultWithIdImpl(mId, competitor.getId(), + competitor.getName(), competitor.getShortName(), getBoat(competitor.getId()), + greatestOneBasedRankSoFar + 1, MaxPointsReason.NONE, /* score */ null, /* finishingTime */ null, + /* comment */ null, MergeState.OK); mFinishedData.add(pos, theCompetitor); mId++; setPublishButton(); @@ -694,11 +695,9 @@ public class TrackingListFragment extends BaseFragment * position * * - * @param fromPosition - * the position (zero-based index) where the item currently is in {@link #mFinishedData} - * @param toPosition - * the position (zero-based index after removal of the item from its {@code fromPosition}) where - * to {@link List#add(int, Object)} the item again in {@link #mFinishedData} + * @param fromPosition the position (zero-based index) where the item currently is in {@link #mFinishedData} + * @param toPosition the position (zero-based index after removal of the item from its {@code fromPosition}) where + * to {@link List#add(int, Object)} the item again in {@link #mFinishedData} */ public boolean onItemMove(int fromPosition, int toPosition) { final int firstPositionChanged = Math.min(getFirstRankZeroPosition(), Math.min(fromPosition, toPosition)); @@ -726,10 +725,8 @@ public class TrackingListFragment extends BaseFragment * in the list plus one; stop before reaching the entry at list index {@code toPosition} or the * {@link #getFirstRankZeroPosition() first penalty position}. * - * @param fromPosition - * inclusive start index into {@link #mFinishedData} where to start updating the ranks - * @param toPosition - * inclusive end index into {@link #mFinishedData} where to stop updating the ranks; must not be -1 + * @param fromPosition inclusive start index into {@link #mFinishedData} where to start updating the ranks + * @param toPosition inclusive end index into {@link #mFinishedData} where to stop updating the ranks; must not be -1 */ private void adjustRanks(int fromPosition, int toPosition) { final int end = Math.min(toPosition, getFirstRankZeroPosition()); @@ -741,13 +738,11 @@ public class TrackingListFragment extends BaseFragment } } - private CompetitorResultWithIdImpl cloneCompetitorResultAndAdjustRank(CompetitorResultWithIdImpl competitorToReplaceWithAdjustedPosition, - final int newOneBasedRank) { - return new CompetitorResultWithIdImpl(competitorToReplaceWithAdjustedPosition.getId(), getBoat(competitorToReplaceWithAdjustedPosition - .getCompetitorId()), competitorToReplaceWithAdjustedPosition.getCompetitorId(), competitorToReplaceWithAdjustedPosition - .getName(), competitorToReplaceWithAdjustedPosition.getShortName(), newOneBasedRank, competitorToReplaceWithAdjustedPosition - .getMaxPointsReason(), competitorToReplaceWithAdjustedPosition.getScore(), competitorToReplaceWithAdjustedPosition - .getFinishingTime(), competitorToReplaceWithAdjustedPosition.getComment(), MergeState.OK); + private CompetitorResultWithIdImpl cloneCompetitorResultAndAdjustRank(CompetitorResultWithIdImpl competitor, + final int newOneBasedRank) { + return new CompetitorResultWithIdImpl(competitor.getId(), competitor.getCompetitorId(), competitor.getName(), + competitor.getShortName(), competitor.getBoatName(), competitor.getBoatSailId(), newOneBasedRank, competitor.getMaxPointsReason(), + competitor.getScore(), competitor.getFinishingTime(), competitor.getComment(), MergeState.OK); } public void onLongClick(final CompetitorResultWithIdImpl item) { @@ -785,14 +780,14 @@ public class TrackingListFragment extends BaseFragment } if (index >= 0) { mFinishedData.set(index, newItem); // update the item in the list already; then check where to move it and - // adjust other elements + // adjust other elements } if (item.getOneBasedRank() != 0 && newItem.getOneBasedRank() == 0 && newItem.getMaxPointsReason() != MaxPointsReason.NONE) { // move to the end of the area of "penalized" competitors; may also be an unpenalized competitor that hasn't // been removed yet (e.g., in order to force a score correction reset on the server) mFinishedAdapter.onItemMove(index, mFinishedData.size() - 1); // -1 because first the element is removed, so when inserting - // the list is one element shorter + // the list is one element shorter } else if (item.getOneBasedRank() != newItem.getOneBasedRank() && newItem.getOneBasedRank() != 0) { mFinishedAdapter.onItemMove(index, newItem.getOneBasedRank() - 1); } else if (newItem.getOneBasedRank() == 0 && newItem.getMaxPointsReason() == MaxPointsReason.NONE) { @@ -813,7 +808,7 @@ public class TrackingListFragment extends BaseFragment protected void setMaxPointsReasonForItem(CompetitorResultWithIdImpl item, CharSequence maxPointsReasonName) { MaxPointsReason maxPointsReason = MaxPointsReason.valueOf(maxPointsReasonName.toString()); - CompetitorResultWithIdImpl newItem = new CompetitorResultWithIdImpl(item.getId(), getBoat(item.getCompetitorId()), item); + CompetitorResultWithIdImpl newItem = new CompetitorResultWithIdImpl(item.getId(), item); updateItem(item, newItem); getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), getCompetitorResults()); } @@ -868,23 +863,23 @@ public class TrackingListFragment extends BaseFragment public void onClick(View v) { if (v != null) { switch (v.getId()) { - case R.id.nav_prev: - viewPanel(MOVE_DOWN); - break; + case R.id.nav_prev: + viewPanel(MOVE_DOWN); + break; - case R.id.nav_next: - viewPanel(MOVE_UP); - break; + case R.id.nav_next: + viewPanel(MOVE_UP); + break; } } if (mHeader != null) { switch (mActivePage) { - case 0: - mHeader.setHeaderText(R.string.tracking_list_01); - break; + case 0: + mHeader.setHeaderText(R.string.tracking_list_01); + break; - default: - mHeader.setHeaderText(R.string.tracking_list_02); + default: + mHeader.setHeaderText(R.string.tracking_list_02); } } if (mTools != null) { @@ -969,7 +964,6 @@ public class TrackingListFragment extends BaseFragment } } if (item != null) { // result is in list - Boat boat = getBoat(item.getCompetitorId()); // check one based rank if (item.getOneBasedRank() != result.getOneBasedRank()) { if (draft != null) { @@ -981,8 +975,8 @@ public class TrackingListFragment extends BaseFragment } else { state = MergeState.ERROR; } - newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(), - item.getShortName(), result.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), + newItem = new CompetitorResultWithIdImpl(item.getId(), item.getCompetitorId(), item.getName(), + item.getShortName(), item.getBoatName(), item.getBoatSailId(), result.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(), item.getComment(), getMergeState(item, state)); item = updateChangedItem(changedCompetitor, item, newItem); } @@ -998,9 +992,9 @@ public class TrackingListFragment extends BaseFragment } else { state = MergeState.ERROR; } - newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(), - item.getShortName(), item.getOneBasedRank(), result.getMaxPointsReason(), item.getScore(), - item.getFinishingTime(), item.getComment(), getMergeState(item, state)); + newItem = new CompetitorResultWithIdImpl(item.getId(), item.getCompetitorId(), item.getName(), + item.getShortName(), item.getBoatName(), item.getBoatSailId(), item.getOneBasedRank(), result.getMaxPointsReason(), + item.getScore(), item.getFinishingTime(), item.getComment(), getMergeState(item, state)); item = updateChangedItem(changedCompetitor, item, newItem); } @@ -1016,16 +1010,17 @@ public class TrackingListFragment extends BaseFragment } else { state = MergeState.ERROR; } - newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), - item.getName(), item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), + newItem = new CompetitorResultWithIdImpl(item.getId(), item.getCompetitorId(), item.getName(), + item.getShortName(), item.getBoatName(), item.getBoatSailId(), item.getOneBasedRank(), item.getMaxPointsReason(), result.getScore(), item.getFinishingTime(), item.getComment(), getMergeState(item, state)); item = updateChangedItem(changedCompetitor, item, newItem); } } else if (result.getScore() != null) { - newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(), - item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), result.getScore(), - item.getFinishingTime(), item.getComment(), getMergeState(item, MergeState.ERROR)); + newItem = new CompetitorResultWithIdImpl(item.getId(), item.getCompetitorId(), item.getName(), + item.getShortName(), item.getBoatName(), item.getBoatSailId(), item.getOneBasedRank(), item.getMaxPointsReason(), + result.getScore(), item.getFinishingTime(), item.getComment(), + getMergeState(item, MergeState.ERROR)); item = updateChangedItem(changedCompetitor, item, newItem); } @@ -1041,16 +1036,17 @@ public class TrackingListFragment extends BaseFragment } else { state = MergeState.ERROR; } - newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), - item.getName(), item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), + newItem = new CompetitorResultWithIdImpl(item.getId(), item.getCompetitorId(), item.getName(), + item.getShortName(), item.getBoatName(), item.getBoatSailId(), item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), result.getFinishingTime(), item.getComment(), getMergeState(item, state)); item = updateChangedItem(changedCompetitor, item, newItem); } } else if (result.getFinishingTime() != null) { - newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(), - item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), - result.getFinishingTime(), item.getComment(), getMergeState(item, MergeState.ERROR)); + newItem = new CompetitorResultWithIdImpl(item.getId(), item.getCompetitorId(), item.getName(), + item.getShortName(), item.getBoatName(), item.getBoatSailId(), item.getOneBasedRank(), item.getMaxPointsReason(), + item.getScore(), result.getFinishingTime(), item.getComment(), + getMergeState(item, MergeState.ERROR)); item = updateChangedItem(changedCompetitor, item, newItem); } @@ -1066,24 +1062,26 @@ public class TrackingListFragment extends BaseFragment } else { state = MergeState.ERROR; } - newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), - item.getName(), item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), + newItem = new CompetitorResultWithIdImpl(item.getId(), item.getCompetitorId(), item.getName(), + item.getShortName(), item.getBoatName(), item.getBoatSailId(), item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), item.getFinishingTime(), item.getComment() + " ## " + result.getComment(), getMergeState(item, state)); item = updateChangedItem(changedCompetitor, item, newItem); } } else if (result.getComment() != null) { - newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(), - item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), - item.getFinishingTime(), result.getComment(), getMergeState(item, MergeState.ERROR)); + newItem = new CompetitorResultWithIdImpl(item.getId(), item.getCompetitorId(), item.getName(), + item.getShortName(), item.getBoatName(), item.getBoatSailId(), item.getOneBasedRank(), item.getMaxPointsReason(), + item.getScore(), item.getFinishingTime(), result.getComment(), + getMergeState(item, MergeState.ERROR)); item = updateChangedItem(changedCompetitor, item, newItem); } // check merge state if (!item.getMergeState().equals(result.getMergeState())) { - newItem = new CompetitorResultWithIdImpl(item.getId(), boat, item.getCompetitorId(), item.getName(), - item.getShortName(), item.getOneBasedRank(), item.getMaxPointsReason(), item.getScore(), - item.getFinishingTime(), item.getComment(), getMergeState(item, result.getMergeState())); + newItem = new CompetitorResultWithIdImpl(item.getId(), item.getCompetitorId(), item.getName(), + item.getShortName(), item.getBoatName(), item.getBoatSailId(), item.getOneBasedRank(), item.getMaxPointsReason(), + item.getScore(), item.getFinishingTime(), item.getComment(), + getMergeState(item, result.getMergeState())); item = updateChangedItem(changedCompetitor, item, newItem); } } else { // unknown result, so it will be added @@ -1094,8 +1092,7 @@ public class TrackingListFragment extends BaseFragment break; } } - mFinishedData.add(new CompetitorResultWithIdImpl(mFinishedData.size(), - getBoat(result.getCompetitorId()), result)); + mFinishedData.add(new CompetitorResultWithIdImpl(mFinishedData.size(), result)); Collections.sort(mFinishedData, new DefaultCompetitorResultComparator(/* lowPoint TODO where to get this from? */ true)); } @@ -1121,7 +1118,7 @@ public class TrackingListFragment extends BaseFragment @NonNull private CompetitorResultWithIdImpl updateChangedItem(Map changedCompetitor, - CompetitorResultWithIdImpl item, CompetitorResultWithIdImpl newItem) { + CompetitorResultWithIdImpl item, CompetitorResultWithIdImpl newItem) { updateItem(item, newItem); changedCompetitor.put(newItem.getCompetitorId(), CompetitorUtils.getDisplayName(newItem)); return newItem; @@ -1130,23 +1127,23 @@ public class TrackingListFragment extends BaseFragment private MergeState getMergeState(CompetitorResultWithIdImpl item, MergeState newState) { MergeState state = item.getMergeState(); switch (item.getMergeState()) { - case ERROR: - if (newState != MergeState.ERROR) { + case ERROR: + if (newState != MergeState.ERROR) { + break; + } + state = newState; break; - } - state = newState; - break; - case WARNING: - if (newState != MergeState.WARNING && newState != MergeState.ERROR) { + case WARNING: + if (newState != MergeState.WARNING && newState != MergeState.ERROR) { + break; + } + state = newState; break; - } - state = newState; - break; - case OK: - state = newState; - break; + case OK: + state = newState; + break; } return state; } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/CompetitorEditLayout.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/CompetitorEditLayout.java index 48c9f01c402..7d3cd826184 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/CompetitorEditLayout.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/CompetitorEditLayout.java @@ -226,7 +226,7 @@ public class CompetitorEditLayout extends ScrollView CompetitorResult result = new CompetitorResultImpl(mCompetitor.getCompetitorId(), mCompetitor.getName(), mCompetitor.getShortName(), mCompetitor.getBoatName(), mCompetitor.getBoatSailId(), oneBaseRank, maxPointsReason, score, finishingTime, comment, MergeState.OK); - return new CompetitorResultWithIdImpl(mCompetitor.getId(), mCompetitor.getBoat(), result); + return new CompetitorResultWithIdImpl(mCompetitor.getId(), result); } @Override From 1ca5b02d9d84a2f815b8469fd3b824f9c0ee6040 Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Mon, 24 Jun 2019 10:52:44 +0200 Subject: [PATCH 02/21] Remove unused constant --- .../src/com/sap/sailing/racecommittee/app/AppConstants.java | 1 - .../sailing/racecommittee/app/ui/fragments/LoginBackdrop.java | 1 - 2 files changed, 2 deletions(-) diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java index 62b213387ca..5c71056eb91 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java @@ -11,7 +11,6 @@ public class AppConstants { public final static String INTENT_EXTRA_TIMEPOINT_MILLIS = PACKAGE_NAME + ".timePoint.millis"; public final static String INTENT_EXTRA_EVENTNAME = PACKAGE_NAME + ".eventName"; public final static String FLAG_KEY = PACKAGE_NAME + ".raceFlag"; - public final static String EXTRA_FORCE_REFRESH = PACKAGE_NAME + ".forceRefresh"; public final static String AUTHOR_TYPE_OFFICER_VESSEL = "Race Officer on Vessel"; public final static String AUTHOR_TYPE_SHORE_CONTROL = "Shore Control"; diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/LoginBackdrop.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/LoginBackdrop.java index 01e072d3a7d..0e0fcb8459f 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/LoginBackdrop.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/LoginBackdrop.java @@ -208,7 +208,6 @@ public class LoginBackdrop extends Fragment implements BackPressListener { private void refreshData() { Intent intent = new Intent(AppConstants.INTENT_ACTION_RESET); - intent.putExtra(AppConstants.EXTRA_FORCE_REFRESH, true); BroadcastManager.getInstance(getActivity()).addIntent(intent); } From 5aed3a16c96f64db1075eb7ccd01b7f8bde17587 Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Mon, 24 Jun 2019 10:55:02 +0200 Subject: [PATCH 03/21] Try to avoid reload of device config --- .../racecommittee/app/ui/activities/LoginActivity.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java index 162e690fb12..7d9a6b6b66e 100755 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java @@ -425,6 +425,8 @@ public class LoginActivity extends BaseActivity implements EventSelectedListener @Override public void onLoadSucceeded(DeviceConfiguration configuration, boolean isCached) { + getSupportLoaderManager().destroyLoader(0); + dismissProgressSpinner(); // this is our 'global' configuration, let's store it in app preferences @@ -554,9 +556,8 @@ public class LoginActivity extends BaseActivity implements EventSelectedListener @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); - if (AppConstants.INTENT_ACTION_RESET.equals(action)) { - resetData(intent.getBooleanExtra(AppConstants.EXTRA_FORCE_REFRESH, false)); + resetData(true); } else if (AppConstants.INTENT_ACTION_VALID_DATA.equals(action)) { resetData(false); } From c72292fe33c7ac64ff1997420c023f1d99762acb Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Mon, 24 Jun 2019 10:55:54 +0200 Subject: [PATCH 04/21] Fix preference dialog with input field --- .../ui/adapters/ArrayRemoveAdapter.java | 18 ++++++-- ...EditSetPreferenceDialogFragmentCompat.java | 44 ++++++++++--------- .../shared/ui/views/EditSetPreference.java | 34 +++++++------- 3 files changed, 54 insertions(+), 42 deletions(-) diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/adapters/ArrayRemoveAdapter.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/adapters/ArrayRemoveAdapter.java index 4a817b1d03a..290c7cd22d7 100644 --- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/adapters/ArrayRemoveAdapter.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/adapters/ArrayRemoveAdapter.java @@ -1,9 +1,5 @@ package com.sap.sailing.android.shared.ui.adapters; -import java.util.List; - -import com.sap.sailing.android.shared.R; - import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -13,6 +9,12 @@ import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.TextView; +import com.sap.sailing.android.shared.R; + +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + public class ArrayRemoveAdapter extends ArrayAdapter { public interface NotifyDataSetChangedListener { @@ -54,6 +56,14 @@ public class ArrayRemoveAdapter extends ArrayAdapter { } } + public Set getItems() { + Set items = new LinkedHashSet<>(getCount()); + for (int position = 0; position < getCount(); position++) { + items.add(getItem(position)); + } + return items; + } + public NotifyDataSetChangedListener getDataSetChangedListener() { return listener; } diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/fragments/preference/EditSetPreferenceDialogFragmentCompat.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/fragments/preference/EditSetPreferenceDialogFragmentCompat.java index 0114872ac9a..e5af588e84a 100644 --- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/fragments/preference/EditSetPreferenceDialogFragmentCompat.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/fragments/preference/EditSetPreferenceDialogFragmentCompat.java @@ -1,14 +1,5 @@ package com.sap.sailing.android.shared.ui.fragments.preference; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; - -import com.sap.sailing.android.shared.R; -import com.sap.sailing.android.shared.logging.ExLog; -import com.sap.sailing.android.shared.ui.adapters.ArrayRemoveAdapter; -import com.sap.sailing.android.shared.ui.views.EditSetPreference; - import android.os.Bundle; import android.support.v7.preference.DialogPreference; import android.support.v7.preference.Preference; @@ -21,11 +12,20 @@ import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.ListView; +import com.sap.sailing.android.shared.R; +import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.ui.adapters.ArrayRemoveAdapter; +import com.sap.sailing.android.shared.ui.views.EditSetPreference; + +import java.util.ArrayList; +import java.util.Set; + public class EditSetPreferenceDialogFragmentCompat extends PreferenceDialogFragmentCompat { private static final String TAG = EditSetPreferenceDialogFragmentCompat.class.getName(); - private Set currentValue; + private ArrayRemoveAdapter adapter; + private Set currentValues; private Set exampleValues; public static EditSetPreferenceDialogFragmentCompat newInstance(Preference preference) { @@ -40,30 +40,29 @@ public class EditSetPreferenceDialogFragmentCompat extends PreferenceDialogFragm protected void onBindDialogView(View view) { super.onBindDialogView(view); - final AutoCompleteTextView inputView = (AutoCompleteTextView) view.findViewById(R.id.edit_set_preference_input); - final Button addButton = (Button) view.findViewById(R.id.edit_set_preference_add); - final ListView listView = (ListView) view.findViewById(R.id.edit_set_preference_list); + final AutoCompleteTextView inputView = view.findViewById(R.id.edit_set_preference_input); + final Button addButton = view.findViewById(R.id.edit_set_preference_add); + final ListView listView = view.findViewById(R.id.edit_set_preference_list); DialogPreference preference = getPreference(); if (preference instanceof EditSetPreference) { - currentValue = ((EditSetPreference) preference).getCurrentValue(); + currentValues = ((EditSetPreference) preference).getCurrentValues(); exampleValues = ((EditSetPreference) preference).getExampleValues(); } // setup list view - final ArrayRemoveAdapter adapter = new ArrayRemoveAdapter(view.getContext(), - new ArrayList(currentValue)); + adapter = new ArrayRemoveAdapter<>(view.getContext(), new ArrayList<>(currentValues)); listView.setEmptyView(view.findViewById(R.id.edit_set_preference_list_empty)); listView.setAdapter(adapter); // setup inputView - ArrayAdapter autoCompleteAdapter = new ArrayAdapter(view.getContext(), - android.R.layout.simple_dropdown_item_1line, new ArrayList(exampleValues)); + ArrayAdapter autoCompleteAdapter = new ArrayAdapter<>(view.getContext(), + android.R.layout.simple_dropdown_item_1line, new ArrayList<>(exampleValues)); inputView.setAdapter(autoCompleteAdapter); inputView.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { - boolean invalid = s.length() == 0 || currentValue.contains(s.toString()); + boolean invalid = s.length() == 0 || currentValues.contains(s.toString()); addButton.setEnabled(!invalid); } @@ -77,6 +76,7 @@ public class EditSetPreferenceDialogFragmentCompat extends PreferenceDialogFragm }); // setup add button + addButton.setEnabled(false); addButton.setOnClickListener(new View.OnClickListener() { @Override @@ -91,10 +91,12 @@ public class EditSetPreferenceDialogFragmentCompat extends PreferenceDialogFragm @Override public void onDialogClosed(boolean positiveResult) { DialogPreference preference = getPreference(); + Set values = adapter.getItems(); if (positiveResult && (preference instanceof EditSetPreference) - && preference.callChangeListener(new HashSet(currentValue))) { + && preference.callChangeListener(values)) { ExLog.i(getContext(), TAG, "Storing result..."); - preference.persistStringSet(currentValue); + preference.persistStringSet(values); + currentValues = values; } } } diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/views/EditSetPreference.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/views/EditSetPreference.java index 1afd972384d..c9ea9d0725b 100644 --- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/views/EditSetPreference.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/views/EditSetPreference.java @@ -1,29 +1,29 @@ package com.sap.sailing.android.shared.ui.views; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -import com.sap.sailing.android.shared.R; - import android.content.Context; import android.content.res.TypedArray; import android.support.v7.preference.DialogPreference; import android.util.AttributeSet; +import com.sap.sailing.android.shared.R; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + public class EditSetPreference extends DialogPreference { - private static final Set defaultFallbackValue = new HashSet(); + private static final Set defaultFallbackValue = new HashSet<>(); private static final int mDialogLayoutResId = R.layout.edit_set_preference; - private Set currentValue; + private Set currentValues; private Set exampleValues; public EditSetPreference(Context context, AttributeSet attrs) { super(context, attrs); - this.exampleValues = new HashSet(); + this.exampleValues = new HashSet<>(); } public void setExampleValues(String[] values) { @@ -34,8 +34,8 @@ public class EditSetPreference extends DialogPreference { return exampleValues; } - public Set getCurrentValue() { - return currentValue; + public Set getCurrentValues() { + return currentValues; } @Override @@ -48,17 +48,17 @@ public class EditSetPreference extends DialogPreference { protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) { if (restorePersistedValue) { // Restore existing state - currentValue = getPersistedStringSet(defaultFallbackValue); + currentValues = getPersistedStringSet(defaultFallbackValue); } else { // Set default state from the XML attribute - currentValue = new HashSet((Set) defaultValue); - persistStringSet(currentValue); + currentValues = new HashSet<>((Set) defaultValue); + persistStringSet(currentValues); } } @Override protected Object onGetDefaultValue(TypedArray a, int index) { - Set defaultValue = new HashSet(); + Set defaultValue = new HashSet<>(); for (CharSequence chars : a.getTextArray(index)) { defaultValue.add(chars.toString()); } @@ -71,10 +71,10 @@ public class EditSetPreference extends DialogPreference { return defaultReturnValue; } - Set fallbackDefault = defaultReturnValue == null ? null : new HashSet(defaultReturnValue); + Set fallbackDefault = defaultReturnValue == null ? null : new HashSet<>(defaultReturnValue); Set value = getSharedPreferences().getStringSet(getKey(), fallbackDefault); - return value == null ? null : new HashSet(value); + return value == null ? null : new HashSet<>(value); } } From 62966bcce0b5296387cafe5ed2aebdf40b7ca406 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Wed, 26 Jun 2019 10:41:14 +0200 Subject: [PATCH 05/21] fixing String-based synchronization monitor issue, using Random string guaranteed to be unique per TrackedRaceImpl instance; See also 4e3ad78640c466f1ee2d9ff7433390cd51ad5856 where this problem had been solved for another monitor object, also on TrackedRaceImpl Change-Id: Ic6d9b1f7ed715f82198b7c3fa7b5398cbed4739d --- .../com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java index 32d38f3f2e4..c24e0c2cd94 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceImpl.java @@ -805,7 +805,7 @@ public abstract class TrackedRaceImpl extends TrackedRaceWithWindEssentials impl /** * Monitor object to synchronize access to the {@link #updateStartAndEndOfTracking(boolean)} method. See bug 3922. */ - private final Serializable updateStartAndEndOfTrackingMonitor = "updateStartAndEndOfTrackingMonitor"; + private final Serializable updateStartAndEndOfTrackingMonitor = ""+new Random().nextDouble(); /** * Updates the start and end of tracking in the following precedence order: From 3ba030d9a194dec8fce8e8300de9c85e7b572e42 Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Wed, 26 Jun 2019 13:23:38 +0200 Subject: [PATCH 06/21] added a call to ModelLocator.registerPathRouteFactory(new com.tractrac.model.lib.impl.route.PathRouteFactory()) to the TracAPI bundle activator Change-Id: I9c06f8b21a0bb8469c102db63af0599e234c07fd --- .../src/com/tractrac/osgi/Activator.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/com.tractrac.clientmodule/src/com/tractrac/osgi/Activator.java b/java/com.tractrac.clientmodule/src/com/tractrac/osgi/Activator.java index 961b49ee515..17c2f156fd7 100755 --- a/java/com.tractrac.clientmodule/src/com/tractrac/osgi/Activator.java +++ b/java/com.tractrac.clientmodule/src/com/tractrac/osgi/Activator.java @@ -14,6 +14,7 @@ import com.tractrac.model.lib.impl.attachment.DefaultAttachmentManager; import com.tractrac.model.lib.impl.data.DefaultPositionFactory; import com.tractrac.model.lib.impl.event.EventFactory; import com.tractrac.model.lib.impl.metadata.DefaultMetadataFactory; +import com.tractrac.model.lib.impl.route.PathRouteFactory; import com.tractrac.subscription.lib.api.SubscriptionLocator; import com.tractrac.subscription.lib.impl.SubscriberFactory; import com.tractrac.util.lib.api.UtilLocator; @@ -33,6 +34,7 @@ public class Activator implements BundleActivator { DataflowProviderLocator.registerStoredDataProviderFactory(new MTBStoredDataProviderFactory()); ModelLocator.registerAttachmentManager(new DefaultAttachmentManager()); ModelLocator.registerEventFactory(new EventFactory()); + ModelLocator.registerPathRouteFactory(new PathRouteFactory()); ModelLocator.registerPositionFactory(new DefaultPositionFactory()); ModelLocator.registerMetadataFactory(new DefaultMetadataFactory()); SubscriptionLocator.registerSubscriberFactory(new SubscriberFactory()); From bbbd43e14ba94124f7f314c07826065a22c58dfe Mon Sep 17 00:00:00 2001 From: Robert Benedikt Date: Wed, 26 Jun 2019 16:22:50 +0200 Subject: [PATCH 07/21] Fix preference input and persistence for a set of values --- .../res/layout/edit_set_preference.xml | 2 +- .../preference/EditSetPreferenceDialogFragmentCompat.java | 1 - .../sailing/android/shared/ui/views/EditSetPreference.java | 5 +++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/mobile/com.sap.sailing.android.shared/res/layout/edit_set_preference.xml b/mobile/com.sap.sailing.android.shared/res/layout/edit_set_preference.xml index a54c94781e0..f8b594bf7bd 100644 --- a/mobile/com.sap.sailing.android.shared/res/layout/edit_set_preference.xml +++ b/mobile/com.sap.sailing.android.shared/res/layout/edit_set_preference.xml @@ -17,7 +17,7 @@ android:layout_weight="1" android:completionThreshold="1" android:hint="@string/enter_new_item" - android:inputType="textNoSuggestions|textVisiblePassword" /> + android:inputType="textCapWords|textNoSuggestions" />