First part of regatta reloading at open

Regatta data is reloaded in oncreate of RegattaActivity.
This commit is contained in:
Bennet Brunsen committed 2015-03-11 15:34:04 +01:00
1 parent 613f8fc8f9
commit 2573e96165
8 files changed
+96 -37

No files matched your search

@@ -134,8 +134,12 @@ public class AnalyticsContract {
+ "/vnd.sap_sailing_analytics.uri";
public static final String DEFAULT_SORT = BaseColumns._ID + " ASC ";
public static Uri buildLeaderboardUri(String leaderboardId) {
return CONTENT_URI.buildUpon().appendPath(leaderboardId).build();
public static Uri builCheckInUri(String checkinUriId) {
return CONTENT_URI.buildUpon().appendPath(checkinUriId).build();
}
public static String getCheckinUriId(Uri uri) {
return uri.getPathSegments().get(1);
}
}
@@ -12,6 +12,7 @@ import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Event;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.EventColumns;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Leaderboard;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.LeaderboardColumns;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.CheckinUriColumns;
public class AnalyticsDatabase extends SQLiteOpenHelper {
@@ -29,6 +30,7 @@ public class AnalyticsDatabase extends SQLiteOpenHelper {
String EVENTS = "events";
String EVENTS_COMPETITORS = "events_competitors";
String LEADERBOARDS = "leaderboards";
String CHECKIN_URIS= "checkin_uris";
String EVENTS_JOIN_LEADERBOARDS_JOIN_COMPETITORS = Tables.LEADERBOARDS +
" INNER JOIN " + Tables.EVENTS + " ON (" + Tables.LEADERBOARDS + "." + Leaderboard.LEADERBOARD_CHECKIN_DIGEST
+ " = " + Tables.EVENTS + "." + Event.EVENT_CHECKIN_DIGEST + ") " +
@@ -50,7 +52,12 @@ public class AnalyticsDatabase extends SQLiteOpenHelper {
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ LeaderboardColumns.LEADERBOARD_CHECKIN_DIGEST + " TEXT, "
+ LeaderboardColumns.LEADERBOARD_NAME + " TEXT );");
db.execSQL("CREATE TABLE " + Tables.CHECKIN_URIS + " ("
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ CheckinUriColumns.CHECKIN_URI_CHECKIN_DIGEST + " TEXT, "
+ CheckinUriColumns.CHECKIN_URI_VALUE + " TEXT );");
db.execSQL("CREATE TABLE " + Tables.COMPETITORS + " ("
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ CompetitorColumns.COMPETITOR_ID + " TEXT, "
@@ -83,7 +90,8 @@ public class AnalyticsDatabase extends SQLiteOpenHelper {
db.execSQL("DROP TABLE IF EXISTS " + Tables.COMPETITORS);
db.execSQL("DROP TABLE IF EXISTS " + Tables.EVENTS);
db.execSQL("DROP TABLE IF EXISTS " + Tables.LEADERBOARDS);
db.execSQL("DROP TABLE IF EXISTS " + Tables.CHECKIN_URIS);
onCreate(db);
version = CUR_DATABASE_VERSION;
}
@@ -17,6 +17,7 @@ import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Competito
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Event;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Leaderboard;
import com.sap.sailing.android.tracking.app.provider.AnalyticsDatabase.Tables;
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.CheckinUri;
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
import java.util.Arrays;
@@ -40,7 +41,10 @@ public class AnalyticsProvider extends ContentProvider {
private static final int MESSAGE = 400;
private static final int MESSAGE_ID = 401;
private static final int CHECKIN_URI = 500;
private static final int CHECKIN_URI_ID = 501;
private static final int EVENT_LEADERBOARD_COMPETITOR_JOINED = 600;
private static final int EVENT_GPS_FIXES_JOINED = 700;
@@ -57,6 +61,9 @@ public class AnalyticsProvider extends ContentProvider {
matcher.addURI(authority, "leaderboards", LEADERBOARD);
matcher.addURI(authority, "leaderboards/*", LEADERBOARD_ID);
matcher.addURI(authority, "checkin_uris", CHECKIN_URI);
matcher.addURI(authority, "checkin_uris/*", CHECKIN_URI_ID);
matcher.addURI(authority, "events", EVENT);
matcher.addURI(authority, "events/*", EVENT_ID);
@@ -147,7 +154,10 @@ public class AnalyticsProvider extends ContentProvider {
case LEADERBOARD_ID:
return Leaderboard.CONTENT_ITEM_TYPE;
case CHECKIN_URI:
return CheckinUri.CONTENT_TYPE;
case CHECKIN_URI_ID:
return CheckinUri.CONTENT_ITEM_TYPE;
default:
throw new UnsupportedOperationException("Unknown uri: " + uri);
}
@@ -177,7 +187,10 @@ public class AnalyticsProvider extends ContentProvider {
long leaderboardId = db.insertOrThrow(Tables.LEADERBOARDS, null, values);
notifyChange(uri);
return Leaderboard.buildLeaderboardUri(String.valueOf(leaderboardId));
case CHECKIN_URI:
long checkinUriID = db.insertOrThrow(Tables.CHECKIN_URIS, null, values);
notifyChange(uri);
return CheckinUri.builCheckInUri(String.valueOf(checkinUriID));
default:
throw new UnsupportedOperationException("Unknown uri: " + uri);
}
@@ -209,7 +222,10 @@ public class AnalyticsProvider extends ContentProvider {
int numLeaderboardRowsDeleted = db.delete(Tables.LEADERBOARDS, selection, selectionArgs);
notifyChange(uri);
return numLeaderboardRowsDeleted;
case CHECKIN_URI:
int numCheckinUriRowsDeleted = db.delete(Tables.CHECKIN_URIS, selection, selectionArgs);
notifyChange(uri);
return numCheckinUriRowsDeleted;
default:
throw new UnsupportedOperationException("Unknown uri: " + uri);
}
@@ -263,6 +279,12 @@ public class AnalyticsProvider extends ContentProvider {
final String event_id = Event.getEventId(uri);
return builder.table(Tables.EVENTS)
.where(Event.EVENT_ID + " = ?", event_id);
case CHECKIN_URI:
return builder.table(Tables.CHECKIN_URIS);
case CHECKIN_URI_ID:
final String checkinUriId = AnalyticsContract.CheckinUri.getCheckinUriId(uri);
return builder.table(Tables.CHECKIN_URIS)
.where(BaseColumns._ID + " = ?", checkinUriId);
default:
throw new UnsupportedOperationException("Unknown uri: " + uri);
@@ -1,5 +1,9 @@
package com.sap.sailing.android.tracking.app.ui.activities;
import android.app.AlertDialog;
import android.content.DialogInterface;
import com.sap.sailing.android.tracking.app.R;
import com.sap.sailing.android.tracking.app.utils.CheckinManager;
import com.sap.sailing.android.tracking.app.valueobjects.CheckinData;
@@ -7,4 +11,23 @@ public abstract class CheckinDataActivity extends BaseActivity implements Checki
@Override
public abstract void onCheckinDataAvailable(CheckinData data);
/**
* Shows a pop-up-dialog that informs the user than an DB-operation has failed.
*/
public void displayDatabaseError() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getString(R.string.notify_user_db_operation_failed));
builder.setCancelable(true);
builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
@@ -23,6 +23,7 @@ import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.tracking.app.BuildConfig;
import com.sap.sailing.android.tracking.app.R;
import com.sap.sailing.android.tracking.app.ui.fragments.RegattaFragment;
import com.sap.sailing.android.tracking.app.utils.CheckinManager;
import com.sap.sailing.android.tracking.app.utils.DatabaseHelper;
import com.sap.sailing.android.tracking.app.utils.NetworkHelper;
import com.sap.sailing.android.tracking.app.utils.NetworkHelper.NetworkHelperError;
@@ -30,6 +31,7 @@ import com.sap.sailing.android.tracking.app.utils.NetworkHelper.NetworkHelperFai
import com.sap.sailing.android.tracking.app.utils.NetworkHelper.NetworkHelperSuccessListener;
import com.sap.sailing.android.tracking.app.utils.UniqueDeviceUuid;
import com.sap.sailing.android.tracking.app.valueobjects.CheckinData;
import com.sap.sailing.android.tracking.app.valueobjects.CheckinUrlInfo;
import com.sap.sailing.android.tracking.app.valueobjects.CompetitorInfo;
import com.sap.sailing.android.tracking.app.valueobjects.EventInfo;
import com.sap.sailing.android.tracking.app.valueobjects.LeaderboardInfo;
@@ -60,8 +62,11 @@ public class RegattaActivity extends CheckinDataActivity {
public EventInfo event;
public CompetitorInfo competitor;
public LeaderboardInfo leaderboard;
public CheckinUrlInfo checkinUrl;
private boolean hasPicture;
private String checkinDigest;
private CheckinManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -73,7 +78,11 @@ public class RegattaActivity extends CheckinDataActivity {
competitor = new CompetitorInfo();
leaderboard = new LeaderboardInfo();
String checkinDigest = intent.getStringExtra(getString(R.string.checkin_digest));
checkinDigest = intent.getStringExtra(getString(R.string.checkin_digest));
checkinUrl = DatabaseHelper.getInstance().getCheckinUrl(this, checkinDigest);
manager = new CheckinManager(checkinUrl.urlString, this);
manager.callServerAndGenerateCheckinData();
competitor = DatabaseHelper.getInstance().getCompetitor(this, checkinDigest);
event = DatabaseHelper.getInstance().getEventInfo(this, checkinDigest);
@@ -342,7 +351,19 @@ public class RegattaActivity extends CheckinDataActivity {
@Override
public void onCheckinDataAvailable(CheckinData data) {
try {
DatabaseHelper.getInstance().deleteRegattaFromDatabase(this, checkinDigest);
DatabaseHelper.getInstance().storeCheckinRow(this, data.getEvent(),
data.getCompetitor(), data.getLeaderboard(), data.getCheckinUrl());
competitor = DatabaseHelper.getInstance().getCompetitor(this, checkinDigest);
event = DatabaseHelper.getInstance().getEventInfo(this, checkinDigest);
leaderboard = DatabaseHelper.getInstance().getLeaderboard(this, checkinDigest);
checkinUrl = DatabaseHelper.getInstance().getCheckinUrl(this, checkinDigest);
replaceFragment(R.id.content_frame, new RegattaFragment());
} catch (DatabaseHelper.GeneralDatabaseHelperException e) {
ExLog.e(this, TAG, "Batch insert failed: " + e.getMessage());
displayDatabaseError();
}
}
private class UploadTeamImageTask extends AsyncTask<String, Void, String> {
@@ -211,7 +211,7 @@ public class HomeFragment extends BaseFragment implements LoaderCallbacks<Cursor
adapter.notifyDataSetChanged();
} catch (GeneralDatabaseHelperException e) {
ExLog.e(getActivity(), TAG, "Batch insert failed: " + e.getMessage());
displayDatabaseError();
((StartActivity) getActivity()).displayDatabaseError();
return;
}
@@ -271,25 +271,6 @@ public class HomeFragment extends BaseFragment implements LoaderCallbacks<Cursor
alert.show();
}
/**
* Shows a pop-up-dialog that informs the user than an DB-operation has failed.
*/
private void displayDatabaseError() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(getString(R.string.notify_user_db_operation_failed));
builder.setCancelable(true);
builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
/**
* Start regatta activity.
*
@@ -309,10 +309,10 @@ public class DatabaseHelper {
ContentValues ccuv = new ContentValues();
ccuv.put(CheckinUri.CHECKIN_URI_VALUE, checkinURL.urlString);
ccuv.put(Leaderboard.LEADERBOARD_CHECKIN_DIGEST, checkinURL.checkinDigest);
cr.insert(Leaderboard.CONTENT_URI, ccuv);
ccuv.put(CheckinUri.CHECKIN_URI_CHECKIN_DIGEST, checkinURL.checkinDigest);
cr.insert(CheckinUri.CONTENT_URI, ccuv);
opList.add(ContentProviderOperation.newInsert(Competitor.CONTENT_URI).withValues(ccuv).build());
opList.add(ContentProviderOperation.newInsert(CheckinUri.CONTENT_URI).withValues(ccuv).build());
try {
cr.applyBatch(AnalyticsContract.CONTENT_AUTHORITY, opList);
@@ -66,9 +66,9 @@ public class CheckinData {
}
public CheckinUrlInfo getCheckinUrl(){
CheckinUrlInfo checkinUrl = new CheckinUrlInfo();
checkinUrl.urlString = uriString;
checkinUrl.checkinDigest = checkinDigest;
return checkinUrl;
CheckinUrlInfo checkinUrlInfo = new CheckinUrlInfo();
checkinUrlInfo.urlString = uriString;
checkinUrlInfo.checkinDigest = checkinDigest;
return checkinUrlInfo;
}
}