diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_first_blue_32dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_first_32dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_first_blue_32dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_first_32dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_first_blue_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_first_48dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_first_blue_48dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_first_48dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_first_blue_64dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_first_64dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_first_blue_64dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_first_64dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_first_blue_96dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_first_96dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_first_blue_96dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_first_96dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_32dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_32dp.png
new file mode 100644
index 00000000000..4bb7fbf8ea8
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_32dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_48dp.png
new file mode 100644
index 00000000000..ad79e383819
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_48dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_64dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_64dp.png
new file mode 100644
index 00000000000..4bb7fbf8ea8
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_64dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_96dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_96dp.png
new file mode 100644
index 00000000000..8775ba019f8
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-hdpi/flag_blue_last_96dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_first_blue_32dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_first_32dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_first_blue_32dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_first_32dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_first_blue_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_first_48dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_first_blue_48dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_first_48dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_first_blue_64dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_first_64dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_first_blue_64dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_first_64dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_first_blue_96dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_first_96dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_first_blue_96dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_first_96dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_32dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_32dp.png
new file mode 100644
index 00000000000..49e4b7d3391
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_32dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_48dp.png
new file mode 100644
index 00000000000..928819a3868
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_48dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_64dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_64dp.png
new file mode 100644
index 00000000000..49e4b7d3391
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_64dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_96dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_96dp.png
new file mode 100644
index 00000000000..4bb7fbf8ea8
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-mdpi/flag_blue_last_96dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_first_blue_32dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_first_32dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_first_blue_32dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_first_32dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_first_blue_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_first_48dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_first_blue_48dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_first_48dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_first_blue_64dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_first_64dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_first_blue_64dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_first_64dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_first_blue_96dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_first_96dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_first_blue_96dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_first_96dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_32dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_32dp.png
new file mode 100644
index 00000000000..626a1b12e92
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_32dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_48dp.png
new file mode 100644
index 00000000000..4bb7fbf8ea8
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_48dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_64dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_64dp.png
new file mode 100644
index 00000000000..626a1b12e92
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_64dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_96dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_96dp.png
new file mode 100644
index 00000000000..35506d7aafd
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xhdpi/flag_blue_last_96dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_first_blue_32dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_first_32dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_first_blue_32dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_first_32dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_first_blue_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_first_48dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_first_blue_48dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_first_48dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_first_blue_64dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_first_64dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_first_blue_64dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_first_64dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_first_blue_96dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_first_96dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_first_blue_96dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_first_96dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_32dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_32dp.png
new file mode 100644
index 00000000000..35506d7aafd
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_32dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_48dp.png
new file mode 100644
index 00000000000..8775ba019f8
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_48dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_64dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_64dp.png
new file mode 100644
index 00000000000..35506d7aafd
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_64dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_96dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_96dp.png
new file mode 100644
index 00000000000..49343087f4f
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxhdpi/flag_blue_last_96dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_first_blue_32dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_first_32dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_first_blue_32dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_first_32dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_first_blue_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_first_48dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_first_blue_48dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_first_48dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_first_blue_64dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_first_64dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_first_blue_64dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_first_64dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_first_blue_96dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_first_96dp.png
similarity index 100%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_first_blue_96dp.png
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_first_96dp.png
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_32dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_32dp.png
new file mode 100644
index 00000000000..32c090ccc5f
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_32dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_48dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_48dp.png
new file mode 100644
index 00000000000..35506d7aafd
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_48dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_64dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_64dp.png
new file mode 100644
index 00000000000..32c090ccc5f
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_64dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_96dp.png b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_96dp.png
new file mode 100644
index 00000000000..edae8f2cde4
Binary files /dev/null and b/mobile/com.sap.sailing.racecommittee.app/res/drawable-xxxhdpi/flag_blue_last_96dp.png differ
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_first_blue_32dp_dark.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_32dp_dark.xml
similarity index 81%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_first_blue_32dp_dark.xml
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_32dp_dark.xml
index ad4a622582f..ac246960f6e 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_first_blue_32dp_dark.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_32dp_dark.xml
@@ -6,7 +6,7 @@
android:top="0dp">
+ android:src="@drawable/flag_blue_first_32dp"/>
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_first_blue_32dp_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_32dp_light.xml
similarity index 88%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_first_blue_32dp_light.xml
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_32dp_light.xml
index a79f422e1ec..532b26d675c 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_first_blue_32dp_light.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_32dp_light.xml
@@ -6,7 +6,7 @@
android:top="0dp">
+ android:src="@drawable/flag_blue_first_32dp"/>
-
+ android:src="@drawable/flag_blue_first_48dp"/>
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_first_blue_48dp_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_48dp_light.xml
similarity index 88%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_first_blue_48dp_light.xml
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_48dp_light.xml
index 3bcdfe96db2..82e3bed2098 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_first_blue_48dp_light.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_48dp_light.xml
@@ -6,7 +6,7 @@
android:top="0dp">
+ android:src="@drawable/flag_blue_first_48dp"/>
-
+ android:src="@drawable/flag_blue_first_64dp"/>
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flags_more_64dp_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_64dp_light.xml
similarity index 88%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable/flags_more_64dp_light.xml
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_64dp_light.xml
index 9f81cd8ebe6..02cb65d4da7 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flags_more_64dp_light.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_64dp_light.xml
@@ -6,7 +6,7 @@
android:top="0dp">
+ android:src="@drawable/flag_blue_first_64dp"/>
-
+ android:src="@drawable/flag_blue_first_96dp"/>
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flags_more_96dp_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_96dp_light.xml
similarity index 88%
rename from mobile/com.sap.sailing.racecommittee.app/res/drawable/flags_more_96dp_light.xml
rename to mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_96dp_light.xml
index 7105ea140c1..0bf5426a770 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flags_more_96dp_light.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_first_96dp_light.xml
@@ -6,7 +6,7 @@
android:top="0dp">
+ android:src="@drawable/flag_blue_first_96dp"/>
-
+
+
+
-
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_32dp_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_32dp_light.xml
new file mode 100644
index 00000000000..49618d92737
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_32dp_light.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+ -
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_48dp_dark.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_48dp_dark.xml
new file mode 100644
index 00000000000..95b739f7b9b
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_48dp_dark.xml
@@ -0,0 +1,12 @@
+
+
+
+ -
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_48dp_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_48dp_light.xml
new file mode 100644
index 00000000000..4e1fdd7f1d3
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_48dp_light.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+ -
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_64dp_dark.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_64dp_dark.xml
new file mode 100644
index 00000000000..ad870fb969b
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_64dp_dark.xml
@@ -0,0 +1,12 @@
+
+
+
+ -
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_64dp_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_64dp_light.xml
new file mode 100644
index 00000000000..14990e4f77d
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_64dp_light.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+ -
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_96dp_dark.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_96dp_dark.xml
new file mode 100644
index 00000000000..b2e48b58906
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_96dp_dark.xml
@@ -0,0 +1,12 @@
+
+
+
+ -
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_96dp_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_96dp_light.xml
new file mode 100644
index 00000000000..f919a03665f
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/drawable/flag_blue_last_96dp_light.xml
@@ -0,0 +1,20 @@
+
+
+
+ -
+
+
+
+ -
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/flag_list_normal.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/flag_list_normal.xml
index daf4426083f..8e48a348b6f 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/flag_list_normal.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/flag_list_normal.xml
@@ -2,45 +2,14 @@
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content"
+ app:headerText="@string/not_available"/>
+
+
+
+
+
+
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/login_backdrop_login.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/login_backdrop_login.xml
index 8736ae33d60..fe73958eaab 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/login_backdrop_login.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/login_backdrop_login.xml
@@ -44,7 +44,7 @@
tools:text="https://dev.sapsailing.com"/>
-
-
+
-
-
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/panel_button_more.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/panel_button_blue_first.xml
similarity index 92%
rename from mobile/com.sap.sailing.racecommittee.app/res/layout/panel_button_more.xml
rename to mobile/com.sap.sailing.racecommittee.app/res/layout/panel_button_blue_first.xml
index 5d4412417f1..2119d934015 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/panel_button_more.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/panel_button_blue_first.xml
@@ -6,7 +6,7 @@
tools:showIn="@layout/race_panel_flags_ver">
@@ -25,7 +25,7 @@
+ android:src="?attr/flags_blue_first" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/photo_list.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/photo_list.xml
index 12bdd8c4dde..b8a2ed392c6 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/photo_list.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/photo_list.xml
@@ -1,55 +1,22 @@
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content"
+ app:headerText="@string/finished_list" />
+ android:paddingTop="@dimen/side_padding" />
+ android:src="?attr/photo_camera" />
-
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_fragment.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_fragment.xml
index 0c4f44dc00c..879244f0be1 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_fragment.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/protest_time_fragment.xml
@@ -7,7 +7,7 @@
android:clickable="true">
@@ -78,7 +78,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/bottom_bar"
- android:layout_below="@+id/tracking_header"
+ android:layout_below="@id/protest_header"
android:background="?attr/sap_gray_black_30">
+ android:src="?attr/flag_blue_first" />
-
+ android:orientation="vertical">
+
+
+
+
+
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_map.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_map.xml
index 870689e3f2f..eda85aeacb6 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_map.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_map.xml
@@ -1,14 +1,16 @@
-
-
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:headerText="@string/course"/>
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_marks_normal.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_marks_normal.xml
index ccafedeb2a7..2459da2fc9d 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_marks_normal.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_course_marks_normal.xml
@@ -2,11 +2,14 @@
-
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:headerText="@string/course"/>
+ android:layout_above="@id/bottom_bar" />
\ 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 5a2f8504628..a38d5b76f20 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
@@ -2,11 +2,14 @@
-
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:headerText="@string/course"/>
-
-
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:headerText="@string/course" />
+ android:dividerHeight="0dp" />
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_mode.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_mode.xml
index 8939adb95bf..c7e5c1a9723 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_mode.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_mode.xml
@@ -1,44 +1,14 @@
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content"
+ app:headerText="@string/start_mode"/>
-
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content"
+ app:headerText="@string/start_procedure"/>
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content"
+ app:headerText="@string/gate_start_pathfinder"/>
+ android:layout_below="@id/header">
-
-
+
-
-
+
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_procedure_pathfinder_xlarge.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_procedure_pathfinder_xlarge.xml
index f0cd77db3d9..388890ea4e0 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_procedure_pathfinder_xlarge.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_procedure_pathfinder_xlarge.xml
@@ -37,7 +37,7 @@
android:layout_margin="@dimen/default_margin_twice"
android:orientation="horizontal">
-
-
+
-
-
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_procedure_timing_normal.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_procedure_timing_normal.xml
index 6d0d8f5ab32..e02e3a455da 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_procedure_timing_normal.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_schedule_procedure_timing_normal.xml
@@ -2,46 +2,14 @@
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content"
+ app:headerText="@string/gate_start_timing"/>
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
-
+ android:layout_height="match_parent"
+ xmlns:app="http://schemas.android.com/apk/res-auto">
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content"
+ app:headerText="@string/set_time"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_competitor_edit_small.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_competitor_edit_small.xml
new file mode 100644
index 00000000000..09db5ec64ff
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_competitor_edit_small.xml
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_competitor_item.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_competitor_item.xml
index 67a6747afb0..fdbea48e714 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_competitor_item.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_competitor_item.xml
@@ -20,7 +20,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textAppearance="?attr/textSmall"
- tools:text="GDR001"/>
+ tools:text="GDR001" />
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="wrap_content"
+ app:headerText="@string/tracking_list_01"/>
+ android:layout_alignParentTop="true"
+ android:background="?attr/sap_gray"/>
@@ -77,7 +44,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/bottom_bar"
- android:layout_below="@+id/tracking_header"
+ android:layout_below="@+id/header"
android:background="?attr/sap_gray_black_30">
-
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
-
-
-
+
\ No newline at end of file
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_xlarge.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_xlarge.xml
index ab9af6ede86..1ffcbf45e4a 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_xlarge.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/race_tracking_list_xlarge.xml
@@ -1,6 +1,7 @@
@@ -21,12 +22,12 @@
android:layout_marginLeft="@dimen/default_margin_half"
android:layout_weight="1"
android:gravity="center"
- android:text="@string/availableFinishingCompetitors"
+ android:text="@string/tracking_list_01"
android:textAppearance="?attr/textNormal"/>
+ android:layout_height="wrap_content"/>
@@ -64,20 +65,35 @@
android:layout_height="match_parent"
android:layout_above="@id/bottom_bar"
android:layout_below="@id/header_bar"
+ android:layout_marginBottom="@dimen/default_margin_half"
android:layout_marginLeft="@dimen/side_padding"
android:layout_marginRight="@dimen/side_padding"
android:gravity="center"
android:orientation="horizontal">
-
+ android:layout_weight="1"
+ android:orientation="vertical">
+
+
+
+
+
+ android:layout_height="wrap_content"/>
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge.xml
index f95406489d8..896c5764502 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge.xml
@@ -76,7 +76,7 @@
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge_new.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge_new.xml
index 564ccdf0534..ffc5300199f 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge_new.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge_new.xml
@@ -69,7 +69,7 @@
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge_old.xml b/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge_old.xml
index 676ddf11c87..f0c2a562543 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge_old.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/layout/wind_view_xlarge_old.xml
@@ -76,7 +76,7 @@
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 36c9055b21b..d80170db093 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
@@ -95,7 +95,8 @@
Wiederholen
Ja
Nein
- Ergebnisliste
+ Teilnehmerliste
+ Ergebnisliste
Ergebnisliste füllen
Ergebnisliste bestätigen
Segler
@@ -465,7 +466,14 @@
Manuelle Eingabe
Group Race
Select Race
+ \'%1$s\' zur Ergebnisliste hinzugefügt an Position %2$s
Getting Started
+ Position
+ Strafe
+ Punkte
+ Zielzeit
+ Zieldatum
+ Kommentar
https://www.sapsailing.com/gwt/Home.html?locale=de#SolutionsPlace:navigationTab=RaceCommitteeApp
Request fehlgeschlagen. User ist nicht autorisiert.
Server
@@ -481,6 +489,10 @@
Rechtweisend
Missweisend
Kursanzeige
+
+ - nach Segelnummer
+ - nach Namen
+
Zeige nicht öffentliche Events
Lade alle Events, auch die nicht öffentlichen.
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values-sw600dp/themes_dark.xml b/mobile/com.sap.sailing.racecommittee.app/res/values-sw600dp/themes_dark.xml
index 6824b146188..506b06c12a5 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values-sw600dp/themes_dark.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values-sw600dp/themes_dark.xml
@@ -5,11 +5,13 @@
- @drawable/ic_chevron_left_white_36dp
- @drawable/ic_chevron_right_white_36dp
- - @drawable/flag_first_blue_32dp_dark
+ - @drawable/flag_blue_first_32dp_dark
+ - @drawable/flag_blue_last_32dp_dark
- @drawable/flags_abandon_64dp_dark
+ - @drawable/flag_blue_first_64dp_dark
+ - @drawable/flag_blue_last_64dp_dark
- @drawable/flags_course_64dp_dark
- - @drawable/flags_more_64dp_dark
- @drawable/flags_postpone_64dp_dark
- @drawable/flags_recall_64dp_dark
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values-sw600dp/themes_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/values-sw600dp/themes_light.xml
index 8b5c9a545d1..f2ed7cbc867 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values-sw600dp/themes_light.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values-sw600dp/themes_light.xml
@@ -5,11 +5,13 @@
- @drawable/ic_chevron_left_black_36dp
- @drawable/ic_chevron_right_black_36dp
- - @drawable/flag_first_blue_32dp_light
+ - @drawable/flag_blue_first_32dp_light
+ - @drawable/flag_blue_last_32dp_light
- @drawable/flags_abandon_64dp_light
+ - @drawable/flag_blue_first_64dp_light
+ - @drawable/flag_blue_last_64dp_light
- @drawable/flags_course_64dp_light
- - @drawable/flags_more_64dp_light
- @drawable/flags_postpone_64dp_light
- @drawable/flags_recall_64dp_light
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/dimens.xml b/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/dimens.xml
index 893b97cb3bb..1739260109d 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/dimens.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/dimens.xml
@@ -13,6 +13,8 @@
85dp
85dp
+ @dimen/thick_line
+
0dp
5dp
@@ -62,7 +64,6 @@
- @dimen/thick_line
@dimen/default_margin_twice
@dimen/default_padding_half
460dp
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/themes_dark.xml b/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/themes_dark.xml
index 3fb2da56e08..c72711e8d2f 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/themes_dark.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/themes_dark.xml
@@ -5,11 +5,13 @@
- @drawable/ic_chevron_left_white_36dp
- @drawable/ic_chevron_right_white_36dp
- - @drawable/flag_first_blue_48dp_dark
+ - @drawable/flag_blue_first_48dp_dark
+ - @drawable/flag_blue_last_48dp_dark
- @drawable/flags_abandon_96dp_dark
+ - @drawable/flag_blue_first_96dp_dark
+ - @drawable/flag_blue_last_96dp_dark
- @drawable/flags_course_96dp_dark
- - @drawable/flags_more_96dp_dark
- @drawable/flags_postpone_96dp_dark
- @drawable/flags_recall_96dp_dark
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/themes_light.xml b/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/themes_light.xml
index b7d240f7d65..4f4ecc63432 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/themes_light.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values-sw720dp/themes_light.xml
@@ -5,11 +5,13 @@
- @drawable/ic_chevron_left_black_36dp
- @drawable/ic_chevron_right_black_36dp
- - @drawable/flag_first_blue_48dp_light
+ - @drawable/flag_blue_first_48dp_light
+ - @drawable/flag_blue_last_48dp_light
- @drawable/flags_abandon_96dp_light
+ - @drawable/flag_blue_first_96dp_light
+ - @drawable/flag_blue_last_96dp_light
- @drawable/flags_course_96dp_light
- - @drawable/flags_more_96dp_light
- @drawable/flags_postpone_96dp_light
- @drawable/flags_recall_96dp_light
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 cecc7ea40c9..36c8c303c1b 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/attrs.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/attrs.xml
@@ -86,14 +86,18 @@
-
+
+
+
+
+
+
-
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/attrs_custom_views.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/attrs_custom_views.xml
index 2a9a128ae8e..0ea9c89bb6b 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/attrs_custom_views.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/attrs_custom_views.xml
@@ -1,6 +1,11 @@
+
+
+
+
+
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/dimens.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/dimens.xml
index 1037ae467fa..ec938467dab 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/dimens.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/dimens.xml
@@ -14,6 +14,8 @@
80dp
64dp
+ @dimen/thin_line
+
0dp
5dp
@@ -72,6 +74,10 @@
2dp
64dp
+ 420dp
+ 200dp
+ 24dp
+
- 1
- 32
@@ -102,7 +108,6 @@
@dimen/textSize_20
- @dimen/thin_line
@dimen/default_margin
6dp
240dp
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 d55e5264920..82318e4453e 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/strings.xml
@@ -108,7 +108,8 @@
Retry
Yes
No
- Tracking List
+ Competitor List
+ Tracking List
Competitors
Finish race
Drag handle
@@ -492,7 +493,13 @@
Manual Input
Group Racing
Select Race
+ Added \'%1$s\' to result list at position %2$s
Getting Started
+ Position
+ Penalty
+ Score
+ Finishing Time
+ Comment
https://www.sapsailing.com/gwt/Home.html?locale=en#SolutionsPlace:navigationTab=RaceCommitteeApp
Request failed. User is unauthorized.
Server
@@ -508,6 +515,12 @@
Magnetic
North-based
Heading
+ Finishing Date
+ yyyy-MM-dd
+
+ - by Sail Id
+ - by Name
+
Show Non Public Events
Load all events including the no public one.
diff --git a/mobile/com.sap.sailing.racecommittee.app/res/values/styles.xml b/mobile/com.sap.sailing.racecommittee.app/res/values/styles.xml
index 8203bddc3f6..f64ef864027 100644
--- a/mobile/com.sap.sailing.racecommittee.app/res/values/styles.xml
+++ b/mobile/com.sap.sailing.racecommittee.app/res/values/styles.xml
@@ -9,6 +9,10 @@
- @style/AlertDialogHeader
+
+
@@ -21,7 +25,7 @@
-
+
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 4a4465c0ae1..a85a0bbddda 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
@@ -115,11 +115,13 @@
- @drawable/ic_chevron_left_black_24dp
- @drawable/ic_chevron_right_black_24dp
- - @drawable/flag_first_blue_32dp_light
+ - @drawable/flag_blue_first_32dp_light
+ - @drawable/flag_blue_last_32dp_light
- @drawable/flags_abandon_64dp_light
+ - @drawable/flag_blue_first_64dp_light
+ - @drawable/flag_blue_last_64dp_light
- @drawable/flags_course_64dp_light
- - @drawable/flags_more_64dp_light
- @drawable/flags_postpone_64dp_light
- @drawable/flags_recall_64dp_light
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java
index 38f583e54c9..8c5cd7fd0b7 100755
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/AppConstants.java
@@ -47,7 +47,8 @@ public class AppConstants {
public final static String INTENT_ACTION_TOGGLE_POSTPONE = "postpone";
public final static String INTENT_ACTION_TOGGLE_ABANDON = "abandon";
public final static String INTENT_ACTION_TOGGLE_RECALL = "recall";
- public final static String INTENT_ACTION_TOGGLE_MORE = "more";
+ public final static String INTENT_ACTION_TOGGLE_BLUE_FIRST = "more";
+ public final static String INTENT_ACTION_TOGGLE_BLUE_LAST = "blue_last";
public final static String INTENT_ACTION_TOGGLE_REPLAY = "replay";
public final static String INTENT_ACTION_TOGGLE_PHOTOS = "photos";
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/CompetitorsDataHandler.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/CompetitorsDataHandler.java
index e1be0c780ce..4a672640749 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/CompetitorsDataHandler.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/data/handlers/CompetitorsDataHandler.java
@@ -17,7 +17,7 @@ public class CompetitorsDataHandler extends DataHandler>
@Override
public boolean hasCachedResults() {
- return race.getCompetitors() != null;
+ return race.getCompetitors() != null && race.getCompetitors().size() != 0;
}
@Override
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/CompetitorResultWithIdImpl.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/CompetitorResultWithIdImpl.java
new file mode 100644
index 00000000000..a470c8cef2e
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/CompetitorResultWithIdImpl.java
@@ -0,0 +1,30 @@
+package com.sap.sailing.racecommittee.app.domain.impl;
+
+import java.io.Serializable;
+
+import com.sap.sailing.domain.abstractlog.race.CompetitorResult;
+import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultImpl;
+import com.sap.sailing.domain.common.MaxPointsReason;
+import com.sap.sse.common.TimePoint;
+
+public class CompetitorResultWithIdImpl extends CompetitorResultImpl {
+ private static final long serialVersionUID = 4373611281142932067L;
+
+ private long mId;
+
+ public CompetitorResultWithIdImpl(long id, CompetitorResult result) {
+ this(id, result.getCompetitorId(), result.getCompetitorDisplayName(), result.getOneBasedRank(),
+ result.getMaxPointsReason(), result.getScore(), result.getFinishingTime(), result.getComment());
+ }
+
+ public CompetitorResultWithIdImpl(long id, Serializable competitorId, String competitorDisplayName,
+ int oneBasedRank, MaxPointsReason maxPointsReason, Double score,
+ TimePoint finishingTime, String comment) {
+ super(competitorId, competitorDisplayName, oneBasedRank, maxPointsReason, score, finishingTime, comment);
+ mId = id;
+ }
+
+ public long getId() {
+ return mId;
+ }
+}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/CompetitorsWithIdImpl.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/CompetitorsWithIdImpl.java
deleted file mode 100644
index c2169d77982..00000000000
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/impl/CompetitorsWithIdImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.sap.sailing.racecommittee.app.domain.impl;
-
-import java.io.Serializable;
-
-import com.sap.sailing.domain.abstractlog.race.CompetitorResult;
-import com.sap.sailing.domain.common.MaxPointsReason;
-import com.sap.sse.common.Util;
-
-public class CompetitorsWithIdImpl {
-
- private long mId;
- private Serializable mKey;
- private String mText;
- private MaxPointsReason mReason;
-
- public CompetitorsWithIdImpl(long id, Serializable key, String text, MaxPointsReason reason) {
- mId = id;
- mKey = key;
- mText = text;
- mReason = reason;
- }
-
- public CompetitorsWithIdImpl(long id, CompetitorResult triple) {
- mId = id;
- mKey = triple.getCompetitorId();
- mText = triple.getCompetitorDisplayName();
- mReason = triple.getMaxPointsReason();
- }
-
- public long getId() {
- return mId;
- }
-
- public Serializable getKey() {
- return mKey;
- }
-
- public String getText() {
- return mText;
- }
-
- public MaxPointsReason getReason() {
- return mReason;
- }
-
- public Util.Triple getData() {
- return new Util.Triple<>(mKey, mText, mReason);
- }
-}
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 7e916a336cb..b8f2a462cea 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
@@ -62,9 +62,9 @@ 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;
+import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.TrackingListFragment;
import com.sap.sailing.racecommittee.app.ui.views.PanelButton;
import com.sap.sailing.racecommittee.app.utils.BitmapHelper;
import com.sap.sailing.racecommittee.app.utils.RaceHelper;
@@ -153,6 +153,11 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks
return;
}
+ if (mRaceList.isDrawerOpen()) {
+ mRaceList.closeDrawer();
+ return;
+ }
+
Fragment fragment = getFragmentManager().findFragmentById(R.id.racing_view_container);
if (!(fragment instanceof RaceInfoFragment || fragment instanceof WelcomeFragment)) {
if (getFragmentManager().getBackStackEntryCount() > 0) {
@@ -515,7 +520,7 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks
if (mSelectedRace.getStatus() != RaceLogRaceStatus.FINISHING) {
content = RaceFlagViewerFragment.newInstance();
} else {
- content = RaceFinishingFragment.newInstance();
+ content = TrackingListFragment.newInstance(args, 1);
}
content.setArguments(args);
transaction.replace(R.id.race_content, content);
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/FinishListAdapter.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/FinishListAdapter.java
index 03299a1c645..8c9dc4cdbca 100755
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/FinishListAdapter.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/adapters/FinishListAdapter.java
@@ -1,9 +1,5 @@
package com.sap.sailing.racecommittee.app.ui.adapters;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v4.view.ViewCompat;
@@ -15,39 +11,31 @@ import android.widget.TextView;
import com.h6ah4i.android.widget.advrecyclerview.draggable.ItemDraggableRange;
import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropManager;
import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager;
-import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.util.ViewHelper;
-import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.racecommittee.app.R;
-import com.sap.sailing.racecommittee.app.domain.impl.CompetitorsWithIdImpl;
+import com.sap.sailing.racecommittee.app.domain.impl.CompetitorResultWithIdImpl;
import com.sap.sailing.racecommittee.app.utils.BitmapHelper;
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
+import java.util.ArrayList;
+
public class FinishListAdapter extends BaseDraggableSwipeAdapter {
- private final static String TAG = FinishListAdapter.class.getName();
-
private Context mContext;
- private List mCompetitors;
- private ArrayList mCompetitor;
+ private ArrayList mCompetitor;
private FinishEvents mListener;
- public FinishListAdapter(Context context, ArrayList competitor) {
+ public FinishListAdapter(Context context, ArrayList competitor) {
+ setHasStableIds(true);
mContext = context;
mCompetitor = competitor;
- setHasStableIds(true);
}
public void setListener(FinishEvents listener) {
mListener = listener;
}
- public void setCompetitors(Collection competitors) {
- mCompetitors = new ArrayList<>();
- mCompetitors.addAll(competitors);
- }
-
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View layout = LayoutInflater.from(mContext).inflate(R.layout.race_tracking_list_draggable_item, parent, false);
@@ -56,24 +44,14 @@ public class FinishListAdapter extends BaseDraggableSwipeAdapter mArray;
+ private int mSelectedItem = -1;
+
+ public StringArraySpinnerAdapter(@NonNull String[] data) {
+ mArray = new ArrayList<>(data.length);
+ Collections.addAll(mArray, data);
+ }
+
+ @Override
+ public View getDropDownView(int position, View convertView, ViewGroup parent) {
+ Context context = parent.getContext();
+ View layout = convertView;
+ if (layout == null) {
+ layout = LayoutInflater.from(context).inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
+ }
+
+ TextView mainText = ViewHelper.get(layout, android.R.id.text1);
+ if (mainText != null) {
+ mainText.setText(mArray.get(position));
+ mainText.setTextColor(context.getResources().getColor(R.color.constant_black));
+ }
+
+ if (mSelectedItem == position) {
+ layout.setBackgroundColor(context.getResources().getColor(R.color.light_sap_light_gray));
+ } else {
+ layout.setBackgroundColor(context.getResources().getColor(R.color.light_sap_gray_black_30));
+ }
+
+ layout.setClickable(false);
+
+ return layout;
+ }
+
+ @Override
+ public void registerDataSetObserver(DataSetObserver observer) {
+
+ }
+
+ @Override
+ public void unregisterDataSetObserver(DataSetObserver observer) {
+
+ }
+
+ @Override
+ public int getCount() {
+ return mArray.size();
+ }
+
+ @Override
+ public String getItem(int position) {
+ return mArray.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return 0;
+ }
+
+ @Override
+ public boolean hasStableIds() {
+ return false;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ Context context = parent.getContext();
+ View layout = convertView;
+ if (layout == null) {
+ layout = LayoutInflater.from(context).inflate(android.R.layout.simple_spinner_item, parent, false);
+ }
+
+ TextView mainText = ViewHelper.get(layout, android.R.id.text1);
+ if (mainText != null) {
+ mainText.setText(mArray.get(position));
+ mainText.setTextColor(context.getResources().getColor(R.color.constant_black));
+ }
+
+ return layout;
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ return 0;
+ }
+
+ @Override
+ public int getViewTypeCount() {
+ return 1;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return (mArray.size() == 0);
+ }
+
+ public int getPosition(String item) {
+ for (int i = 0; i < mArray.size(); i++) {
+ if (mArray.get(i).equals(item)) {
+ return i;
+ }
+ }
+ return 0;
+ }
+
+ public void setSelected(int selected) {
+ mSelectedItem = selected;
+ }
+
+ public static class SpinnerSelectedListener implements AdapterView.OnItemSelectedListener {
+
+ private StringArraySpinnerAdapter mAdapter;
+ private AdapterView.OnItemSelectedListener mListener;
+
+ public SpinnerSelectedListener(StringArraySpinnerAdapter adapter) {
+ this(adapter, null);
+ }
+
+ public SpinnerSelectedListener(StringArraySpinnerAdapter adapter, AdapterView.OnItemSelectedListener listener) {
+ mAdapter = adapter;
+ mListener = listener;
+ }
+
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ mAdapter.setSelected(position);
+ if (mListener != null) {
+ mListener.onItemSelected(parent, view, position, id);
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+ mAdapter.setSelected(0);
+ if (mListener != null) {
+ mListener.onNothingSelected(parent);
+ }
+ }
+ }
+}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/comparators/CompetitorSailIdComparator.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/comparators/CompetitorSailIdComparator.java
new file mode 100644
index 00000000000..1c0dc6eda75
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/comparators/CompetitorSailIdComparator.java
@@ -0,0 +1,20 @@
+package com.sap.sailing.racecommittee.app.ui.comparators;
+
+import java.util.Comparator;
+
+import com.sap.sailing.domain.base.Competitor;
+import com.sap.sse.common.util.NaturalComparator;
+
+public class CompetitorSailIdComparator implements Comparator {
+
+ private Comparator comparator;
+
+ public CompetitorSailIdComparator() {
+ this.comparator = new NaturalComparator();
+ }
+
+ @Override
+ public int compare(Competitor left, Competitor right) {
+ return comparator.compare(left.getBoat().getSailID(), right.getBoat().getSailID());
+ }
+}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java
index afacd0400da..a143adaad97 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/RaceListFragment.java
@@ -535,6 +535,16 @@ public class RaceListFragment extends LoggableFragment implements OnItemClickLis
}
}
+ public boolean isDrawerOpen() {
+ return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(Gravity.LEFT);
+ }
+
+ public void closeDrawer() {
+ if (mDrawerLayout != null) {
+ mDrawerLayout.closeDrawer(Gravity.LEFT);
+ }
+ }
+
private void unregisterOnAllRaces() {
for (ManagedRace managedRace : mManagedRacesById.values()) {
managedRace.getState().removeChangedListener(stateListener);
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/FinishedButtonFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/FinishedButtonFragment.java
index 3b65c2fa11d..0ea6d9ea7cd 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/FinishedButtonFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/FinishedButtonFragment.java
@@ -180,7 +180,7 @@ public class FinishedButtonFragment extends BasePanelFragment {
break;
case LEVEL_TOGGLED:
- replaceFragment(TrackingListFragment.newInstance(getRecentArguments()), getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content, true));
+ replaceFragment(TrackingListFragment.newInstance(getRecentArguments(), 0), getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content, true));
break;
default:
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/FlagPanelFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/FlagPanelFragment.java
index 0232f5553c9..507439f454b 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/FlagPanelFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/panels/FlagPanelFragment.java
@@ -10,6 +10,7 @@ import android.support.v4.content.LocalBroadcastManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.TextView;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.util.ViewHelper;
@@ -22,6 +23,7 @@ import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.AbortFlagsFragmen
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.EmptyFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.MoreFlagsFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RecallFlagsFragment;
+import com.sap.sailing.racecommittee.app.utils.TimeUtils;
import com.sap.sse.common.TimePoint;
public class FlagPanelFragment extends BasePanelFragment {
@@ -48,9 +50,14 @@ public class FlagPanelFragment extends BasePanelFragment {
private View mCourseFlags;
private View mCourseLock;
- // More Toggle (Finish)
- private View mMoreFlags;
- private View mMoreLock;
+ // Blue First
+ private View mBlueFirstFlag;
+ private View mBlueFirstLock;
+
+ // Blue Last
+ private View mBlueLastFlag;
+ private View mBlueLastLock;
+ private TextView mBlueLastText;
public FlagPanelFragment() {
mReceiver = new IntentReceiver();
@@ -93,11 +100,18 @@ public class FlagPanelFragment extends BasePanelFragment {
}
mCourseLock = ViewHelper.get(layout, R.id.course_flags_lock);
- mMoreFlags = ViewHelper.get(layout, R.id.more_flags);
- if (mMoreFlags != null) {
- mMoreFlags.setOnClickListener(new MoreFlagsClick());
+ mBlueFirstFlag = ViewHelper.get(layout, R.id.blue_first_flags);
+ if (mBlueFirstFlag != null) {
+ mBlueFirstFlag.setOnClickListener(new BlueFirstFlagClick());
}
- mMoreLock = ViewHelper.get(layout, R.id.more_flags_lock);
+ mBlueFirstLock = ViewHelper.get(layout, R.id.blue_first_flags_lock);
+
+ mBlueLastFlag = ViewHelper.get(layout, R.id.blue_last_flags);
+ if (mBlueLastFlag != null) {
+ mBlueLastFlag.setOnClickListener(new BlueLastFlagClick());
+ }
+ mBlueLastLock = ViewHelper.get(layout, R.id.blue_last_flags_lock);
+ mBlueLastText = ViewHelper.get(layout, R.id.blue_last_flags_text);
return layout;
}
@@ -133,7 +147,8 @@ public class FlagPanelFragment extends BasePanelFragment {
changeVisibility(mAbandonLock, mAbandonLayer, View.GONE);
changeVisibility(mRecallLock, null, View.GONE);
changeVisibility(mCourseLock, null, View.GONE);
- changeVisibility(mMoreLock, null, View.GONE);
+ changeVisibility(mBlueFirstLock, null, View.GONE);
+ changeVisibility(mBlueLastLock, null, View.GONE);
switch (getRace().getStatus()) {
case UNSCHEDULED:
@@ -141,7 +156,8 @@ public class FlagPanelFragment extends BasePanelFragment {
changeVisibility(mAbandonFlags, null, View.VISIBLE);
changeVisibility(mRecallFlags, null, View.VISIBLE);
changeVisibility(mCourseFlags, null, View.GONE);
- changeVisibility(mMoreFlags, null, View.VISIBLE);
+ changeVisibility(mBlueFirstFlag, null, View.VISIBLE);
+ changeVisibility(mBlueLastFlag, null, View.GONE);
uncheckMarker(mCourseFlags);
break;
@@ -151,11 +167,13 @@ public class FlagPanelFragment extends BasePanelFragment {
changeVisibility(mAbandonFlags, null, View.GONE);
changeVisibility(mRecallFlags, null, View.GONE);
changeVisibility(mCourseFlags, null, View.GONE);
- changeVisibility(mMoreFlags, null, View.GONE);
+ changeVisibility(mBlueFirstFlag, null, View.GONE);
+ changeVisibility(mBlueLastFlag, null, View.GONE);
uncheckMarker(mAbandonFlags);
uncheckMarker(mCourseFlags);
- uncheckMarker(mMoreFlags);
+ uncheckMarker(mBlueFirstFlag);
+ uncheckMarker(mBlueLastFlag);
break;
case SCHEDULED:
@@ -164,11 +182,13 @@ public class FlagPanelFragment extends BasePanelFragment {
changeVisibility(mAbandonFlags, null, View.GONE);
changeVisibility(mRecallFlags, null, View.GONE);
changeVisibility(mCourseFlags, null, View.GONE);
- changeVisibility(mMoreFlags, null, View.GONE);
+ changeVisibility(mBlueFirstFlag, null, View.GONE);
+ changeVisibility(mBlueLastFlag, null, View.GONE);
uncheckMarker(mAbandonFlags);
uncheckMarker(mRecallFlags);
- uncheckMarker(mMoreFlags);
+ uncheckMarker(mBlueFirstFlag);
+ uncheckMarker(mBlueLastFlag);
break;
case RUNNING:
@@ -178,7 +198,8 @@ public class FlagPanelFragment extends BasePanelFragment {
changeVisibility(mAbandonFlags, null, View.VISIBLE);
changeVisibility(mRecallFlags, null, View.VISIBLE);
changeVisibility(mCourseFlags, null, View.GONE);
- changeVisibility(mMoreFlags, null, View.VISIBLE);
+ changeVisibility(mBlueFirstFlag, null, View.VISIBLE);
+ changeVisibility(mBlueLastFlag, null, View.GONE);
uncheckMarker(mCourseFlags);
break;
@@ -190,21 +211,24 @@ public class FlagPanelFragment extends BasePanelFragment {
changeVisibility(mAbandonFlags, null, View.VISIBLE);
changeVisibility(mRecallFlags, null, View.GONE);
changeVisibility(mCourseFlags, null, View.GONE);
- changeVisibility(mMoreFlags, null, View.GONE);
+ changeVisibility(mBlueFirstFlag, null, View.GONE);
+ changeVisibility(mBlueLastFlag, null, View.VISIBLE);
uncheckMarker(mRecallFlags);
uncheckMarker(mCourseFlags);
- uncheckMarker(mMoreFlags);
+ uncheckMarker(mBlueFirstFlag);
+ uncheckMarker(mBlueLastFlag);
break;
case FINISHED:
changeVisibility(mPostponeLock, mPostponeLayer, View.VISIBLE);
- changeVisibility(mPostponeFlags, null, View.VISIBLE);
- changeVisibility(mAbandonFlags, null, View.VISIBLE);
- changeVisibility(mRecallFlags, null, View.VISIBLE);
+ changeVisibility(mPostponeFlags, null, View.GONE);
+ changeVisibility(mAbandonFlags, null, View.GONE);
+ changeVisibility(mRecallFlags, null, View.GONE);
changeVisibility(mCourseFlags, null, View.GONE);
- changeVisibility(mMoreFlags, null, View.VISIBLE);
+ changeVisibility(mBlueFirstFlag, null, View.GONE);
+ changeVisibility(mBlueLastFlag, null, View.GONE);
uncheckMarker(mCourseFlags);
break;
@@ -214,13 +238,15 @@ public class FlagPanelFragment extends BasePanelFragment {
changeVisibility(mAbandonFlags, null, View.GONE);
changeVisibility(mRecallFlags, null, View.GONE);
changeVisibility(mCourseFlags, null, View.GONE);
- changeVisibility(mMoreFlags, null, View.GONE);
+ changeVisibility(mBlueFirstFlag, null, View.GONE);
+ changeVisibility(mBlueLastFlag, null, View.GONE);
uncheckMarker(mPostponeFlags);
uncheckMarker(mAbandonFlags);
uncheckMarker(mRecallFlags);
uncheckMarker(mCourseFlags);
- uncheckMarker(mMoreFlags);
+ uncheckMarker(mBlueFirstFlag);
+ uncheckMarker(mBlueLastFlag);
break;
}
}
@@ -243,8 +269,12 @@ public class FlagPanelFragment extends BasePanelFragment {
setMarkerLevel(mCourseFlags, R.id.course_flags_marker, LEVEL_NORMAL);
}
- if (!view.equals(mMoreFlags)) {
- setMarkerLevel(mMoreFlags, R.id.more_flags_marker, LEVEL_NORMAL);
+ if (!view.equals(mBlueFirstFlag)) {
+ setMarkerLevel(mBlueFirstFlag, R.id.first_blue_flags_marker, LEVEL_NORMAL);
+ }
+
+ if (!view.equals(mBlueLastFlag)) {
+ setMarkerLevel(mBlueLastFlag, R.id.blue_down_flags_marker, LEVEL_NORMAL);
}
}
}
@@ -270,6 +300,10 @@ public class FlagPanelFragment extends BasePanelFragment {
break;
case FINISHING:
+ mBlueLastText.setText(TimeUtils.formatDurationSince(now.minus(getRaceState().getFinishingTime().asMillis()).asMillis()));
+ changeVisibility(mRecallLock, mRecallLayer, View.VISIBLE);
+ break;
+
case FINISHED:
changeVisibility(mRecallLock, mRecallLayer, View.VISIBLE);
break;
@@ -445,16 +479,16 @@ public class FlagPanelFragment extends BasePanelFragment {
}
}
- private class MoreFlagsClick implements View.OnClickListener, DialogInterface.OnClickListener {
+ private class BlueFirstFlagClick implements View.OnClickListener, DialogInterface.OnClickListener {
- private final String TAG = MoreFlagsClick.class.getName();
- private final View container = mMoreFlags;
- private final int markerId = R.id.more_flags_marker;
+ private final String TAG = BlueFirstFlagClick.class.getName();
+ private final View container = mBlueFirstFlag;
+ private final int markerId = R.id.first_blue_flags_marker;
@Override
public void onClick(View v) {
- if (mMoreLock != null) {
- if (mMoreLock.getVisibility() == View.VISIBLE && isNormal(container, markerId)) {
+ if (mBlueFirstLock != null) {
+ if (mBlueFirstLock.getVisibility() == View.VISIBLE && isNormal(container, markerId)) {
showChangeDialog(this);
} else {
toggleFragment();
@@ -468,7 +502,7 @@ public class FlagPanelFragment extends BasePanelFragment {
}
private void toggleFragment() {
- sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_MORE);
+ sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_BLUE_FIRST);
switch (toggleMarker(container, markerId)) {
case LEVEL_NORMAL:
sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
@@ -485,6 +519,46 @@ public class FlagPanelFragment extends BasePanelFragment {
}
}
+ private class BlueLastFlagClick implements View.OnClickListener, DialogInterface.OnClickListener {
+
+ private final String TAG = BlueLastFlagClick.class.getName();
+ private final View container = mBlueLastFlag;
+ private final int markerId = R.id.blue_down_flags_marker;
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (mBlueLastLock != null) {
+ if (mBlueLastLock.getVisibility() == View.VISIBLE && isNormal(container, markerId)) {
+ showChangeDialog(this);
+ } else {
+ toggleFragment();
+ }
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ toggleFragment();
+ }
+
+ private void toggleFragment() {
+ sendIntent(AppConstants.INTENT_ACTION_TOGGLE, AppConstants.INTENT_ACTION_EXTRA, AppConstants.INTENT_ACTION_TOGGLE_BLUE_LAST);
+ switch (toggleMarker(container, markerId)) {
+ case LEVEL_NORMAL:
+ sendIntent(AppConstants.INTENT_ACTION_SHOW_MAIN_CONTENT);
+ break;
+
+ case LEVEL_TOGGLED:
+ replaceFragment(MoreFlagsFragment.FinishTimeFragment.newInstance(1));
+ break;
+
+ default:
+ ExLog.i(getActivity(), TAG, "Unknown return value");
+ }
+ disableToggle(container, markerId);
+ }
+ }
+
private class IntentReceiver extends BroadcastReceiver {
@Override
@@ -504,8 +578,10 @@ public class FlagPanelFragment extends BasePanelFragment {
uncheckMarker(mPostponeFlags);
} else if (AppConstants.INTENT_ACTION_TOGGLE_COURSE.equals(data)) {
uncheckMarker(mCourseFlags);
- } else if (AppConstants.INTENT_ACTION_TOGGLE_MORE.equals(data)) {
- uncheckMarker(mMoreFlags);
+ } else if (AppConstants.INTENT_ACTION_TOGGLE_BLUE_FIRST.equals(data)) {
+ uncheckMarker(mBlueFirstFlag);
+ } else if (AppConstants.INTENT_ACTION_TOGGLE_BLUE_LAST.equals(data)) {
+ uncheckMarker(mBlueLastFlag);
} else {
uncheckMarker(new View(context));
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/AbortFlagsFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/AbortFlagsFragment.java
index b80d1009f0e..5aa08c6ddec 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/AbortFlagsFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/AbortFlagsFragment.java
@@ -5,7 +5,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
-import android.widget.TextView;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.util.ViewHelper;
@@ -18,6 +17,7 @@ import com.sap.sailing.racecommittee.app.ui.adapters.AbortFlagsAdapter;
import com.sap.sailing.racecommittee.app.ui.adapters.AbortFlagsAdapter.AbortFlagItemClick;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceListFragment;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -48,14 +48,10 @@ public class AbortFlagsFragment extends RaceFragment implements AbortFlagItemCli
listView.setAdapter(new AbortFlagsAdapter(getActivity(), this, flag));
}
- TextView headerText = ViewHelper.get(layout, R.id.header_text);
- if (headerText != null) {
- headerText.setText(getArguments().getString(HEADER_TEXT, getString(R.string.not_available)));
- }
-
- View headerLayout = ViewHelper.get(layout, R.id.header_layout);
- if (headerLayout != null) {
- headerLayout.setOnClickListener(new View.OnClickListener() {
+ HeaderLayout header = ViewHelper.get(layout, R.id.header);
+ if (header != null) {
+ header.setHeaderText(getArguments().getString(HEADER_TEXT, getString(R.string.not_available)));
+ header.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendIntent(AppConstants.INTENT_ACTION_CLEAR_TOGGLE);
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragment.java
index e8f08fc390d..db87e2e47e8 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragment.java
@@ -10,6 +10,7 @@ import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
public abstract class CourseFragment extends BaseFragment {
@@ -42,17 +43,14 @@ public abstract class CourseFragment extends BaseFragment {
super.onActivityCreated(savedInstanceState);
if (getView() != null && getArguments() != null) {
- View header = getView().findViewById(R.id.header);
+ HeaderLayout header = (HeaderLayout) getView().findViewById(R.id.header);
if (header != null) {
- View text = header.findViewById(R.id.header_text);
- if (text != null) {
- text.setOnClickListener(new View.OnClickListener() {
+ header.setHeaderOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goHome();
}
});
- }
switch (getArguments().getInt(START_MODE, START_MODE_PRESETUP)) {
case START_MODE_PLANNED:
if (AppUtils.with(getActivity()).isLand() && AppUtils.with(getActivity()).is10inch()) {
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragmentName.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragmentName.java
index 5b0427f3f58..55ccd9b8c67 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragmentName.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/CourseFragmentName.java
@@ -9,7 +9,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
-import android.widget.LinearLayout;
import android.widget.ListView;
import com.sap.sailing.android.shared.util.ViewHelper;
@@ -19,6 +18,7 @@ import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.adapters.checked.CheckedItem;
import com.sap.sailing.racecommittee.app.ui.adapters.checked.CheckedItemAdapter;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.util.NaturalComparator;
@@ -40,9 +40,9 @@ public class CourseFragmentName extends CourseFragment {
mListView = (ListView) layout.findViewById(R.id.listView);
- LinearLayout headerText = ViewHelper.get(layout, R.id.header_text);
- if (headerText != null) {
- headerText.setOnClickListener(new View.OnClickListener() {
+ HeaderLayout header = ViewHelper.get(layout, R.id.header);
+ if (header != null) {
+ header.setHeaderOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/GateStartPathFinderFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/GateStartPathFinderFragment.java
index 9e7374cd125..7a413b20c21 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/GateStartPathFinderFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/GateStartPathFinderFragment.java
@@ -15,6 +15,7 @@ import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.GateStartRacingProcedure;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class GateStartPathFinderFragment extends BaseFragment {
@@ -24,7 +25,6 @@ public class GateStartPathFinderFragment extends BaseFragment {
private EditText mNat;
private EditText mNum;
- private View mHeader;
private View mButton;
public static GateStartPathFinderFragment newInstance() {
@@ -55,7 +55,6 @@ public class GateStartPathFinderFragment extends BaseFragment {
mNat = ViewHelper.get(layout, R.id.pathfinder_nat);
mNum = ViewHelper.get(layout, R.id.pathfinder_num);
- mHeader = ViewHelper.get(layout, R.id.header_text);
mButton = ViewHelper.get(layout, R.id.set_path_finder);
if (getArguments() != null) {
@@ -104,8 +103,9 @@ public class GateStartPathFinderFragment extends BaseFragment {
}
}
- if (mHeader != null) {
- mHeader.setOnClickListener(new View.OnClickListener() {
+ HeaderLayout header = ViewHelper.get(layout, R.id.header);
+ if (header != null) {
+ header.setHeaderOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goHome();
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/GateStartTimingFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/GateStartTimingFragment.java
index b024cc0e458..23acda124bf 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/GateStartTimingFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/GateStartTimingFragment.java
@@ -13,6 +13,7 @@ import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.gate.GateSt
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.AppPreferences;
import com.sap.sailing.racecommittee.app.R;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -44,10 +45,9 @@ public class GateStartTimingFragment extends BaseFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layout = LayoutInflater.from(getActivity()).inflate(R.layout.race_schedule_procedure_timing, container, false);
- View caption = ViewHelper.get(layout, R.id.header_text);
- if (caption != null) {
- caption.setOnClickListener(new View.OnClickListener() {
-
+ HeaderLayout header = ViewHelper.get(layout, R.id.header);
+ if (header != null) {
+ header.setHeaderOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goHome();
@@ -156,7 +156,6 @@ public class GateStartTimingFragment extends BaseFragment {
}
if (mTimeGolf != null) {
golf = mTimeGolf.getValue() * ONE_MINUTE_MILLISECONDS;
-
}
GateStartRacingProcedure procedure = getRaceState().getTypedRacingProcedure();
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/LineStartModeFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/LineStartModeFragment.java
index 0f2362537f7..3e874f50fc8 100755
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/LineStartModeFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/LineStartModeFragment.java
@@ -11,7 +11,6 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
-import android.widget.LinearLayout;
import android.widget.ListView;
import com.sap.sailing.android.shared.util.AppUtils;
@@ -21,6 +20,7 @@ import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.adapters.checked.CheckedItemAdapter;
import com.sap.sailing.racecommittee.app.ui.adapters.checked.StartModeItem;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
import com.sap.sailing.racecommittee.app.ui.utils.FlagsResources;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -67,10 +67,9 @@ public class LineStartModeFragment extends BaseFragment {
mListView = (ListView) layout.findViewById(R.id.listView);
- LinearLayout headerText = (LinearLayout) layout.findViewById(R.id.header_text);
- if (headerText != null) {
- headerText.setOnClickListener(new OnClickListener() {
-
+ HeaderLayout header = (HeaderLayout) layout.findViewById(R.id.header);
+ if (header != null) {
+ header.setHeaderOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
goHome();
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MoreFlagsFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MoreFlagsFragment.java
index 1a443453f72..020b4c9af4e 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MoreFlagsFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/MoreFlagsFragment.java
@@ -168,8 +168,7 @@ public class MoreFlagsFragment extends BaseFragment implements MoreFlagItemClick
case 1: // Race-State: Finishing -> End Finishing
ImageView flag = ViewHelper.get(getView(), R.id.header_flag);
if (flag != null) {
- flag.setImageDrawable(FlagsResources
- .getFlagDrawable(getActivity(), Flags.BLUE.name(), getResources().getInteger(R.integer.flag_size)));
+ flag.setImageDrawable(FlagsResources.getFlagDrawable(getActivity(), Flags.BLUE.name(), getResources().getInteger(R.integer.flag_size)));
}
TextView headline = ViewHelper.get(getView(), R.id.header_headline);
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/PhotoListFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/PhotoListFragment.java
index ee34dc7a564..644133c16fe 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/PhotoListFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/PhotoListFragment.java
@@ -29,6 +29,7 @@ import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.AppPreferences;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.adapters.PhotoListAdapter;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
import com.sap.sailing.racecommittee.app.ui.views.decoration.PaddingItemDecoration;
import com.sap.sailing.racecommittee.app.utils.CameraHelper;
import com.sap.sailing.racecommittee.app.utils.MailHelper;
@@ -101,12 +102,12 @@ public class PhotoListFragment extends BaseFragment {
});
}
- View home = ViewHelper.get(layout, R.id.header_text);
- if (home != null) {
+ HeaderLayout header = ViewHelper.get(layout, R.id.header);
+ if (header != null) {
if (getActivity().findViewById(R.id.finished_edit) == null) {
- ViewHelper.get(layout, R.id.photo_header).setVisibility(View.GONE);
+ header.setVisibility(View.GONE);
} else {
- home.setOnClickListener(new View.OnClickListener() {
+ header.setHeaderOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendIntent(AppConstants.INTENT_ACTION_CLEAR_TOGGLE);
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RaceTimeChangeFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RaceTimeChangeFragment.java
index 059951e6262..15a56a23ca9 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RaceTimeChangeFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RaceTimeChangeFragment.java
@@ -3,6 +3,7 @@ package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Calendar;
+import java.util.Locale;
import android.content.Intent;
import android.os.Bundle;
@@ -11,7 +12,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.NumberPicker;
-import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
@@ -20,6 +20,7 @@ import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.domain.impl.Result;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
import com.sap.sailing.racecommittee.app.utils.TimeUtils;
import com.sap.sse.common.TimePoint;
@@ -56,9 +57,7 @@ public class RaceTimeChangeFragment extends BaseFragment implements View.OnClick
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View layout = inflater.inflate(R.layout.race_time_change, container, false);
-
- return layout;
+ return inflater.inflate(R.layout.race_time_change, container, false);
}
@Override
@@ -66,28 +65,33 @@ public class RaceTimeChangeFragment extends BaseFragment implements View.OnClick
super.onActivityCreated(savedInstanceState);
View layout = getView();
-
if (layout == null) {
return;
}
final Calendar calendar = Calendar.getInstance();
- TextView headerText = (TextView) layout.findViewById(R.id.header_headline);
- if (headerText != null) {
+ HeaderLayout header = (HeaderLayout) layout.findViewById(R.id.header);
+ if (header != null) {
+ header.setHeaderOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ closeFragment();
+ }
+ });
switch (getArguments().getInt(TIME_MODE, START_TIME_MODE)) {
case START_TIME_MODE:
calendar.setTime(getRaceState().getStartTime().asDate());
- headerText.setText(getString(R.string.race_summary_start));
+ header.setHeaderText(getString(R.string.race_summary_start));
break;
case FINISHING_TIME_MODE:
calendar.setTime(getRaceState().getFinishingTime().asDate());
- headerText.setText(getString(R.string.race_summary_finish_begin));
+ header.setHeaderText(getString(R.string.race_summary_finish_begin));
break;
case FINISHED_TIME_MODE:
calendar.setTime(getRaceState().getFinishedTime().asDate());
- headerText.setText(getString(R.string.race_summary_finish_end));
+ header.setHeaderText(getString(R.string.race_summary_finish_end));
break;
}
}
@@ -151,7 +155,7 @@ public class RaceTimeChangeFragment extends BaseFragment implements View.OnClick
mSecondPicker.setFormatter(new NumberPicker.Formatter() {
@Override
public String format(int i) {
- return String.format("%02d", i);
+ return String.format(Locale.US, "%02d", i);
}
});
mSecondPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@@ -178,16 +182,6 @@ public class RaceTimeChangeFragment extends BaseFragment implements View.OnClick
if (setTime != null) {
setTime.setOnClickListener(this);
}
-
- View header = layout.findViewById(R.id.header);
- if (header != null) {
- header.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- closeFragment();
- }
- });
- }
}
@Override
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RecallFlagsFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RecallFlagsFragment.java
index 1e3e5640671..cf9ec20cf48 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RecallFlagsFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/RecallFlagsFragment.java
@@ -5,7 +5,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
-import android.widget.TextView;
import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.RacingProcedure;
@@ -16,6 +15,7 @@ import com.sap.sailing.racecommittee.app.ui.adapters.RecallFlagsAdapter;
import com.sap.sailing.racecommittee.app.ui.adapters.RecallFlagsAdapter.RecallFlag;
import com.sap.sailing.racecommittee.app.ui.adapters.RecallFlagsAdapter.RecallFlagItemClick;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -37,14 +37,10 @@ public class RecallFlagsFragment extends RaceFragment implements RecallFlagItemC
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.flag_list, container, false);
- TextView headerText = ViewHelper.get(layout, R.id.header_text);
- if (headerText != null) {
- headerText.setText(getArguments().getString(HEADER_TEXT, getString(R.string.not_available)));
- }
-
- View headerLayout = ViewHelper.get(layout, R.id.header_layout);
- if (headerLayout != null) {
- headerLayout.setOnClickListener(new View.OnClickListener() {
+ HeaderLayout header = ViewHelper.get(layout, R.id.header);
+ if (header != null) {
+ header.setHeaderText(getArguments().getString(HEADER_TEXT, getString(R.string.not_available)));
+ header.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendIntent(AppConstants.INTENT_ACTION_CLEAR_TOGGLE);
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/StartProcedureFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/StartProcedureFragment.java
index b6b4600ace3..b950e4c3a96 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/StartProcedureFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/StartProcedureFragment.java
@@ -7,7 +7,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
-import android.widget.LinearLayout;
import android.widget.ListView;
import com.sap.sailing.android.shared.util.AppUtils;
@@ -18,11 +17,13 @@ import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.adapters.checked.CheckedItemAdapter;
import com.sap.sailing.racecommittee.app.ui.adapters.checked.StartProcedureItem;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class StartProcedureFragment extends BaseFragment {
private final ArrayList startProcedure = new ArrayList<>();
+ private HeaderLayout mHeader;
public StartProcedureFragment() {
@@ -40,9 +41,9 @@ public class StartProcedureFragment extends BaseFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.race_schedule_procedure, container, false);
- LinearLayout headerText = ViewHelper.get(layout, R.id.header_text);
- if (headerText != null) {
- headerText.setOnClickListener(new View.OnClickListener() {
+ mHeader = ViewHelper.get(layout, R.id.header);
+ if (mHeader != null) {
+ mHeader.setHeaderOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -62,8 +63,7 @@ public class StartProcedureFragment extends BaseFragment {
switch (getArguments().getInt(START_MODE, START_MODE_PRESETUP)) {
case START_MODE_PLANNED:
if (AppUtils.with(getActivity()).isLand()) {
- View header = getView().findViewById(R.id.header);
- header.setVisibility(View.GONE);
+ mHeader.setVisibility(View.GONE);
}
break;
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/TrackingListFragment.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/TrackingListFragment.java
index 14f2dcb5cb4..ed09c47a84e 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/TrackingListFragment.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/fragments/raceinfo/TrackingListFragment.java
@@ -1,24 +1,30 @@
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Loader;
import android.graphics.drawable.NinePatchDrawable;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
+import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
+import android.widget.Spinner;
+import android.widget.TextView;
import android.widget.Toast;
import com.h6ah4i.android.widget.advrecyclerview.animator.SwipeDismissItemAnimator;
@@ -26,8 +32,9 @@ import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropM
import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager;
import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager;
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
-import com.sap.sailing.domain.abstractlog.race.CompetitorResult;
+import com.sap.sailing.android.shared.util.AppUtils;
import com.sap.sailing.android.shared.util.ViewHelper;
+import com.sap.sailing.domain.abstractlog.race.CompetitorResult;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultImpl;
import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultsImpl;
@@ -41,15 +48,19 @@ import com.sap.sailing.racecommittee.app.data.DataManager;
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
-import com.sap.sailing.racecommittee.app.domain.impl.CompetitorsWithIdImpl;
+import com.sap.sailing.racecommittee.app.domain.impl.CompetitorResultWithIdImpl;
import com.sap.sailing.racecommittee.app.ui.adapters.CompetitorAdapter;
import com.sap.sailing.racecommittee.app.ui.adapters.FinishListAdapter;
+import com.sap.sailing.racecommittee.app.ui.adapters.StringArraySpinnerAdapter;
+import com.sap.sailing.racecommittee.app.ui.comparators.CompetitorSailIdComparator;
import com.sap.sailing.racecommittee.app.ui.comparators.NaturalNamedComparator;
+import com.sap.sailing.racecommittee.app.ui.layouts.CompetitorEditLayout;
+import com.sap.sailing.racecommittee.app.ui.layouts.HeaderLayout;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class TrackingListFragment extends BaseFragment
- implements CompetitorAdapter.CompetitorClick, FinishListAdapter.FinishEvents, View.OnClickListener {
+ implements CompetitorAdapter.CompetitorClick, FinishListAdapter.FinishEvents, View.OnClickListener, AdapterView.OnItemSelectedListener {
private RecyclerViewDragDropManager mDragDropManager;
private RecyclerViewSwipeManager mSwipeManager;
@@ -58,18 +69,24 @@ public class TrackingListFragment extends BaseFragment
private Button mConfirm;
private RecyclerView.Adapter mFinishedAdapter;
- private FinishListAdapter mAdapter;
private CompetitorAdapter mCompetitorAdapter;
- private ArrayList mFinishedData;
+ private ArrayList mFinishedData;
private ArrayList mCompetitorData;
- private long mId = 0;
+ private int mId = 0;
+ private HeaderLayout mHeader;
+ private TextView mPageTitle;
+ private Spinner mSortSpinner;
+
+ private Comparator mComparator;
+ private ArrayList mComparators;
public TrackingListFragment() {
mCompetitorData = new ArrayList<>();
}
- public static TrackingListFragment newInstance(Bundle args) {
+ public static TrackingListFragment newInstance(Bundle args, int startMode) {
TrackingListFragment fragment = new TrackingListFragment();
+ args.putInt(START_MODE, startMode);
fragment.setArguments(args);
return fragment;
}
@@ -78,6 +95,8 @@ public class TrackingListFragment extends BaseFragment
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.race_tracking_list, container, false);
+ mHeader = ViewHelper.get(layout, R.id.header);
+
mDots = new ArrayList<>();
mPanels = new ArrayList<>();
@@ -101,9 +120,8 @@ public class TrackingListFragment extends BaseFragment
btnNext.setOnClickListener(this);
}
- View home = ViewHelper.get(layout, R.id.header_text);
- if (home != null) {
- home.setOnClickListener(new View.OnClickListener() {
+ if (mHeader != null) {
+ mHeader.setHeaderOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendIntent(AppConstants.INTENT_ACTION_CLEAR_TOGGLE);
@@ -112,6 +130,30 @@ public class TrackingListFragment extends BaseFragment
});
}
+ if (getArguments().getInt(START_MODE, 0) != 0) {
+ mPageTitle = ViewHelper.get(layout, R.id.page_title);
+ if (mPageTitle != null) {
+ mPageTitle.setVisibility(View.VISIBLE);
+ }
+
+ if (mHeader != null) {
+ mHeader.setVisibility(View.GONE);
+ }
+
+ View buttonBar = ViewHelper.get(layout, R.id.bottom_bar);
+ if (buttonBar != null) {
+ buttonBar.setVisibility(View.GONE);
+ }
+ }
+
+ mSortSpinner = ViewHelper.get(layout, R.id.sort_spinner);
+ if (mSortSpinner != null) {
+ StringArraySpinnerAdapter adapter = new StringArraySpinnerAdapter(getResources().getStringArray(R.array.sort_by_values));
+ mSortSpinner.setAdapter(adapter);
+ mSortSpinner.setOnItemSelectedListener(new StringArraySpinnerAdapter.SpinnerSelectedListener(adapter, this));
+ mSortSpinner.setSelection(0);
+ }
+
return layout;
}
@@ -119,6 +161,10 @@ public class TrackingListFragment extends BaseFragment
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
+ mComparators = new ArrayList<>();
+ mComparators.add(new CompetitorSailIdComparator());
+ mComparators.add(new NaturalNamedComparator());
+
mFinishedData = initializeFinishList();
loadCompetitors();
@@ -148,15 +194,15 @@ public class TrackingListFragment extends BaseFragment
mSwipeManager = new RecyclerViewSwipeManager();
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
- mAdapter = new FinishListAdapter(getActivity(), mFinishedData);
- mAdapter.setListener(this);
+ FinishListAdapter adapter = new FinishListAdapter(getActivity(), mFinishedData);
+ adapter.setListener(this);
- @SuppressWarnings("unchecked")
- RecyclerView.Adapter dragManager = mDragDropManager.createWrappedAdapter(mAdapter);
+ @SuppressWarnings("unchecked") RecyclerView.Adapter dragManager = mDragDropManager
+ .createWrappedAdapter(adapter);
mFinishedAdapter = dragManager;
- @SuppressWarnings("unchecked")
- RecyclerView.Adapter swipeManager = mSwipeManager.createWrappedAdapter(mFinishedAdapter);
+ @SuppressWarnings("unchecked") RecyclerView.Adapter swipeManager = mSwipeManager
+ .createWrappedAdapter(mFinishedAdapter);
mFinishedAdapter = swipeManager;
mFinishView.setLayoutManager(layoutManager);
@@ -181,12 +227,18 @@ public class TrackingListFragment extends BaseFragment
}
});
}
+
+ if (getArguments().getInt(START_MODE, 0) == 0) {
+ onClick(ViewHelper.get(getView(), R.id.nav_next));
+ } else {
+ viewPanel(MOVE_NONE);
+ }
}
+ mComparator = mComparators.get(0);
Util.addAll(getRace().getCompetitors(), mCompetitorData);
- Collections.sort(mCompetitorData, new NaturalNamedComparator());
+ sortCompetitors();
mCompetitorAdapter.notifyDataSetChanged();
- viewPanel(MOVE_NONE);
}
@Override
@@ -226,7 +278,6 @@ public class TrackingListFragment extends BaseFragment
super.onDestroy();
}
-
private void loadCompetitors() {
// invalidate all competitors of this race
ReadonlyDataManager dataManager = OnlineDataManager.create(getActivity());
@@ -235,14 +286,12 @@ public class TrackingListFragment extends BaseFragment
domainFactory.getCompetitorStore().allowCompetitorResetToDefaults(competitor);
}
- Loader> competitorLoaders = getLoaderManager().initLoader(0, null,
- dataManager.createCompetitorsLoader(getRace(), new LoadClient>() {
+ Loader> competitorLoaders = getLoaderManager()
+ .initLoader(0, null, dataManager.createCompetitorsLoader(getRace(), new LoadClient>() {
@Override
public void onLoadFailed(Exception reason) {
- String toastText = getString(R.string.marks_w_placeholder);
- Toast.makeText(getActivity(), String.format(toastText, reason.toString()), Toast.LENGTH_LONG)
- .show();
+ Toast.makeText(getActivity(), getString(R.string.competitor_load_error, reason.toString()), Toast.LENGTH_LONG).show();
}
@Override
@@ -260,30 +309,25 @@ public class TrackingListFragment extends BaseFragment
protected void onLoadCompetitorsSucceeded(Collection data) {
mCompetitorData.clear();
mCompetitorData.addAll(data);
- Collections.sort(mCompetitorData, new NaturalNamedComparator());
+ sortCompetitors();
deleteCompetitorsFromFinishedList(data);
deleteCompetitorsFromCompetitorList();
mCompetitorAdapter.notifyDataSetChanged();
-
- mAdapter.setCompetitors(getRace().getCompetitors());
- mFinishedAdapter.notifyDataSetChanged();
}
private void deleteCompetitorsFromFinishedList(Collection validCompetitors) {
- List> toBeDeleted = new ArrayList<>();
- for (CompetitorsWithIdImpl item : mFinishedData) {
- Util.Triple positionedItem = item.getData();
- if (!validCompetitors.contains(getCompetitorStore().getExistingCompetitorById(positionedItem.getA()))) {
- toBeDeleted.add(positionedItem);
+ List toBeDeleted = new ArrayList<>();
+ for (CompetitorResultWithIdImpl item : mFinishedData) {
+ if (!validCompetitors.contains(getCompetitorStore().getExistingCompetitorById(item.getCompetitorId()))) {
+ toBeDeleted.add(item);
}
}
mFinishedData.removeAll(toBeDeleted);
}
private void deleteCompetitorsFromCompetitorList() {
- for (CompetitorsWithIdImpl item : mFinishedData) {
- Util.Triple positionedItem = item.getData();
- Competitor competitor = getCompetitorStore().getExistingCompetitorById(positionedItem.getA());
+ for (CompetitorResultWithIdImpl item : mFinishedData) {
+ Competitor competitor = getCompetitorStore().getExistingCompetitorById(item.getCompetitorId());
mCompetitorData.remove(competitor);
}
}
@@ -292,11 +336,11 @@ public class TrackingListFragment extends BaseFragment
return DataManager.create(getActivity()).getDataStore().getDomainFactory().getCompetitorStore();
}
- private ArrayList initializeFinishList() {
- ArrayList positioning = new ArrayList<>();
+ private ArrayList initializeFinishList() {
+ ArrayList positioning = new ArrayList<>();
if (getRaceState() != null && getRaceState().getFinishPositioningList() != null) {
for (CompetitorResult results : getRaceState().getFinishPositioningList()) {
- positioning.add(new CompetitorsWithIdImpl(mId, results));
+ positioning.add(new CompetitorResultWithIdImpl(mId, results));
mId++;
}
}
@@ -311,15 +355,23 @@ public class TrackingListFragment extends BaseFragment
}
private void moveCompetitorToFinishList(Competitor competitor) {
- mFinishedData.add(
- new CompetitorsWithIdImpl(mId, competitor.getId(), competitor.getName(), MaxPointsReason.NONE));
+ String name = "";
+ if (competitor.getBoat() != null) {
+ name += competitor.getBoat().getSailID();
+ }
+ name += " - " + competitor.getName();
+ mFinishedData.add(new CompetitorResultWithIdImpl(mId, competitor.getId(), name, mFinishedData.size() + 1, MaxPointsReason.NONE,
+ /* score */ null, /* finishingTime */ null, /* comment */ null));
mId++;
mFinishedAdapter.notifyDataSetChanged();
+ if (mDots.size() > 0) {
+ Toast.makeText(getActivity(), getString(R.string.added_to_result_list, name, mFinishedData.size()), Toast.LENGTH_SHORT).show();
+ }
}
private void removeCompetitorFromList(Competitor competitor) {
mCompetitorData.remove(competitor);
- Collections.sort(mCompetitorData, new NaturalNamedComparator());
+ sortCompetitors();
mCompetitorAdapter.notifyDataSetChanged();
}
@@ -329,8 +381,8 @@ public class TrackingListFragment extends BaseFragment
}
@Override
- public void onItemRemoved(CompetitorsWithIdImpl item) {
- Competitor competitor = getCompetitorStore().getExistingCompetitorById(item.getKey());
+ public void onItemRemoved(CompetitorResultWithIdImpl item) {
+ Competitor competitor = getCompetitorStore().getExistingCompetitorById(item.getCompetitorId());
if (competitor != null) {
addNewCompetitorToCompetitorList(competitor);
}
@@ -339,22 +391,65 @@ public class TrackingListFragment extends BaseFragment
private void addNewCompetitorToCompetitorList(Competitor competitor) {
mCompetitorData.add(competitor);
- Collections.sort(mCompetitorData, new NaturalNamedComparator());
+ sortCompetitors();
mCompetitorAdapter.notifyDataSetChanged();
}
@Override
- public void onLongClick(final CompetitorsWithIdImpl item) {
+ public void onLongClick(final CompetitorResultWithIdImpl item) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
final CharSequence[] maxPointsReasons = getAllMaxPointsReasons();
- builder.setTitle(R.string.select_penalty_reason)
- .setItems(maxPointsReasons, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int position) {
- setMaxPointsReasonForItem(item, maxPointsReasons[position]);
- mFinishedAdapter.notifyDataSetChanged();
+ builder.setTitle(R.string.select_penalty_reason).setItems(maxPointsReasons, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int position) {
+ setMaxPointsReasonForItem(item, maxPointsReasons[position]);
+ mFinishedAdapter.notifyDataSetChanged();
+ }
+ });
+ builder.show();
+ }
+
+ @Override
+ public void onEditItem(final CompetitorResultWithIdImpl item, int position) {
+ Context context = getActivity();
+ if (context instanceof AppCompatActivity) {
+ ActionBar actionBar = ((AppCompatActivity) context).getSupportActionBar();
+ if (actionBar != null) {
+ context = actionBar.getThemedContext();
+ }
+ }
+ AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AppTheme_AlertDialog);
+ builder.setTitle(item.getCompetitorDisplayName());
+ final CompetitorEditLayout layout = new CompetitorEditLayout(getActivity(), getRace().getState()
+ .getFinishingTime(), item, position, mFinishedAdapter.getItemCount());
+ builder.setView(layout);
+ builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ CompetitorResultWithIdImpl newItem = layout.getValue();
+ int index = mFinishedData.indexOf(item);
+ if (item.getMaxPointsReason() != newItem.getMaxPointsReason() && item.getMaxPointsReason() == MaxPointsReason.NONE) {
+ mFinishedData.remove(item);
+ mFinishedData.add(mFinishedData.size(), newItem);
+ } else if (item.getOneBasedRank() != newItem.getOneBasedRank()) {
+ int newPos = newItem.getOneBasedRank();
+ if (newPos > 0) {
+ newPos -= 1;
+ }
+ mFinishedData.remove(item);
+ mFinishedData.add(newPos, newItem);
+ } else {
+ replaceItemInPositioningList(index, item, newItem);
}
- });
- builder.create().show();
+ mFinishedAdapter.notifyDataSetChanged();
+ getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), getCompetitorResults());
+ }
+ });
+ builder.setNegativeButton(android.R.string.cancel, null);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ if (AppUtils.with(getActivity()).isTablet()) {
+ dialog.getWindow().setLayout(getResources().getDimensionPixelSize(R.dimen.competitor_dialog_width), ViewGroup.LayoutParams.WRAP_CONTENT);
+ }
}
private CharSequence[] getAllMaxPointsReasons() {
@@ -365,10 +460,10 @@ public class TrackingListFragment extends BaseFragment
return result.toArray(new CharSequence[result.size()]);
}
- protected void setMaxPointsReasonForItem(CompetitorsWithIdImpl item, CharSequence maxPointsReasonName) {
+ protected void setMaxPointsReasonForItem(CompetitorResultWithIdImpl item, CharSequence maxPointsReasonName) {
MaxPointsReason maxPointsReason = MaxPointsReason.valueOf(maxPointsReasonName.toString());
- CompetitorsWithIdImpl newItem = new CompetitorsWithIdImpl(item.getId(), item.getKey(), item.getText(),
- maxPointsReason);
+ CompetitorResultWithIdImpl newItem = new CompetitorResultWithIdImpl(item.getId(), item.getCompetitorId(), item
+ .getCompetitorDisplayName(), item.getOneBasedRank(), maxPointsReason, item.getScore(), item.getFinishingTime(), item.getComment());
int currentIndexOfItem = mFinishedData.indexOf(item);
replaceItemInPositioningList(currentIndexOfItem, item, newItem);
@@ -378,12 +473,12 @@ public class TrackingListFragment extends BaseFragment
getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), getCompetitorResults());
}
- private void replaceItemInPositioningList(int index, CompetitorsWithIdImpl item, CompetitorsWithIdImpl newItem) {
+ private void replaceItemInPositioningList(int index, CompetitorResultWithIdImpl item, CompetitorResultWithIdImpl newItem) {
mFinishedData.remove(item);
mFinishedData.add(index, newItem);
}
- private void setCompetitorToBottomOfPositioningList(CompetitorsWithIdImpl item) {
+ private void setCompetitorToBottomOfPositioningList(CompetitorResultWithIdImpl item) {
int lastIndex = Util.size(getCompetitorResults()) - 1;
mFinishedData.remove(item);
mFinishedData.add(lastIndex, item);
@@ -392,24 +487,74 @@ public class TrackingListFragment extends BaseFragment
private CompetitorResults getCompetitorResults() {
CompetitorResults result = new CompetitorResultsImpl();
int oneBasedRank = 1;
- for (CompetitorsWithIdImpl item : mFinishedData) {
- result.add(new CompetitorResultImpl(item.getKey(), item.getText(), oneBasedRank++, item.getReason(),
- /* score */ null, /* finishingTime */ null, /* comment */ null));
+ for (CompetitorResultWithIdImpl item : mFinishedData) {
+ result
+ .add(new CompetitorResultImpl(item.getCompetitorId(), item.getCompetitorDisplayName(), oneBasedRank++, item.getMaxPointsReason(), item
+ .getScore(), item.getFinishingTime(), item.getComment()));
}
return result;
}
@Override
public void onClick(View v) {
- switch (v.getId()) {
- case R.id.nav_prev:
- viewPanel(MOVE_DOWN);
- break;
+ if (v != null) {
+ switch (v.getId()) {
+ case R.id.nav_prev:
+ viewPanel(MOVE_DOWN);
+ break;
- case R.id.nav_next:
- viewPanel(MOVE_UP);
- break;
+ case R.id.nav_next:
+ viewPanel(MOVE_UP);
+ break;
+ }
}
- mConfirm.setEnabled(mActivePage != 0);
+ if (mHeader != null) {
+ switch (mActivePage) {
+ case 0:
+ if (mSortSpinner != null) {
+ mSortSpinner.setVisibility(View.VISIBLE);
+ }
+ mHeader.setHeaderText(R.string.tracking_list_01);
+ break;
+
+ default:
+ if (mSortSpinner != null) {
+ mSortSpinner.setVisibility(View.GONE);
+ }
+ mHeader.setHeaderText(R.string.tracking_list_02);
+ }
+ if (mPageTitle != null) {
+ mPageTitle.setText(mHeader.getHeaderText());
+ } else if (getView() != null) {
+ View header = getView().findViewById(R.id.spinner_header);
+ if (header != null) {
+ if (mSortSpinner.getVisibility() != View.VISIBLE) {
+ header.setVisibility(View.GONE);
+ } else {
+ header.setVisibility(View.VISIBLE);
+ }
+ }
+ }
+
+ }
+ mConfirm.setEnabled(mActivePage != 0 || mDots.size() == 0);
+ }
+
+ private void sortCompetitors() {
+ Collections.sort(mCompetitorData, mComparator);
+ }
+
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ mComparator = mComparators.get(position);
+ sortCompetitors();
+ mCompetitorAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+ mComparator = mComparators.get(0);
+ sortCompetitors();
+ mCompetitorAdapter.notifyDataSetChanged();
}
}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/CompetitorEditLayout.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/CompetitorEditLayout.java
new file mode 100644
index 00000000000..2a27656bd61
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/CompetitorEditLayout.java
@@ -0,0 +1,222 @@
+package com.sap.sailing.racecommittee.app.ui.layouts;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Locale;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.NumberPicker;
+import android.widget.ScrollView;
+import android.widget.Spinner;
+
+import com.sap.sailing.android.shared.util.AppUtils;
+import com.sap.sailing.android.shared.util.ViewHelper;
+import com.sap.sailing.domain.abstractlog.race.CompetitorResult;
+import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultImpl;
+import com.sap.sailing.domain.common.MaxPointsReason;
+import com.sap.sailing.racecommittee.app.R;
+import com.sap.sailing.racecommittee.app.domain.impl.CompetitorResultWithIdImpl;
+import com.sap.sailing.racecommittee.app.ui.adapters.StringArraySpinnerAdapter;
+import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
+import com.sap.sailing.racecommittee.app.utils.TimeUtils;
+import com.sap.sse.common.TimePoint;
+import com.sap.sse.common.impl.MillisecondsTimePoint;
+
+@SuppressLint("ViewConstructor")
+public class CompetitorEditLayout extends ScrollView {
+
+ private CompetitorResultWithIdImpl mCompetitor;
+ private GregorianCalendar mCalendar;
+
+ private Spinner mPosition;
+ private Spinner mPenalty;
+ private EditText mScore;
+ private Spinner mDate;
+ private NumberPicker mHours;
+ private NumberPicker mMinutes;
+ private NumberPicker mSeconds;
+ private EditText mComment;
+
+ public CompetitorEditLayout(Context context, TimePoint startTime, CompetitorResultWithIdImpl competitor, int currentPos, int maxPos) {
+ super(context);
+ init(startTime, competitor, currentPos, maxPos);
+ }
+
+ private void init(TimePoint startTime, CompetitorResultWithIdImpl competitor, int currentPos, int maxPos) {
+ int layoutId;
+ if (AppUtils.with(getContext()).isPhone() && AppUtils.with(getContext()).isHDPI()) {
+ layoutId = R.layout.race_tracking_list_competitor_edit_small;
+ } else {
+ layoutId = R.layout.race_tracking_list_competitor_edit_normal;
+ }
+ View layout = LayoutInflater.from(getContext()).inflate(layoutId, this, false);
+
+ setFillViewport(true);
+ setPadding(0, getResources().getDimensionPixelSize(R.dimen.dialog_top_padding), 0, 0);
+
+ mCompetitor = competitor;
+
+ mCalendar = (GregorianCalendar) GregorianCalendar.getInstance();
+ if (mCompetitor.getFinishingTime() != null) {
+ mCalendar.setTimeInMillis(mCompetitor.getFinishingTime().asMillis());
+ }
+
+ mHours = ViewHelper.get(layout, R.id.competitor_finish_time_hours);
+ if (mHours != null) {
+ formatPicker(mHours, 0, 23);
+ mHours.setValue(mCalendar.get(Calendar.HOUR_OF_DAY));
+ }
+
+ mMinutes = ViewHelper.get(layout, R.id.competitor_finish_time_minutes);
+ if (mMinutes != null) {
+ formatPicker(mMinutes, 0, 59);
+ mMinutes.setValue(mCalendar.get(Calendar.MINUTE));
+ }
+
+ mSeconds = ViewHelper.get(layout, R.id.competitor_finish_time_seconds);
+ if (mSeconds != null) {
+ formatPicker(mSeconds, 0, 59);
+ mSeconds.setValue(mCalendar.get(Calendar.SECOND));
+ }
+
+ mPosition = ViewHelper.get(layout, R.id.competitor_position);
+ if (mPosition != null) {
+ StringArraySpinnerAdapter positionAdapter = new StringArraySpinnerAdapter(getPositionList(maxPos));
+ mPosition.setAdapter(positionAdapter);
+ mPosition.setOnItemSelectedListener(new StringArraySpinnerAdapter.SpinnerSelectedListener(positionAdapter));
+ mPosition.setSelection(currentPos);
+ }
+
+ mPenalty = ViewHelper.get(layout, R.id.competitor_penalty);
+ if (mPenalty != null) {
+ StringArraySpinnerAdapter penaltyAdapter = new StringArraySpinnerAdapter(getAllMaxPointsReasons());
+ mPenalty.setAdapter(penaltyAdapter);
+ mPenalty.setOnItemSelectedListener(new StringArraySpinnerAdapter.SpinnerSelectedListener(penaltyAdapter));
+ mPenalty.setSelection(penaltyAdapter.getPosition(mCompetitor.getMaxPointsReason().toString()));
+ }
+
+ mDate = ViewHelper.get(layout, R.id.competitor_finish_date);
+ if (mDate != null) {
+ String[] dates = getDates(startTime);
+ StringArraySpinnerAdapter dateAdapter = new StringArraySpinnerAdapter(dates);
+ mDate.setAdapter(dateAdapter);
+ mDate.setOnItemSelectedListener(new StringArraySpinnerAdapter.SpinnerSelectedListener(dateAdapter));
+ mDate.setSelection(findDate(dates, competitor.getFinishingTime()));
+ if (dates.length == 1) {
+ mDate.setVisibility(GONE);
+ }
+ }
+
+ mScore = ViewHelper.get(layout, R.id.competitor_score);
+ if (mScore != null && mCompetitor.getScore() != null) {
+ mScore.setText(String.format(Locale.US, "%f", mCompetitor.getScore()));
+ }
+
+ mComment = ViewHelper.get(layout, R.id.competitor_comment);
+ if (mComment != null) {
+ mComment.setText(mCompetitor.getComment());
+ }
+
+ addView(layout);
+ }
+
+ private String[] getDates(@NonNull TimePoint startTime) {
+ TimePoint now = MillisecondsTimePoint.now();
+ ArrayList dates = TimeUtils.getDates(getContext(), startTime, now);
+ return dates.toArray(new String[dates.size()]);
+ }
+
+ private int findDate(@NonNull String[] dates, @Nullable TimePoint finishingTime) {
+ int pos = 0;
+ if (finishingTime != null) {
+ SimpleDateFormat simpleFormat = new SimpleDateFormat(getContext().getString(R.string.date_short), Locale.US);
+ String finishDate = simpleFormat.format(finishingTime.asDate());
+ for (int i = 0; i < dates.length; i++) {
+ if (finishDate.equals(dates[i])) {
+ pos = i;
+ }
+ }
+ }
+ return pos;
+ }
+
+ private String[] getAllMaxPointsReasons() {
+ List result = new ArrayList<>();
+ for (MaxPointsReason reason : MaxPointsReason.values()) {
+ result.add(reason.name());
+ }
+ return result.toArray(new String[result.size()]);
+ }
+
+ private String[] getPositionList(int maxPos) {
+ List result = new ArrayList<>();
+ for (int i = 0; i <= maxPos; i++) {
+ result.add(String.format(Locale.US, "%d", i));
+ }
+ return result.toArray(new String[result.size()]);
+ }
+
+ public CompetitorResultWithIdImpl getValue() {
+ int oneBaseRank = 0;
+ if (mPosition != null) {
+ oneBaseRank = mPosition.getSelectedItemPosition();
+ }
+ MaxPointsReason maxPointsReason = MaxPointsReason.NONE;
+ if (mPenalty != null) {
+ maxPointsReason = MaxPointsReason.valueOf((String) mPenalty.getSelectedItem());
+ }
+ Double score = null;
+ if (mScore != null && !TextUtils.isEmpty(mScore.getText())) {
+ score = Double.valueOf(mScore.getText().toString());
+ }
+ if (mDate != null) {
+ String[] date = ((String) mDate.getSelectedItem()).split("-");
+ mCalendar.set(Calendar.YEAR, Integer.parseInt(date[0]));
+ mCalendar.set(Calendar.MONTH, Integer.parseInt(date[1]) - 1);
+ mCalendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(date[2]));
+ }
+ if (mHours != null) {
+ mCalendar.set(Calendar.HOUR_OF_DAY, mHours.getValue());
+ }
+ if (mMinutes != null) {
+ mCalendar.set(Calendar.MINUTE, mMinutes.getValue());
+ }
+ if (mSeconds != null) {
+ mCalendar.set(Calendar.SECOND, mSeconds.getValue());
+ }
+ TimePoint finishingTime = new MillisecondsTimePoint(mCalendar.getTime());
+ String comment = null;
+ if (mComment != null) {
+ comment = mComment.getText().toString();
+ }
+ CompetitorResult result = new CompetitorResultImpl(mCompetitor.getCompetitorId(), mCompetitor
+ .getCompetitorDisplayName(), oneBaseRank, maxPointsReason, score, finishingTime, comment);
+ return new CompetitorResultWithIdImpl(mCompetitor.getId(), result);
+ }
+
+ private void formatPicker(@Nullable NumberPicker picker, int minValue, int maxValue) {
+ if (picker != null) {
+ picker.setMinValue(minValue);
+ picker.setMaxValue(maxValue);
+ picker.setFormatter(new NumberPicker.Formatter() {
+ @Override
+ public String format(int value) {
+ return String.format(Locale.US, "%02d", value);
+ }
+ });
+ ThemeHelper
+ .setPickerColor(getContext(), picker, getContext().getResources().getColor(R.color.dialog_color_text), getContext().getResources()
+ .getColor(R.color.dialog_color_button));
+ }
+ }
+}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/FloatLabelLayout.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/FloatLabelLayout.java
similarity index 99%
rename from mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/FloatLabelLayout.java
rename to mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/FloatLabelLayout.java
index dd9038e4fe7..71493704c61 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/views/FloatLabelLayout.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/FloatLabelLayout.java
@@ -1,4 +1,4 @@
-package com.sap.sailing.racecommittee.app.ui.views;
+package com.sap.sailing.racecommittee.app.ui.layouts;
/*
* Copyright 2014 Chris Banes
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/HeaderLayout.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/HeaderLayout.java
new file mode 100644
index 00000000000..022087f63c7
--- /dev/null
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/ui/layouts/HeaderLayout.java
@@ -0,0 +1,70 @@
+package com.sap.sailing.racecommittee.app.ui.layouts;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.StringRes;
+import android.util.AttributeSet;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import com.sap.sailing.racecommittee.app.R;
+import com.sap.sailing.racecommittee.app.utils.BitmapHelper;
+
+public class HeaderLayout extends RelativeLayout {
+
+ private TextView mHeaderText;
+
+ public HeaderLayout(Context context) {
+ this(context, null);
+ }
+
+ public HeaderLayout(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public HeaderLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+
+ inflate(context, R.layout.header_view, this);
+
+ mHeaderText = (TextView) findViewById(R.id.header_text);
+
+ final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HeaderLayout);
+
+ setHeaderText(a.getString(R.styleable.HeaderLayout_headerText));
+ showChevron(a.getBoolean(R.styleable.HeaderLayout_showChevron, true));
+
+ a.recycle();
+ }
+
+ public CharSequence getHeaderText() {
+ if (mHeaderText != null) {
+ return mHeaderText.getText();
+ }
+ return null;
+ }
+
+ public void setHeaderText(@StringRes int id) {
+ setHeaderText(getContext().getString(id));
+ }
+
+ public void setHeaderText(CharSequence headerText) {
+ if (mHeaderText != null) {
+ mHeaderText.setText(headerText);
+ }
+ }
+
+ public void showChevron(boolean show) {
+ if (mHeaderText != null && !isInEditMode()) {
+ Drawable chevron = BitmapHelper.getAttrDrawable(getContext(), R.attr.chevron_left_24dp);
+ mHeaderText.setCompoundDrawablesWithIntrinsicBounds((show) ? chevron : null, null, null, null);
+ }
+ }
+
+ public void setHeaderOnClickListener(OnClickListener listener) {
+ if (mHeaderText != null) {
+ mHeaderText.setOnClickListener(listener);
+ }
+ }
+}
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/BitmapHelper.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/BitmapHelper.java
index bbcc11bbc2a..8a905af0359 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/BitmapHelper.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/BitmapHelper.java
@@ -67,9 +67,6 @@ public class BitmapHelper {
return inSampleSize;
}
- // @SuppressWarnings, but it is handled correctly
- @SuppressWarnings("deprecation")
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static Drawable getAttrDrawable(Context context, @AttrRes int attrRes) {
Drawable drawable = null;
TypedValue value = new TypedValue();
@@ -77,11 +74,7 @@ public class BitmapHelper {
String[] data = String.valueOf(value.string).split("/");
int resId = context.getResources().getIdentifier(data[2].substring(0, data[2].length() - 4), "drawable", context.getPackageName());
if (resId != 0) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- drawable = context.getDrawable(resId);
- } else {
- drawable = context.getResources().getDrawable(resId);
- }
+ drawable = ContextCompat.getDrawable(context, resId);
}
}
return drawable;
diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/TimeUtils.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/TimeUtils.java
index d54dcaec3be..af4c38f07cc 100644
--- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/TimeUtils.java
+++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/TimeUtils.java
@@ -1,7 +1,9 @@
package com.sap.sailing.racecommittee.app.utils;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Locale;
import java.util.TimeZone;
import android.content.Context;
@@ -22,10 +24,6 @@ public class TimeUtils {
// only static methods
}
- public static long timeUntil(TimePoint targetTime) {
- return targetTime.asMillis() - MillisecondsTimePoint.now().asMillis();
- }
-
/**
* Formats your time to 'kk:mm:ss'.
*
@@ -201,6 +199,21 @@ public class TimeUtils {
}
}
+ public static ArrayList getDates(Context context, TimePoint start, TimePoint end) {
+ ArrayList dates = new ArrayList<>();
+ SimpleDateFormat simpleFormat = new SimpleDateFormat(context.getString(R.string.date_short), Locale.US);
+ Calendar startDate = Calendar.getInstance();
+ Calendar endDate = (Calendar) startDate.clone();
+ startDate.setTime(start.asDate());
+ endDate.setTime(end.asDate());
+ int dayDiff = daysBetween(endDate, startDate);
+ for (int i = 0; i <= dayDiff; i++) {
+ dates.add(simpleFormat.format(startDate.getTime()));
+ startDate.add(Calendar.DAY_OF_MONTH, 1);
+ }
+ return dates;
+ }
+
public static TimePoint getTime(TimePicker timePicker) {
Calendar time = Calendar.getInstance();
time.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());