TRACKING APP: refactored helpers

This commit is contained in:
Lukas Zielinski committed 2014-12-11 12:22:53 +01:00
1 parent 2c9986261c
commit a2b61d6bae
16 files changed
+76 -124

No files matched your search

@@ -206,7 +206,7 @@ public class TrackingServiceTest extends ServiceTestCase<TrackingService> {
getService().onLocationChanged(getTestLocation(1, 2f, 3));
Mockito.verify(serviceHelperSpy, Mockito.times(1)).startTransmittingService();
Mockito.verify(serviceHelperSpy, Mockito.times(1)).startTransmittingService(getService());
shutdownService();
}
@@ -8,6 +8,7 @@ import org.json.JSONObject;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import android.content.Context;
import android.content.Intent;
import android.test.ServiceTestCase;
@@ -42,7 +43,7 @@ public class TransmittingServiceTest extends ServiceTestCase<TransmittingService
if (volleyHelperSpy == null)
{
VolleyHelperTestable.injectInstance(null);
volleyHelperSpy = Mockito.spy(new VolleyHelperTestable(getContext()));
volleyHelperSpy = Mockito.spy(new VolleyHelperTestable());
VolleyHelperTestable.injectInstance(volleyHelperSpy);
}
@@ -85,11 +86,11 @@ public class TransmittingServiceTest extends ServiceTestCase<TransmittingService
fix.host = "http://127.0.0.1";
list.add(fix);
Mockito.when(databaseHelperMock.getUnsentFixes(Mockito.anyList(), Mockito.anyInt())).thenReturn(list);
Mockito.when(databaseHelperMock.getUnsentFixes(Mockito.any(Context.class), Mockito.anyList(), Mockito.anyInt())).thenReturn(list);
startService();
Thread.sleep(4000);
Thread.sleep(5000);
Mockito.verify(volleyHelperSpy, Mockito.times(1)).enqueueRequest(
urlCaptor.capture(), jsonObjectCaptor.capture(),
@@ -105,7 +106,7 @@ public class TransmittingServiceTest extends ServiceTestCase<TransmittingService
assertEquals(14, jsonFix.getLong("speedMperS"));
assertEquals(101.5, jsonFix.getDouble("bearingDeg"));
assertEquals("http://127.0.0.1/api/v1/gps_fixes", urlCaptor.getValue());
assertEquals("http://127.0.0.1/sailingserver/api/v1/gps_fixes", urlCaptor.getValue());
shutdownService();
}
@@ -1,13 +1,11 @@
package com.sap.sailing.android.tracking.app.test.extensions;
import android.content.Context;
import com.sap.sailing.android.tracking.app.utils.DatabaseHelper;
public class DatabaseHelperTestable extends DatabaseHelper {
public DatabaseHelperTestable(Context context) {
super(context);
public DatabaseHelperTestable() {
super();
}
public static void injectInstance(DatabaseHelper instance) {
@@ -1,15 +1,9 @@
package com.sap.sailing.android.tracking.app.test.extensions;
import android.content.Context;
import com.sap.sailing.android.tracking.app.utils.ServiceHelper;
public class ServiceHelperTestable extends ServiceHelper {
public ServiceHelperTestable(Context context) {
super(context);
}
public static void injectInstance(ServiceHelper instance) {
mInstance = instance;
}
@@ -1,15 +1,9 @@
package com.sap.sailing.android.tracking.app.test.extensions;
import android.content.Context;
import com.sap.sailing.android.tracking.app.utils.VolleyHelper;
public class VolleyHelperTestable extends VolleyHelper {
public VolleyHelperTestable(Context context) {
super(context);
}
public static void injectInstance(VolleyHelper instance)
{
mInstance = instance;
@@ -83,7 +83,7 @@ public class TrackingService extends Service implements ConnectionCallbacks,
.getExtras()
.getString(getString(R.string.tracking_service_event_id_parameter));
eventRowId = DatabaseHelper.getInstance(this).getRowIdForEventId(eventId);
eventRowId = DatabaseHelper.getInstance().getRowIdForEventId(this, eventId);
if (BuildConfig.DEBUG) {
ExLog.i(this, TAG, "Starting Tracking Service with eventId: "+ eventId);
@@ -169,7 +169,7 @@ public class TrackingService extends Service implements ConnectionCallbacks,
reportGPSQualityBearingAndSpeed(location.getAccuracy(), location.getBearing(), location.getSpeed());
DatabaseHelper.getInstance(this).insertGPSFix(location.getLatitude(),
DatabaseHelper.getInstance().insertGPSFix(this, location.getLatitude(),
location.getLongitude(), location.getSpeed(),
location.getBearing(), location.getProvider(),
location.getTime(), eventRowId);
@@ -187,7 +187,7 @@ public class TrackingService extends Service implements ConnectionCallbacks,
"ensureTransmittingServiceIsRunning, starting TransmittingService");
}
ServiceHelper.getInstance(this).startTransmittingService();
ServiceHelper.getInstance().startTransmittingService(this);
}
@Override
@@ -255,7 +255,7 @@ public class TransmittingService extends Service {
}
sendFixesToAPI(null);
reportUnsentGPSFixesCount(DatabaseHelper.getInstance(getBaseContext()).getNumberOfUnsentGPSFixes());
reportUnsentGPSFixesCount(DatabaseHelper.getInstance().getNumberOfUnsentGPSFixes(getBaseContext()));
}
private boolean getTrackingServiceIsCurrentlyTracking()
@@ -266,7 +266,7 @@ public class TransmittingService extends Service {
private void sendFixesToAPI(List<String> failedHosts) {
// first, lets fetch all unsent fixes
List<GpsFix> fixes = DatabaseHelper.getInstance(getBaseContext()).getUnsentFixes(failedHosts, UPDATE_BATCH_SIZE);
List<GpsFix> fixes = DatabaseHelper.getInstance().getUnsentFixes(getBaseContext(), failedHosts, UPDATE_BATCH_SIZE);
// store ids so we can delete the rows later
ArrayList<String> ids = new ArrayList<String>();
@@ -332,7 +332,7 @@ public class TransmittingService extends Service {
{
sendingAttempted = true;
VolleyHelper.getInstance(this).enqueueRequest(
VolleyHelper.getInstance().enqueueRequest(
host + prefs.getServerGpsFixesPostPath(),
requestObject,
new FixSubmitListener(ids.toArray(idsArr)),
@@ -386,7 +386,7 @@ public class TransmittingService extends Service {
private void deleteSynced(String[] fixIdStrings)
{
DatabaseHelper.getInstance(getBaseContext()).deleteGpsFixes(fixIdStrings);
DatabaseHelper.getInstance().deleteGpsFixes(getBaseContext(), fixIdStrings);
}
/**
@@ -53,7 +53,7 @@ public class ConnectivityChangedReceiver extends BroadcastReceiver {
ExLog.i(context, TAG, "Starting TransmittingService");
}
ServiceHelper.getInstance(context).startTransmittingService();
ServiceHelper.getInstance().startTransmittingService(context);
disable(context);
}
@@ -66,9 +66,9 @@ public class RegattaActivity extends BaseActivity {
String eventId = intent.getStringExtra(getString(R.string.event_id));
String competitorId = intent.getStringExtra(getString(R.string.competitor_id));
competitor = DatabaseHelper.getInstance(this).getCompetitor(competitorId);
event = DatabaseHelper.getInstance(this).getEventInfo(eventId);
leaderboard = DatabaseHelper.getInstance(this).getLeaderboard(leaderboardName);
competitor = DatabaseHelper.getInstance().getCompetitor(this, competitorId);
event = DatabaseHelper.getInstance().getEventInfo(this, eventId);
leaderboard = DatabaseHelper.getInstance().getLeaderboard(this, leaderboardName);
setContentView(R.layout.fragment_container);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
@@ -321,7 +321,7 @@ public class RegattaActivity extends BaseActivity {
JsonObjectRequest checkoutRequest = new JsonObjectRequest(checkoutURLStr, checkoutData, new Listener<JSONObject>(){
@Override
public void onResponse(JSONObject response) {
DatabaseHelper.getInstance(RegattaActivity.this).deleteRegttaFromDatabase(event, competitor, leaderboard);
DatabaseHelper.getInstance().deleteRegttaFromDatabase(RegattaActivity.this, event, competitor, leaderboard);
dismissProgressDialog();
finish();
}
@@ -337,7 +337,7 @@ public class RegattaActivity extends BaseActivity {
}
});
VolleyHelper.getInstance(this).addRequest(checkoutRequest);
VolleyHelper.getInstance().addRequest(checkoutRequest);
}
public EventInfo getEvent()
@@ -60,7 +60,7 @@ public class StartActivity extends BaseActivity {
}
// start transmitting service that will henceforth run in the background
ServiceHelper.getInstance(this).startTransmittingService();
ServiceHelper.getInstance().startTransmittingService(this);
intent.setData(null);
@@ -78,7 +78,7 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
}
if (getSupportActionBar() != null) {
EventInfo eventInfo = DatabaseHelper.getInstance(this).getEventInfoWithLeaderboard(eventId);
EventInfo eventInfo = DatabaseHelper.getInstance().getEventInfoWithLeaderboard(this, eventId);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
toolbar.setNavigationIcon(R.drawable.sap_logo_64_sq);
@@ -124,7 +124,7 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
}
});
ServiceHelper.getInstance(this).startTrackingService(eventId);
ServiceHelper.getInstance().startTrackingService(this, eventId);
}
@Override
@@ -72,10 +72,6 @@ public class HomeFragment extends BaseFragment implements
private int requestCodeQRCode = 442;
private RegattaAdapter adapter;
private int eventRowId;
private int competitorRowId;
private int leaderboardRowId;
@SuppressLint("InflateParams")
@Override
@@ -365,9 +361,7 @@ public class HomeFragment extends BaseFragment implements
}
});
VolleyHelper.getInstance(getActivity())
.addRequest(
getCompetitorRequest);
VolleyHelper.getInstance().addRequest(getCompetitorRequest);
}
}, new ErrorListener() {
@Override
@@ -382,8 +376,7 @@ public class HomeFragment extends BaseFragment implements
}
});
VolleyHelper.getInstance(getActivity()).addRequest(
getEventRequest);
VolleyHelper.getInstance().addRequest(getEventRequest);
}
}, new ErrorListener() {
@Override
@@ -397,14 +390,13 @@ public class HomeFragment extends BaseFragment implements
}
});
VolleyHelper.getInstance(getActivity()).addRequest(
getLeaderboardRequest);
VolleyHelper.getInstance().addRequest(getLeaderboardRequest);
}
@Override
public void onDetach() {
super.onDetach();
VolleyHelper.getInstance(getActivity()).cancelRequest(REQUEST_TAG);
VolleyHelper.getInstance().cancelRequest(REQUEST_TAG);
}
/**
@@ -445,18 +437,6 @@ public class HomeFragment extends BaseFragment implements
AlertDialog alert = builder.create();
alert.show();
}
/**
* Delete Event, Competitor and Leaderboard
*/
// private void deleteRegttaFromDatabase()
// {
// ContentResolver cr = getActivity().getContentResolver();
//
// cr.delete(Event.CONTENT_URI, BaseColumns._ID + " = " + eventRowId, null);
// cr.delete(Competitor.CONTENT_URI, BaseColumns._ID + " = " + competitorRowId, null);
// cr.delete(Leaderboard.CONTENT_URI, BaseColumns._ID + " = " + leaderboardRowId, null);
// }
/**
* Return true if the combination of eventId, leaderboardName and
@@ -603,7 +583,7 @@ public class HomeFragment extends BaseFragment implements
checkinData.competitorId),
new CheckinErrorListener());
VolleyHelper.getInstance(getActivity()).addRequest(checkinRequest);
VolleyHelper.getInstance().addRequest(checkinRequest);
} catch (JSONException e) {
ExLog.e(getActivity(), TAG,
@@ -254,7 +254,7 @@ public class TrackingFragment extends BaseFragment implements OnClickListener {
private void stopTracking() {
prefs.setTrackingTimerStarted(0);
ServiceHelper.getInstance(getActivity()).stopTrackingService();
ServiceHelper.getInstance().stopTrackingService(getActivity());
getActivity().finish();
}
@@ -29,21 +29,17 @@ public class DatabaseHelper {
private final static String TAG = DatabaseHelper.class.getName();
protected static DatabaseHelper mInstance;
protected Context mContext;
protected DatabaseHelper(Context context) {
mContext = context;
}
public static synchronized DatabaseHelper getInstance(Context context) {
public static synchronized DatabaseHelper getInstance() {
if (mInstance == null) {
mInstance = new DatabaseHelper(context);
mInstance = new DatabaseHelper();
}
return mInstance;
}
public List<GpsFix> getUnsentFixes(List<String> failedHosts, int updateBatchSize) {
public List<GpsFix> getUnsentFixes(Context context, List<String> failedHosts, int updateBatchSize) {
String selectionClause = SensorGps.GPS_SYNCED + " = 0";
String projectionClauseStr = "events._id as _eid,sensor_gps.gps_time,sensor_gps.gps_latitude,"
+ "sensor_gps.gps_longitude,sensor_gps.gps_speed,sensor_gps.gps_bearing,sensor_gps.gps_synced,"
@@ -71,7 +67,7 @@ public class DatabaseHelper {
}
ArrayList<GpsFix> list = new ArrayList<GpsFix>();
Cursor cur = mContext.getContentResolver().query(
Cursor cur = context.getContentResolver().query(
EventGpsFixesJoined.CONTENT_URI, projectionClause,
selectionClause, null, sortAndLimitClause);
while (cur.moveToNext()) {
@@ -99,14 +95,14 @@ public class DatabaseHelper {
return list;
}
public int getNumberOfUnsentGPSFixes()
public int getNumberOfUnsentGPSFixes(Context context)
{
String selectionClause = SensorGps.GPS_SYNCED + " = 0";
String sortAndLimitClause = SensorGps.GPS_TIME + " DESC LIMIT 1";
int eventId = -1;
Cursor cur = mContext.getContentResolver().query(
Cursor cur = context.getContentResolver().query(
EventGpsFixesJoined.CONTENT_URI,
new String[] { "events._id as _eid" },
selectionClause,
@@ -123,13 +119,13 @@ public class DatabaseHelper {
{
if (BuildConfig.DEBUG)
{
ExLog.i(mContext, TAG, "no event id, reporting 0 gps-fixes.");
ExLog.i(context, TAG, "no event id, reporting 0 gps-fixes.");
}
return 0;
}
String selectionClause2 = "events._id = " + eventId;
Cursor countCursor = mContext.getContentResolver().query(
Cursor countCursor = context.getContentResolver().query(
EventGpsFixesJoined.CONTENT_URI,
new String[] { "count(*) AS count" }, selectionClause2, null, null);
@@ -140,7 +136,7 @@ public class DatabaseHelper {
return count;
}
public int deleteGpsFixes(String[] fixIdStrings)
public int deleteGpsFixes(Context context, String[] fixIdStrings)
{
int numDeleted = 0;
for (String idStr: fixIdStrings)
@@ -148,17 +144,17 @@ public class DatabaseHelper {
ContentValues updateValues = new ContentValues();
updateValues.put(SensorGps.GPS_SYNCED, 1);
Uri uri = ContentUris.withAppendedId(SensorGps.CONTENT_URI, Long.parseLong(idStr));
numDeleted = mContext.getContentResolver().delete(uri, null, null);
numDeleted = context.getContentResolver().delete(uri, null, null);
}
return numDeleted;
}
public long getRowIdForEventId(String eventId)
public long getRowIdForEventId(Context context, String eventId)
{
int result = 0;
ContentResolver cr = mContext.getContentResolver();
ContentResolver cr = context.getContentResolver();
Cursor cursor = cr.query(Event.CONTENT_URI, null, "event_id = \"" + eventId + "\"", null, null);
cursor.moveToFirst();
result = cursor.getInt(cursor.getColumnIndex(BaseColumns._ID));
@@ -166,9 +162,9 @@ public class DatabaseHelper {
return result;
}
public void insertGPSFix(double lat, double lon, double speed,
public void insertGPSFix(Context context, double lat, double lon, double speed,
double bearing, String provider, long timestamp, long eventRowId) {
ContentResolver cr = mContext.getContentResolver();
ContentResolver cr = context.getContentResolver();
ContentValues cv = new ContentValues();
cv.put(SensorGps.GPS_LATITUDE, lat);
@@ -182,10 +178,10 @@ public class DatabaseHelper {
cr.insert(SensorGps.CONTENT_URI, cv);
}
public EventInfo getEventInfoWithLeaderboard(String eventId) {
public EventInfo getEventInfoWithLeaderboard(Context context, String eventId) {
EventInfo result = new EventInfo();
ContentResolver cr = mContext.getContentResolver();
ContentResolver cr = context.getContentResolver();
String projectionStr = "events._id,leaderboards.leaderboard_name,events.event_name";
String[] projection = projectionStr.split(",");
Cursor cursor = cr.query(LeaderboardsEventsJoined.CONTENT_URI, projection, "events.event_id = \"" + eventId + "\"", null, null);
@@ -199,11 +195,11 @@ public class DatabaseHelper {
return result;
}
public EventInfo getEventInfo(String eventId) {
public EventInfo getEventInfo(Context context, String eventId) {
EventInfo event = new EventInfo();
event.id = eventId;
Cursor cursor = mContext.getContentResolver().query(Event.CONTENT_URI,
Cursor cursor = context.getContentResolver().query(Event.CONTENT_URI,
null, "event_id = \"" + eventId + "\"", null, null);
if (cursor.moveToFirst()) {
@@ -218,12 +214,12 @@ public class DatabaseHelper {
return event;
}
public CompetitorInfo getCompetitor(String competitorId)
public CompetitorInfo getCompetitor(Context context, String competitorId)
{
CompetitorInfo competitor = new CompetitorInfo();
competitor.id = competitorId;
Cursor cursor = mContext.getContentResolver().query(Competitor.CONTENT_URI, null, "competitor_id = \"" + competitorId + "\"", null, null);
Cursor cursor = context.getContentResolver().query(Competitor.CONTENT_URI, null, "competitor_id = \"" + competitorId + "\"", null, null);
if (cursor.moveToFirst()) {
competitor.name = cursor.getString(cursor.getColumnIndex(Competitor.COMPETITOR_DISPLAY_NAME));
competitor.countryCode = cursor.getString(cursor.getColumnIndex(Competitor.COMPETITOR_COUNTRY_CODE));
@@ -235,12 +231,12 @@ public class DatabaseHelper {
return competitor;
}
public LeaderboardInfo getLeaderboard(String leaderboardName)
public LeaderboardInfo getLeaderboard(Context context, String leaderboardName)
{
LeaderboardInfo leaderboard = new LeaderboardInfo();
leaderboard.name = leaderboardName;
Cursor lc = mContext.getContentResolver().query(Leaderboard.CONTENT_URI, null, "leaderboard_name = \"" + leaderboardName + "\"", null, null);
Cursor lc = context.getContentResolver().query(Leaderboard.CONTENT_URI, null, "leaderboard_name = \"" + leaderboardName + "\"", null, null);
if (lc.moveToFirst()) {
leaderboard.rowId = lc.getInt(lc.getColumnIndex(BaseColumns._ID));
}
@@ -251,9 +247,9 @@ public class DatabaseHelper {
}
public void deleteRegttaFromDatabase(EventInfo event, CompetitorInfo competitor, LeaderboardInfo leaderboard)
public void deleteRegttaFromDatabase(Context context, EventInfo event, CompetitorInfo competitor, LeaderboardInfo leaderboard)
{
ContentResolver cr = mContext.getContentResolver();
ContentResolver cr = context.getContentResolver();
int d1 = cr.delete(Event.CONTENT_URI, BaseColumns._ID + " = " + event.rowId, null);
int d2 = cr.delete(Competitor.CONTENT_URI, BaseColumns._ID + " = " + competitor.rowId, null);
@@ -261,9 +257,9 @@ public class DatabaseHelper {
if (BuildConfig.DEBUG)
{
ExLog.i(mContext, TAG, "Checkout, number of events deleted: " + d1);
ExLog.i(mContext, TAG, "Checkout, number of competitors deleted: " + d2);
ExLog.i(mContext, TAG, "Checkout, number of leaderbards deleted: " + d3);
ExLog.i(context, TAG, "Checkout, number of events deleted: " + d1);
ExLog.i(context, TAG, "Checkout, number of competitors deleted: " + d2);
ExLog.i(context, TAG, "Checkout, number of leaderbards deleted: " + d3);
}
}
}
@@ -17,17 +17,11 @@ public class ServiceHelper {
private final static String TAG = ServiceHelper.class.getName();
protected static ServiceHelper mInstance;
protected Context mContext;
protected ServiceHelper(Context context) {
mContext = context;
}
public static synchronized ServiceHelper getInstance(Context context) {
public static synchronized ServiceHelper getInstance() {
if (mInstance == null) {
mInstance = new ServiceHelper(context);
mInstance = new ServiceHelper();
}
return mInstance;
}
@@ -36,10 +30,10 @@ public class ServiceHelper {
* starts for the first time, and every time, when a tracking gps-fix is
* stored, to ensure it gets sent to the API-server.
*/
public void startTransmittingService() {
Intent intent = new Intent(mContext, TransmittingService.class);
intent.setAction(mContext.getString(R.string.transmitting_service_start));
mContext.startService(intent);
public void startTransmittingService(Context context) {
Intent intent = new Intent(context, TransmittingService.class);
intent.setAction(context.getString(R.string.transmitting_service_start));
context.startService(intent);
}
/**
@@ -47,21 +41,21 @@ public class ServiceHelper {
* the event from the database in order to set the host-address correctly.
* @param eventId id of the event (not the row-id)
*/
public void startTrackingService(String eventId)
public void startTrackingService(Context context, String eventId)
{
Intent intent = new Intent(mContext, TrackingService.class);
intent.setAction(mContext.getString(R.string.tracking_service_start));
intent.putExtra(mContext.getString(R.string.tracking_service_event_id_parameter), eventId);
mContext.startService(intent);
Intent intent = new Intent(context, TrackingService.class);
intent.setAction(context.getString(R.string.tracking_service_start));
intent.putExtra(context.getString(R.string.tracking_service_event_id_parameter), eventId);
context.startService(intent);
}
/**
* Stop tracking service.
*/
public void stopTrackingService()
public void stopTrackingService(Context context)
{
Intent intent = new Intent(mContext, TrackingService.class);
intent.setAction(mContext.getString(R.string.tracking_service_stop));
mContext.startService(intent);
Intent intent = new Intent(context, TrackingService.class);
intent.setAction(context.getString(R.string.tracking_service_stop));
context.startService(intent);
}
}
}
@@ -3,7 +3,6 @@ package com.sap.sailing.android.tracking.app.utils;
import org.json.JSONObject;
import android.app.Application;
import android.content.Context;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
@@ -16,18 +15,14 @@ public class VolleyHelper extends Application {
private static final String TAG = VolleyHelper.class.getName();
protected Context mContext;
private RequestQueue mRequestQueue;
protected static VolleyHelper mInstance;
protected VolleyHelper(Context context) {
mContext = context;
}
public static synchronized VolleyHelper getInstance(Context context) {
public static synchronized VolleyHelper getInstance() {
if (mInstance == null) {
mInstance = new VolleyHelper(context);
mInstance = new VolleyHelper();
}
return mInstance;
@@ -35,7 +30,7 @@ public class VolleyHelper extends Application {
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(mContext);
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;