Basic buoy activity

This commit is contained in:
Bennet Brunsen committed 2016-07-07 17:01:50 +02:00
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>
@@ -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
@@ -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);
}
});
}
}
@@ -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;
}
}
@@ -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);
}
}
@@ -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() {