mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-14 22:43:57 +00:00
Basic buoy activity
This commit is contained in:
1 parent
38c69d751a
commit
f5f66a61cd
8 files changed
+257
-9
No files matched your search
@@ -77,6 +77,13 @@
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".ui.activities.StartActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.BuoyActivity"
|
||||
android:screenOrientation="portrait">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".ui.activities.StartActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.TrackingActivity"
|
||||
android:label="@string/title_activity_tracking"
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/fiori_main_background">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/buoy_Name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:textSize="@dimen/tracking_button_text_size"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/start_tracking"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/tracking_button_height"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_marginBottom="@dimen/regatta_button_margin"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:background="@drawable/start_tracking_button"
|
||||
android:padding="@dimen/regatta_button_padding"
|
||||
android:text="@string/start_tracking"
|
||||
android:textSize="@dimen/tracking_button_text_size"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/options_menu_settings"
|
||||
android:icon="@drawable/settings_grey"
|
||||
android:title="@string/options_menu_settings"
|
||||
app:showAsAction=""/>
|
||||
|
||||
<item
|
||||
android:id="@+id/options_menu_checkout"
|
||||
android:icon="@drawable/ic_menu_info_details"
|
||||
android:title="@string/options_menu_checkout"
|
||||
app:showAsAction=""/>
|
||||
|
||||
<item
|
||||
android:id="@+id/options_menu_info"
|
||||
android:title="@string/about"/>
|
||||
</menu>
|
||||
+1
-1
@@ -39,7 +39,7 @@ public class AnalyticsDatabase extends SQLiteOpenHelper {
|
||||
String MARKS = "marks";
|
||||
String EVENTS_JOIN_LEADERBOARDS_JOIN_MARKS = Tables.LEADERBOARDS + " INNER JOIN " + Tables.EVENTS
|
||||
+ " ON (" + Tables.LEADERBOARDS + "." + Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = " + Tables.EVENTS
|
||||
+ "." + Event.EVENT_CHECKIN_DIGEST + ") " + " INNER JOIN " + Tables.COMPETITORS + " ON ("
|
||||
+ "." + Event.EVENT_CHECKIN_DIGEST + ") " + " INNER JOIN " + Tables.MARKS + " ON ("
|
||||
+ Tables.LEADERBOARDS + "." + Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = " + Tables.MARKS + "."
|
||||
+ AnalyticsContract.Mark.MARK_CHECKIN_DIGEST + ") ";
|
||||
String EVENTS_JOIN_LEADERBOARDS_JOIN_COMPETITORS = Tables.LEADERBOARDS + " INNER JOIN " + Tables.EVENTS
|
||||
|
||||
+153
@@ -0,0 +1,153 @@
|
||||
package com.sap.sailing.android.tracking.app.ui.activities;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.sap.sailing.android.shared.data.CheckinUrlInfo;
|
||||
import com.sap.sailing.android.shared.data.LeaderboardInfo;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.activities.AbstractBaseActivity;
|
||||
import com.sap.sailing.android.shared.util.NetworkHelper;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
import com.sap.sailing.android.tracking.app.ui.fragments.BuoyFragment;
|
||||
import com.sap.sailing.android.tracking.app.utils.AboutHelper;
|
||||
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
|
||||
import com.sap.sailing.android.tracking.app.utils.CheckoutHelper;
|
||||
import com.sap.sailing.android.tracking.app.utils.DatabaseHelper;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.EventInfo;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.MarkInfo;
|
||||
|
||||
public class BuoyActivity extends AbstractBaseActivity {
|
||||
|
||||
private static String TAG = BuoyActivity.class.getName();
|
||||
|
||||
public EventInfo event;
|
||||
public MarkInfo mark;
|
||||
public LeaderboardInfo leaderboard;
|
||||
public CheckinUrlInfo checkinUrl;
|
||||
private String checkinDigest;
|
||||
|
||||
private AppPreferences prefs;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
Intent intent = getIntent();
|
||||
checkinDigest = intent.getStringExtra(getString(R.string.checkin_digest));
|
||||
|
||||
prefs = new AppPreferences(this);
|
||||
checkinUrl = DatabaseHelper.getInstance().getCheckinUrl(this, checkinDigest);
|
||||
mark = DatabaseHelper.getInstance().getMarkInfo(this, checkinDigest);
|
||||
event = DatabaseHelper.getInstance().getEventInfo(this, checkinDigest);
|
||||
leaderboard = DatabaseHelper.getInstance().getLeaderboard(this, checkinDigest);
|
||||
|
||||
setContentView(R.layout.fragment_container);
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
if (toolbar != null) {
|
||||
setSupportActionBar(toolbar);
|
||||
}
|
||||
if (getSupportActionBar() != null) {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setHomeButtonEnabled(true);
|
||||
toolbar.setNavigationIcon(R.drawable.sap_logo_64dp);
|
||||
int sidePadding = (int) getResources().getDimension(R.dimen.toolbar_left_padding);
|
||||
toolbar.setPadding(sidePadding, 0, 0, 0);
|
||||
getSupportActionBar().setTitle(leaderboard.name);
|
||||
getSupportActionBar().setSubtitle(event.name);
|
||||
ColorDrawable backgroundDrawable = new ColorDrawable(getResources().getColor(R.color.toolbar_background));
|
||||
getSupportActionBar().setBackgroundDrawable(backgroundDrawable);
|
||||
}
|
||||
replaceFragment(R.id.content_frame, BuoyFragment.newInstance(mark.markName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
if (prefs != null && prefs.getTrackerIsTracking()) {
|
||||
String checkinDigest = prefs.getTrackerIsTrackingCheckinDigest();
|
||||
startTrackingActivity(checkinDigest);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getOptionsMenuResId() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = getMenuInflater();
|
||||
inflater.inflate(R.menu.buoy_menu, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.options_menu_settings:
|
||||
ExLog.i(this, TAG, "Clicked SETTINGS.");
|
||||
startActivity(new Intent(this, SettingsActivity.class));
|
||||
return true;
|
||||
case R.id.options_menu_checkout:
|
||||
ExLog.i(this, TAG, "Clicked CHECKOUT.");
|
||||
displayCheckoutConfirmationDialog();
|
||||
return true;
|
||||
case R.id.options_menu_info:
|
||||
AboutHelper.showInfoActivity(this);
|
||||
return true;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
public void startTrackingActivity(String checkinDigest) {
|
||||
Intent intent = new Intent(this, TrackingActivity.class);
|
||||
intent.putExtra(getString(R.string.tracking_activity_checkin_digest_parameter), checkinDigest);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
private void displayCheckoutConfirmationDialog() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle(R.string.warning);
|
||||
builder.setMessage(R.string.checkout_warning_message);
|
||||
builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
checkout();
|
||||
}
|
||||
});
|
||||
builder.setNegativeButton(R.string.no, null);
|
||||
builder.show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check out from regatta;
|
||||
*/
|
||||
public void checkout() {
|
||||
CheckoutHelper checkoutHelper = new CheckoutHelper();
|
||||
checkoutHelper.checkoutMark(this, leaderboard.name, event.server, mark.markId, new NetworkHelper.NetworkHelperSuccessListener() {
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(BuoyActivity.this, event.checkinDigest);
|
||||
dismissProgressDialog();
|
||||
finish();
|
||||
}
|
||||
}, new NetworkHelper.NetworkHelperFailureListener() {
|
||||
@Override
|
||||
public void performAction(NetworkHelper.NetworkHelperError e) {
|
||||
dismissProgressDialog();
|
||||
showErrorPopup(R.string.error,
|
||||
R.string.error_could_not_complete_operation_on_server_try_again);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package com.sap.sailing.android.tracking.app.ui.fragments;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.android.shared.util.ViewHelper;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
|
||||
public class BuoyFragment extends BaseFragment {
|
||||
|
||||
private static String EXTRA_MARK_NAME = "mark_name";
|
||||
|
||||
public static BuoyFragment newInstance(String markName) {
|
||||
BuoyFragment fragment = new BuoyFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EXTRA_MARK_NAME, markName);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_buoy, container, false);
|
||||
TextView markNameText = ViewHelper.get(view, R.id.buoy_Name);
|
||||
markNameText.setText(getArguments().getString(EXTRA_MARK_NAME));
|
||||
return view;
|
||||
}
|
||||
}
|
||||
+15
-7
@@ -39,6 +39,7 @@ import com.sap.sailing.android.tracking.app.BuildConfig;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
import com.sap.sailing.android.tracking.app.adapter.RegattaAdapter;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract;
|
||||
import com.sap.sailing.android.tracking.app.ui.activities.BuoyActivity;
|
||||
import com.sap.sailing.android.tracking.app.ui.activities.RegattaActivity;
|
||||
import com.sap.sailing.android.tracking.app.ui.activities.StartActivity;
|
||||
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
|
||||
@@ -170,7 +171,7 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
}
|
||||
HttpJsonPostRequest request = new HttpJsonPostRequest(getActivity(), new URL(checkinData.checkinURL), requestObject.toString());
|
||||
NetworkHelper.getInstance(getActivity())
|
||||
.executeHttpJsonRequestAsync(request, new CheckinListener(checkinData.checkinDigest), new CheckinErrorListener(checkinData.checkinDigest));
|
||||
.executeHttpJsonRequestAsync(request, new CheckinListener(checkinData.checkinDigest, checkinData.getCheckinType()), new CheckinErrorListener(checkinData.checkinDigest));
|
||||
} catch (JSONException|NullPointerException e) {
|
||||
ExLog.e(getActivity(), TAG, "Failed to generate checkin JSON: " + e.getMessage());
|
||||
displayAPIErrorRecommendRetry();
|
||||
@@ -227,8 +228,13 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
*
|
||||
* @param checkinDigest
|
||||
*/
|
||||
private void startRegatta(String checkinDigest) {
|
||||
Intent intent = new Intent(getActivity(), RegattaActivity.class);
|
||||
private void startRegatta(String checkinDigest, int type) {
|
||||
Intent intent = new Intent();
|
||||
if (type == CheckinUrlInfo.TYPE_COMPETITOR) {
|
||||
intent.setClass(getActivity(), RegattaActivity.class);
|
||||
} else if (type == CheckinUrlInfo.TYPE_MARK) {
|
||||
intent.setClass(getActivity(), BuoyActivity.class);
|
||||
}
|
||||
intent.putExtra(getString(R.string.checkin_digest), checkinDigest);
|
||||
getActivity().startActivity(intent);
|
||||
}
|
||||
@@ -343,7 +349,8 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
Cursor cursor = (Cursor) adapter.getItem(position - 1);
|
||||
|
||||
String checkinDigest = cursor.getString(cursor.getColumnIndex(AnalyticsContract.Event.EVENT_CHECKIN_DIGEST));
|
||||
startRegatta(checkinDigest);
|
||||
int type = cursor.getInt(cursor.getColumnIndex(AnalyticsContract.Checkin.CHECKIN_TYPE));
|
||||
startRegatta(checkinDigest, type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,17 +370,18 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
private class CheckinListener implements NetworkHelperSuccessListener {
|
||||
|
||||
public String checkinDigest;
|
||||
public int type;
|
||||
|
||||
public CheckinListener(String checkinDigest) {
|
||||
public CheckinListener(String checkinDigest, int type) {
|
||||
this.checkinDigest = checkinDigest;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
StartActivity startActivity = (StartActivity) getActivity();
|
||||
startActivity.dismissProgressDialog();
|
||||
// TODO: Start MarkActivity
|
||||
startRegatta(checkinDigest);
|
||||
startRegatta(checkinDigest, type);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -69,7 +69,7 @@ public class AppPreferences extends BaseAppPreferences {
|
||||
|
||||
public String getServerMarkPath(String leaderboardName, String markId) {
|
||||
String path = context.getString(R.string.preferece_server_mark_path);
|
||||
return path.replace("{leaderboard_name}", leaderboardName).replace("{markId}", markId);
|
||||
return path.replace("{leaderboardName}", leaderboardName).replace("{markId}", markId);
|
||||
}
|
||||
|
||||
public int getGPSFixInterval() {
|
||||
|
||||
Reference in new issue
Block a user