mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-08 21:30:57 +00:00
Merge branch 'bug3959'
This commit is contained in:
commit
98dac9d982
18 files changed
+154
-182
No files matched your search
+5
@@ -4,6 +4,11 @@
|
||||
<div id="mainContent">
|
||||
<h4 class="articleHeadline">What's New - SAP Sailing Buoy Pinger</h4>
|
||||
<div class="innerContent">
|
||||
<h5 class="articleSubheadline">November 2016</h5>
|
||||
<ul class="bulletList">
|
||||
<li>Obtain existing mark positions from server if already set</li>
|
||||
</ul>
|
||||
|
||||
<h5 class="articleSubheadline">October 2016</h5>
|
||||
<ul class="bulletList">
|
||||
<li>Improved pinging accuracy by using a more controllable API:
|
||||
|
||||
+3
-1
@@ -1,5 +1,7 @@
|
||||
package com.sap.sailing.android.shared.ui.activities;
|
||||
|
||||
public abstract class AbstractRegattaActivity extends CheckinDataActivity {
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
|
||||
public abstract class AbstractRegattaActivity<C extends BaseCheckinData> extends CheckinDataActivity<C> {
|
||||
|
||||
}
|
||||
+10
-9
@@ -1,19 +1,20 @@
|
||||
package com.sap.sailing.android.shared.ui.activities;
|
||||
|
||||
import com.google.android.gms.common.ConnectionResult;
|
||||
import com.google.android.gms.common.GooglePlayServicesUtil;
|
||||
import com.sap.sailing.android.shared.BuildConfig;
|
||||
import com.sap.sailing.android.shared.R;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar;
|
||||
import com.sap.sailing.android.ui.fragments.AbstractHomeFragment;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.google.android.gms.common.ConnectionResult;
|
||||
import com.google.android.gms.common.GooglePlayServicesUtil;
|
||||
import com.sap.sailing.android.shared.BuildConfig;
|
||||
import com.sap.sailing.android.shared.R;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar;
|
||||
import com.sap.sailing.android.ui.fragments.AbstractHomeFragment;
|
||||
|
||||
public abstract class AbstractStartActivity extends CheckinDataActivity {
|
||||
public abstract class AbstractStartActivity<C extends BaseCheckinData> extends CheckinDataActivity<C> {
|
||||
|
||||
private final static String TAG = AbstractStartActivity.class.getName();
|
||||
protected OpenSansToolbar toolbar;
|
||||
|
||||
+3
-6
@@ -1,16 +1,13 @@
|
||||
package com.sap.sailing.android.shared.ui.activities;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
import com.sap.sailing.android.shared.R;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.util.CheckinDataHandler;
|
||||
|
||||
public abstract class CheckinDataActivity extends AbstractBaseActivity implements CheckinDataHandler {
|
||||
import android.content.DialogInterface;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
@Override
|
||||
public abstract void onCheckinDataAvailable(BaseCheckinData data);
|
||||
public abstract class CheckinDataActivity<C extends BaseCheckinData> extends AbstractBaseActivity implements CheckinDataHandler<C> {
|
||||
|
||||
/**
|
||||
* Shows a pop-up-dialog that informs the user than an DB-operation has failed.
|
||||
|
||||
+2
-2
@@ -2,6 +2,6 @@ package com.sap.sailing.android.shared.util;
|
||||
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
|
||||
public interface CheckinDataHandler {
|
||||
public void onCheckinDataAvailable(BaseCheckinData data);
|
||||
public interface CheckinDataHandler<C extends BaseCheckinData> {
|
||||
public void onCheckinDataAvailable(C data);
|
||||
}
|
||||
+1
-1
@@ -53,7 +53,7 @@ public abstract class AbstractHomeFragment extends BaseFragment {
|
||||
}
|
||||
|
||||
private void showNoQRCodeMessage() {
|
||||
((AbstractStartActivity) getActivity()).showErrorPopup(R.string.no_qr_code_popup_title,
|
||||
((AbstractStartActivity<?>) getActivity()).showErrorPopup(R.string.no_qr_code_popup_title,
|
||||
R.string.no_qr_code_popup_message);
|
||||
}
|
||||
|
||||
|
||||
+28
-30
@@ -13,31 +13,6 @@ import java.util.Locale;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.internal.view.ContextThemeWrapper;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.data.CheckinUrlInfo;
|
||||
import com.sap.sailing.android.shared.data.LeaderboardInfo;
|
||||
import com.sap.sailing.android.shared.data.http.HttpGetRequest;
|
||||
@@ -65,7 +40,31 @@ import com.sap.sailing.android.tracking.app.valueobjects.CompetitorCheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CompetitorInfo;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.EventInfo;
|
||||
|
||||
public class RegattaActivity extends AbstractRegattaActivity
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.internal.view.ContextThemeWrapper;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class RegattaActivity extends AbstractRegattaActivity<CheckinData>
|
||||
implements RegattaFragment.FragmentWatcher, UploadResponseHandler {
|
||||
|
||||
private final static String TAG = RegattaActivity.class.getName();
|
||||
@@ -419,12 +418,11 @@ public class RegattaActivity extends AbstractRegattaActivity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckinDataAvailable(BaseCheckinData checkinData) {
|
||||
public void onCheckinDataAvailable(CheckinData checkinData) {
|
||||
if (checkinData != null) {
|
||||
CheckinData data = (CheckinData) checkinData;
|
||||
try {
|
||||
if (data instanceof CompetitorCheckinData) {
|
||||
CompetitorCheckinData competitorCheckinData = (CompetitorCheckinData) data;
|
||||
if (checkinData instanceof CompetitorCheckinData) {
|
||||
CompetitorCheckinData competitorCheckinData = (CompetitorCheckinData) checkinData;
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(this, checkinDigest);
|
||||
DatabaseHelper.getInstance().storeCompetitorCheckinRow(this, competitorCheckinData.getEvent(), competitorCheckinData.getCompetitor(),
|
||||
competitorCheckinData.getLeaderboard(), competitorCheckinData.getCheckinUrl());
|
||||
|
||||
+5
-6
@@ -24,7 +24,7 @@ import com.sap.sailing.android.tracking.app.valueobjects.CompetitorCheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.MarkCheckinData;
|
||||
import com.sap.sailing.android.ui.fragments.AbstractHomeFragment;
|
||||
|
||||
public class StartActivity extends AbstractStartActivity {
|
||||
public class StartActivity extends AbstractStartActivity<CheckinData> {
|
||||
|
||||
private AppPreferences prefs;
|
||||
private final String TAG = StartActivity.class.getName();
|
||||
@@ -102,12 +102,11 @@ public class StartActivity extends AbstractStartActivity {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckinDataAvailable(BaseCheckinData data) {
|
||||
if (data != null && data instanceof CheckinData) {
|
||||
CheckinData checkinData = (CheckinData) data;
|
||||
if (!checkinData.isUpdate()) {
|
||||
public void onCheckinDataAvailable(CheckinData data) {
|
||||
if (data != null) {
|
||||
if (!data.isUpdate()) {
|
||||
getHomeFragment().displayUserConfirmationScreen(data);
|
||||
} else if (checkinData.isUpdate()) {
|
||||
} else if (data.isUpdate()) {
|
||||
updateRegatta(data);
|
||||
}
|
||||
}
|
||||
|
||||
+9
-10
@@ -13,12 +13,6 @@ import org.json.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.net.Uri;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.data.http.HttpGetRequest;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.activities.CheckinDataActivity;
|
||||
@@ -50,16 +44,21 @@ import com.sap.sailing.server.gateway.deserialization.impl.VenueJsonDeserializer
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.shared.media.ImageDescriptor;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.net.Uri;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class CheckinManager {
|
||||
|
||||
private final static String TAG = CheckinManager.class.getName();
|
||||
private BaseCheckinData checkinData;
|
||||
private CheckinDataActivity activity;
|
||||
private CheckinData checkinData;
|
||||
private CheckinDataActivity<CheckinData> activity;
|
||||
private AppPreferences prefs;
|
||||
private String url;
|
||||
private boolean update;
|
||||
|
||||
public CheckinManager(String url, CheckinDataActivity activity, boolean update) {
|
||||
public CheckinManager(String url, CheckinDataActivity<CheckinData> activity, boolean update) {
|
||||
this.activity = activity;
|
||||
this.url = url;
|
||||
prefs = new AppPreferences(activity);
|
||||
@@ -317,7 +316,7 @@ public class CheckinManager {
|
||||
activity.onCheckinDataAvailable(getCheckinData());
|
||||
}
|
||||
|
||||
public BaseCheckinData getCheckinData() {
|
||||
public CheckinData getCheckinData() {
|
||||
return checkinData;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<string name="set">set</string>
|
||||
<string name="unknown">n/a</string>
|
||||
<string name="not_set">not set</string>
|
||||
<string name="mark_list_accuracy">(Accurary ca. %1$sm)</string>
|
||||
<string name="mark_list_accuracy">(Accuracy ca. %1$sm)</string>
|
||||
<string name="buoy_detail_accuracy_ca" translatable="false">ca. %1$.02fm</string>
|
||||
<string name="buoy_detail_distance" translatable="false">%1$.02fm</string>
|
||||
<string name="accuracy">GPS Accuracy</string>
|
||||
|
||||
+1
-2
@@ -39,8 +39,7 @@ public class MarkAdapter extends ResourceCursorAdapter {
|
||||
if (accuracy == FlatGPSFixJsonSerializer.NOT_AVAILABLE_THROUGH_SERVER) {
|
||||
accuracyString = context.getString(R.string.set);
|
||||
} else {
|
||||
accuracyString = context.getString(R.string.set) + " " +
|
||||
String.format(context.getString(R.string.mark_list_accuracy), df.format(accuracy));
|
||||
accuracyString = context.getString(R.string.set) + " " + context.getString(R.string.mark_list_accuracy, df.format(accuracy));
|
||||
}
|
||||
setText = accuracyString;
|
||||
}
|
||||
|
||||
+2
-4
@@ -8,7 +8,6 @@ import com.sap.sailing.android.buoy.positioning.app.R;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.CheckinManager;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.DatabaseHelper;
|
||||
import com.sap.sailing.android.buoy.positioning.app.valueobjects.CheckinData;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
|
||||
public class MarkerService extends IntentService implements CheckinManager.DataChangedListner{
|
||||
private static String TAG = MarkerService.class.getName();
|
||||
@@ -26,12 +25,11 @@ public class MarkerService extends IntentService implements CheckinManager.Data
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleData(BaseCheckinData data) {
|
||||
public void handleData(CheckinData data) {
|
||||
if (data != null) {
|
||||
try {
|
||||
CheckinData checkinData = (CheckinData) data;
|
||||
DatabaseHelper helper = DatabaseHelper.getInstance();
|
||||
helper.updateMarks(this, checkinData.marks, checkinData.getLeaderboard());
|
||||
helper.updateMarks(this, data);
|
||||
} catch (DatabaseHelper.GeneralDatabaseHelperException e) {
|
||||
Log.e(TAG, "Error trying to analyze mark checkin data", e);
|
||||
}
|
||||
|
||||
+19
-28
@@ -1,5 +1,19 @@
|
||||
package com.sap.sailing.android.buoy.positioning.app.ui.activities;
|
||||
|
||||
import com.sap.sailing.android.buoy.positioning.app.BuildConfig;
|
||||
import com.sap.sailing.android.buoy.positioning.app.R;
|
||||
import com.sap.sailing.android.buoy.positioning.app.ui.fragments.RegattaFragment;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.AboutHelper;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.AppPreferences;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.CheckinManager;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.DatabaseHelper;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.MarkerUtils;
|
||||
import com.sap.sailing.android.buoy.positioning.app.valueobjects.CheckinData;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.services.sending.MessageSendingService;
|
||||
import com.sap.sailing.android.shared.ui.activities.AbstractRegattaActivity;
|
||||
import com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
@@ -13,22 +27,7 @@ import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.sap.sailing.android.buoy.positioning.app.BuildConfig;
|
||||
import com.sap.sailing.android.buoy.positioning.app.R;
|
||||
import com.sap.sailing.android.buoy.positioning.app.ui.fragments.RegattaFragment;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.AboutHelper;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.AppPreferences;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.CheckinManager;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.DatabaseHelper;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.MarkerUtils;
|
||||
import com.sap.sailing.android.buoy.positioning.app.valueobjects.CheckinData;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.services.sending.MessageSendingService;
|
||||
import com.sap.sailing.android.shared.ui.activities.AbstractRegattaActivity;
|
||||
import com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar;
|
||||
|
||||
public class RegattaActivity extends AbstractRegattaActivity {
|
||||
public class RegattaActivity extends AbstractRegattaActivity<CheckinData> {
|
||||
|
||||
private String leaderboardName;
|
||||
private String checkinDigest;
|
||||
@@ -45,7 +44,6 @@ public class RegattaActivity extends AbstractRegattaActivity {
|
||||
prefs.setLastScannedQRCode(null);
|
||||
Intent intent = getIntent();
|
||||
|
||||
|
||||
checkinDigest = intent.getStringExtra(getString(R.string.checkin_digest));
|
||||
leaderboardName = intent.getStringExtra(getString(R.string.leaderboard_name));
|
||||
|
||||
@@ -68,8 +66,7 @@ public class RegattaActivity extends AbstractRegattaActivity {
|
||||
toolbar.setNavigationIcon(R.drawable.sap_logo_64dp);
|
||||
getSupportActionBar().setTitle(leaderboardName);
|
||||
}
|
||||
RegattaFragment regattaFragment = new RegattaFragment();
|
||||
replaceFragment(R.id.content_frame, regattaFragment);
|
||||
replaceFragment(R.id.content_frame, RegattaFragment.newInstance());
|
||||
|
||||
MarkerUtils.withContext(this).startMarkerService(checkinUrl);
|
||||
}
|
||||
@@ -146,12 +143,10 @@ public class RegattaActivity extends AbstractRegattaActivity {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckinDataAvailable(BaseCheckinData checkinData) {
|
||||
if (checkinData != null) {
|
||||
CheckinData data = (CheckinData) checkinData;
|
||||
public void onCheckinDataAvailable(CheckinData data) {
|
||||
if (data != null) {
|
||||
try {
|
||||
DatabaseHelper.getInstance().updateMarks(this, data.marks, data.getLeaderboard());
|
||||
getRegattaFragment().getAdapter().notifyDataSetChanged();
|
||||
DatabaseHelper.getInstance().updateMarks(this, data);
|
||||
} catch (DatabaseHelper.GeneralDatabaseHelperException e) {
|
||||
ExLog.e(this, TAG, "Batch insert failed: " + e.getMessage());
|
||||
displayDatabaseError();
|
||||
@@ -189,10 +184,6 @@ public class RegattaActivity extends AbstractRegattaActivity {
|
||||
return checkinDigest;
|
||||
}
|
||||
|
||||
public RegattaFragment getRegattaFragment() {
|
||||
return (RegattaFragment) getSupportFragmentManager().findFragmentById(R.id.content_frame);
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines callbacks for service binding, passed to bindService()
|
||||
*/
|
||||
|
||||
+10
-10
@@ -1,5 +1,13 @@
|
||||
package com.sap.sailing.android.buoy.positioning.app.ui.activities;
|
||||
|
||||
import com.sap.sailing.android.buoy.positioning.app.R;
|
||||
import com.sap.sailing.android.buoy.positioning.app.ui.fragments.HomeFragment;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.AboutHelper;
|
||||
import com.sap.sailing.android.buoy.positioning.app.valueobjects.CheckinData;
|
||||
import com.sap.sailing.android.shared.ui.activities.AbstractStartActivity;
|
||||
import com.sap.sailing.android.shared.util.EulaHelper;
|
||||
import com.sap.sailing.android.ui.fragments.AbstractHomeFragment;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
@@ -7,15 +15,7 @@ import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.sap.sailing.android.buoy.positioning.app.R;
|
||||
import com.sap.sailing.android.buoy.positioning.app.ui.fragments.HomeFragment;
|
||||
import com.sap.sailing.android.buoy.positioning.app.util.AboutHelper;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.ui.activities.AbstractStartActivity;
|
||||
import com.sap.sailing.android.shared.util.EulaHelper;
|
||||
import com.sap.sailing.android.ui.fragments.AbstractHomeFragment;
|
||||
|
||||
public class StartActivity extends AbstractStartActivity {
|
||||
public class StartActivity extends AbstractStartActivity<CheckinData> {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@@ -68,7 +68,7 @@ public class StartActivity extends AbstractStartActivity {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckinDataAvailable(BaseCheckinData data) {
|
||||
public void onCheckinDataAvailable(CheckinData data) {
|
||||
if (data != null) {
|
||||
getHomeFragment().displayUserConfirmationScreen(data);
|
||||
}
|
||||
|
||||
+4
-3
@@ -91,12 +91,13 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
}
|
||||
startRegatta(checkinData.leaderboardName, checkinData.checkinDigest);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void handleScannedOrUrlMatchedUri(Uri uri) {
|
||||
CheckinManager manager = new CheckinManager(uri.toString(), (CheckinDataActivity) getActivity());
|
||||
@SuppressWarnings("unchecked")
|
||||
final CheckinDataActivity<CheckinData> activity = (CheckinDataActivity<CheckinData>) getActivity();
|
||||
CheckinManager manager = new CheckinManager(uri.toString(), activity);
|
||||
manager.callServerAndGenerateCheckinData();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+18
-15
@@ -33,18 +33,26 @@ public class RegattaFragment extends BaseFragment implements LoaderCallbacks<Cur
|
||||
private MarkAdapter adapter;
|
||||
private IntentReceiver mReceiver;
|
||||
|
||||
public static RegattaFragment newInstance() {
|
||||
Bundle args = new Bundle();
|
||||
RegattaFragment fragment = new RegattaFragment();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
super.onCreateView(inflater, container, savedInstanceState);
|
||||
|
||||
mReceiver = new IntentReceiver();
|
||||
|
||||
View view = inflater.inflate(R.layout.fragment_buoy_postion_overview, container, false);
|
||||
adapter = new MarkAdapter(getActivity(), R.layout.mark_listview_row, null, 0);
|
||||
ListView markListView = (ListView) view.findViewById(R.id.listMarks);
|
||||
markListView.setEmptyView(view.findViewById(R.id.no_marks));
|
||||
markListView.setAdapter(adapter);
|
||||
markListView.setOnItemClickListener(new ItemClickListener());
|
||||
getLoaderManager().initLoader(MARKER_LOADER, null, this);
|
||||
|
||||
return view;
|
||||
}
|
||||
@@ -52,26 +60,28 @@ public class RegattaFragment extends BaseFragment implements LoaderCallbacks<Cur
|
||||
@Override
|
||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
mReceiver = new IntentReceiver(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
getLoaderManager().restartLoader(MARKER_LOADER, null, this);
|
||||
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(getString(R.string.database_changed));
|
||||
LocalBroadcastManager.getInstance(getActivity().getApplicationContext()).registerReceiver(mReceiver, filter);
|
||||
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, filter);
|
||||
|
||||
loadData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
LocalBroadcastManager.getInstance(getActivity().getApplicationContext()).unregisterReceiver(mReceiver);
|
||||
|
||||
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mReceiver);
|
||||
}
|
||||
|
||||
public MarkAdapter getAdapter() {
|
||||
return adapter;
|
||||
public void loadData() {
|
||||
getLoaderManager().restartLoader(MARKER_LOADER, null, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -126,19 +136,12 @@ public class RegattaFragment extends BaseFragment implements LoaderCallbacks<Cur
|
||||
// Broadcast receiver to update ui on data changed
|
||||
private class IntentReceiver extends BroadcastReceiver {
|
||||
|
||||
private LoaderCallbacks<Cursor> loaderCallbacks;
|
||||
|
||||
public IntentReceiver(LoaderCallbacks<Cursor> callbacks) {
|
||||
loaderCallbacks = callbacks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Log.d(TAG, "Adapter will be notified");
|
||||
String action = intent.getAction();
|
||||
if (action.equals(getString(R.string.database_changed))) {
|
||||
getLoaderManager().restartLoader(MARKER_LOADER, null, loaderCallbacks);
|
||||
adapter.notifyDataSetChanged();
|
||||
loadData();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+15
-22
@@ -15,18 +15,10 @@ import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.net.Uri;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.sap.sailing.android.buoy.positioning.app.R;
|
||||
import com.sap.sailing.android.buoy.positioning.app.valueobjects.CheckinData;
|
||||
import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkInfo;
|
||||
import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkPingInfo;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.data.http.HttpGetRequest;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.activities.CheckinDataActivity;
|
||||
@@ -47,10 +39,16 @@ import com.sap.sailing.server.gateway.serialization.coursedata.impl.MarkJsonSeri
|
||||
import com.sap.sailing.server.gateway.serialization.impl.FlatGPSFixJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.MarkJsonSerializerWithPosition;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.net.Uri;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class CheckinManager {
|
||||
private final static String TAG = CheckinManager.class.getName();
|
||||
private BaseCheckinData checkinData;
|
||||
private final CheckinDataActivity activity;
|
||||
private final CheckinDataActivity<CheckinData> activity;
|
||||
private final Context mContext;
|
||||
private final AppPreferences prefs;
|
||||
private String url;
|
||||
@@ -61,7 +59,7 @@ public class CheckinManager {
|
||||
this(url, context, /* context is not necessarily a CheckinDataActivity */ null);
|
||||
}
|
||||
|
||||
private CheckinManager(String url, Context context, CheckinDataActivity activity) {
|
||||
private CheckinManager(String url, Context context, CheckinDataActivity<CheckinData> activity) {
|
||||
sharedDomainFactory = new SharedDomainFactoryImpl(/* race log resolver not needed in this app */ null);
|
||||
this.url = url;
|
||||
mContext = context;
|
||||
@@ -69,7 +67,7 @@ public class CheckinManager {
|
||||
this.activity = activity;
|
||||
}
|
||||
|
||||
public CheckinManager(String url, CheckinDataActivity activity) {
|
||||
public CheckinManager(String url, CheckinDataActivity<CheckinData> activity) {
|
||||
this(url, activity, activity);
|
||||
}
|
||||
|
||||
@@ -263,25 +261,20 @@ public class CheckinManager {
|
||||
}
|
||||
}
|
||||
|
||||
public void setCheckinData(BaseCheckinData data) {
|
||||
checkinData = data;
|
||||
private void setCheckinData(CheckinData data) {
|
||||
if (activity != null) {
|
||||
activity.onCheckinDataAvailable(getCheckinData());
|
||||
activity.onCheckinDataAvailable(data);
|
||||
} else if (dataChangedListner != null){
|
||||
dataChangedListner.handleData(data);
|
||||
}
|
||||
}
|
||||
|
||||
public interface DataChangedListner{
|
||||
void handleData(BaseCheckinData data);
|
||||
void handleData(CheckinData data);
|
||||
}
|
||||
|
||||
public void setDataChangedListner(DataChangedListner listner){
|
||||
dataChangedListner = listner;
|
||||
}
|
||||
|
||||
public BaseCheckinData getCheckinData() {
|
||||
return checkinData;
|
||||
public void setDataChangedListner(DataChangedListner listener){
|
||||
dataChangedListner = listener;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+18
-32
@@ -11,6 +11,7 @@ import com.sap.sailing.android.buoy.positioning.app.provider.AnalyticsContract.C
|
||||
import com.sap.sailing.android.buoy.positioning.app.provider.AnalyticsContract.Leaderboard;
|
||||
import com.sap.sailing.android.buoy.positioning.app.provider.AnalyticsContract.Mark;
|
||||
import com.sap.sailing.android.buoy.positioning.app.provider.AnalyticsContract.MarkPing;
|
||||
import com.sap.sailing.android.buoy.positioning.app.valueobjects.CheckinData;
|
||||
import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkInfo;
|
||||
import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkPingInfo;
|
||||
import com.sap.sailing.android.shared.data.CheckinUrlInfo;
|
||||
@@ -109,9 +110,9 @@ public class DatabaseHelper {
|
||||
if (mpc != null) {
|
||||
mpc.moveToFirst();
|
||||
while (!mpc.isAfterLast()) {
|
||||
long timeStamp = Long.parseLong(mpc.getString((mpc.getColumnIndex(MarkPing.MARK_PING_TIMESTAMP))));
|
||||
double longitude = Double.parseDouble(mpc.getString((mpc.getColumnIndex(MarkPing.MARK_PING_LONGITUDE))));
|
||||
double latitude = Double.parseDouble(mpc.getString((mpc.getColumnIndex(MarkPing.MARK_PING_LATITUDE))));
|
||||
long timeStamp = mpc.getLong(mpc.getColumnIndex(MarkPing.MARK_PING_TIMESTAMP));
|
||||
double longitude = mpc.getDouble(mpc.getColumnIndex(MarkPing.MARK_PING_LONGITUDE));
|
||||
double latitude = mpc.getDouble(mpc.getColumnIndex(MarkPing.MARK_PING_LATITUDE));
|
||||
MarkPingInfo markPingInfo = new MarkPingInfo(markID, GPSFixImpl.create(longitude, latitude, timeStamp),
|
||||
mpc.getDouble((mpc.getColumnIndex(MarkPing.MARK_PING_ACCURACY))));
|
||||
marks.add(markPingInfo);
|
||||
@@ -163,15 +164,11 @@ public class DatabaseHelper {
|
||||
*/
|
||||
public void storeCheckinRow(Context context, List<MarkInfo> markList, LeaderboardInfo leaderboard,
|
||||
CheckinUrlInfo checkinURL, List<MarkPingInfo> pings) throws GeneralDatabaseHelperException {
|
||||
|
||||
if (BuildConfig.DEBUG) {
|
||||
ExLog.i(context, TAG, "New data stored");
|
||||
}
|
||||
// inserting leaderboard first
|
||||
|
||||
|
||||
ContentResolver cr = context.getContentResolver();
|
||||
|
||||
ContentValues clv = new ContentValues();
|
||||
clv.put(Leaderboard.LEADERBOARD_NAME, leaderboard.name);
|
||||
clv.put(Leaderboard.LEADERBOARD_SERVER_URL, leaderboard.serverUrl);
|
||||
@@ -228,51 +225,40 @@ public class DatabaseHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public void updateMarks(Context context, List<MarkInfo> markList, LeaderboardInfo leaderboard) throws GeneralDatabaseHelperException {
|
||||
public void updateMarks(Context context, CheckinData data) throws GeneralDatabaseHelperException {
|
||||
ContentResolver cr = context.getContentResolver();
|
||||
|
||||
// Update Leaderboard
|
||||
LeaderboardInfo leaderboard = data.getLeaderboard();
|
||||
ContentValues leaderboardValues = new ContentValues();
|
||||
leaderboardValues.put(Leaderboard.LEADERBOARD_NAME, leaderboard.name);
|
||||
leaderboardValues.put(Leaderboard.LEADERBOARD_SERVER_URL, leaderboard.serverUrl);
|
||||
leaderboardValues.put(Leaderboard.LEADERBOARD_CHECKIN_DIGEST, leaderboard.checkinDigest);
|
||||
cr.update(Leaderboard.CONTENT_URI, leaderboardValues, Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = ?", new String[] {leaderboard.checkinDigest});
|
||||
|
||||
// Delete all marks for this leaderboard
|
||||
List<MarkInfo> currentMarks = getMarks(context, leaderboard.checkinDigest);
|
||||
// Delete marks which where deleted on the server
|
||||
for (MarkInfo currentMark : currentMarks){
|
||||
if (!markList.contains(currentMark)) {
|
||||
deleteMark(context, currentMark);
|
||||
}
|
||||
for (MarkInfo mark : currentMarks){
|
||||
deleteMark(context, mark);
|
||||
}
|
||||
// Update marks
|
||||
for (MarkInfo mark : markList) {
|
||||
// insert marks from server into database
|
||||
for (MarkInfo mark : data.marks) {
|
||||
for (MarkPingInfo ping : data.pings) {
|
||||
storeMarkPing(context, ping);
|
||||
}
|
||||
|
||||
ContentValues cmv = new ContentValues();
|
||||
cmv.put(Mark.MARK_CHECKIN_DIGEST, mark.getCheckinDigest());
|
||||
cmv.put(Mark.MARK_ID, mark.getId().toString());
|
||||
cmv.put(Mark.MARK_NAME, mark.getName());
|
||||
cmv.put(Mark.MARK_TYPE, mark.getType().toString());
|
||||
cmv.put(Mark.MARK_CLASS_NAME, mark.getClassName());
|
||||
if (!dataBaseContainsMark(context, mark)) {
|
||||
cr.insert(Mark.CONTENT_URI, cmv);
|
||||
} else {
|
||||
cr.update(Mark.CONTENT_URI, cmv, Mark.MARK_ID + " = ?", new String[] { mark.getId().toString() });
|
||||
}
|
||||
cr.insert(Mark.CONTENT_URI, cmv);
|
||||
}
|
||||
|
||||
LocalBroadcastManager.getInstance(context.getApplicationContext()).sendBroadcast(new Intent(context.getString(R.string.database_changed)));
|
||||
}
|
||||
|
||||
private boolean dataBaseContainsMark(Context context, MarkInfo mark) {
|
||||
Cursor contentResolver = context.getContentResolver().query(Mark.CONTENT_URI, null, Mark.MARK_CHECKIN_DIGEST + " = ?" +
|
||||
" AND " + Mark.MARK_ID + " = ? ", new String[] { mark.getCheckinDigest(), mark.getId().toString() }, "");
|
||||
int count = 0;
|
||||
if (contentResolver != null) {
|
||||
count = contentResolver.getCount();
|
||||
|
||||
contentResolver.close();
|
||||
}
|
||||
return count != 0;
|
||||
}
|
||||
|
||||
public void storeMarkPing(Context context, MarkPingInfo markPing) throws GeneralDatabaseHelperException {
|
||||
ContentResolver cr = context.getContentResolver();
|
||||
deletePingsFromDataBase(context, markPing.getMarkId().toString());
|
||||
|
||||
Reference in new issue
Block a user