mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-17 01:31:01 +00:00
cleanup of competitors loading and more logging
This commit is contained in:
1 parent
9a137cd423
commit
24d945548f
8 files changed
+94
-56
No files matched your search
+1
@@ -207,6 +207,7 @@ public class OnlineDataManager extends DataManager {
|
||||
return new DataLoaderCallbacks<Collection<Competitor>>(callback, new LoaderCreator<Collection<Competitor>>() {
|
||||
@Override
|
||||
public Loader<DataLoaderResult<Collection<Competitor>>> create(int id, Bundle args) throws Exception {
|
||||
ExLog.i(TAG, String.format("Creating Competitor-OnlineDataLoader %d", id));
|
||||
SharedDomainFactory domainFactory = DomainFactoryImpl.INSTANCE;
|
||||
JsonDeserializer<Competitor> competitorDeserializer = new CompetitorDeserializer(domainFactory);
|
||||
DataParser<Collection<Competitor>> parser = new CompetitorsDataParser(competitorDeserializer);
|
||||
|
||||
+10
@@ -14,6 +14,16 @@ public class CompetitorsDataHandler extends DataHandler<Collection<Competitor>>
|
||||
super(manager);
|
||||
race = managedRace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasCachedResults() {
|
||||
return race.getCompetitors() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Competitor> getCachedResults() {
|
||||
return race.getCompetitors();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResult(Collection<Competitor> data) {
|
||||
|
||||
+10
-2
@@ -33,19 +33,27 @@ public class OnlineDataLoader<T> extends AsyncTaskLoader<DataLoaderResult<T>> {
|
||||
this.httpRequest = request;
|
||||
this.dataParser = dataParser;
|
||||
this.dataHandler = dataHandler;
|
||||
|
||||
ExLog.i(TAG, String.format("Loader created: %d", this.hashCode()));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStartLoading() {
|
||||
if (dataHandler.hasCachedResults()) {
|
||||
ExLog.i(TAG, "Using cached results...");
|
||||
ExLog.i(TAG, String.format("Using cached results... (%d)", this.hashCode()));
|
||||
deliverResult(new DataLoaderResult<T>(dataHandler.getCachedResults()));
|
||||
} else {
|
||||
ExLog.i(TAG, "No cached results. Forcing load now.");
|
||||
ExLog.i(TAG, String.format("No cached results. Forcing load now (%d)", this.hashCode()));
|
||||
forceLoad();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onForceLoad() {
|
||||
ExLog.i(TAG, String.format("Forcing load (%d)", this.hashCode()));
|
||||
super.onForceLoad();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deliverResult(DataLoaderResult<T> result) {
|
||||
if (result.isSuccessful()) {
|
||||
|
||||
-2
@@ -88,7 +88,6 @@ public class LoginActivity extends BaseActivity implements EventSelectedListener
|
||||
}
|
||||
|
||||
private void showCourseAreaListFragment(Serializable eventId) {
|
||||
Toast.makeText(LoginActivity.this, eventId.toString(), Toast.LENGTH_LONG).show();
|
||||
addCourseAreaListFragment(eventId);
|
||||
}
|
||||
|
||||
@@ -137,7 +136,6 @@ public class LoginActivity extends BaseActivity implements EventSelectedListener
|
||||
return;
|
||||
}
|
||||
|
||||
Toast.makeText(LoginActivity.this, selectedCourseArea.getId().toString(), Toast.LENGTH_LONG).show();
|
||||
Intent message = new Intent(LoginActivity.this, RacingActivity.class);
|
||||
message.putExtra(AppConstants.COURSE_AREA_UUID_KEY, selectedCourseArea.getId());
|
||||
fadeActivity(message);
|
||||
|
||||
+1
-1
@@ -29,9 +29,9 @@ public class RaceInfoFragmentChooser {
|
||||
|
||||
private RaceFragment createInfoFragment(Class<? extends RaceFragment> fragmentClass, ManagedRace managedRace) {
|
||||
try {
|
||||
ExLog.i(TAG, String.format("Fragment %s is chosen.", fragmentClass.getName()));
|
||||
RaceFragment fragment = fragmentClass.newInstance();
|
||||
fragment.setArguments(RaceFragment.createArguments(managedRace));
|
||||
ExLog.i(TAG, String.format("Fragment %s may be choosen", fragmentClass.getName()));
|
||||
return fragment;
|
||||
} catch (Exception e) {
|
||||
ExLog.e(TAG, String.format("Exception while instantiating race info fragment:\n%s", e.toString()));
|
||||
|
||||
+1
-4
@@ -238,7 +238,7 @@ public class ESSCourseDesignDialogFragment extends RaceDialogFragment {
|
||||
dataManager.getMarksLoader(getRace(), new LoadClient<Collection<Mark>>() {
|
||||
@Override
|
||||
public void onLoadFailed(Exception reason) {
|
||||
Toast.makeText(getActivity(), reason.toString(), Toast.LENGTH_LONG).show();
|
||||
Toast.makeText(getActivity(), String.format("Marks: %s",reason.toString()), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -438,9 +438,6 @@ public class ESSCourseDesignDialogFragment extends RaceDialogFragment {
|
||||
builder.setTitle(R.string.pick_a_rounding_direction).setItems(R.array.rounding_directions,
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int position) {
|
||||
// for i18n we expect following order in array: 1. Port, 2. Starboard, 3. Gate
|
||||
// String[] directions =
|
||||
// getActivity().getResources().getStringArray(R.array.rounding_directions);
|
||||
RoundingDirection pickedDirection = RoundingDirection.relevantValues()[position];
|
||||
onRoundingDirectionPicked(courseElement, pickedDirection);
|
||||
}
|
||||
|
||||
+67
-43
@@ -9,6 +9,7 @@ import java.util.List;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Loader;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -19,6 +20,7 @@ import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.AdapterView.OnItemLongClickListener;
|
||||
import android.widget.Button;
|
||||
import android.widget.ListView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.mobeta.android.dslv.DragSortController;
|
||||
import com.mobeta.android.dslv.DragSortListView;
|
||||
@@ -42,24 +44,29 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
private DragSortListView positioningListView;
|
||||
private ListView competitorListView;
|
||||
private DragSortController dragSortController;
|
||||
|
||||
|
||||
private CompetitorsAdapter competitorsAdapter;
|
||||
private CompetitorPositioningListAdapter positioningAdapter;
|
||||
|
||||
|
||||
protected List<Competitor> competitors;
|
||||
protected List<Triple<Serializable, String, MaxPointsReason>> positionedCompetitors;
|
||||
protected Comparator<Named> competitorComparator;
|
||||
|
||||
|
||||
private int dragStartMode = DragSortController.ON_DRAG;
|
||||
private boolean removeEnabled = true;
|
||||
private int removeMode = DragSortController.FLING_REMOVE;
|
||||
private boolean sortEnabled = true;
|
||||
private boolean dragEnabled = true;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
private boolean isDialog() {
|
||||
return getDialog() != null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
if (isDialog()) {
|
||||
@@ -67,11 +74,11 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
}
|
||||
return inflater.inflate(R.layout.race_positioning_view, container, false);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
|
||||
if (isDialog()) {
|
||||
Button okButton = (Button) getView().findViewById(R.id.buttonPositionOk);
|
||||
okButton.setVisibility(Button.VISIBLE);
|
||||
@@ -83,19 +90,20 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
competitors = new ArrayList<Competitor>();
|
||||
Util.addAll(getRace().getCompetitors(), competitors);
|
||||
competitorComparator = new NaturalNamedComparator();
|
||||
Collections.sort(competitors, competitorComparator);
|
||||
competitorsAdapter = new CompetitorsAdapter(getActivity(), R.layout.welter_grid_competitor_cell, competitors);
|
||||
|
||||
|
||||
loadCompetitors();
|
||||
|
||||
|
||||
positionedCompetitors = initializeFinishPositioningList();
|
||||
deletePositionedCompetitorsFromUnpositionedList();
|
||||
positioningAdapter = new CompetitorPositioningListAdapter(getActivity(), R.layout.welter_positioning_item, positionedCompetitors);
|
||||
|
||||
positioningAdapter = new CompetitorPositioningListAdapter(getActivity(), R.layout.welter_positioning_item,
|
||||
positionedCompetitors);
|
||||
|
||||
positioningListView = (DragSortListView) getView().findViewById(R.id.dragSortListPositioning);
|
||||
positioningListView.setAdapter(positioningAdapter);
|
||||
positioningListView.setDropListener(new DragSortListView.DropListener() {
|
||||
@@ -109,9 +117,9 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
positioningListView.setRemoveListener(new DragSortListView.RemoveListener() {
|
||||
|
||||
|
||||
@Override
|
||||
public void remove(int toBeRemoved) {
|
||||
Triple<Serializable, String, MaxPointsReason> item = positioningAdapter.getItem(toBeRemoved);
|
||||
@@ -125,9 +133,9 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
|
||||
createMaxPointsReasonSelectionDialog(positionedCompetitors.get(position));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
dragSortController = buildDragSortController(positioningListView);
|
||||
positioningListView.setFloatViewManager(dragSortController);
|
||||
positioningListView.setOnTouchListener(dragSortController);
|
||||
@@ -140,18 +148,13 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
|
||||
public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
|
||||
Competitor competitor = (Competitor) competitorsAdapter.getItem(position);
|
||||
ExLog.i("RaceFinishingFragment", "Grid is clicked at position " + position + " for competitor " + competitor.getName());
|
||||
ExLog.i("RaceFinishingFragment", "Grid is clicked at position " + position + " for competitor "
|
||||
+ competitor.getName());
|
||||
onCompetitorClickedOnGrid(competitor);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
onLoadCompetitorsSucceeded(getRace().getCompetitors());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a DragSortController and thereby defines the behaviour of the drag sort list
|
||||
*/
|
||||
@@ -168,38 +171,55 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
}
|
||||
|
||||
private void loadCompetitors() {
|
||||
getActivity().setProgressBarIndeterminateVisibility(true);
|
||||
ReadonlyDataManager dataManager = OnlineDataManager.create(getActivity());
|
||||
getLoaderManager().restartLoader(0, null,
|
||||
Loader<?> competitorLoaders = getLoaderManager().initLoader(0, null,
|
||||
dataManager.getCompetitorsLoader(getRace(), new LoadClient<Collection<Competitor>>() {
|
||||
|
||||
@Override
|
||||
public void onLoadFailed(Exception reason) {
|
||||
onLoadCompetitorsSucceeded(getRace().getCompetitors());
|
||||
getActivity().setProgressBarIndeterminateVisibility(false);
|
||||
Toast.makeText(getActivity(), String.format("Competitors: %s", reason.toString()),
|
||||
Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadSucceded(Collection<Competitor> data) {
|
||||
getActivity().setProgressBarIndeterminateVisibility(false);
|
||||
onLoadCompetitorsSucceeded(data);
|
||||
}
|
||||
|
||||
}));
|
||||
// Force load to get non-cached remote competitors...
|
||||
competitorLoaders.forceLoad();
|
||||
}
|
||||
|
||||
protected void onLoadCompetitorsSucceeded(Collection<Competitor> data) {
|
||||
competitors.clear();
|
||||
competitors.addAll(data);
|
||||
Collections.sort(competitors, competitorComparator);
|
||||
deleteObsoleteCompetitorsFromPositionedList(data);
|
||||
deletePositionedCompetitorsFromUnpositionedList();
|
||||
competitorsAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private void deleteObsoleteCompetitorsFromPositionedList(Collection<Competitor> validCompetitors) {
|
||||
List<Triple<Serializable, String, MaxPointsReason>> toBeDeleted = new ArrayList<Util.Triple<Serializable, String, MaxPointsReason>>();
|
||||
for (Triple<Serializable, String, MaxPointsReason> positionedItem : positionedCompetitors) {
|
||||
if (!validCompetitors.contains(DomainFactoryImpl.INSTANCE.getExistingCompetitorById(positionedItem.getA()))) {
|
||||
toBeDeleted.add(positionedItem);
|
||||
}
|
||||
}
|
||||
positionedCompetitors.removeAll(toBeDeleted);
|
||||
}
|
||||
|
||||
private void deletePositionedCompetitorsFromUnpositionedList() {
|
||||
for (Triple<Serializable, String, MaxPointsReason> positionedItem : positionedCompetitors) {
|
||||
Competitor competitor = DomainFactoryImpl.INSTANCE.getExistingCompetitorById(positionedItem.getA());
|
||||
competitors.remove(competitor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private List<Triple<Serializable, String, MaxPointsReason>> initializeFinishPositioningList() {
|
||||
List<Triple<Serializable, String, MaxPointsReason>> positionings;
|
||||
if (getRace().getState().getFinishPositioningList() != null) {
|
||||
@@ -209,7 +229,7 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
}
|
||||
return positionings;
|
||||
}
|
||||
|
||||
|
||||
private void setItemToNewPositioning(int from, int to, Triple<Serializable, String, MaxPointsReason> item) {
|
||||
positioningAdapter.remove(item);
|
||||
positioningAdapter.insert(item, to);
|
||||
@@ -218,16 +238,16 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
private void createMaxPointsReasonSelectionDialog(final Triple<Serializable, String, MaxPointsReason> item) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
final CharSequence[] maxPointsReasons = getAllMaxPointsReasons();
|
||||
builder.setTitle(R.string.select_penalty_reason)
|
||||
.setItems(maxPointsReasons, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int position) {
|
||||
setMaxPointsReasonForItem(item, maxPointsReasons[position]);
|
||||
}
|
||||
});
|
||||
builder.setTitle(R.string.select_penalty_reason).setItems(maxPointsReasons,
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int position) {
|
||||
setMaxPointsReasonForItem(item, maxPointsReasons[position]);
|
||||
}
|
||||
});
|
||||
builder.create();
|
||||
builder.show();
|
||||
}
|
||||
|
||||
|
||||
private CharSequence[] getAllMaxPointsReasons() {
|
||||
List<CharSequence> result = new ArrayList<CharSequence>();
|
||||
for (MaxPointsReason reason : MaxPointsReason.values()) {
|
||||
@@ -236,19 +256,22 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
return result.toArray(new CharSequence[result.size()]);
|
||||
}
|
||||
|
||||
protected void setMaxPointsReasonForItem(Triple<Serializable, String, MaxPointsReason> item, CharSequence maxPointsReasonName) {
|
||||
protected void setMaxPointsReasonForItem(Triple<Serializable, String, MaxPointsReason> item,
|
||||
CharSequence maxPointsReasonName) {
|
||||
MaxPointsReason maxPointsReason = MaxPointsReason.valueOf(maxPointsReasonName.toString());
|
||||
Triple<Serializable, String, MaxPointsReason> newItem = new Triple<Serializable, String, MaxPointsReason>(item.getA(), item.getB(), maxPointsReason);
|
||||
Triple<Serializable, String, MaxPointsReason> newItem = new Triple<Serializable, String, MaxPointsReason>(
|
||||
item.getA(), item.getB(), maxPointsReason);
|
||||
int currentIndexOfItem = positionedCompetitors.indexOf(item);
|
||||
replaceItemInPositioningList(currentIndexOfItem, item, newItem);
|
||||
|
||||
|
||||
if (!maxPointsReason.equals(MaxPointsReason.NONE)) {
|
||||
setCompetitorToBottomOfPositioningList(newItem);
|
||||
}
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
|
||||
private void replaceItemInPositioningList(int currentIndexOfItem, Triple<Serializable, String, MaxPointsReason> item, Triple<Serializable, String, MaxPointsReason> newItem) {
|
||||
private void replaceItemInPositioningList(int currentIndexOfItem,
|
||||
Triple<Serializable, String, MaxPointsReason> item, Triple<Serializable, String, MaxPointsReason> newItem) {
|
||||
positioningAdapter.remove(item);
|
||||
positioningAdapter.insert(newItem, currentIndexOfItem);
|
||||
}
|
||||
@@ -272,24 +295,25 @@ public class PositioningFragment extends RaceDialogFragment {
|
||||
}
|
||||
|
||||
private void addNewCompetitorToPositioningList(Competitor competitor) {
|
||||
|
||||
positionedCompetitors.add(new Triple<Serializable, String, MaxPointsReason>(competitor.getId(), competitor.getName(), MaxPointsReason.NONE));
|
||||
|
||||
positionedCompetitors.add(new Triple<Serializable, String, MaxPointsReason>(competitor.getId(), competitor
|
||||
.getName(), MaxPointsReason.NONE));
|
||||
positioningAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
||||
protected void onCompetitorRemovedFromPositioningList(Triple<Serializable, String, MaxPointsReason> item) {
|
||||
Competitor competitor = DomainFactoryImpl.INSTANCE.getExistingCompetitorById(item.getA());
|
||||
addNewCompetitorToCompetitorList(competitor);
|
||||
removeCompetitorFromPositionings(item);
|
||||
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
|
||||
}
|
||||
|
||||
|
||||
private void addNewCompetitorToCompetitorList(Competitor competitor) {
|
||||
competitors.add(competitor);
|
||||
Collections.sort(competitors, competitorComparator);
|
||||
competitorsAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
||||
protected void removeCompetitorFromPositionings(Triple<Serializable, String, MaxPointsReason> item) {
|
||||
positionedCompetitors.remove(item);
|
||||
positioningAdapter.notifyDataSetChanged();
|
||||
|
||||
+4
-4
@@ -1,14 +1,14 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
|
||||
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.PositioningFragment;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.Button;
|
||||
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.PositioningFragment;
|
||||
|
||||
public class EssFinishedRaceFragment extends FinishedRaceFragment {
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
|
||||
Reference in new issue
Block a user