diff --git a/build.gradle b/build.gradle
index 1045a4526e0..2837d4f37e8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -34,7 +34,7 @@ ext {
support = "22.2.1"
play_services = "7.3.0"
- license_dialog = "1.7.0"
+ license_dialog = "1.8.0"
// testing - jvm
junit = "4.12"
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 31697c24644..ec9146f6399 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
@@ -36,7 +36,6 @@
Datenschutzbestimmungen
Mit der Verwendung dieser App stimmen Sie den Datenschutzbestimmungen der SAP SE zu. Die Datenschutzbestimmungen finden Sie hier.
Zustimmen
- Überspringen
hier
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 22ad7645e3e..d99764d0e89 100644
--- a/mobile/com.sap.sailing.android.shared/res/values/strings.xml
+++ b/mobile/com.sap.sailing.android.shared/res/values/strings.xml
@@ -52,7 +52,6 @@
EULA
By using this App you confirm to accept the SAP SE end user license agreement. Please read this EULA here.
Confirm
- Skip
here
diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/ResilientActivity.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/ResilientActivity.java
index 86d836964e0..45a807888ca 100644
--- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/ResilientActivity.java
+++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/ui/activities/ResilientActivity.java
@@ -35,5 +35,6 @@ public class ResilientActivity extends LoggableActivity {
protected void fadeActivity(Intent intent) {
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
+ finish();
}
}
diff --git a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/EulaHelper.java b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/EulaHelper.java
index 1182622fa4f..a897b56f2c2 100644
--- a/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/EulaHelper.java
+++ b/mobile/com.sap.sailing.android.shared/src/com/sap/sailing/android/shared/util/EulaHelper.java
@@ -17,78 +17,76 @@ import android.widget.TextView;
import com.sap.sailing.android.shared.R;
public class EulaHelper {
-
private static final String EULA_PREFERENCES = "eula.preferences";
- private static final String EULA_CONFIRMED = "eula.confirmed";
+ private static final String EULA_CONFIRMED = "confirmed";
+
+ private static final int NO_THEME = 0;
+
+ private Context mContext;
+
+ private EulaHelper(Context context) {
+ mContext = context;
+ }
+
+ public static EulaHelper with(Context context) {
+ return new EulaHelper(context);
+ }
+
+ public void showEulaDialog() {
+ showEulaDialog(NO_THEME);
+ }
+
+ public void showEulaDialog(@StyleRes int theme) {
+ AlertDialog.Builder builder;
+ switch (theme) {
+ case NO_THEME:
+ builder = new AlertDialog.Builder(mContext);
+ break;
+
+ default:
+ builder = new AlertDialog.Builder(mContext, theme);
+ }
- public static void showTrackingEulaDialog(final Context context) {
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.eula_title);
- builder.setMessage(getSpannableMessage(context));
+ builder.setMessage(getSpannableMessage());
builder.setCancelable(false);
builder.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- storeEulaAccepted(context);
+ storeEulaAccepted();
}
});
AlertDialog alertDialog = builder.show();
((TextView)alertDialog.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
}
-
- public static void showEulaDialog(final Context context, @StyleRes int theme) {
- AlertDialog.Builder builder = new AlertDialog.Builder(context, theme);
- builder.setTitle(R.string.eula_title);
- builder.setMessage(getSpannableMessage(context));
- builder.setCancelable(false);
- builder.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- storeEulaAccepted(context);
- }
- });
- builder.setNegativeButton(R.string.skip, null);
- AlertDialog alertDialog = builder.show();
- ((TextView)alertDialog.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance());
- }
-
- private static void storeEulaAccepted(Context context) {
- SharedPreferences preferences = context.getApplicationContext().getSharedPreferences(EULA_PREFERENCES, Context.MODE_PRIVATE);
+ private void storeEulaAccepted() {
+ SharedPreferences preferences = mContext.getSharedPreferences(EULA_PREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(EULA_CONFIRMED, true);
- editor.apply();
+ editor.commit();
}
- public static boolean isEulaAccepted(Context context) {
- boolean accepted = false;
- SharedPreferences preferences = context.getApplicationContext().getSharedPreferences(EULA_PREFERENCES, Context.MODE_PRIVATE);
- if (preferences.contains(EULA_CONFIRMED)) {
- accepted = preferences.getBoolean(EULA_CONFIRMED, false);
- }
- return accepted;
+ public boolean isEulaAccepted() {
+ SharedPreferences preferences = mContext.getSharedPreferences(EULA_PREFERENCES, Context.MODE_PRIVATE);
+ return preferences.getBoolean(EULA_CONFIRMED, false);
}
- public static void openEulaPage(Context context) {
- String url = context.getString(R.string.eula_url);
+ public void openEulaPage() {
+ String url = mContext.getString(R.string.eula_url);
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
- context.startActivity(browserIntent);
+ mContext.startActivity(browserIntent);
}
- /**
- * Prepare text for dialog with clickable text part.
- * @param context
- * @return
- */
- private static SpannableString getSpannableMessage(final Context context) {
- String message = context.getString(R.string.eula_message);
- String clickableText = context.getString(R.string.linked_eula_message_part);
+ private SpannableString getSpannableMessage() {
+ String message = mContext.getString(R.string.eula_message);
+ String clickableText = mContext.getString(R.string.linked_eula_message_part);
SpannableString spannableString = new SpannableString(message);
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
- openEulaPage(context);
+ openEulaPage();
}
};
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/StartActivity.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/StartActivity.java
index 10b88e73454..1e4963ff1f2 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/StartActivity.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/activities/StartActivity.java
@@ -51,8 +51,8 @@ public class StartActivity extends AbstractStartActivity {
@Override
protected void onResume() {
super.onResume();
- if (!EulaHelper.isEulaAccepted(this)) {
- EulaHelper.showTrackingEulaDialog(this);
+ if (!EulaHelper.with(this).isEulaAccepted()) {
+ EulaHelper.with(this).showEulaDialog();
}
}
diff --git a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/AboutFragment.java b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/AboutFragment.java
index ba3b73f24bc..7d6f5906003 100644
--- a/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/AboutFragment.java
+++ b/mobile/com.sap.sailing.android.tracking.app/src/com/sap/sailing/android/tracking/app/ui/fragments/AboutFragment.java
@@ -37,7 +37,7 @@ public class AboutFragment extends com.sap.sailing.android.ui.fragments.BaseFrag
view.findViewById(R.id.eula_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- EulaHelper.openEulaPage(getActivity());
+ EulaHelper.with(getActivity()).openEulaPage();
}
});
OpenSansTextView versionTextView = (OpenSansTextView) view.findViewById(R.id.system_information_application_version);
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 43c685403f6..b66c8205299 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
@@ -24,13 +24,9 @@ public class StartActivity extends AbstractStartActivity {
getSupportActionBar().setHomeButtonEnabled(false);
}
replaceFragment(R.id.content_frame, new HomeFragment());
- }
- @Override
- protected void onResume() {
- super.onResume();
- if (!EulaHelper.isEulaAccepted(this)) {
- EulaHelper.showEulaDialog(this, R.style.Base_Theme_AppCompat_Dialog_Alert);
+ if (!EulaHelper.with(this).isEulaAccepted()) {
+ EulaHelper.with(this).showEulaDialog(R.style.Base_Theme_AppCompat_Dialog_Alert);
}
}
diff --git a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/AboutFragment.java b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/AboutFragment.java
index 80259c8be9b..0c9e56c2652 100644
--- a/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/AboutFragment.java
+++ b/mobile/com.sap.sailing.buoy.positioning/src/com/sap/sailing/android/buoy/positioning/app/ui/fragments/AboutFragment.java
@@ -38,7 +38,7 @@ public class AboutFragment extends BaseFragment {
view.findViewById(R.id.eula_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- EulaHelper.openEulaPage(getActivity());
+ EulaHelper.with(getActivity()).openEulaPage();
}
});
OpenSansTextView versionTextView = (OpenSansTextView) view.findViewById(R.id.system_information_application_version);
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_add_42dp_dark.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_add_42dp_dark.png
new file mode 100644
index 00000000000..89bee0d0863
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_add_42dp_dark.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_add_42dp_light.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_add_42dp_light.png
new file mode 100644
index 00000000000..8758e50ffc4
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_add_42dp_light.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_add_42dp_yellow.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_add_42dp_yellow.png
new file mode 100644
index 00000000000..e2012073925
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/ic_add_42dp_yellow.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_add_42dp_dark.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_add_42dp_dark.png
new file mode 100644
index 00000000000..3a05ccbed4d
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_add_42dp_dark.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_add_42dp_light.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_add_42dp_light.png
new file mode 100644
index 00000000000..4e1fda2e4dc
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_add_42dp_light.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_add_42dp_yellow.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_add_42dp_yellow.png
new file mode 100644
index 00000000000..a52474b76a2
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/ic_add_42dp_yellow.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_add_42dp_dark.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_add_42dp_dark.png
new file mode 100644
index 00000000000..463a0f75eaf
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_add_42dp_dark.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_add_42dp_light.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_add_42dp_light.png
new file mode 100644
index 00000000000..91325caba06
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_add_42dp_light.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_add_42dp_yellow.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_add_42dp_yellow.png
new file mode 100644
index 00000000000..d1294f47029
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/ic_add_42dp_yellow.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_add_42dp_dark.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_add_42dp_dark.png
new file mode 100644
index 00000000000..06c8db51a97
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_add_42dp_dark.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_add_42dp_light.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_add_42dp_light.png
new file mode 100644
index 00000000000..61380ee345a
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_add_42dp_light.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_add_42dp_yellow.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_add_42dp_yellow.png
new file mode 100644
index 00000000000..f2f86ba3dae
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/ic_add_42dp_yellow.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_add_42dp_dark.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_add_42dp_dark.png
new file mode 100644
index 00000000000..f0505bdf75a
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_add_42dp_dark.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_add_42dp_light.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_add_42dp_light.png
new file mode 100644
index 00000000000..24c6aed30cb
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_add_42dp_light.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_add_42dp_yellow.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_add_42dp_yellow.png
new file mode 100644
index 00000000000..3a0fe2ca235
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/ic_add_42dp_yellow.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/ic_add_dark.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/ic_add_dark.xml
new file mode 100644
index 00000000000..d80a53ee7fd
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/ic_add_dark.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/ic_add_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/ic_add_light.xml
new file mode 100644
index 00000000000..c2859eadf74
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/ic_add_light.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/course_marks_waypoint_item.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/course_marks_waypoint_item.xml
index 2a02ee6da4f..cd610757ec4 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/course_marks_waypoint_item.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/course_marks_waypoint_item.xml
@@ -96,7 +96,7 @@
android:id="@+id/add_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:src="@drawable/ic_add_42dp" />
+ android:src="?attr/add" />
-
-
+ android:orientation="horizontal">
-
-
+ android:layout_weight="1">
-
+
+
-
+
+
+
+
+
-
-
-
\ No newline at end of file
+ android:layout_centerInParent="true"
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="42dp"
+ android:text="@string/add_waypoint"
+ android:textAppearance="?attr/textXSmall"
+ android:textColor="?attr/white" />
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_main_normal.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_main_normal.xml
index 34c95c6c121..7b7fbbaa60e 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_main_normal.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_main_normal.xml
@@ -41,6 +41,22 @@
android:layout_below="@id/panels_pager"
android:background="?attr/sap_gray">
+
+
+
+
-
+ layout="@layout/race_schedule_course_header" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
+
+
-
-
+ android:textSize="@dimen/textSize_18" />
@@ -110,7 +59,9 @@
android:id="@+id/new_course"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_above="@id/bottom_bar"/>
+ android:layout_above="@id/bottom_bar"
+ android:layout_marginLeft="@dimen/side_padding"
+ android:layout_marginRight="@dimen/side_padding" />
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_marks_xlarge.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_marks_xlarge.xml
index c5d7c25f497..5a2f8504628 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_marks_xlarge.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_marks_xlarge.xml
@@ -60,27 +60,33 @@
android:orientation="horizontal">
+ android:layout_marginLeft="10dp"
+ android:layout_marginRight="10dp"
+ android:text="@string/take_previous" />
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="10dp"
+ android:layout_marginRight="10dp"
+ android:text="@string/publish" />
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_summary.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_summary.xml
index 32c2a115bf6..4eaf3fc36e8 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_summary.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_summary.xml
@@ -48,7 +48,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_weight="2"
+ android:layout_weight="15"
android:text="@string/race_summary_start"
android:textColor="?attr/white"
android:textSize="@dimen/finished_default_text_size"/>
@@ -59,7 +59,6 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/default_margin_half"
- android:layout_marginRight="@dimen/default_margin_half"
android:src="?attr/create"
android:visibility="invisible"
tools:visibility="visible"/>
@@ -69,16 +68,16 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:gravity="right"
+ android:layout_weight="8"
android:textColor="?attr/white"
android:textSize="@dimen/finished_default_text_size"
- tools:text="11:00:00"/>
+ tools:text="11:00:00"
+ android:gravity="center_horizontal" />
+ android:layout_weight="10"/>
@@ -102,7 +101,6 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/default_margin_half"
- android:layout_marginRight="@dimen/default_margin_half"
android:src="?attr/create"
android:visibility="visible"/>
@@ -111,8 +109,8 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:gravity="right"
+ android:layout_weight="8"
+ android:gravity="center_horizontal"
android:textColor="?attr/white"
android:textSize="@dimen/finished_default_text_size"
tools:text="11:12:18"/>
@@ -122,11 +120,11 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_weight="1"
+ android:layout_weight="10"
android:gravity="right"
android:textColor="?attr/white"
android:textSize="@dimen/finished_default_text_size"
- tools:text="12' 18"/>
+ tools:text="18h 12' 18''"/>
@@ -150,7 +148,6 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/default_margin_half"
- android:layout_marginRight="@dimen/default_margin_half"
android:src="?attr/create"
android:visibility="visible"/>
@@ -159,22 +156,22 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_weight="1"
- android:gravity="right"
+ android:layout_weight="8"
android:textColor="?attr/white"
android:textSize="@dimen/finished_default_text_size"
- tools:text="11:16:36"/>
+ tools:text="11:16:36"
+ android:gravity="center_horizontal" />
+ tools:text="0h 16' 36''"/>
@@ -197,11 +194,11 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_weight="2"
+ android:layout_weight="20"
android:gravity="right"
android:textColor="?attr/white"
android:textSize="@dimen/finished_default_text_size"
- tools:text="04' 18"/>
+ tools:text="0h 04' 18''"/>
+ android:focusableInTouchMode="true">
-
+ android:orientation="vertical">
+
+
+
+
+
+ android:layout_above="@id/button_bar">
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml b/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml
index d2b44fe76f7..dfc1061a463 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values-de/strings.xml
@@ -88,7 +88,7 @@
Veröffentlichen
Zurücknehmen
- Vorherigen Kurs übernehmen
+ Kurs übernehmen
übernehmen
Bild der Bahnmarke
Abbrechen
@@ -450,5 +450,11 @@
Vorheriger Kurs
Kurs Layout
°
+ Wegpunkt hinzufügen
+ Unpublished course design
+ Neu
+ Zurücksetzen
+ Soll die Liste komplett gelöscht werden?
+ Soll die Liste zum letzten bekannten Stand zurückgesetzt werden?
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/attrs.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/attrs.xml
index bed82addbf7..62a438146bd 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/attrs.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/attrs.xml
@@ -38,6 +38,7 @@
+
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
index bb576cc6920..48ac7513ed2 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
@@ -476,5 +476,11 @@
Previous Course
Course Layout
°
+ Press plus to add waypoint
+ Unpublished course design
+ New
+ Reset
+ Do you want to clear the list?
+ Do you want to reset to the last state?
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/themes_dark.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/themes_dark.xml
index 9a7ece02ee5..45290a18292 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/themes_dark.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/themes_dark.xml
@@ -51,6 +51,7 @@
- @style/AppTheme.Dark.Text.FloatLabel
+ - @drawable/ic_add_dark
- @drawable/ic_access_time_white_18dp
- @drawable/ic_access_time_white_24dp
- @drawable/ic_access_time_white_36dp
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/themes_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/themes_light.xml
index cce3edaca2f..3f393737b9b 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/themes_light.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/themes_light.xml
@@ -60,6 +60,7 @@
- @style/AppTheme.Light.Text.FloatLabel
+ - @drawable/ic_add_light
- @drawable/ic_access_time_black_18dp
- @drawable/ic_access_time_black_24dp
- @drawable/ic_access_time_black_36dp
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java
index 527e9dfc1b7..b327cd70efc 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/InMemoryDataStore.java
@@ -141,10 +141,10 @@ public enum InMemoryDataStore implements DataStore {
}
public void addRace(ManagedRace race) {
- managedRaceById.put(convertManagedRaceIdentiferToSimpleRaceLogIdentifier(race.getIdentifier()), race);
+ managedRaceById.put(convertManagedRaceIdentifierToSimpleRaceLogIdentifier(race.getIdentifier()), race);
}
- private SimpleRaceLogIdentifier convertManagedRaceIdentiferToSimpleRaceLogIdentifier(ManagedRaceIdentifier id) {
+ private SimpleRaceLogIdentifier convertManagedRaceIdentifierToSimpleRaceLogIdentifier(ManagedRaceIdentifier id) {
return new SimpleRaceLogIdentifierImpl(id.getRaceGroup().getName(), id.getRaceName(), id.getFleet().getName());
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java
index 4f0a4fa3fd2..84f25df7b6e 100755
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivity.java
@@ -164,6 +164,7 @@ public class LoginActivity extends BaseActivity
intent.putExtra(AppConstants.COURSE_AREA_UUID_KEY, mSelectedCourseAreaUUID);
intent.putExtra(AppConstants.EventIdTag, mSelectedEventId);
startActivity(intent);
+ finish();
}
private Serializable selectEvent(EventBase event) {
@@ -315,6 +316,10 @@ public class LoginActivity extends BaseActivity
if (backdrop != null) {
backdrop.setOnClickListener(new BackdropClick());
}
+
+ if (!EulaHelper.with(this).isEulaAccepted()) {
+ EulaHelper.with(this).showEulaDialog(R.style.AppTheme_AlertDialog);
+ }
}
@Override
@@ -354,10 +359,6 @@ public class LoginActivity extends BaseActivity
GooglePlayServicesUtil.getErrorDialog(resultCode, this, 1).show();
}
}
-
- if (!EulaHelper.isEulaAccepted(this)) {
- EulaHelper.showEulaDialog(this, R.style.AppTheme_AlertDialog);
- }
}
@Override
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/PreferenceActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/PreferenceActivity.java
index e7cd8ccc699..dad3aca13a4 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/PreferenceActivity.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/PreferenceActivity.java
@@ -94,8 +94,8 @@ public class PreferenceActivity extends AppCompatActivity {
}
}
- disableStatusbarTranslucent();
- setStatusbarColor();
+ disableStatusBarTranslucent();
+ setStatusBarColor();
Fragment fragment = null;
if (getIntent() != null && getIntent().getExtras() != null) {
Bundle bundle = getIntent().getExtras();
@@ -129,7 +129,7 @@ public class PreferenceActivity extends AppCompatActivity {
}
@TargetApi(Build.VERSION_CODES.KITKAT)
- private void disableStatusbarTranslucent() {
+ private void disableStatusBarTranslucent() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
@@ -137,7 +137,7 @@ public class PreferenceActivity extends AppCompatActivity {
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
- private void setStatusbarColor() {
+ private void setStatusBarColor() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java
index f3a2f061309..e5b763631a5 100755
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/RacingActivity.java
@@ -17,6 +17,7 @@ import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
+import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.widget.DrawerLayout;
@@ -58,6 +59,7 @@ import com.sap.sailing.racecommittee.app.ui.fragments.RaceInfoFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceListFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceListFragment.RaceListCallbacks;
import com.sap.sailing.racecommittee.app.ui.fragments.WelcomeFragment;
+import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.BaseFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFinishingFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFlagViewerFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceSummaryFragment;
@@ -116,8 +118,38 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks
getLoaderManager().initLoader(RacesLoaderId, null, dataManager.createRacesLoader(courseArea.getId(), new RaceLoadClient(courseArea)));
}
+ private boolean resetEditFragments(@IdRes int id, String action) {
+ if (findViewById(id) != null) {
+ Fragment fragment = getFragmentManager().findFragmentById(id);
+ if (fragment == null) {
+ fragment = getFragmentManager().findFragmentById(R.id.protest_time_fragment);
+ } else {
+ if (fragment instanceof BaseFragment) {
+ BaseFragment base = (BaseFragment) fragment;
+ if (base.onBackPressed()) {
+ return true;
+ }
+ }
+ }
+ if (fragment != null) {
+ LocalBroadcastManager manager = LocalBroadcastManager.getInstance(this);
+ manager.sendBroadcast(new Intent(action));
+ manager.sendBroadcast(new Intent(AppConstants.INTENT_ACTION_CLEAR_TOGGLE));
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
public void onBackPressed() {
+ if (resetEditFragments(R.id.race_edit, AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT)) {
+ return;
+ }
+ if (resetEditFragments(R.id.finished_edit, AppConstants.INTENT_ACTION_SHOW_SUMMARY_CONTENT)) {
+ return;
+ }
+
Fragment fragment = getFragmentManager().findFragmentById(R.id.racing_view_container);
if (!(fragment instanceof RaceInfoFragment || fragment instanceof WelcomeFragment)) {
if (getFragmentManager().getBackStackEntryCount() > 0) {
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/SendingServiceAwareActivity.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/SendingServiceAwareActivity.java
index eed026f55cf..19b4bd7ad3f 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/SendingServiceAwareActivity.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/SendingServiceAwareActivity.java
@@ -71,6 +71,9 @@ public abstract class SendingServiceAwareActivity extends ResilientActivity {
Intent intent = new Intent(this, MessageSendingService.class);
ExLog.i(this, TAG, "bindSendingService");
+ if (sendingService != null) {
+ sendingService.setMessageSendingServiceLogger(sendingServiceConnection);
+ }
bindService(intent, sendingServiceConnection, Context.BIND_AUTO_CREATE);
}
@@ -79,6 +82,9 @@ public abstract class SendingServiceAwareActivity extends ResilientActivity {
super.onStop();
ExLog.i(this, TAG, "unbindSendingService");
+ if (sendingService != null) {
+ sendingService.setMessageSendingServiceLogger(null);
+ }
unbindService(sendingServiceConnection);
boundSendingService = false;
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/SystemInformationActivityHelper.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/SystemInformationActivityHelper.java
index ca60f902c50..500dd5a79f1 100755
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/SystemInformationActivityHelper.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/activities/SystemInformationActivityHelper.java
@@ -111,7 +111,7 @@ public class SystemInformationActivityHelper {
eulaButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- EulaHelper.openEulaPage(activity);
+ EulaHelper.with(activity).openEulaPage();
}
});
licenceButton.setOnClickListener(new OnClickListener() {
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/coursedesign/CourseElementAdapter.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/coursedesign/CourseElementAdapter.java
index 09dc33cbe29..fcdf2fc467c 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/coursedesign/CourseElementAdapter.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/coursedesign/CourseElementAdapter.java
@@ -4,6 +4,7 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -41,7 +42,6 @@ public class CourseElementAdapter extends BaseDraggableSwipeAdapter mElements;
private MarkImageHelper mImageHelper;
- private LongClick mLongClickListener;
private ItemClick mItemClickListener;
private EventListener mEventListener;
@@ -123,6 +123,9 @@ public class CourseElementAdapter extends BaseDraggableSwipeAdapter= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+ if (getParentFragment() != null) {
+ manager = getActivity().getFragmentManager();
+ }
+ }
+ FragmentTransaction transaction = manager.beginTransaction();
+ transaction.replace(idRes, fragment);
+ transaction.commit();
}
protected void showChangeDialog(DialogInterface.OnClickListener positiveButton) {
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/TimePanelFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/TimePanelFragment.java
index 7dd7483001f..9e7da8228d5 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/TimePanelFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/TimePanelFragment.java
@@ -135,7 +135,6 @@ public class TimePanelFragment extends BasePanelFragment {
}
}
-
if (mHeaderTime != null && startTime != null) {
String time;
int resId;
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/BaseFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/BaseFragment.java
index 532fef23799..c0618d74c00 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/BaseFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/BaseFragment.java
@@ -50,7 +50,8 @@ public class BaseFragment extends RaceFragment {
fragment.getArguments().putAll(getArguments());
}
FragmentTransaction transaction = getFragmentManager().beginTransaction();
- transaction.replace(viewId, fragment).commit();
+ transaction.replace(viewId, fragment);
+ transaction.commit();
}
protected void goHome() {
@@ -61,4 +62,8 @@ public class BaseFragment extends RaceFragment {
sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
}
}
+
+ public boolean onBackPressed() {
+ return false;
+ }
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragmentMarks.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragmentMarks.java
index f7dd6cddda7..18651d86cbd 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragmentMarks.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragmentMarks.java
@@ -60,7 +60,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
-public class CourseFragmentMarks extends CourseFragment implements CourseMarkAdapter.MarkClick, CourseElementAdapter.LongClick, CourseElementAdapter.EventListener, SelectionAdapter.ItemClick, CourseElementAdapter.ItemClick {
+public class CourseFragmentMarks extends CourseFragment implements CourseMarkAdapter.MarkClick, CourseElementAdapter.EventListener, CourseElementAdapter.ItemClick {
private ReadonlyDataManager mDataManager;
private RecyclerViewDragDropManager mDragDropManager;
@@ -69,16 +69,13 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
private ArrayList mHistory;
private ArrayList mElements;
private ArrayList mMarks;
- private ArrayList mItems;
private RecyclerView mHistoryCourse;
private RecyclerView mCurrentCourse;
private CourseElementAdapter mHistoryAdapter;
- private SelectionAdapter mAdapter;
private RecyclerView.Adapter mCourseAdapter;
- private ArrayList mLayouts;
- private TextView mHeaderCaption;
private CourseMarksDialogFragment mMarksDialog;
private int mId;
+ private Button mReset;
public CourseFragmentMarks() {
super();
@@ -87,7 +84,6 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
mHistory = new ArrayList<>();
mElements = new ArrayList<>();
mMarks = new ArrayList<>();
- mLayouts = new ArrayList<>();
}
public static CourseFragmentMarks newInstance(@START_MODE_VALUES int startMode) {
@@ -102,44 +98,42 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.race_schedule_course_marks, container, false);
- mHeaderCaption = ViewHelper.get(layout, R.id.header_caption);
-
- RelativeLayout selection = ViewHelper.get(layout, R.id.selection);
- if (selection != null) {
- mLayouts.add(selection);
- RecyclerView chooser = ViewHelper.get(layout, R.id.chooser);
- if (chooser != null) {
- mItems = new ArrayList<>();
- LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
- layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
- mAdapter = new SelectionAdapter(getActivity(), mItems, this);
- chooser.setLayoutManager(layoutManager);
- chooser.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS);
- chooser.setAdapter(mAdapter);
-
- Runnable prevRunnable = new Runnable() {
- @Override
- public void run() {
- showCourseLayout(R.id.course_prev, R.string.prev_course);
+ mReset = (Button) layout.findViewById(R.id.resetCourse);
+ if (mReset != null) {
+ mReset.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
+ builder.setTitle(mReset.getText());
+ if (mReset.getTag() != null) {
+ builder.setMessage(getString(R.string.reset_message_1));
+ builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ mElements.clear();
+ mCourseAdapter.notifyDataSetChanged();
+ mReset.setText(R.string.reset_state_2);
+ mReset.setTag(null);
+ }
+ });
+ builder.setNegativeButton(android.R.string.no, null);
+ } else {
+ builder.setMessage(getString(R.string.reset_message_2));
+ builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (getRace().getCourseDesign() != null && !getString(R.string.unpublished_course).equals(getRace().getCourseDesign().getName())) {
+ fillCourseElement();
+ } else {
+ copyPreviousToNewCourseDesign();
+ }
+ }
+ });
+ builder.setNegativeButton(android.R.string.no, null);
}
- };
- SelectionItem prevCourse = new SelectionItem(getString(R.string.prev_course), null, null, prevRunnable);
- mItems.add(prevCourse);
-
- Runnable newRunnable = new Runnable() {
- @Override
- public void run() {
- showCourseLayout(R.id.course_layout, R.string.layout_course);
- }
- };
- SelectionItem newCourse = new SelectionItem(getString(R.string.layout_course), null, null, newRunnable);
- mItems.add(newCourse);
- }
- }
-
- RelativeLayout coursePrev = ViewHelper.get(layout, R.id.course_prev);
- if (coursePrev != null) {
- mLayouts.add(coursePrev);
+ builder.show();
+ }
+ });
}
mHistoryCourse = (RecyclerView) layout.findViewById(R.id.previous_course);
@@ -151,10 +145,6 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
mHistoryCourse.setAdapter(mHistoryAdapter);
}
- RelativeLayout courseLayout = ViewHelper.get(layout, R.id.course_layout);
- if (courseLayout != null) {
- mLayouts.add(courseLayout);
- }
mCurrentCourse = ViewHelper.get(layout, R.id.new_course);
if (mCurrentCourse != null) {
mGuardManager = new RecyclerViewTouchActionGuardManager();
@@ -170,7 +160,6 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
CourseElementAdapter adapter = new CourseElementAdapter(getActivity(), mElements, ESSMarkImageHelper.getInstance(getActivity()), true);
- adapter.setLongClickListener(this);
adapter.setItemClickListener(this);
adapter.setEventListener(this);
@@ -199,11 +188,6 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
return layout;
}
- private void showCourseLayout(@IdRes int layout, @StringRes int stringId) {
- showLayout(layout);
- setHeaderCaption(stringId);
- }
-
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@@ -218,63 +202,77 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
fillPreviousCourseElementsWithLastPublishedCourseDesign();
if (getView() != null) {
- if (mHistory.isEmpty()) {
- showCourseLayout(R.id.course_layout, R.string.layout_course);
- } else {
- showCourseLayout(R.id.selection, 0);
+ if (getView().findViewById(R.id.course_layout) != null) {
+ if (!mHistory.isEmpty() && mElements.isEmpty()) {
+ copyPreviousToNewCourseDesign();
+ if (mReset != null) {
+ mReset.setText(getString(R.string.reset_state_1));
+ mReset.setTag(mReset);
+ }
+ }
}
Button takePrevious = (Button) getView().findViewById(R.id.takeHistoryCourse);
- takePrevious.setOnClickListener(new View.OnClickListener() {
+ if (takePrevious != null) {
+ takePrevious.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- if (!mHistory.isEmpty()) {
- if (!mElements.isEmpty()) {
- createUsePreviousCourseDialog();
+ @Override
+ public void onClick(View arg0) {
+ if (!mHistory.isEmpty()) {
+ if (!mElements.isEmpty()) {
+ createUsePreviousCourseDialog();
+ } else {
+ copyPreviousToNewCourseDesign();
+ }
} else {
- copyPreviousToNewCourseDesign();
+ String toastText = getString(R.string.error_no_course_to_copy);
+ Toast.makeText(getActivity(), toastText, Toast.LENGTH_LONG).show();
}
- } else {
- String toastText = getString(R.string.error_no_course_to_copy);
- Toast.makeText(getActivity(), toastText, Toast.LENGTH_LONG).show();
}
- }
- });
+ });
+ }
Button publish = (Button) getView().findViewById(R.id.publishCourse);
- publish.setOnClickListener(new View.OnClickListener() {
+ if (publish != null) {
+ publish.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- try {
- CourseBase courseData = convertCourseElementsToACourseData();
- sendCourseDataAndDismiss(courseData);
- } catch (IllegalStateException ex) {
- if (ex.getMessage().equals("Missing second mark")) {
- String toastText = getString(R.string.error_missing_second_mark);
- Toast.makeText(getActivity(), toastText, Toast.LENGTH_LONG).show();
- } else if (ex.getMessage().equals("Each waypoints needs passing instructions")) {
- String toastText = getString(R.string.error_missing_passing_instructions);
+ @Override
+ public void onClick(View arg0) {
+ try {
+ CourseBase courseData;
+ if (mElements.isEmpty() && getView().findViewById(R.id.course_layout) != null) {
+ courseData = new CourseDataImpl(getString(R.string.unpublished_course));
+ } else {
+ courseData = convertCourseElementsToACourseData();
+ }
+ sendCourseDataAndDismiss(courseData);
+ } catch (IllegalStateException ex) {
+ if (ex.getMessage().equals("Missing second mark")) {
+ String toastText = getString(R.string.error_missing_second_mark);
+ Toast.makeText(getActivity(), toastText, Toast.LENGTH_LONG).show();
+ } else if (ex.getMessage().equals("Each waypoints needs passing instructions")) {
+ String toastText = getString(R.string.error_missing_passing_instructions);
+ Toast.makeText(getActivity(), toastText, Toast.LENGTH_LONG).show();
+ }
+ } catch (IllegalArgumentException ex) {
+ String toastText = getString(R.string.error_no_way_point);
Toast.makeText(getActivity(), toastText, Toast.LENGTH_LONG).show();
}
-
- } catch (IllegalArgumentException ex) {
- String toastText = getString(R.string.error_no_way_point);
- Toast.makeText(getActivity(), toastText, Toast.LENGTH_LONG).show();
}
- }
- });
+ });
+ }
Button unpublish = (Button) getView().findViewById(R.id.unpublishCourse);
- unpublish.setOnClickListener(new View.OnClickListener() {
+ if (unpublish != null) {
+ unpublish.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- CourseBase emptyCourse = new CourseDataImpl("Unpublished course design");
- sendCourseDataAndDismiss(emptyCourse);
- }
- });
+ @Override
+ public void onClick(View arg0) {
+ CourseBase emptyCourse = new CourseDataImpl(getString(R.string.unpublished_course));
+ sendCourseDataAndDismiss(emptyCourse);
+ }
+ });
+ }
}
}
@@ -377,7 +375,7 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
}
@Override
- public void onItemLongClick(int type, CourseListDataElementWithIdImpl element) {
+ public void onItemEditClick(int type, CourseListDataElementWithIdImpl element) {
switch (type) {
case CourseElementAdapter.TOUCH_TYPE_AREA:
createPassingInstructionDialog(element);
@@ -419,9 +417,6 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
CourseListDataElement twoMarksCourseElement = getFirstTwoMarksCourseElementWithoutRightMark();
if (twoMarksCourseElement != null) {
twoMarksCourseElement.setRightMark(mark);
- if (mLayouts.size() != 0) {
- showCourseLayout(R.id.course_layout, R.string.layout_course);
- }
} else {
addNewCourseElementToList(mark);
}
@@ -451,6 +446,14 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
courseElement.setLeftMark(mark);
createPassingInstructionDialog(courseElement);
mId++;
+ setResetButton();
+ }
+
+ private void setResetButton() {
+ if (mReset != null && mReset.getTag() != null) {
+ mReset.setText(R.string.reset_state_1);
+ mReset.setTag(null);
+ }
}
private void createPassingInstructionDialog(final CourseListDataElementWithIdImpl courseElement) {
@@ -459,9 +462,6 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
public void onClick(DialogInterface dialog, int position) {
PassingInstruction pickedDirection = PassingInstruction.relevantValues()[position];
onPassingInstructionPicked(courseElement, pickedDirection);
- if (mLayouts.size() != 0) {
- showCourseLayout(R.id.course_layout, R.string.layout_course);
- }
}
});
builder.create().show();
@@ -489,7 +489,9 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
if (previousCourseData != null) {
mHistory.clear();
mHistory.addAll(convertCourseDesignToCourseElements(previousCourseData));
- mHistoryAdapter.notifyDataSetChanged();
+ if (mHistoryAdapter != null) {
+ mHistoryAdapter.notifyDataSetChanged();
+ }
}
}
@@ -518,9 +520,6 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
mElements.clear();
mElements.addAll(mHistory);
mCourseAdapter.notifyDataSetChanged();
- if (mLayouts.size() != 0) {
- showCourseLayout(R.id.course_layout, R.string.layout_course);
- }
}
protected CourseBase convertCourseElementsToACourseData() throws IllegalStateException, IllegalArgumentException {
@@ -585,70 +584,6 @@ public class CourseFragmentMarks extends CourseFragment implements CourseMarkAda
@Override
public void onItemRemoved(int position) {
- // do nothing - later maybe show "undo" or something
- }
-
- @Override
- public void onItemClick(Runnable runnable) {
- if (runnable != null) {
- Handler handler = new Handler();
- handler.post(runnable);
- }
- }
-
- @Override
- protected void goHome() {
- if (mLayouts.size() == 0) {
- super.goHome();
- } else {
- switch (getCurrentFrame()) {
- case R.id.course_prev:
- showCourseLayout(R.id.selection, 0);
- break;
-
- case R.id.course_layout:
- if (mHistory.isEmpty()) {
- super.goHome();
- } else {
- showCourseLayout(R.id.selection, 0);
- }
- break;
-
- default:
- super.goHome();
- break;
- }
- }
- }
-
- private void showLayout(@IdRes int id) {
- for (View layout : mLayouts) {
- layout.setVisibility(View.GONE);
- if (layout.getId() == id) {
- layout.setVisibility(View.VISIBLE);
- }
- }
- }
-
- private int getCurrentFrame() {
- int id = 0;
- for (View layout : mLayouts) {
- if (layout.getVisibility() == View.VISIBLE) {
- id = layout.getId();
- break;
- }
- }
- return id;
- }
-
- private void setHeaderCaption(@StringRes int id) {
- if (mHeaderCaption != null) {
- if (id != 0) {
- String course = getString(R.string.course);
- mHeaderCaption.setText(String.format("%s - %s", course, getString(id)));
- } else {
- mHeaderCaption.setText(getString(R.string.course));
- }
- }
+ setResetButton();
}
}
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/WindFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/WindFragment.java
index 2924ddafb21..ac482d98e6c 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/WindFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/WindFragment.java
@@ -44,6 +44,7 @@ import com.sap.sailing.racecommittee.app.ui.views.AccuracyView;
import com.sap.sailing.racecommittee.app.ui.views.CompassView;
import com.sap.sailing.racecommittee.app.ui.views.CompassView.CompassDirectionListener;
import com.sap.sailing.racecommittee.app.utils.DecimalInputTextWatcher;
+import com.sap.sailing.racecommittee.app.utils.GeoUtils;
import com.sap.sailing.racecommittee.app.utils.RangeInputFilter;
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
import com.sap.sailing.racecommittee.app.utils.TimeUtils;
@@ -51,8 +52,10 @@ import com.sap.sailing.racecommittee.app.utils.WindHelper;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
+import java.lang.ref.WeakReference;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Locale;
public class WindFragment extends BaseFragment
implements CompassDirectionListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener,
@@ -93,6 +96,8 @@ public class WindFragment extends BaseFragment
private RacePositionsPoller positionPoller;
+ private IsTrackedReceiver mReceiver;
+
public static WindFragment newInstance(@START_MODE_VALUES int startMode) {
WindFragment fragment = new WindFragment();
Bundle args = new Bundle();
@@ -110,7 +115,7 @@ public class WindFragment extends BaseFragment
ArrayList numbers = new ArrayList<>();
String kn = getString(R.string.wind_kn);
for (float i = MIN_KTS; i <= MAX_KTS; i += .5f) {
- numbers.add(String.format("%.1f ", i) + kn);
+ numbers.add(String.format(Locale.US, "%.1f ", i) + kn);
}
return numbers.toArray(new String[numbers.size()]);
}
@@ -121,10 +126,6 @@ public class WindFragment extends BaseFragment
// initialize the googleApiClient for location requests
apiClient = new GoogleApiClient.Builder(getActivity()).addApi(LocationServices.API).build();
-
- //register receiver to be notified if race is tracked
- IntentFilter filter = new IntentFilter(AppConstants.INTENT_ACTION_IS_TRACKING);
- LocalBroadcastManager.getInstance(getActivity()).registerReceiver(new IsTrackedReceiver(), filter);
}
@Override
@@ -160,6 +161,8 @@ public class WindFragment extends BaseFragment
mMapWebView = ViewHelper.get(layout, R.id.web_view);
mMapHide = ViewHelper.get(layout, R.id.position_hide);
+ mReceiver = new IsTrackedReceiver(mContentMapShow);
+
return layout;
}
@@ -189,35 +192,46 @@ public class WindFragment extends BaseFragment
refreshUI();
}
+ @Override
+ public boolean onBackPressed() {
+ if (mMapHide == null && mContentLayout.getVisibility() == View.GONE) {
+ setupLayouts(false);
+ return true;
+ }
+ return super.onBackPressed();
+ }
+
/**
* refresh location data labels and highlight missing or inaccuracy gps data
* disable setData button if gps data is missing or inaccurate
*/
private void refreshUI() {
- int whiteColor = ThemeHelper.getColor(getActivity(), R.attr.white);
- int redColor = R.color.sap_red;
- setTextAndColor(mLatitude, getString(R.string.not_available), redColor);
- setTextAndColor(mLongitude, getString(R.string.not_available), redColor);
- setTextAndColor(mAccuracyTimestamp, null, whiteColor);
- if (mAccuracy != null) {
- mAccuracy.setAccuracy(-1);
- }
-
- mSetData.setEnabled(false);
- if (mCurrentLocation != null) {
- double latitude = mCurrentLocation.getLatitude();
- double longitude = mCurrentLocation.getLongitude();
-// float accuracy = mCurrentLocation.getAccuracy();
- long timeDifference = System.currentTimeMillis() - mCurrentLocation.getTime();
- setTextAndColor(mLatitude, getString(R.string.latitude_value, latitude), whiteColor);
- setTextAndColor(mLongitude, getString(R.string.longitude_value, longitude), whiteColor);
- setTextAndColor(mAccuracyTimestamp, getString(R.string.accuracy_timestamp, TimeUtils
- .formatTimeAgo(getActivity(), timeDifference)), whiteColor);
+ if (isAdded()) {
+ int whiteColor = ThemeHelper.getColor(getActivity(), R.attr.white);
+ int redColor = R.color.sap_red;
+ setTextAndColor(mLatitude, getString(R.string.not_available), redColor);
+ setTextAndColor(mLongitude, getString(R.string.not_available), redColor);
+ setTextAndColor(mAccuracyTimestamp, null, whiteColor);
if (mAccuracy != null) {
- mAccuracy.setAccuracy(mCurrentLocation.getAccuracy());
+ mAccuracy.setAccuracy(-1);
}
- mSetData.setEnabled(true);
+ mSetData.setEnabled(false);
+ if (mCurrentLocation != null) {
+ double latitude = mCurrentLocation.getLatitude();
+ double longitude = mCurrentLocation.getLongitude();
+// float accuracy = mCurrentLocation.getAccuracy();
+ long timeDifference = System.currentTimeMillis() - mCurrentLocation.getTime();
+ setTextAndColor(mLatitude, GeoUtils.getInDMSFormat(latitude), whiteColor);
+ setTextAndColor(mLongitude, GeoUtils.getInDMSFormat(longitude), whiteColor);
+ setTextAndColor(mAccuracyTimestamp, getString(R.string.accuracy_timestamp, TimeUtils
+ .formatTimeAgo(getActivity(), timeDifference)), whiteColor);
+ if (mAccuracy != null) {
+ mAccuracy.setAccuracy(mCurrentLocation.getAccuracy());
+ }
+
+ mSetData.setEnabled(true);
+ }
}
}
@@ -329,7 +343,7 @@ public class WindFragment extends BaseFragment
mWindSpeed.setValue(((int) ((enteredWindSpeed - MIN_KTS) * 2)));
} else if (mWindInputDirection != null && mWindInputSpeed != null) {
mWindInputDirection.setText(String.valueOf((int) enteredWindBearingFrom));
- mWindInputSpeed.setText(String.valueOf(enteredWindSpeed));
+ mWindInputSpeed.setText(String.format(Locale.US, "%.1f", enteredWindSpeed));
}
}
@@ -355,6 +369,7 @@ public class WindFragment extends BaseFragment
loadRaceMap(true, false, false, true);
mMapLayout.setVisibility(View.VISIBLE);
} else {
+ mMapWebView.loadUrl("about:blank");
settings.setJavaScriptEnabled(false);
mMapLayout.setVisibility(View.GONE);
}
@@ -389,6 +404,7 @@ public class WindFragment extends BaseFragment
pauseApiClient();
pausePositionPoller();
+ LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mReceiver);
sendIntent(AppConstants.INTENT_ACTION_TIME_SHOW);
}
@@ -400,6 +416,10 @@ public class WindFragment extends BaseFragment
resumeApiClient();
resumePositionPoller();
+ //register receiver to be notified if race is tracked
+ IntentFilter filter = new IntentFilter(AppConstants.INTENT_ACTION_IS_TRACKING);
+ LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, filter);
+
// Contact server and ask if race is tracked and map is allowed to show.
WindHelper.isTrackedRace(getActivity(), getRace());
@@ -482,12 +502,19 @@ public class WindFragment extends BaseFragment
preferences.setWindSpeed(wind.getKnots());
}
- private class IsTrackedReceiver extends BroadcastReceiver {
+ private static class IsTrackedReceiver extends BroadcastReceiver {
+
+ private WeakReference