From 11577f5795606cbfa37e8962837ed5a76ae4fb2e Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Wed, 25 Mar 2015 12:30:24 +0100 Subject: [PATCH 01/18] Implements optional mark ping storage on mark request --- .../images/flags°af.png | Bin 604 -> 0 bytes .../app/ui/fragments/HomeFragment.java | 4 +- .../positioning/app/util/CheckinManager.java | 125 ++++++++++-------- .../positioning/app/util/DatabaseHelper.java | 10 +- .../buoy/positioning/app/util/PingHelper.java | 2 +- .../app/valueobjects/CheckinData.java | 1 + 6 files changed, 82 insertions(+), 60 deletions(-) delete mode 100644 java/com.sap.sailing.gwt.ui/images/flags°af.png diff --git a/java/com.sap.sailing.gwt.ui/images/flags°af.png b/java/com.sap.sailing.gwt.ui/images/flags°af.png deleted file mode 100644 index a4742e299f517aee16c248e40eccad39ac34c9e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;BzjP)&5HW|5#c7{r(N){s9YCi84$~U|{$Glm>AD0*K|^yLU}ZO+eP) ze;~;4`#0mCzs$dX{r~-&?f370zkUTM{{OB1_1E8DKmYz*JbN)f0I>i8Q1#1Kum1f0 z{pZggpt}FRe*ORX>;JEx|9}4c_w(m__W!pfKK=atLxM{ZXbC_7vHbh@@9*EgK-ECy zzkh)Y{?EYhFEQc&-#`EN9{7Lq7*OE*@9)2U|NQmmC(vO40VtezBLF}U2%?OI(TG)& zJC>!~;SYmN-)zb6gc(7A-^Q(#z0vHb9!CJ#T#ii{@&pjek8j`pfX)5|H00+GpnLvt za{MtfWBC4qk%R63j~{=2{QLgr`wyTb*amx2hce{;{QL3a|BhWh#6A5bKmf5of*%NgdVm^$Zuo!gI_LQd|G=96g51yWl0Agf71rLE? q3XWqq@&Lw?Iyk0*94-cc00RK~MQKxxUU$F%0000 marks = new ArrayList(); - for(int i = 0; i< markArray.length(); i++){ - JSONObject jsonMark = (JSONObject) markArray.get(i); - MarkInfo mark = new MarkInfo(); - mark.setCheckinDigest(checkinDigest); - mark.setClassName(jsonMark.getString("@class")); - mark.setName(jsonMark.getString("name")); - mark.setId(jsonMark.getString("id")); - mark.setType(jsonMark.getString("type")); - marks.add(mark); + List pings = new ArrayList(); + for (int i = 0; i < markArray.length(); i++) { + JSONObject jsonMark = (JSONObject) markArray.get(i); + MarkInfo mark = new MarkInfo(); + mark.setCheckinDigest(checkinDigest); + mark.setClassName(jsonMark.getString("@class")); + mark.setName(jsonMark.getString("name")); + mark.setId(jsonMark.getString("id")); + if (jsonMark.has("position")) { + if (!jsonMark.get("position").equals(null)) { + JSONObject positionJson = jsonMark.getJSONObject("position"); + MarkPingInfo ping = new MarkPingInfo(); + ping.setLattitude(positionJson.getString("latitude")); + ping.setLongitude(positionJson.getString("longitude")); + ping.setTimestamp(positionJson.getInt("timestamp")); + ping.setAccuracy(positionJson.getDouble("accuracy")); + ping.setMarkId(mark.getId()); + pings.add(ping); + } + } + mark.setType(jsonMark.getString("type")); + marks.add(mark); } urlData.marks = marks; + urlData.pings = pings; saveCheckinDataAndNotifyListeners(urlData, leaderboardName); } catch (JSONException e) { @@ -179,24 +193,25 @@ public class CheckinManager { displayAPIErrorRecommendRetry(); return; } - - } - }, new NetworkHelper.NetworkHelperFailureListener() { - - @Override + + } + }, new NetworkHelper.NetworkHelperFailureListener() { + + @Override public void performAction(NetworkHelper.NetworkHelperError e) { ExLog.e(activity, TAG, "Failed to get marks from API: " + e.getMessage()); activity.dismissProgressDialog(); displayAPIErrorRecommendRetry(); } - }); - } + }); + } private void saveCheckinDataAndNotifyListeners(URLData urlData, String leaderboardName) { CheckinData data = new CheckinData(); data.serverWithPort = urlData.hostWithPort; data.leaderboardName = leaderboardName; data.marks = urlData.marks; + data.pings = urlData.pings; data.deviceUid = urlData.deviceUuid .getStringRepresentation(); data.uriString = urlData.uriStr; @@ -223,12 +238,12 @@ public class CheckinManager { } } - public void setCheckinData(AbstractCheckinData data){ + public void setCheckinData(AbstractCheckinData data) { checkinData = data; activity.onCheckinDataAvailable(getCheckinData()); } - public AbstractCheckinData getCheckinData(){ + public AbstractCheckinData getCheckinData() { return checkinData; } @@ -251,44 +266,44 @@ public class CheckinManager { alert.show(); setCheckinData(null); } - - private String generateCheckindigest(String url) - { - String checkinDigest = ""; - try { - MessageDigest md = MessageDigest.getInstance("SHA-256"); - md.update(url.getBytes("UTF-8")); - byte[] digest = md.digest(); - StringBuffer buf = new StringBuffer(); - for (byte byt : digest) { - buf.append(Integer.toString((byt & 0xff) + 0x100, 16).substring(1)); - checkinDigest = buf.toString(); - } - } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return checkinDigest; + + private String generateCheckindigest(String url) { + String checkinDigest = ""; + try { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + md.update(url.getBytes("UTF-8")); + byte[] digest = md.digest(); + StringBuffer buf = new StringBuffer(); + for (byte byt : digest) { + buf.append(Integer.toString((byt & 0xff) + 0x100, 16).substring(1)); + checkinDigest = buf.toString(); + } + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return checkinDigest; } - public interface CheckinDataHandler{ + public interface CheckinDataHandler { } - private class URLData{ + private class URLData { public String uriStr; public String server; public int port; public String hostWithPort; public List marks; + public List pings; public String leaderboardName; public DeviceIdentifier deviceUuid; public String getMarkUrl; public String getLeaderboardUrl; - public URLData(){ + public URLData() { } } diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java index e4c20040c8a..9b69faed7dd 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java @@ -150,7 +150,7 @@ public class DatabaseHelper { * @throws RemoteException */ public void storeCheckinRow(Context context, List markList, - LeaderboardInfo leaderboard, CheckinUrlInfo checkinURL) + LeaderboardInfo leaderboard, CheckinUrlInfo checkinURL, List pings) throws GeneralDatabaseHelperException { // inserting leaderboard first @@ -179,6 +179,10 @@ public class DatabaseHelper { opList.add(ContentProviderOperation.newInsert(Mark.CONTENT_URI).withValues(cmv).build()); } + for(MarkPingInfo ping: pings){ + storeMarkPing(context, ping); + } + // checkin url ContentValues ccuv = new ContentValues(); @@ -199,12 +203,12 @@ public class DatabaseHelper { } - public void storeMarkPing(Context context, MarkInfo mark, MarkPingInfo markPing) throws GeneralDatabaseHelperException{ + public void storeMarkPing(Context context, MarkPingInfo markPing) throws GeneralDatabaseHelperException{ ContentResolver cr = context.getContentResolver(); ArrayList opList = new ArrayList(); ContentValues mpcv = new ContentValues(); - mpcv.put(MarkPing.MARK_ID, mark.getId()); + mpcv.put(MarkPing.MARK_ID, markPing.getMarkId()); mpcv.put(MarkPing.MARK_PING_LATITUDE, markPing.getLattitude()); mpcv.put(MarkPing.MARK_PING_LONGITUDE, markPing.getLongitude()); mpcv.put(MarkPing.MARK_PING_ACCURACY, markPing.getAccuracy()); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java index ce0a535536d..952a8f3c91c 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java @@ -79,6 +79,6 @@ public class PingHelper { pingInfo.setLongitude("" + location.getLongitude()); pingInfo.setAccuracy(location.getAccuracy()); pingInfo.setTimestamp((int) location.getTime()); - DatabaseHelper.getInstance().storeMarkPing(context, mark, pingInfo); + DatabaseHelper.getInstance().storeMarkPing(context, pingInfo); } } diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/CheckinData.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/CheckinData.java index a13298b293b..e810ef027d6 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/CheckinData.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/CheckinData.java @@ -16,6 +16,7 @@ public class CheckinData extends AbstractCheckinData{ public String checkinDigest; public String serverWithPort; public List marks; + public List pings; public void setCheckinDigestFromString(String checkinString) throws UnsupportedEncodingException, NoSuchAlgorithmException { From bb8533dfc6e35e877a13341c9338f8facd395957 Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Thu, 26 Mar 2015 12:31:04 +0100 Subject: [PATCH 02/18] Bugfixes, layout improvements, initial code for map --- .../res/layout/fragment_home.xml | 2 +- .../res/values/colors.xml | 1 + .../AndroidManifest.xml | 38 ++- .../layout/fragment_buoy_postion_detail.xml | 76 ++--- .../layout/fragment_buoy_postion_overview.xml | 4 +- .../res/layout/mark_listview_row.xml | 4 +- .../res/values-de/strings.xml | 4 +- .../positioning/app/adapter/MarkAdapter.java | 2 +- .../ui/activities/PositioningActivity.java | 6 +- .../app/ui/activities/RegattaActivity.java | 1 + .../app/ui/fragments/BuoyFragment.java | 274 ++++++++++-------- 11 files changed, 235 insertions(+), 177 deletions(-) diff --git a/mobile/com.sap.sailing.android.shared/res/layout/fragment_home.xml b/mobile/com.sap.sailing.android.shared/res/layout/fragment_home.xml index aa16f58a387..558008481cd 100644 --- a/mobile/com.sap.sailing.android.shared/res/layout/fragment_home.xml +++ b/mobile/com.sap.sailing.android.shared/res/layout/fragment_home.xml @@ -19,7 +19,7 @@ android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" - android:background="@+color/black_transparent" + android:background="@color/black_transparent" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"> diff --git a/mobile/com.sap.sailing.android.shared/res/values/colors.xml b/mobile/com.sap.sailing.android.shared/res/values/colors.xml index 3aa12e453e6..1decd2548a9 100644 --- a/mobile/com.sap.sailing.android.shared/res/values/colors.xml +++ b/mobile/com.sap.sailing.android.shared/res/values/colors.xml @@ -37,6 +37,7 @@ #000000 #55000000 + #D8000000 #FFFFFF #CCFFFFFF #8AB54E diff --git a/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml b/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml index 9d08f21e615..1cf5d48f471 100644 --- a/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml +++ b/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml @@ -1,23 +1,29 @@ + android:versionName="1.0"> - - + + - - + + + + + android:theme="@style/AppTheme"> - + android:value="AIzaSyDH-Dwy5yFlyBa2-VUgiZ3qGGUO8M_0MPY" /> + + android:screenOrientation="unspecified"> @@ -60,22 +66,22 @@ android:scheme="http" /> - + - + - + - + android:screenOrientation="portrait"> + - + + android:exported="false"> diff --git a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml index 370387bcdf1..9860fded6ed 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml @@ -5,29 +5,39 @@ android:background="@color/black" android:orientation="vertical" android:paddingLeft="0dp" - android:paddingRight="0dp" > + android:paddingRight="0dp"> - - - + android:layout_weight="1" + android:background="@color/white"> + + + + + + + @@ -35,17 +45,17 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:paddingBottom="15dp" + android:paddingBottom="10dp" android:paddingLeft="10dp" android:paddingRight="7dp" - android:paddingTop="15dp" > + android:paddingTop="10dp"> + android:textSize="20sp" /> @@ -60,7 +70,7 @@ android:layout_height="wrap_content" android:text="" android:textColor="@color/white" - android:textSize="16sp" + android:textSize="20sp" android:textStyle="bold" /> @@ -70,17 +80,17 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:paddingBottom="15dp" + android:paddingBottom="10dp" android:paddingLeft="10dp" android:paddingRight="7dp" - android:paddingTop="15dp" > + android:paddingTop="10dp"> + android:textSize="20sp" /> @@ -95,7 +105,7 @@ android:layout_height="wrap_content" android:text="" android:textColor="@color/white" - android:textSize="16sp" /> + android:textSize="20sp" /> @@ -104,17 +114,17 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:paddingBottom="15dp" + android:paddingBottom="10dp" android:paddingLeft="10dp" android:paddingRight="7dp" - android:paddingTop="15dp" > + android:paddingTop="10dp"> + android:textSize="20sp" /> @@ -129,7 +139,7 @@ android:layout_height="wrap_content" android:text="" android:textColor="@color/white" - android:textSize="16sp" /> + android:textSize="20sp" /> @@ -137,7 +147,7 @@ + android:textSize="20sp" /> + android:textSize="20sp" /> diff --git a/mobile/com.sap.sailing.buoy.positioning/res/layout/mark_listview_row.xml b/mobile/com.sap.sailing.buoy.positioning/res/layout/mark_listview_row.xml index 2dd18afc4dc..f69a4a29c01 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/layout/mark_listview_row.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/layout/mark_listview_row.xml @@ -25,6 +25,7 @@ android:layout_marginTop="15dp" android:paddingLeft="15dp" android:paddingRight="15dp" + android:textSize="20sp" android:singleLine="true" android:textColor="@color/white" /> @@ -35,10 +36,11 @@ android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/mark_name" - android:layout_marginTop="10dp" + android:layout_marginTop="2dp" android:layout_marginBottom="15dp" android:paddingLeft="15dp" android:paddingRight="15dp" + android:textSize="14sp" android:singleLine="true" android:textColor="@color/white" /> diff --git a/mobile/com.sap.sailing.buoy.positioning/res/values-de/strings.xml b/mobile/com.sap.sailing.buoy.positioning/res/values-de/strings.xml index 6a4db05f13b..57b00348105 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/values-de/strings.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/values-de/strings.xml @@ -9,7 +9,7 @@ Position setzen Position zurücksetzen Empfangen der Markierungen.. - gesetzt - nicht gesetzt + Gesetzt + Nicht gesetzt \ No newline at end of file diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/adapter/MarkAdapter.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/adapter/MarkAdapter.java index 969bcdd83f2..f96df20d088 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/adapter/MarkAdapter.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/adapter/MarkAdapter.java @@ -34,7 +34,7 @@ public class MarkAdapter extends ResourceCursorAdapter { } else{ setText = context.getString(R.string.set); - String accuracy = " (" + markPings.get(0).getAccuracy() + ")"; + String accuracy = " (~ " + markPings.get(0).getAccuracy() + ")"; setText += accuracy; } markName.setText(name); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java index 18ff2e3a29f..057a6f77892 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java @@ -31,11 +31,11 @@ public class PositioningActivity extends BaseActivity implements pingListener { getString(R.string.checkin_digest)); List marks = DatabaseHelper.getInstance().getMarks(this, checkinDigest); - leaderBoard = DatabaseHelper.getInstance().getLeaderboard(this, - checkinDigest); + setLeaderBoard(DatabaseHelper.getInstance().getLeaderboard(this, + checkinDigest)); for (MarkInfo mark : marks) { if (mark.getId().equals(markerID)) { - markInfo = mark; + setMarkInfo(mark); break; } } diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java index 5df88ebefa6..dbd0b4fdd81 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java @@ -52,6 +52,7 @@ public class RegattaActivity extends AbstractRegattaActivity{ getSupportActionBar().setHomeButtonEnabled(true); toolbar.setNavigationIcon(R.drawable.sap_logo_64_sq); toolbar.setPadding(20, 0, 0, 0); + toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); getSupportActionBar().setTitle(leaderboardName); } RegattaFragment regattaFragment = new RegattaFragment(); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java index fdeb9303471..ee453d522ac 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java @@ -12,7 +12,11 @@ import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Toast; -import com.google.android.gms.maps.MapFragment; +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.MapView; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.MarkerOptions; import com.sap.sailing.android.buoy.positioning.app.R; import com.sap.sailing.android.buoy.positioning.app.ui.activities.PositioningActivity; import com.sap.sailing.android.buoy.positioning.app.util.DatabaseHelper.GeneralDatabaseHelperException; @@ -25,140 +29,174 @@ import com.sap.sailing.android.shared.ui.customviews.OpenSansTextView; import com.sap.sailing.android.ui.fragments.BaseFragment; public class BuoyFragment extends BaseFragment implements LocationListener { - private OpenSansTextView markHeaderTextView; - private OpenSansTextView lattitudeTextView; - private OpenSansTextView longitudeTextView; - private OpenSansTextView accuracyTextView; - private OpenSansButton setPositionButton; - private OpenSansButton resetPostionButton; - private MapFragment mapFragment; - private Location lastKnownLocation; - private LocationManager locationManager; - private String locationProvider; - private pingListener pingListener; + private OpenSansTextView markHeaderTextView; + private OpenSansTextView latitudeTextView; + private OpenSansTextView longitudeTextView; + private OpenSansTextView accuracyTextView; + private OpenSansButton setPositionButton; + private OpenSansButton resetPositionButton; + private MapView mapView; + private Location lastKnownLocation; + private LatLng savedPosition; + private LocationManager locationManager; + private String locationProvider; + private pingListener pingListener; - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - super.onCreateView(inflater, container, savedInstanceState); - View view = inflater.inflate(R.layout.fragment_buoy_postion_detail, - container, false); + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + View view = inflater.inflate(R.layout.fragment_buoy_postion_detail, + container, false); - mapFragment = (MapFragment) getActivity().getFragmentManager() - .findFragmentById(R.id.map); + mapView = (MapView) view.findViewById(R.id.map); - markHeaderTextView = (OpenSansTextView) view - .findViewById(R.id.mark_header); - lattitudeTextView = (OpenSansTextView) view - .findViewById(R.id.marker_gps_latitude); - longitudeTextView = (OpenSansTextView) view - .findViewById(R.id.marker_gps_longitude); - accuracyTextView = (OpenSansTextView) view - .findViewById(R.id.marker_gps_accuracy); - Clicklistener clicklistener = new Clicklistener(); + markHeaderTextView = (OpenSansTextView) view + .findViewById(R.id.mark_header); + latitudeTextView = (OpenSansTextView) view + .findViewById(R.id.marker_gps_latitude); + longitudeTextView = (OpenSansTextView) view + .findViewById(R.id.marker_gps_longitude); + accuracyTextView = (OpenSansTextView) view + .findViewById(R.id.marker_gps_accuracy); + ClickListener clickListener = new ClickListener(); - setPositionButton = (OpenSansButton) view - .findViewById(R.id.marker_set_position_button); - setPositionButton.setOnClickListener(clicklistener); + setPositionButton = (OpenSansButton) view + .findViewById(R.id.marker_set_position_button); + setPositionButton.setOnClickListener(clickListener); - resetPostionButton = (OpenSansButton) view - .findViewById(R.id.marker_reset_position_button); - resetPostionButton.setOnClickListener(clicklistener); - resetPostionButton.setVisibility(View.GONE); - return view; - } + resetPositionButton = (OpenSansButton) view + .findViewById(R.id.marker_reset_position_button); + resetPositionButton.setOnClickListener(clickListener); + resetPositionButton.setVisibility(View.GONE); + return view; + } - @Override - public void onResume() { - super.onResume(); - initLocationProvider(); - MarkInfo mark = ((PositioningActivity) getActivity()).getMarkInfo(); - if (mark != null) { - markHeaderTextView.setText(mark.getName()); - setUpPingUI(); - } - } + @Override + public void onResume() { + super.onResume(); + initLocationProvider(); + lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + MarkInfo mark = ((PositioningActivity) getActivity()).getMarkInfo(); + if (mark != null) { + markHeaderTextView.setText(mark.getName()); + setUpPingUI(); + //setUpMap(); + } + if(lastKnownLocation != null) { + //mapView.getMap().animateCamera(CameraUpdateFactory.newLatLng(new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()))); + } + } - public void setUpPingUI() { - MarkPingInfo markPing = ((PositioningActivity) getActivity()) - .getMarkPing(); - if (markPing != null) { - lattitudeTextView.setText(markPing.getLattitude()); - longitudeTextView.setText(markPing.getLongitude()); - accuracyTextView.setText("~" + markPing.getAccuracy()); - } - } + public void setUpPingUI() { + MarkPingInfo markPing = ((PositioningActivity) getActivity()) + .getMarkPing(); + if (markPing != null) { + double savedLatitude = Double.parseDouble(markPing.getLattitude()); + double savedLongitude = Double.parseDouble(markPing.getLongitude()); + savedPosition = new LatLng(savedLatitude, savedLongitude); + latitudeTextView.setText(markPing.getLattitude()); + longitudeTextView.setText(markPing.getLongitude()); + accuracyTextView.setText("~" + markPing.getAccuracy()); + } + } - @Override - public void onLocationChanged(Location location) { - lastKnownLocation = location; - } + @Override + public void onLocationChanged(Location location) { + if(getActivity() instanceof PositioningActivity) { + lastKnownLocation = location; + //setUpMap(); + } + } - @Override - public void onStatusChanged(String provider, int status, Bundle extras) { - initLocationProvider(); - } + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + if(getActivity() instanceof PositioningActivity) { + initLocationProvider(); + } + } - @Override - public void onProviderEnabled(String provider) { - initLocationProvider(); - } + @Override + public void onProviderEnabled(String provider) { + if(getActivity() instanceof PositioningActivity) { + initLocationProvider(); + } + } - @Override - public void onProviderDisabled(String provider) { - initLocationProvider(); - } + @Override + public void onProviderDisabled(String provider) { + if(getActivity() instanceof PositioningActivity) { + initLocationProvider(); + } + } - private void initLocationProvider() { - locationManager = (LocationManager) getActivity().getSystemService( - Context.LOCATION_SERVICE); - locationManager.removeUpdates(this); - locationProvider = locationManager - .getBestProvider(new Criteria(), true); - locationManager.requestLocationUpdates(locationProvider, 60000, 10, - this); - } + private void initLocationProvider() { + locationManager = (LocationManager) getActivity().getSystemService( + Context.LOCATION_SERVICE); + locationManager.removeUpdates(this); + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f, this); + } - public void setPingListener(pingListener listener) { - pingListener = listener; - } + public void setUpMap() { + GoogleMap map = mapView.getMap(); + map.clear(); + if (savedPosition != null) { + MarkerOptions savedLocactionOptions = new MarkerOptions(); + savedLocactionOptions.position(savedPosition); + // mySelfOptions.visible(true); + map.addMarker(savedLocactionOptions); + } + if(lastKnownLocation != null) + { + MarkerOptions mySelfOptions = new MarkerOptions(); + LatLng lastKnownLatLng = new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()); + mySelfOptions.position(lastKnownLatLng); + // mySelfOptions.visible(true); + map.addMarker(mySelfOptions); + } - public interface pingListener { - public void updatePing(); - } + } - private class Clicklistener implements OnClickListener { + public void setPingListener(pingListener listener) { + pingListener = listener; + } - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.marker_set_position_button) { - PingHelper helper = new PingHelper(); - try { - if (lastKnownLocation != null) { - MarkInfo mark = ((PositioningActivity) getActivity()) - .getMarkInfo(); - LeaderboardInfo leaderboard = ((PositioningActivity) getActivity()) - .getLeaderBoard(); - helper.storePingInDatabase(getActivity(), - lastKnownLocation, mark); - helper.sendPingToServer(getActivity(), - lastKnownLocation, leaderboard, mark); - pingListener.updatePing(); - setUpPingUI(); - } - else{ - Toast.makeText(getActivity(), "Location is not available yet", Toast.LENGTH_LONG).show(); - } - } catch (GeneralDatabaseHelperException e) { - e.printStackTrace(); - } - } else if (id == R.id.marker_reset_position_button) { - // Reset position - } + public interface pingListener { + public void updatePing(); + } - } + private class ClickListener implements OnClickListener { - } + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.marker_set_position_button) { + PingHelper helper = new PingHelper(); + try { + if (lastKnownLocation != null) { + MarkInfo mark = ((PositioningActivity) getActivity()) + .getMarkInfo(); + LeaderboardInfo leaderBoard = ((PositioningActivity) getActivity()) + .getLeaderBoard(); + helper.storePingInDatabase(getActivity(), + lastKnownLocation, mark); + helper.sendPingToServer(getActivity(), + lastKnownLocation, leaderBoard, mark); + savedPosition = new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()); + pingListener.updatePing(); + setUpPingUI(); + } else { + Toast.makeText(getActivity(), "Location is not available yet", Toast.LENGTH_LONG).show(); + } + } catch (GeneralDatabaseHelperException e) { + e.printStackTrace(); + } + } else if (id == R.id.marker_reset_position_button) { + // Reset position + } + + } + + } } From 25f9c3b5654216e829dd4c02e24c18713777197b Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Thu, 26 Mar 2015 15:04:00 +0100 Subject: [PATCH 03/18] Bugfix: map no longer invisible --- .../layout/fragment_buoy_postion_detail.xml | 12 +++++----- .../app/ui/fragments/BuoyFragment.java | 24 +++++++++++-------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml index 9860fded6ed..7a8ae4cb052 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml @@ -13,6 +13,12 @@ android:layout_weight="1" android:background="@color/white"> + + - - diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java index ee453d522ac..5abb6938fe3 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java @@ -14,6 +14,7 @@ import android.widget.Toast; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; @@ -35,11 +36,10 @@ public class BuoyFragment extends BaseFragment implements LocationListener { private OpenSansTextView accuracyTextView; private OpenSansButton setPositionButton; private OpenSansButton resetPositionButton; - private MapView mapView; + private MapFragment mapView; private Location lastKnownLocation; private LatLng savedPosition; private LocationManager locationManager; - private String locationProvider; private pingListener pingListener; @Override @@ -49,8 +49,6 @@ public class BuoyFragment extends BaseFragment implements LocationListener { View view = inflater.inflate(R.layout.fragment_buoy_postion_detail, container, false); - mapView = (MapView) view.findViewById(R.id.map); - markHeaderTextView = (OpenSansTextView) view .findViewById(R.id.mark_header); latitudeTextView = (OpenSansTextView) view @@ -81,10 +79,11 @@ public class BuoyFragment extends BaseFragment implements LocationListener { if (mark != null) { markHeaderTextView.setText(mark.getName()); setUpPingUI(); - //setUpMap(); + setUpMap(); } - if(lastKnownLocation != null) { - //mapView.getMap().animateCamera(CameraUpdateFactory.newLatLng(new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()))); + if(savedPosition != null) { + mapView.getMap().animateCamera(CameraUpdateFactory.newLatLng(savedPosition)); + mapView.getMap().animateCamera(CameraUpdateFactory.zoomTo(10)); } } @@ -105,7 +104,7 @@ public class BuoyFragment extends BaseFragment implements LocationListener { public void onLocationChanged(Location location) { if(getActivity() instanceof PositioningActivity) { lastKnownLocation = location; - //setUpMap(); + setUpMap(); } } @@ -138,12 +137,17 @@ public class BuoyFragment extends BaseFragment implements LocationListener { } public void setUpMap() { + mapView = (MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.map); GoogleMap map = mapView.getMap(); map.clear(); + map.setMapType(GoogleMap.MAP_TYPE_TERRAIN); + map.getUiSettings().setZoomControlsEnabled(true); + map.setMyLocationEnabled(true); + map.setPadding(0, 50, 0, 0); if (savedPosition != null) { MarkerOptions savedLocactionOptions = new MarkerOptions(); savedLocactionOptions.position(savedPosition); - // mySelfOptions.visible(true); + savedLocactionOptions.visible(true); map.addMarker(savedLocactionOptions); } if(lastKnownLocation != null) @@ -151,7 +155,7 @@ public class BuoyFragment extends BaseFragment implements LocationListener { MarkerOptions mySelfOptions = new MarkerOptions(); LatLng lastKnownLatLng = new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()); mySelfOptions.position(lastKnownLatLng); - // mySelfOptions.visible(true); + mySelfOptions.visible(true); map.addMarker(mySelfOptions); } From 3f58ac9dbabc09c37959d70fb9d3de35e0bbf44b Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Thu, 26 Mar 2015 16:30:08 +0100 Subject: [PATCH 04/18] Bugfixes: Map zooms to current position now. Maptype Satellite in use now. --- .../app/ui/fragments/BuoyFragment.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java index 5abb6938fe3..9c3391301bc 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java @@ -1,7 +1,6 @@ package com.sap.sailing.android.buoy.positioning.app.ui.fragments; import android.content.Context; -import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; @@ -15,8 +14,8 @@ import android.widget.Toast; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; -import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.LatLngBounds; import com.google.android.gms.maps.model.MarkerOptions; import com.sap.sailing.android.buoy.positioning.app.R; import com.sap.sailing.android.buoy.positioning.app.ui.activities.PositioningActivity; @@ -36,7 +35,7 @@ public class BuoyFragment extends BaseFragment implements LocationListener { private OpenSansTextView accuracyTextView; private OpenSansButton setPositionButton; private OpenSansButton resetPositionButton; - private MapFragment mapView; + private MapFragment mapFragment; private Location lastKnownLocation; private LatLng savedPosition; private LocationManager locationManager; @@ -81,9 +80,9 @@ public class BuoyFragment extends BaseFragment implements LocationListener { setUpPingUI(); setUpMap(); } - if(savedPosition != null) { - mapView.getMap().animateCamera(CameraUpdateFactory.newLatLng(savedPosition)); - mapView.getMap().animateCamera(CameraUpdateFactory.zoomTo(10)); + if(lastKnownLocation != null) { + LatLng lastKnownLatLng = new LatLng(lastKnownLocation.getLatitude(),lastKnownLocation.getLongitude()); + mapFragment.getMap().animateCamera(CameraUpdateFactory.newLatLngZoom(lastKnownLatLng,15)); } } @@ -137,10 +136,10 @@ public class BuoyFragment extends BaseFragment implements LocationListener { } public void setUpMap() { - mapView = (MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.map); - GoogleMap map = mapView.getMap(); + mapFragment = (MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.map); + GoogleMap map = mapFragment.getMap(); map.clear(); - map.setMapType(GoogleMap.MAP_TYPE_TERRAIN); + map.setMapType(GoogleMap.MAP_TYPE_SATELLITE); map.getUiSettings().setZoomControlsEnabled(true); map.setMyLocationEnabled(true); map.setPadding(0, 50, 0, 0); From 2e7551e38ba38a43cdf50e3cb1db353cd4a19f7f Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Thu, 26 Mar 2015 16:40:51 +0100 Subject: [PATCH 05/18] Fixed build error. Removed useless uses library entry in manifest. --- mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml b/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml index 1cf5d48f471..0acb7069680 100644 --- a/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml +++ b/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml @@ -21,10 +21,6 @@ android:glEsVersion="0x00020000" android:required="true" /> - - Date: Thu, 26 Mar 2015 17:22:44 +0100 Subject: [PATCH 06/18] Fixed missing lines in "sap yellow" --- .../res/layout/fragment_buoy_postion_detail.xml | 5 +++++ .../res/layout/fragment_buoy_postion_overview.xml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml index 7a8ae4cb052..96ec0033064 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml @@ -7,6 +7,11 @@ android:paddingLeft="0dp" android:paddingRight="0dp"> + + + + Date: Fri, 27 Mar 2015 09:24:29 +0100 Subject: [PATCH 07/18] Improved battery life due to unsubscription of location feed if position activity is not in focus Added onPause method to BuoyFragment, which unsubscribes location feed. --- .../buoy/positioning/app/ui/fragments/BuoyFragment.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java index 9c3391301bc..7d587215978 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java @@ -86,6 +86,13 @@ public class BuoyFragment extends BaseFragment implements LocationListener { } } + @Override + public void onPause() { + super.onPause(); + // Unsubscribe location updates for power saving + locationManager.removeUpdates(this); + } + public void setUpPingUI() { MarkPingInfo markPing = ((PositioningActivity) getActivity()) .getMarkPing(); From 2bb522cee5409927e79c2a20f72cf4186e381a13 Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Fri, 27 Mar 2015 09:39:21 +0100 Subject: [PATCH 08/18] Removed landscape mode for all activities. Fixed padding for yellow line in regatta activity. --- .../AndroidManifest.xml | 4 +- .../layout/fragment_buoy_postion_overview.xml | 56 ++++++++++--------- 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml b/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml index 0acb7069680..0ec6eec9dbd 100644 --- a/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml +++ b/mobile/com.sap.sailing.buoy.positioning/AndroidManifest.xml @@ -39,7 +39,7 @@ + android:screenOrientation="portrait"> @@ -65,7 +65,7 @@ + android:screenOrientation="portrait"> diff --git a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_overview.xml b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_overview.xml index dde12307695..2deb136e39b 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_overview.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_overview.xml @@ -2,35 +2,41 @@ + android:orientation="vertical"> - - - - - - - - - \ No newline at end of file + android:layout_height="match_parent" + android:background="@color/black_transparent" + android:orientation="vertical" + android:paddingLeft="10dp" + android:paddingRight="10dp"> + + + + + + + + + + + From 3b92d17106ba042dd6915baab994fdaa3ec342fe Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Fri, 27 Mar 2015 12:24:26 +0100 Subject: [PATCH 09/18] UI improvements --- .../res/layout/fragment_container.xml | 4 +- .../res/layout/fragment_home.xml | 34 ++++++++------- .../res/layout/ragatta_listview_row.xml | 8 ++-- .../res/layout/regatta_listview_header.xml | 4 +- .../ui/customviews/OpenSansToolbar.java | 16 +++++++ .../layout/fragment_buoy_postion_detail.xml | 43 +++++++++++-------- .../layout/fragment_buoy_postion_overview.xml | 22 +++++----- .../res/layout/mark_listview_row.xml | 12 +++--- .../res/menu/empty_menu.xml | 4 ++ .../app/ui/activities/BaseActivity.java | 8 ++-- .../ui/activities/PositioningActivity.java | 28 +++++++++++- .../app/ui/activities/RegattaActivity.java | 36 ++++++++++++---- .../app/ui/activities/StartActivity.java | 34 ++++++++++++--- 13 files changed, 177 insertions(+), 76 deletions(-) create mode 100644 mobile/com.sap.sailing.buoy.positioning/res/menu/empty_menu.xml diff --git a/mobile/com.sap.sailing.android.shared/res/layout/fragment_container.xml b/mobile/com.sap.sailing.android.shared/res/layout/fragment_container.xml index bf374a68b02..0501147ba99 100644 --- a/mobile/com.sap.sailing.android.shared/res/layout/fragment_container.xml +++ b/mobile/com.sap.sailing.android.shared/res/layout/fragment_container.xml @@ -18,7 +18,7 @@ android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" + android:layout_gravity="center|start" android:lines="1" android:singleLine="true" android:textSize="16sp"/> @@ -27,7 +27,7 @@ android:id="@+id/toolbar_subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" + android:layout_gravity="center|start" android:lines="1" android:singleLine="true" android:textSize="12sp" /> diff --git a/mobile/com.sap.sailing.android.shared/res/layout/fragment_home.xml b/mobile/com.sap.sailing.android.shared/res/layout/fragment_home.xml index 558008481cd..d0182c9b70d 100644 --- a/mobile/com.sap.sailing.android.shared/res/layout/fragment_home.xml +++ b/mobile/com.sap.sailing.android.shared/res/layout/fragment_home.xml @@ -2,7 +2,7 @@ + android:layout_height="match_parent"> - + + android:layout_alignParentStart="true" + android:background="@color/black_transparent"> - + android:textSize="18sp" + android:textStyle="bold" /> + + android:textSize="18sp" /> + android:dividerHeight="1dp"> diff --git a/mobile/com.sap.sailing.android.shared/res/layout/ragatta_listview_row.xml b/mobile/com.sap.sailing.android.shared/res/layout/ragatta_listview_row.xml index 5ab7a7d5c20..5796aed5cb6 100644 --- a/mobile/com.sap.sailing.android.shared/res/layout/ragatta_listview_row.xml +++ b/mobile/com.sap.sailing.android.shared/res/layout/ragatta_listview_row.xml @@ -18,8 +18,8 @@ android:src="@drawable/yellow_arrow_right" android:layout_marginTop="13dp" android:layout_marginBottom="10dp" - android:layout_marginRight="10dp" - android:layout_marginEnd="10dp" + android:layout_marginRight="14dp" + android:layout_marginEnd="14dp" android:textColor="@color/white" /> diff --git a/mobile/com.sap.sailing.android.shared/res/layout/regatta_listview_header.xml b/mobile/com.sap.sailing.android.shared/res/layout/regatta_listview_header.xml index f43cf46f706..c875409096a 100644 --- a/mobile/com.sap.sailing.android.shared/res/layout/regatta_listview_header.xml +++ b/mobile/com.sap.sailing.android.shared/res/layout/regatta_listview_header.xml @@ -17,8 +17,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/top_bar" - android:padding="14dp" - android:textSize="18sp" + android:padding="16dp" + android:textSize="16sp" android:background="@color/colorPrimary" android:textColor="@color/white" android:text="@string/your_regattas" /> diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/customviews/OpenSansToolbar.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/customviews/OpenSansToolbar.java index 237494781fc..50152c1e8a1 100644 --- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/customviews/OpenSansToolbar.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/customviews/OpenSansToolbar.java @@ -3,6 +3,9 @@ package com.sap.sailing.android.shared.ui.customviews; import android.content.Context; import android.support.v7.widget.Toolbar; import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.View; import android.widget.TextView; import com.sap.sailing.android.shared.R; @@ -44,4 +47,17 @@ public class OpenSansToolbar extends Toolbar { TextView subtitleTextView = (TextView)findViewById(R.id.toolbar_subtitle); subtitleTextView.setText(arg0); } + + public void hideSubtitle(){ + TextView titleTextView = (TextView)findViewById(R.id.toolbar_title); + titleTextView.setPadding(0,6,0,0); + TextView subtitleTextView = (TextView)findViewById(R.id.toolbar_subtitle); + subtitleTextView.setVisibility(View.GONE); + } + + public void setTitleSize(float size){ + TextView titleTextView = (TextView)findViewById(R.id.toolbar_title); + titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, size); + titleTextView.setTextColor(getResources().getColor(R.color.white)); + } } diff --git a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml index 96ec0033064..7e86b122e3e 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml @@ -36,13 +36,18 @@ android:background="@color/black_slightly_transparent" android:gravity="left" android:paddingBottom="7dp" - android:paddingLeft="10dp" + android:paddingLeft="16dp" android:paddingTop="7dp" android:textColor="@color/white" android:textSize="14sp" /> + + @@ -50,10 +55,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:paddingBottom="10dp" - android:paddingLeft="10dp" - android:paddingRight="7dp" - android:paddingTop="10dp"> + android:paddingBottom="12dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:paddingTop="12dp"> + android:paddingBottom="12dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:paddingTop="12dp"> + android:paddingBottom="12dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" + android:paddingTop="12dp"> \ No newline at end of file diff --git a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_overview.xml b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_overview.xml index 2deb136e39b..b4654a2aa3f 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_overview.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_overview.xml @@ -2,6 +2,7 @@ + android:paddingLeft="16dp" + android:paddingRight="16dp"> - - - + + + + diff --git a/mobile/com.sap.sailing.buoy.positioning/res/layout/mark_listview_row.xml b/mobile/com.sap.sailing.buoy.positioning/res/layout/mark_listview_row.xml index f69a4a29c01..bc45739f7d5 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/layout/mark_listview_row.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/layout/mark_listview_row.xml @@ -9,8 +9,8 @@ android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_marginBottom="10dp" - android:layout_marginEnd="10dp" - android:layout_marginRight="10dp" + android:layout_marginEnd="14dp" + android:layout_marginRight="14dp" android:layout_centerVertical="true" android:contentDescription="@string/empty" android:src="@drawable/yellow_arrow_right" @@ -23,8 +23,8 @@ android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="15dp" - android:paddingLeft="15dp" - android:paddingRight="15dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" android:textSize="20sp" android:singleLine="true" android:textColor="@color/white" /> @@ -38,8 +38,8 @@ android:layout_below="@+id/mark_name" android:layout_marginTop="2dp" android:layout_marginBottom="15dp" - android:paddingLeft="15dp" - android:paddingRight="15dp" + android:paddingLeft="16dp" + android:paddingRight="16dp" android:textSize="14sp" android:singleLine="true" android:textColor="@color/white" /> diff --git a/mobile/com.sap.sailing.buoy.positioning/res/menu/empty_menu.xml b/mobile/com.sap.sailing.buoy.positioning/res/menu/empty_menu.xml new file mode 100644 index 00000000000..fe187c0cf47 --- /dev/null +++ b/mobile/com.sap.sailing.buoy.positioning/res/menu/empty_menu.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/BaseActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/BaseActivity.java index fc61948b3aa..8c2012f3170 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/BaseActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/BaseActivity.java @@ -2,8 +2,10 @@ package com.sap.sailing.android.buoy.positioning.app.ui.activities; import android.os.Bundle; 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.util.AppPreferences; import com.sap.sailing.android.shared.ui.activities.AbstractBaseActivity; @@ -19,8 +21,8 @@ public class BaseActivity extends AbstractBaseActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { - //MenuInflater inflater = getMenuInflater(); - //inflater.inflate(R.menu.options_menu, menu); + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.empty_menu, menu); return true; } @@ -34,6 +36,6 @@ public class BaseActivity extends AbstractBaseActivity { @Override protected int getOptionsMenuResId() { - return 0; + return R.menu.empty_menu; } } diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java index 057a6f77892..2426465fe0c 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java @@ -5,6 +5,9 @@ import java.util.List; import android.content.Intent; 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.buoy.positioning.app.R; import com.sap.sailing.android.buoy.positioning.app.ui.fragments.BuoyFragment; @@ -13,6 +16,7 @@ import com.sap.sailing.android.buoy.positioning.app.util.DatabaseHelper; 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.LeaderboardInfo; +import com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar; public class PositioningActivity extends BaseActivity implements pingListener { @@ -43,8 +47,10 @@ public class PositioningActivity extends BaseActivity implements pingListener { setPingFromDatabase(markerID); } - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + OpenSansToolbar toolbar = (OpenSansToolbar) findViewById(R.id.toolbar); if (toolbar != null) { + toolbar.hideSubtitle(); + toolbar.setTitleSize(20); setSupportActionBar(toolbar); toolbar.setBackgroundColor(getResources().getColor( R.color.colorPrimary)); @@ -63,6 +69,26 @@ public class PositioningActivity extends BaseActivity implements pingListener { } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.empty_menu, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + default: + return super.onOptionsItemSelected(item); + } + } + + @Override + protected int getOptionsMenuResId() { + return R.menu.empty_menu; + } + public void setPingFromDatabase(String markerID) { List markPings = DatabaseHelper.getInstance() .getMarkPings(this, markerID); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java index dbd0b4fdd81..7247cee26ab 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java @@ -6,6 +6,9 @@ import java.util.List; import android.content.Intent; 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.buoy.positioning.app.R; import com.sap.sailing.android.buoy.positioning.app.ui.fragments.RegattaFragment; @@ -14,6 +17,7 @@ import com.sap.sailing.android.buoy.positioning.app.util.DatabaseHelper; import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkInfo; import com.sap.sailing.android.shared.data.AbstractCheckinData; import com.sap.sailing.android.shared.ui.activities.AbstractRegattaActivity; +import com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar; public class RegattaActivity extends AbstractRegattaActivity{ @@ -42,8 +46,10 @@ public class RegattaActivity extends AbstractRegattaActivity{ setMarks(DatabaseHelper.getInstance().getMarks(this, checkinDigest)); setContentView(R.layout.fragment_container); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + OpenSansToolbar toolbar = (OpenSansToolbar) findViewById(R.id.toolbar); if (toolbar != null) { + toolbar.hideSubtitle(); + toolbar.setTitleSize(20); setSupportActionBar(toolbar); toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); } @@ -58,19 +64,33 @@ public class RegattaActivity extends AbstractRegattaActivity{ RegattaFragment regattaFragment = new RegattaFragment(); replaceFragment(R.id.content_frame, regattaFragment); } - + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.empty_menu, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + default: + return super.onOptionsItemSelected(item); + } + } + + @Override + protected int getOptionsMenuResId() { + return R.menu.empty_menu; + } @Override public void onCheckinDataAvailable(AbstractCheckinData arg0) { // TODO Auto-generated method stub } - - @Override - protected int getOptionsMenuResId() { - // TODO Auto-generated method stub - return 0; - } @Override protected void onResume() { diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/StartActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/StartActivity.java index 50ba55ac1f2..793811e3309 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/StartActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/StartActivity.java @@ -2,10 +2,15 @@ package com.sap.sailing.android.buoy.positioning.app.ui.activities; import android.content.Intent; 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.buoy.positioning.app.R; import com.sap.sailing.android.buoy.positioning.app.ui.fragments.HomeFragment; import com.sap.sailing.android.shared.ui.activities.AbstractStartActivity; +import com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar; import com.sap.sailing.android.ui.fragments.AbstractHomeFragment; @@ -16,15 +21,34 @@ public class StartActivity extends AbstractStartActivity { super.onCreate(savedInstanceState); if (getSupportActionBar() != null) { getSupportActionBar().setTitle(getString(R.string.title_activity_start)); + OpenSansToolbar toolbar = (OpenSansToolbar) findViewById(R.id.toolbar); + toolbar.hideSubtitle(); + toolbar.setTitleSize(20); + getSupportActionBar().setTitle(getString(R.string.title_activity_start)); getSupportActionBar().setHomeButtonEnabled(false); } replaceFragment(R.id.content_frame, new HomeFragment()); } - - @Override - protected int getOptionsMenuResId() { - return 0; - } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.empty_menu, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + default: + return super.onOptionsItemSelected(item); + } + } + + @Override + protected int getOptionsMenuResId() { + return R.menu.empty_menu; + } public AbstractHomeFragment getHomeFragment() { HomeFragment homeFragment = (HomeFragment) getSupportFragmentManager() From 0b4d72be0e9b2f8f4a5c1ae01887b457338a8451 Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Fri, 27 Mar 2015 15:27:19 +0100 Subject: [PATCH 10/18] Implements refresh function for marks on new checkin and inside RegattaActivity --- .../res/values-de/strings.xml | 1 + .../res/values/strings.xml | 1 + .../res/values-de/strings.xml | 1 - .../res/values/strings.xml | 1 - .../res/menu/regatta_menu.xml | 6 + .../res/values/colors.xml | 2 +- .../positioning/app/adapter/MarkAdapter.java | 4 +- .../app/provider/AnalyticsProvider.java | 4 +- .../ui/activities/PositioningActivity.java | 4 +- .../app/ui/activities/RegattaActivity.java | 120 ++++++++++++------ .../app/ui/fragments/BuoyFragment.java | 1 - .../app/ui/fragments/HomeFragment.java | 14 +- .../app/ui/fragments/RegattaFragment.java | 7 +- .../positioning/app/util/CheckinManager.java | 29 +++-- .../positioning/app/util/DatabaseHelper.java | 16 ++- .../buoy/positioning/app/util/PingHelper.java | 12 +- .../app/valueobjects/CheckinData.java | 8 +- 17 files changed, 145 insertions(+), 86 deletions(-) create mode 100644 mobile/com.sap.sailing.buoy.positioning/res/menu/regatta_menu.xml diff --git a/mobile/com.sap.sailing.android.shared/res/values-de/strings.xml b/mobile/com.sap.sailing.android.shared/res/values-de/strings.xml index 957bdb631f6..4f96f94f5a0 100644 --- a/mobile/com.sap.sailing.android.shared/res/values-de/strings.xml +++ b/mobile/com.sap.sailing.android.shared/res/values-de/strings.xml @@ -29,5 +29,6 @@ Ihre Regattas: + Aktualisieren \ No newline at end of file diff --git a/mobile/com.sap.sailing.android.shared/res/values/strings.xml b/mobile/com.sap.sailing.android.shared/res/values/strings.xml index 78f182936ce..9103d8ead67 100644 --- a/mobile/com.sap.sailing.android.shared/res/values/strings.xml +++ b/mobile/com.sap.sailing.android.shared/res/values/strings.xml @@ -30,6 +30,7 @@ Your Regattas: + Refresh Error: Database operation has failed. diff --git a/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml b/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml index 84d57a7f5c1..5e73740d034 100644 --- a/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml +++ b/mobile/com.sap.sailing.android.tracking.app/res/values-de/strings.xml @@ -9,7 +9,6 @@ Checkout Team Foto hinzufügen Team Foto ersetzen - Aktualisieren Andere Einstellungen Der QR-Code befindet sich auf Ihrer Teilnahmebestätigung Geräte-ID diff --git a/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml b/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml index 659ac82bb1d..cc1455d3a9e 100644 --- a/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml +++ b/mobile/com.sap.sailing.android.tracking.app/res/values/strings.xml @@ -7,7 +7,6 @@ Checkout Add Team Photo Replace Team Photo - Refresh Other Settings Device Identifier SAP Sailing Tracker started diff --git a/mobile/com.sap.sailing.buoy.positioning/res/menu/regatta_menu.xml b/mobile/com.sap.sailing.buoy.positioning/res/menu/regatta_menu.xml new file mode 100644 index 00000000000..539eb7da2bf --- /dev/null +++ b/mobile/com.sap.sailing.buoy.positioning/res/menu/regatta_menu.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/mobile/com.sap.sailing.buoy.positioning/res/values/colors.xml b/mobile/com.sap.sailing.buoy.positioning/res/values/colors.xml index 891c613302b..409851cf238 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/values/colors.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/values/colors.xml @@ -1,4 +1,4 @@ - + #FFFFFF #55FFFFFF diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/adapter/MarkAdapter.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/adapter/MarkAdapter.java index f96df20d088..410d05bac28 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/adapter/MarkAdapter.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/adapter/MarkAdapter.java @@ -1,8 +1,6 @@ package com.sap.sailing.android.buoy.positioning.app.adapter; -import java.util.List; - import android.content.Context; import android.database.Cursor; import android.support.v4.widget.ResourceCursorAdapter; @@ -14,6 +12,8 @@ import com.sap.sailing.android.buoy.positioning.app.provider.AnalyticsContract; import com.sap.sailing.android.buoy.positioning.app.util.DatabaseHelper; import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkPingInfo; +import java.util.List; + public class MarkAdapter extends ResourceCursorAdapter { diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/provider/AnalyticsProvider.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/provider/AnalyticsProvider.java index c20c0198cab..9abd14d4bd9 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/provider/AnalyticsProvider.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/provider/AnalyticsProvider.java @@ -1,7 +1,5 @@ package com.sap.sailing.android.buoy.positioning.app.provider; -import java.util.Arrays; - import android.content.ContentProvider; import android.content.ContentValues; import android.content.Context; @@ -22,6 +20,8 @@ import com.sap.sailing.android.buoy.positioning.app.util.AppPreferences; import com.sap.sailing.android.shared.logging.ExLog; import com.sap.sailing.android.shared.util.SelectionBuilder; +import java.util.Arrays; + public class AnalyticsProvider extends ContentProvider { private static final String TAG = AnalyticsProvider.class.getName(); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java index 057a6f77892..6901857b4d9 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/PositioningActivity.java @@ -1,7 +1,5 @@ package com.sap.sailing.android.buoy.positioning.app.ui.activities; -import java.util.List; - import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.Toolbar; @@ -14,6 +12,8 @@ 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.LeaderboardInfo; +import java.util.List; + public class PositioningActivity extends BaseActivity implements pingListener { private MarkInfo markInfo; diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java index dbd0b4fdd81..6d5a1f3cbec 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java @@ -1,28 +1,36 @@ package com.sap.sailing.android.buoy.positioning.app.ui.activities; -import java.util.ArrayList; -import java.util.List; - import android.content.Intent; 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.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.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.valueobjects.CheckinData; import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkInfo; import com.sap.sailing.android.shared.data.AbstractCheckinData; +import com.sap.sailing.android.shared.logging.ExLog; import com.sap.sailing.android.shared.ui.activities.AbstractRegattaActivity; -public class RegattaActivity extends AbstractRegattaActivity{ - - private String leaderboardName; - private String checkinDigest; - private List marks; - // private CheckinUrlInfo checkinUrl; - - private AppPreferences prefs; +import java.util.ArrayList; +import java.util.List; + +public class RegattaActivity extends AbstractRegattaActivity { + + private String leaderboardName; + private String checkinDigest; + private List marks; + private final String TAG = RegattaActivity.class.getName(); + private String checkinUrl; + + private AppPreferences prefs; @Override protected void onCreate(Bundle savedInstanceState) { @@ -36,8 +44,7 @@ public class RegattaActivity extends AbstractRegattaActivity{ checkinDigest = intent.getStringExtra(getString(R.string.checkin_digest)); leaderboardName = intent.getStringExtra(getString(R.string.leaderboard_name)); - // checkinUrl = DatabaseHelper.getInstance().getCheckinUrl(this, checkinDigest); - // manager = new CheckinManager(checkinUrl.urlString, this); + checkinUrl = DatabaseHelper.getInstance().getCheckinUrl(this, checkinDigest).urlString; setMarks(DatabaseHelper.getInstance().getMarks(this, checkinDigest)); @@ -58,35 +65,74 @@ public class RegattaActivity extends AbstractRegattaActivity{ RegattaFragment regattaFragment = new RegattaFragment(); replaceFragment(R.id.content_frame, regattaFragment); } - - @Override - public void onCheckinDataAvailable(AbstractCheckinData arg0) { - // TODO Auto-generated method stub - - } + @Override + protected void onResume() { + super.onResume(); + leaderboardName = (String) getIntent().getExtras().get(getString(R.string.leaderboard_name)); + setTitle(leaderboardName); + } - @Override - protected int getOptionsMenuResId() { - // TODO Auto-generated method stub - return 0; - } - - @Override - protected void onResume() { - super.onResume(); - leaderboardName = (String) getIntent().getExtras().get(getString(R.string.leaderboard_name)); - setTitle(leaderboardName); - } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.regatta_menu, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.refresh: + ExLog.i(this, TAG, "Clicked REFRESH."); + CheckinManager manager = new CheckinManager(checkinUrl, this); + manager.callServerAndGenerateCheckinData(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + @Override + protected int getOptionsMenuResId() { + return R.menu.regatta_menu; + } - public List getMarks() { - return marks; - } + @Override + public void onCheckinDataAvailable(AbstractCheckinData checkinData) { + CheckinData data = (CheckinData) checkinData; + try { + DatabaseHelper.getInstance().deleteRegattaFromDatabase(this, data.checkinDigest); + DatabaseHelper.getInstance().storeCheckinRow(this, + data.marks, data.getLeaderboard(), + data.getCheckinUrl(), data.pings); + getRegattaFragment().getAdapter().notifyDataSetChanged(); + } catch (DatabaseHelper.GeneralDatabaseHelperException e) { + ExLog.e(this, TAG, + "Batch insert failed: " + e.getMessage()); + displayDatabaseError(); + return; + } + + if (BuildConfig.DEBUG) { + ExLog.i(this, TAG, + "Batch-insert of checkinData completed."); + } + } + + public RegattaFragment getRegattaFragment() { + return (RegattaFragment) getSupportFragmentManager().findFragmentById(R.id.content_frame); + } - public void setMarks(List marks) { - this.marks = marks; - } + public List getMarks() { + return marks; + } + + + public void setMarks(List marks) { + this.marks = marks; + } } diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java index 7d587215978..ca0fd21614f 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java @@ -15,7 +15,6 @@ import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.model.LatLng; -import com.google.android.gms.maps.model.LatLngBounds; import com.google.android.gms.maps.model.MarkerOptions; import com.sap.sailing.android.buoy.positioning.app.R; import com.sap.sailing.android.buoy.positioning.app.ui.activities.PositioningActivity; diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/HomeFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/HomeFragment.java index eec85136913..dcaf94fdb0a 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/HomeFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/HomeFragment.java @@ -25,7 +25,6 @@ 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.valueobjects.CheckinData; -import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkPingInfo; import com.sap.sailing.android.shared.data.AbstractCheckinData; import com.sap.sailing.android.shared.logging.ExLog; import com.sap.sailing.android.shared.ui.activities.CheckinDataActivity; @@ -80,14 +79,13 @@ public class HomeFragment extends AbstractHomeFragment implements private void checkinWithApiAndStartRegattaActivity(CheckinData checkinData) { try { - if(DatabaseHelper.getInstance().markLeaderboardCombnationAvailable(getActivity(), checkinData.checkinDigest)) { - DatabaseHelper.getInstance().storeCheckinRow(getActivity(), - checkinData.marks, checkinData.getLeaderboard(), - checkinData.getCheckinUrl(), checkinData.pings); - adapter.notifyDataSetChanged(); + if(!DatabaseHelper.getInstance().markLeaderboardCombnationAvailable(getActivity(), checkinData.checkinDigest)) { + DatabaseHelper.getInstance().deleteRegattaFromDatabase(getActivity(),checkinData.checkinDigest); } - // TODO: Save new pings, what if old pings exist locally? Delete old? - + DatabaseHelper.getInstance().storeCheckinRow(getActivity(), + checkinData.marks, checkinData.getLeaderboard(), + checkinData.getCheckinUrl(), checkinData.pings); + adapter.notifyDataSetChanged(); } catch (DatabaseHelper.GeneralDatabaseHelperException e) { ExLog.e(getActivity(), TAG, "Batch insert failed: " + e.getMessage()); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/RegattaFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/RegattaFragment.java index 8098b3e2c56..90b2ce0c583 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/RegattaFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/RegattaFragment.java @@ -23,7 +23,7 @@ import com.sap.sailing.android.ui.fragments.BaseFragment; public class RegattaFragment extends BaseFragment implements LoaderCallbacks{ private static final int MARKER_LOADER = 1; private MarkAdapter adapter; - + @SuppressLint("InflateParams") @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -46,6 +46,11 @@ public class RegattaFragment extends BaseFragment implements LoaderCallbacks onCreateLoader(int loaderId, Bundle bundle) { switch (loaderId) { diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java index c19233f996f..4bf7c01b630 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java @@ -1,19 +1,5 @@ package com.sap.sailing.android.buoy.positioning.app.util; -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLEncoder; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - import android.app.AlertDialog; import android.content.DialogInterface; import android.net.Uri; @@ -34,6 +20,20 @@ import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants; import com.sap.sailing.domain.racelogtracking.DeviceIdentifier; import com.sap.sailing.domain.racelogtracking.impl.SmartphoneUUIDIdentifierImpl; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + public class CheckinManager { private final static String TAG = CheckinManager.class.getName(); @@ -289,6 +289,7 @@ public class CheckinManager { } public interface CheckinDataHandler { + public void onCheckinDataAvailable(CheckinData data); } private class URLData { diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java index 9b69faed7dd..183146991ec 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java @@ -1,8 +1,5 @@ package com.sap.sailing.android.buoy.positioning.app.util; -import java.util.ArrayList; -import java.util.List; - import android.content.ContentProviderOperation; import android.content.ContentResolver; import android.content.ContentValues; @@ -24,6 +21,9 @@ 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 java.util.ArrayList; +import java.util.List; + public class DatabaseHelper { private final static String TAG = DatabaseHelper.class.getName(); @@ -114,14 +114,19 @@ public class DatabaseHelper { int d1 = cr.delete(MarkPing.CONTENT_URI, MarkPing.MARK_ID + " = \"" + markID + "\"", null); if (BuildConfig.DEBUG) { - ExLog.i(context, TAG, "Checkout, number of markpings deleted: " + d1); + ExLog.i(context, TAG, "Checkout, number of markpings for mark: " + markID + " deleted: " + d1); } } public void deleteRegattaFromDatabase(Context context, String checkinDigest) { ContentResolver cr = context.getContentResolver(); - // int d1 = cr.delete(Event.CONTENT_URI, Event.EVENT_CHECKIN_DIGEST + " = \"" + checkinDigest + "\"", null); + List marks = getMarks(context,checkinDigest); + + for(MarkInfo mark : marks){ + deletePingsFromDataBase(context, mark.getId()); + } + int d2 = cr.delete(Leaderboard.CONTENT_URI, Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = \"" + checkinDigest + "\"", null); int d3 = cr.delete(Mark.CONTENT_URI, Mark.MARK_CHECKIN_DIGEST + " = \"" + checkinDigest @@ -130,7 +135,6 @@ public class DatabaseHelper { + "\"", null); if (BuildConfig.DEBUG) { - // ExLog.i(context, TAG, "Checkout, number of events deleted: " + d1); ExLog.i(context, TAG, "Checkout, number of leaderbards deleted: " + d2); ExLog.i(context, TAG, "Checkout, number of marks deleted: " + d3); ExLog.i(context, TAG, "Checkout, number of checkinurls deleted: " + d4); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java index 952a8f3c91c..901a0810570 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java @@ -1,11 +1,5 @@ package com.sap.sailing.android.buoy.positioning.app.util; -import java.net.MalformedURLException; -import java.net.URL; - -import org.json.JSONException; -import org.json.JSONObject; - import android.content.Context; import android.location.Location; import android.widget.Toast; @@ -20,6 +14,12 @@ import com.sap.sailing.android.shared.util.NetworkHelper; import com.sap.sailing.android.shared.util.NetworkHelper.NetworkHelperError; import com.sap.sailing.android.shared.util.NetworkHelper.NetworkHelperSuccessListener; +import org.json.JSONException; +import org.json.JSONObject; + +import java.net.MalformedURLException; +import java.net.URL; + public class PingHelper { private static String TAG = PingHelper.class.getName(); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/CheckinData.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/CheckinData.java index e810ef027d6..f5bf8114827 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/CheckinData.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/CheckinData.java @@ -1,14 +1,14 @@ package com.sap.sailing.android.buoy.positioning.app.valueobjects; +import com.sap.sailing.android.shared.data.AbstractCheckinData; +import com.sap.sailing.android.shared.data.CheckinUrlInfo; +import com.sap.sailing.android.shared.data.LeaderboardInfo; + import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.List; -import com.sap.sailing.android.shared.data.AbstractCheckinData; -import com.sap.sailing.android.shared.data.CheckinUrlInfo; -import com.sap.sailing.android.shared.data.LeaderboardInfo; - public class CheckinData extends AbstractCheckinData{ public String leaderboardName; public String deviceUid; From 9f50ef2514682d6bad1dc376f7a99a2fad3e3bbb Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Fri, 27 Mar 2015 16:06:32 +0100 Subject: [PATCH 11/18] Fixes ui issues with header in regatta activity. --- .../buoy/positioning/app/ui/activities/RegattaActivity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java index 6d5a1f3cbec..5a395bec2e0 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java @@ -18,6 +18,7 @@ import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkInfo; import com.sap.sailing.android.shared.data.AbstractCheckinData; import com.sap.sailing.android.shared.logging.ExLog; import com.sap.sailing.android.shared.ui.activities.AbstractRegattaActivity; +import com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar; import java.util.ArrayList; import java.util.List; @@ -49,8 +50,10 @@ public class RegattaActivity extends AbstractRegattaActivity { setMarks(DatabaseHelper.getInstance().getMarks(this, checkinDigest)); setContentView(R.layout.fragment_container); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + OpenSansToolbar toolbar = (OpenSansToolbar) findViewById(R.id.toolbar); if (toolbar != null) { + toolbar.hideSubtitle(); + toolbar.setTitleSize(20); setSupportActionBar(toolbar); toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); } From 498ae8e898708cb0ee03e5dfae99e1df1865ebf1 Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Mon, 30 Mar 2015 11:25:25 +0200 Subject: [PATCH 12/18] Implements use of message sending service for pings. Replaced network helper with message sending service in PingHelper class. Added message service start and destroy in regatta activity. --- .../app/ui/activities/RegattaActivity.java | 51 ++++++++++++++++++- .../positioning/app/util/DatabaseHelper.java | 4 +- .../buoy/positioning/app/util/PingHelper.java | 29 ++--------- 3 files changed, 56 insertions(+), 28 deletions(-) diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java index 5a395bec2e0..892a7da04ef 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java @@ -1,8 +1,11 @@ package com.sap.sailing.android.buoy.positioning.app.ui.activities; +import android.content.ComponentName; +import android.content.Context; import android.content.Intent; +import android.content.ServiceConnection; import android.os.Bundle; -import android.support.v7.widget.Toolbar; +import android.os.IBinder; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -17,6 +20,7 @@ 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.shared.data.AbstractCheckinData; 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; @@ -32,6 +36,8 @@ public class RegattaActivity extends AbstractRegattaActivity { private String checkinUrl; private AppPreferences prefs; + private MessageSendingService messageSendingService; + private boolean messageSendingServiceBound; @Override protected void onCreate(Bundle savedInstanceState) { @@ -76,6 +82,28 @@ public class RegattaActivity extends AbstractRegattaActivity { setTitle(leaderboardName); } + @Override + public void onStart() { + super.onStart(); + Intent messageSendingServiceIntent = new Intent(this, MessageSendingService.class); + bindService(messageSendingServiceIntent, messageSendingServiceConnection, Context.BIND_AUTO_CREATE); + } + + @Override + public void onStop() { + super.onStop(); + if (messageSendingServiceBound) { + messageSendingService.unregisterAPIConnectivityListener(); + unbindService(messageSendingServiceConnection); + + messageSendingServiceBound = false; + + if (BuildConfig.DEBUG) { + ExLog.i(this, TAG, "Unbound transmitting Service"); + } + } + } + @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); @@ -138,4 +166,25 @@ public class RegattaActivity extends AbstractRegattaActivity { this.marks = marks; } + /** Defines callbacks for service binding, passed to bindService() */ + private ServiceConnection messageSendingServiceConnection = new ServiceConnection() { + + @Override + public void onServiceConnected(ComponentName className, IBinder service) { + // We've bound to LocalService, cast the IBinder and get + // LocalService instance + MessageSendingService.MessageSendingBinder binder = (MessageSendingService.MessageSendingBinder) service; + messageSendingService = binder.getService(); + messageSendingServiceBound = true; + if (BuildConfig.DEBUG) { + ExLog.i(RegattaActivity.this, TAG, "connected to message sending service"); + } + } + + @Override + public void onServiceDisconnected(ComponentName arg0) { + messageSendingServiceBound = false; + } + }; + } diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java index 183146991ec..4f729b8094f 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java @@ -145,8 +145,6 @@ public class DatabaseHelper { * When checking in, store info on the event, the competitor and the leaderboard in the database. * * @param context - * @param event - * @param competitor * @param leaderboard * @return success or failure * @throws GeneralDatabaseHelperException @@ -209,7 +207,7 @@ public class DatabaseHelper { public void storeMarkPing(Context context, MarkPingInfo markPing) throws GeneralDatabaseHelperException{ ContentResolver cr = context.getContentResolver(); - + deletePingsFromDataBase(context, markPing.getMarkId()); ArrayList opList = new ArrayList(); ContentValues mpcv = new ContentValues(); mpcv.put(MarkPing.MARK_ID, markPing.getMarkId()); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java index 901a0810570..f29821c802b 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java @@ -10,6 +10,7 @@ import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkPingInfo; import com.sap.sailing.android.shared.data.LeaderboardInfo; import com.sap.sailing.android.shared.data.http.HttpJsonPostRequest; import com.sap.sailing.android.shared.logging.ExLog; +import com.sap.sailing.android.shared.services.sending.MessageSendingService; import com.sap.sailing.android.shared.util.NetworkHelper; import com.sap.sailing.android.shared.util.NetworkHelper.NetworkHelperError; import com.sap.sailing.android.shared.util.NetworkHelper.NetworkHelperSuccessListener; @@ -19,6 +20,7 @@ import org.json.JSONObject; import java.net.MalformedURLException; import java.net.URL; +import java.util.UUID; public class PingHelper { private static String TAG = PingHelper.class.getName(); @@ -36,37 +38,16 @@ public class PingHelper { String postUrlStr = leaderBoard.serverUrl + prefs.getServerMarkPingPath(leaderBoard.name, mark.getId()); - - HttpJsonPostRequest request = new HttpJsonPostRequest(new URL(postUrlStr), - fixJson.toString(), context); - NetworkHelper.getInstance(context) - .executeHttpJsonRequestAsnchronously(request, new NetworkHelperSuccessListener() { - - @Override - public void performAction(JSONObject arg0) { - Toast.makeText(context, "DATA SEND TO SERVER", Toast.LENGTH_LONG).show(); - - } - }, new NetworkHelper.NetworkHelperFailureListener() { - - @Override - public void performAction(NetworkHelperError arg0) { - Toast.makeText(context, "FAILURE SERVER WAS NOT NOTIFIED", Toast.LENGTH_LONG).show(); - - } - });; - //context.startService(MessageSendingService.createMessageIntent(context, - // postUrlStr, null, UUID.randomUUID(), fixJson.toString(), null)); + context.startService(MessageSendingService.createMessageIntent(context, postUrlStr, + null, UUID.randomUUID(), fixJson.toString(), null)); + } catch (JSONException ex) { ExLog.i(context, TAG, "Error while building ping json " + ex.getMessage()); } catch (GeneralDatabaseHelperException e) { e.printStackTrace(); - } catch (MalformedURLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } } From d3e677e9bfb5dfba40427e71dadefb60e91c0a5c Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Mon, 30 Mar 2015 11:33:10 +0200 Subject: [PATCH 13/18] Bugfix: Fixes german translation for latitude and longitude --- .../res/values-de/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile/com.sap.sailing.buoy.positioning/res/values-de/strings.xml b/mobile/com.sap.sailing.buoy.positioning/res/values-de/strings.xml index 57b00348105..24b9ebeb98b 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/values-de/strings.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/values-de/strings.xml @@ -4,8 +4,8 @@ Markierungs Position setzen Kurstyp Kursmarkierungen - Breitengrad - Längengrad + Längengrad + Breitengrad Position setzen Position zurücksetzen Empfangen der Markierungen.. From c8a0a26ecbad5b769671b5c5ee660d5df5f19b19 Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Mon, 30 Mar 2015 14:24:03 +0200 Subject: [PATCH 14/18] Removes Hockey SDK --- .../com.sap.sailing.android.shared/.classpath | 1 + .../com.sap.sailing.android.shared/build.gradle | 2 -- .../ui/activities/AbstractStartActivity.java | 9 --------- .../shared/ui/customviews/OpenSansToolbar.java | 1 - .../AndroidManifest.xml | 3 +-- .../app/ui/activities/PositioningActivity.java | 5 ++--- .../app/ui/activities/StartActivity.java | 1 - .../buoy/positioning/app/util/PingHelper.java | 17 +++++------------ .../.classpath | 1 + 9 files changed, 10 insertions(+), 30 deletions(-) diff --git a/mobile/com.sap.sailing.android.shared/.classpath b/mobile/com.sap.sailing.android.shared/.classpath index faa5502e567..7b654bd6f70 100644 --- a/mobile/com.sap.sailing.android.shared/.classpath +++ b/mobile/com.sap.sailing.android.shared/.classpath @@ -11,5 +11,6 @@ + diff --git a/mobile/com.sap.sailing.android.shared/build.gradle b/mobile/com.sap.sailing.android.shared/build.gradle index ae54969700f..64eda8d78f1 100644 --- a/mobile/com.sap.sailing.android.shared/build.gradle +++ b/mobile/com.sap.sailing.android.shared/build.gradle @@ -34,8 +34,6 @@ android { } dependencies { - compile "net.hockeyapp.android:HockeySDK:3.5.0" - /* support libraries */ compile 'com.android.support:appcompat-v7:22.0.0' diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/AbstractStartActivity.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/AbstractStartActivity.java index 714a43f9968..98884a6b8a5 100644 --- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/AbstractStartActivity.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/AbstractStartActivity.java @@ -1,6 +1,5 @@ package com.sap.sailing.android.shared.ui.activities; -import net.hockeyapp.android.CrashManager; import android.app.Dialog; import android.content.Intent; import android.net.Uri; @@ -66,7 +65,6 @@ public abstract class AbstractStartActivity extends CheckinDataActivity{ @Override protected void onResume() { super.onResume(); - checkForCrashes(); //checkForUpdates(); int googleServicesResultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); @@ -76,11 +74,4 @@ public abstract class AbstractStartActivity extends CheckinDataActivity{ dialog.show(); } } - - /** - * Hockeyapp integration method. - */ - private void checkForCrashes() { - CrashManager.register(this, "060ff0c8a907638e3b31d3146091c87b"); - } } diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/customviews/OpenSansToolbar.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/customviews/OpenSansToolbar.java index 50152c1e8a1..9501b30af20 100644 --- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/customviews/OpenSansToolbar.java +++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/customviews/OpenSansToolbar.java @@ -4,7 +4,6 @@ import android.content.Context; import android.support.v7.widget.Toolbar; import android.util.AttributeSet; import android.util.TypedValue; -import android.view.Gravity; import android.view.View; import android.widget.TextView; diff --git a/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml b/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml index 9a8706e2347..9b9aa4d2a77 100644 --- a/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml +++ b/mobile/com.sap.sailing.android.tracking.app/AndroidManifest.xml @@ -6,7 +6,7 @@ + android:targetSdkVersion="22" /> - + From ce9d6401b4921daa27ec0b9b722f369ba003cc8d Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Mon, 30 Mar 2015 15:09:29 +0200 Subject: [PATCH 15/18] Bugfix: Fixes display of marks belonging to other regatta. --- .../positioning/app/ui/activities/RegattaActivity.java | 4 ++++ .../buoy/positioning/app/ui/fragments/HomeFragment.java | 2 +- .../positioning/app/ui/fragments/RegattaFragment.java | 9 +++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java index 892a7da04ef..7a08610993b 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/activities/RegattaActivity.java @@ -152,6 +152,10 @@ public class RegattaActivity extends AbstractRegattaActivity { } } + public String getCheckinDigest(){ + return checkinDigest; + } + public RegattaFragment getRegattaFragment() { return (RegattaFragment) getSupportFragmentManager().findFragmentById(R.id.content_frame); } diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/HomeFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/HomeFragment.java index dcaf94fdb0a..c74e1c9c66b 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/HomeFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/HomeFragment.java @@ -113,7 +113,7 @@ public class HomeFragment extends AbstractHomeFragment implements * Start regatta activity. * * @param leaderboardName - * @param checkinDigest2 + * @param checkinDigest */ private void startRegatta(String leaderboardName, String checkinDigest) { Intent intent = new Intent(getActivity(), RegattaActivity.class); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/RegattaFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/RegattaFragment.java index 90b2ce0c583..9f675a5a763 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/RegattaFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/RegattaFragment.java @@ -18,6 +18,7 @@ import com.sap.sailing.android.buoy.positioning.app.R; import com.sap.sailing.android.buoy.positioning.app.adapter.MarkAdapter; import com.sap.sailing.android.buoy.positioning.app.provider.AnalyticsContract; import com.sap.sailing.android.buoy.positioning.app.ui.activities.PositioningActivity; +import com.sap.sailing.android.buoy.positioning.app.ui.activities.RegattaActivity; import com.sap.sailing.android.ui.fragments.BaseFragment; public class RegattaFragment extends BaseFragment implements LoaderCallbacks{ @@ -53,10 +54,14 @@ public class RegattaFragment extends BaseFragment implements LoaderCallbacks onCreateLoader(int loaderId, Bundle bundle) { + String checkinDigest = ((RegattaActivity)getActivity()).getCheckinDigest(); switch (loaderId) { case MARKER_LOADER: - return new CursorLoader(getActivity(), AnalyticsContract.LeaderboardsMarksJoined.CONTENT_URI, - null, null, null, null); + return new CursorLoader(getActivity(), AnalyticsContract.MarksLeaderBoardsJoined.CONTENT_URI, + null, + AnalyticsContract.Mark.MARK_CHECKIN_DIGEST + " = ?", + new String[]{checkinDigest}, + null); default: return null; From 2ccf46c7621f362d22081522e87577750823dacd Mon Sep 17 00:00:00 2001 From: Peter Siegmund Date: Mon, 30 Mar 2015 15:56:49 +0200 Subject: [PATCH 16/18] Gradle: preBuild taks generates git.xml in res - usable with getString(R.string.git_hash) --- .gitignore | 1 + .../build.gradle | 1 + .../build.gradle | 1 + .../build.gradle | 1 + mobile/git.gradle | 30 +++++++++++++++++++ mobile/git.template.xml | 6 ++++ 6 files changed, 40 insertions(+) create mode 100644 mobile/git.gradle create mode 100644 mobile/git.template.xml diff --git a/.gitignore b/.gitignore index d1b424dd245..deadb797fb8 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ gen/ out/ .gradle local.properties +git.xml diff --git a/mobile/com.sap.sailing.android.tracking.app/build.gradle b/mobile/com.sap.sailing.android.tracking.app/build.gradle index 9566d99e6bd..ae2e87dc360 100644 --- a/mobile/com.sap.sailing.android.tracking.app/build.gradle +++ b/mobile/com.sap.sailing.android.tracking.app/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.android.application" +apply from: "../git.gradle" def packageName = "com.sap.sailing.android.tracking.app" def verCode = 1 diff --git a/mobile/com.sap.sailing.buoy.positioning/build.gradle b/mobile/com.sap.sailing.buoy.positioning/build.gradle index e7080104887..835cb782ab5 100644 --- a/mobile/com.sap.sailing.buoy.positioning/build.gradle +++ b/mobile/com.sap.sailing.buoy.positioning/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.android.application" +apply from: "../git.gradle" def packageName = "com.sap.sailing.android.buoy.positioning.app" def verCode = 1 diff --git a/mobile/com.sap.sailing.racecommittee.app/build.gradle b/mobile/com.sap.sailing.racecommittee.app/build.gradle index 0426e6eeee0..e6d4fd72c22 100644 --- a/mobile/com.sap.sailing.racecommittee.app/build.gradle +++ b/mobile/com.sap.sailing.racecommittee.app/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.android.application" +apply from: "../git.gradle" def packageName = "com.sap.sailing.racecommittee.app" def verCode = 6 diff --git a/mobile/git.gradle b/mobile/git.gradle new file mode 100644 index 00000000000..8e885cd9f95 --- /dev/null +++ b/mobile/git.gradle @@ -0,0 +1,30 @@ +/** + * returns current git hash + */ +def getGitHash = { -> + def stdout = new ByteArrayOutputStream() + exec { + commandLine "git", "log", "-n", "1", "--format='%h'" + standardOutput = stdout + } + return stdout.toString().trim().replace("'", "") +} + +/** + * set git hash into git.xml + */ +preBuild.doLast { + copy { + from ("../git.template.xml") + + into ("res/values") + + rename { + String fileName -> fileName.replace(".template", "") + } + + filter { + String line -> line.replaceAll("#GITHASH#", getGitHash()) + } + } +} \ No newline at end of file diff --git a/mobile/git.template.xml b/mobile/git.template.xml new file mode 100644 index 00000000000..4be58d9576f --- /dev/null +++ b/mobile/git.template.xml @@ -0,0 +1,6 @@ + + + + #GITHASH# + + \ No newline at end of file From cf89a9fcd0c0c33d07b8fa9da4ca56c16b0ec589 Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Mon, 30 Mar 2015 16:05:53 +0200 Subject: [PATCH 17/18] Bugfix: Hides ping button in Position Activity. Always gives updates to current position. --- .../layout/fragment_buoy_postion_detail.xml | 68 +++++++++---------- .../res/values-de/strings.xml | 2 - .../res/values/strings.xml | 4 +- .../app/ui/fragments/BuoyFragment.java | 35 ++++++++-- .../positioning/app/util/CheckinManager.java | 2 +- .../positioning/app/util/DatabaseHelper.java | 4 +- .../buoy/positioning/app/util/PingHelper.java | 2 +- .../app/valueobjects/MarkPingInfo.java | 10 +-- 8 files changed, 73 insertions(+), 54 deletions(-) diff --git a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml index 7e86b122e3e..3919fce1bb7 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml @@ -84,6 +84,40 @@ android:textStyle="bold" /> + + + + + + + + + + + + + - - - - - - - - - - - - - Markierungs Position setzen Kurstyp Kursmarkierungen - Längengrad - Breitengrad Position setzen Position zurücksetzen Empfangen der Markierungen.. diff --git a/mobile/com.sap.sailing.buoy.positioning/res/values/strings.xml b/mobile/com.sap.sailing.buoy.positioning/res/values/strings.xml index 0144df93890..000c8812703 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/values/strings.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/values/strings.xml @@ -5,8 +5,8 @@ Set Mark Position Course Type Marks - Longitude - Latitude + Lng + Lat Set Position Reset Position Getting race marks.. diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java index ca0fd21614f..e383b73ccfd 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java @@ -59,6 +59,7 @@ public class BuoyFragment extends BaseFragment implements LocationListener { setPositionButton = (OpenSansButton) view .findViewById(R.id.marker_set_position_button); + setPositionButton.setVisibility(View.GONE); setPositionButton.setOnClickListener(clickListener); resetPositionButton = (OpenSansButton) view @@ -76,12 +77,13 @@ public class BuoyFragment extends BaseFragment implements LocationListener { MarkInfo mark = ((PositioningActivity) getActivity()).getMarkInfo(); if (mark != null) { markHeaderTextView.setText(mark.getName()); - setUpPingUI(); + setUpTextUI(lastKnownLocation); setUpMap(); } if(lastKnownLocation != null) { LatLng lastKnownLatLng = new LatLng(lastKnownLocation.getLatitude(),lastKnownLocation.getLongitude()); mapFragment.getMap().animateCamera(CameraUpdateFactory.newLatLngZoom(lastKnownLatLng,15)); + setPositionButton.setVisibility(View.VISIBLE); } } @@ -92,23 +94,41 @@ public class BuoyFragment extends BaseFragment implements LocationListener { locationManager.removeUpdates(this); } - public void setUpPingUI() { + public void setUpTextUI(Location location) { + String longitudeText = ""; + String latitudeText = ""; + String accuracyText = ""; + if(location != null){ + latitudeText += location.getLatitude(); + longitudeText += location.getLongitude(); + accuracyText += "~" + location.getAccuracy(); + } + else{ + latitudeText += "n/a"; + longitudeText += "n/a"; + accuracyText += "n/a"; + } MarkPingInfo markPing = ((PositioningActivity) getActivity()) .getMarkPing(); if (markPing != null) { - double savedLatitude = Double.parseDouble(markPing.getLattitude()); + double savedLatitude = Double.parseDouble(markPing.getLatitude()); double savedLongitude = Double.parseDouble(markPing.getLongitude()); savedPosition = new LatLng(savedLatitude, savedLongitude); - latitudeTextView.setText(markPing.getLattitude()); - longitudeTextView.setText(markPing.getLongitude()); - accuracyTextView.setText("~" + markPing.getAccuracy()); + latitudeText += " (" +markPing.getLatitude() + ")"; + longitudeText += " (" +markPing.getLongitude() + ")"; + accuracyText += " (" + "~" + markPing.getAccuracy() + ")"; } + latitudeTextView.setText(latitudeText); + longitudeTextView.setText(longitudeText); + accuracyTextView.setText(accuracyText); } @Override public void onLocationChanged(Location location) { if(getActivity() instanceof PositioningActivity) { lastKnownLocation = location; + setPositionButton.setVisibility(View.VISIBLE); + setUpTextUI(lastKnownLocation); setUpMap(); } } @@ -191,9 +211,10 @@ public class BuoyFragment extends BaseFragment implements LocationListener { lastKnownLocation, mark); helper.sendPingToServer(getActivity(), lastKnownLocation, leaderBoard, mark); + ((PositioningActivity) getActivity()).updatePing(); savedPosition = new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()); pingListener.updatePing(); - setUpPingUI(); + setUpTextUI(lastKnownLocation); } else { Toast.makeText(getActivity(), "Location is not available yet", Toast.LENGTH_LONG).show(); } diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java index 4bf7c01b630..2d9892bcf2e 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/CheckinManager.java @@ -171,7 +171,7 @@ public class CheckinManager { if (!jsonMark.get("position").equals(null)) { JSONObject positionJson = jsonMark.getJSONObject("position"); MarkPingInfo ping = new MarkPingInfo(); - ping.setLattitude(positionJson.getString("latitude")); + ping.setLatitude(positionJson.getString("latitude")); ping.setLongitude(positionJson.getString("longitude")); ping.setTimestamp(positionJson.getInt("timestamp")); ping.setAccuracy(positionJson.getDouble("accuracy")); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java index 4f729b8094f..42beb70db84 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/DatabaseHelper.java @@ -100,7 +100,7 @@ public class DatabaseHelper { markPingInfo.setMarkId(markID); markPingInfo.setTimestamp(mpc.getInt((mpc.getColumnIndex(MarkPing.MARK_PING_TIMESTAMP)))); markPingInfo.setLongitude(mpc.getString((mpc.getColumnIndex(MarkPing.MARK_PING_LONGITUDE)))); - markPingInfo.setLattitude(mpc.getString((mpc.getColumnIndex(MarkPing.MARK_PING_LATITUDE)))); + markPingInfo.setLatitude(mpc.getString((mpc.getColumnIndex(MarkPing.MARK_PING_LATITUDE)))); markPingInfo.setAccuracy(mpc.getDouble((mpc.getColumnIndex(MarkPing.MARK_PING_ACCURACY)))); marks.add(markPingInfo); mpc.moveToNext(); @@ -211,7 +211,7 @@ public class DatabaseHelper { ArrayList opList = new ArrayList(); ContentValues mpcv = new ContentValues(); mpcv.put(MarkPing.MARK_ID, markPing.getMarkId()); - mpcv.put(MarkPing.MARK_PING_LATITUDE, markPing.getLattitude()); + mpcv.put(MarkPing.MARK_PING_LATITUDE, markPing.getLatitude()); mpcv.put(MarkPing.MARK_PING_LONGITUDE, markPing.getLongitude()); mpcv.put(MarkPing.MARK_PING_ACCURACY, markPing.getAccuracy()); mpcv.put(MarkPing.MARK_PING_TIMESTAMP, markPing.getTimestamp()); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java index 9ec1034d20e..54b4d868bc0 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/util/PingHelper.java @@ -49,7 +49,7 @@ public class PingHelper { MarkInfo mark) throws GeneralDatabaseHelperException { MarkPingInfo pingInfo = new MarkPingInfo(); pingInfo.setMarkId(mark.getId()); - pingInfo.setLattitude(""+ location.getLatitude()); + pingInfo.setLatitude("" + location.getLatitude()); pingInfo.setLongitude("" + location.getLongitude()); pingInfo.setAccuracy(location.getAccuracy()); pingInfo.setTimestamp((int) location.getTime()); diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/MarkPingInfo.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/MarkPingInfo.java index fa74950d0c5..bc432124e4f 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/MarkPingInfo.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/valueobjects/MarkPingInfo.java @@ -3,7 +3,7 @@ package com.sap.sailing.android.buoy.positioning.app.valueobjects; public class MarkPingInfo { private String markId; private String longitude; - private String lattitude; + private String latitude; private double accuracy; private int timestamp; @@ -23,12 +23,12 @@ public class MarkPingInfo { this.longitude = longitude; } - public String getLattitude() { - return lattitude; + public String getLatitude() { + return latitude; } - public void setLattitude(String lattitude) { - this.lattitude = lattitude; + public void setLatitude(String latitude) { + this.latitude = latitude; } public double getAccuracy() { From 56dc4652175dd272f76f523daee18790926092dc Mon Sep 17 00:00:00 2001 From: Bennet Brunsen Date: Mon, 30 Mar 2015 16:30:44 +0200 Subject: [PATCH 18/18] Implements missing accuracy signal --- .../layout/fragment_buoy_postion_detail.xml | 11 ++-- .../app/ui/fragments/BuoyFragment.java | 63 ++++++++++++++----- 2 files changed, 55 insertions(+), 19 deletions(-) diff --git a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml index 3919fce1bb7..a852febf720 100644 --- a/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml +++ b/mobile/com.sap.sailing.buoy.positioning/res/layout/fragment_buoy_postion_detail.xml @@ -78,14 +78,19 @@ android:id="@+id/marker_gps_accuracy" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="" + android:layout_marginRight="5dp" android:textColor="@color/white" android:textSize="20sp" android:textStyle="bold" /> + + - + @@ -147,7 +151,6 @@ android:id="@+id/marker_gps_longitude" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="" android:textColor="@color/white" android:textSize="20sp" /> diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java index e383b73ccfd..051af77ad3e 100644 --- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java +++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/BuoyFragment.java @@ -25,6 +25,7 @@ import com.sap.sailing.android.buoy.positioning.app.valueobjects.MarkPingInfo; import com.sap.sailing.android.shared.data.LeaderboardInfo; import com.sap.sailing.android.shared.ui.customviews.OpenSansButton; import com.sap.sailing.android.shared.ui.customviews.OpenSansTextView; +import com.sap.sailing.android.shared.ui.customviews.SignalQualityIndicatorView; import com.sap.sailing.android.ui.fragments.BaseFragment; public class BuoyFragment extends BaseFragment implements LocationListener { @@ -39,6 +40,7 @@ public class BuoyFragment extends BaseFragment implements LocationListener { private LatLng savedPosition; private LocationManager locationManager; private pingListener pingListener; + private SignalQualityIndicatorView signalQualityIndicatorView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -66,6 +68,9 @@ public class BuoyFragment extends BaseFragment implements LocationListener { .findViewById(R.id.marker_reset_position_button); resetPositionButton.setOnClickListener(clickListener); resetPositionButton.setVisibility(View.GONE); + + signalQualityIndicatorView = (SignalQualityIndicatorView) view.findViewById(R.id.signal_quality_indicator); + signalQualityIndicatorView.setSignalQuality(GPSQuality.noSignal.toInt()); return view; } @@ -80,10 +85,11 @@ public class BuoyFragment extends BaseFragment implements LocationListener { setUpTextUI(lastKnownLocation); setUpMap(); } - if(lastKnownLocation != null) { - LatLng lastKnownLatLng = new LatLng(lastKnownLocation.getLatitude(),lastKnownLocation.getLongitude()); - mapFragment.getMap().animateCamera(CameraUpdateFactory.newLatLngZoom(lastKnownLatLng,15)); + if (lastKnownLocation != null) { + LatLng lastKnownLatLng = new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()); + mapFragment.getMap().animateCamera(CameraUpdateFactory.newLatLngZoom(lastKnownLatLng, 15)); setPositionButton.setVisibility(View.VISIBLE); + reportGPSQuality(lastKnownLocation.getAccuracy()); } } @@ -98,12 +104,11 @@ public class BuoyFragment extends BaseFragment implements LocationListener { String longitudeText = ""; String latitudeText = ""; String accuracyText = ""; - if(location != null){ + if (location != null) { latitudeText += location.getLatitude(); longitudeText += location.getLongitude(); accuracyText += "~" + location.getAccuracy(); - } - else{ + } else { latitudeText += "n/a"; longitudeText += "n/a"; accuracyText += "n/a"; @@ -114,8 +119,8 @@ public class BuoyFragment extends BaseFragment implements LocationListener { double savedLatitude = Double.parseDouble(markPing.getLatitude()); double savedLongitude = Double.parseDouble(markPing.getLongitude()); savedPosition = new LatLng(savedLatitude, savedLongitude); - latitudeText += " (" +markPing.getLatitude() + ")"; - longitudeText += " (" +markPing.getLongitude() + ")"; + latitudeText += " (" + markPing.getLatitude() + ")"; + longitudeText += " (" + markPing.getLongitude() + ")"; accuracyText += " (" + "~" + markPing.getAccuracy() + ")"; } latitudeTextView.setText(latitudeText); @@ -125,8 +130,9 @@ public class BuoyFragment extends BaseFragment implements LocationListener { @Override public void onLocationChanged(Location location) { - if(getActivity() instanceof PositioningActivity) { + if (getActivity() instanceof PositioningActivity) { lastKnownLocation = location; + reportGPSQuality(lastKnownLocation.getAccuracy()); setPositionButton.setVisibility(View.VISIBLE); setUpTextUI(lastKnownLocation); setUpMap(); @@ -135,21 +141,21 @@ public class BuoyFragment extends BaseFragment implements LocationListener { @Override public void onStatusChanged(String provider, int status, Bundle extras) { - if(getActivity() instanceof PositioningActivity) { + if (getActivity() instanceof PositioningActivity) { initLocationProvider(); } } @Override public void onProviderEnabled(String provider) { - if(getActivity() instanceof PositioningActivity) { + if (getActivity() instanceof PositioningActivity) { initLocationProvider(); } } @Override public void onProviderDisabled(String provider) { - if(getActivity() instanceof PositioningActivity) { + if (getActivity() instanceof PositioningActivity) { initLocationProvider(); } } @@ -158,7 +164,7 @@ public class BuoyFragment extends BaseFragment implements LocationListener { locationManager = (LocationManager) getActivity().getSystemService( Context.LOCATION_SERVICE); locationManager.removeUpdates(this); - locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f, this); + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, this); } public void setUpMap() { @@ -175,8 +181,7 @@ public class BuoyFragment extends BaseFragment implements LocationListener { savedLocactionOptions.visible(true); map.addMarker(savedLocactionOptions); } - if(lastKnownLocation != null) - { + if (lastKnownLocation != null) { MarkerOptions mySelfOptions = new MarkerOptions(); LatLng lastKnownLatLng = new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()); mySelfOptions.position(lastKnownLatLng); @@ -186,10 +191,38 @@ public class BuoyFragment extends BaseFragment implements LocationListener { } + public void reportGPSQuality(float gpsAccuracy) { + GPSQuality quality = GPSQuality.noSignal; + + if (gpsAccuracy > 48) { + quality = GPSQuality.poor; + } else if (gpsAccuracy > 10) { + quality = GPSQuality.good; + } else if (gpsAccuracy <= 10) { + quality = GPSQuality.great; + } + signalQualityIndicatorView.setSignalQuality(quality.toInt()); + + } + public void setPingListener(pingListener listener) { pingListener = listener; } + public enum GPSQuality { + noSignal(0), poor(2), good(3), great(4); + + private final int gpsQuality; + + GPSQuality(int quality) { + this.gpsQuality = quality; + } + + public int toInt() { + return this.gpsQuality; + } + } + public interface pingListener { public void updatePing(); }