mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-10 14:20:55 +00:00
RCApp: implementing time change fragments
This commit is contained in:
1 parent
1a749cb78d
commit
0cb59907e4
22 files changed
+408
-138
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 380 B |
Binary file not shown.
|
After Width: | Height: | Size: 296 B |
Binary file not shown.
|
After Width: | Height: | Size: 463 B |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 591 B |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 758 B |
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<!-- pressed -->
|
||||
<item android:drawable="@drawable/ic_create_yellow_36dp" android:state_pressed="true" />
|
||||
|
||||
<!-- default -->
|
||||
<item android:drawable="@drawable/ic_create_white_36dp" />
|
||||
|
||||
</selector>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<!-- pressed -->
|
||||
<item android:drawable="@drawable/ic_create_yellow_36dp" android:state_pressed="true" />
|
||||
|
||||
<!-- default -->
|
||||
<item android:drawable="@drawable/ic_create_black_36dp" />
|
||||
|
||||
</selector>
|
||||
@@ -89,59 +89,12 @@
|
||||
android:id="@+id/line_top"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/thick_line"
|
||||
android:layout_below="@+id/buttonBar"
|
||||
android:layout_below="@id/buttonBar"
|
||||
android:background="?black"/>
|
||||
|
||||
<RelativeLayout
|
||||
<include
|
||||
layout="@layout/race_time_picker"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/buttonBar"
|
||||
android:background="?sap_gray_black_30">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/start_picker"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:scaleX="1.55"
|
||||
android:scaleY="1.55">
|
||||
|
||||
<NumberPicker
|
||||
android:id="@+id/start_date_picker"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:descendantFocusability="blocksDescendants"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/start_time_picker"
|
||||
layout="@layout/time_picker"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"/>
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/set_start_time"
|
||||
style="?attr/buttonSolidSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerInParent="true"
|
||||
android:layout_margin="@dimen/default_margin_twice"
|
||||
android:maxWidth="200dp"
|
||||
android:text="@string/race_set_start"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/debug_time"
|
||||
style="?textSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:visibility="gone"
|
||||
tools:text="12:12:12"/>
|
||||
</RelativeLayout>
|
||||
android:layout_below="@id/buttonBar"/>
|
||||
</RelativeLayout>
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
@@ -30,7 +30,7 @@
|
||||
android:layout_centerVertical="true"
|
||||
android:text="@string/race_summary_title"
|
||||
android:textColor="?white"
|
||||
android:textSize="@dimen/textSize_40" />
|
||||
android:textSize="@dimen/textSize_40"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/thin_line"
|
||||
android:layout_marginBottom="@dimen/default_margin_half"
|
||||
android:background="?sap_gray" />
|
||||
android:background="?sap_gray"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -52,15 +52,14 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:text="@string/race_summary_start"
|
||||
android:textAppearance="?attr/textNormal" />
|
||||
android:textAppearance="?attr/textNormal"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/edit_race_start_time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="?create_36dp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"/>
|
||||
android:src="?create"
|
||||
android:visibility="visible"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/race_start_time"
|
||||
@@ -69,12 +68,12 @@
|
||||
android:layout_weight="1"
|
||||
android:gravity="right"
|
||||
android:textAppearance="?attr/textNormal"
|
||||
tools:text="11:00:00" />
|
||||
tools:text="11:00:00"/>
|
||||
|
||||
<View
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1" />
|
||||
android:layout_weight="1"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
@@ -88,15 +87,14 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:text="@string/race_summary_finish_begin"
|
||||
android:textAppearance="?attr/textNormal" />
|
||||
android:textAppearance="?attr/textNormal"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/edit_race_finish_begin_time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="?create_36dp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"/>
|
||||
android:src="?create"
|
||||
android:visibility="visible"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/race_finish_begin_time"
|
||||
@@ -105,7 +103,7 @@
|
||||
android:layout_weight="1"
|
||||
android:gravity="right"
|
||||
android:textAppearance="?attr/textNormal"
|
||||
tools:text="11:12:18" />
|
||||
tools:text="11:12:18"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/race_finish_begin_duration"
|
||||
@@ -114,7 +112,7 @@
|
||||
android:layout_weight="1"
|
||||
android:gravity="right"
|
||||
android:textAppearance="?textNormal"
|
||||
tools:text="12:18 min" />
|
||||
tools:text="12:18 min"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
@@ -128,15 +126,14 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:text="@string/race_summary_finish_end"
|
||||
android:textAppearance="?attr/textNormal" />
|
||||
android:textAppearance="?attr/textNormal"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/edit_race_finish_end_time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="?create_36dp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"/>
|
||||
android:src="?create"
|
||||
android:visibility="visible"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/race_finish_end_time"
|
||||
@@ -145,7 +142,7 @@
|
||||
android:layout_weight="1"
|
||||
android:gravity="right"
|
||||
android:textAppearance="?attr/textNormal"
|
||||
tools:text="11:16:36" />
|
||||
tools:text="11:16:36"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/race_finish_end_duration"
|
||||
@@ -154,7 +151,7 @@
|
||||
android:layout_weight="1"
|
||||
android:gravity="right"
|
||||
android:textAppearance="?attr/textNormal"
|
||||
tools:text="16:36 min" />
|
||||
tools:text="16:36 min"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
@@ -168,7 +165,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:text="@string/race_summary_finish_duration"
|
||||
android:textAppearance="?attr/textNormal" />
|
||||
android:textAppearance="?attr/textNormal"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/race_finish_duration"
|
||||
@@ -177,7 +174,7 @@
|
||||
android:layout_weight="2"
|
||||
android:gravity="right"
|
||||
android:textAppearance="?attr/textNormal"
|
||||
tools:text="04:18 min" />
|
||||
tools:text="04:18 min"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
@@ -191,7 +188,7 @@
|
||||
android:layout_height="@dimen/thin_line"
|
||||
android:layout_marginBottom="@dimen/default_margin_half"
|
||||
android:layout_marginTop="@dimen/default_margin_half"
|
||||
android:background="?sap_gray" />
|
||||
android:background="?sap_gray"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -204,7 +201,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:text="@string/race_summary_wind_direction"
|
||||
android:textAppearance="?attr/textNormal" />
|
||||
android:textAppearance="?attr/textNormal"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/wind_direction"
|
||||
@@ -213,7 +210,7 @@
|
||||
android:layout_weight="2"
|
||||
android:gravity="right"
|
||||
android:textAppearance="?attr/textNormal"
|
||||
tools:text="from 192°" />
|
||||
tools:text="from 192°"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
@@ -227,17 +224,17 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:text="@string/race_summary_wind_speed"
|
||||
android:textAppearance="?attr/textNormal" />
|
||||
android:textAppearance="?attr/textNormal"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/wind_speed"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="2"
|
||||
android:gravity="right"
|
||||
android:textAppearance="?attr/textNormal"
|
||||
tools:text="6.5 kts"
|
||||
android:layout_gravity="center_vertical"/>
|
||||
tools:text="6.5 kts"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
@@ -252,7 +249,7 @@
|
||||
android:layout_height="@dimen/thin_line"
|
||||
android:layout_marginBottom="@dimen/default_margin_half"
|
||||
android:layout_marginTop="@dimen/default_margin_half"
|
||||
android:background="?sap_gray" />
|
||||
android:background="?sap_gray"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -264,14 +261,14 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/race_summary_individual_recalls"
|
||||
android:textAppearance="?attr/textNormal" />
|
||||
android:textAppearance="?attr/textNormal"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="right"
|
||||
android:textAppearance="?attr/textNormal"
|
||||
tools:text="AUT 553 GER 766 ITA 912" />
|
||||
tools:text="AUT 553 GER 766 ITA 912"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/header"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/selector_header_height"
|
||||
android:background="?sap_gray">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/header_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginLeft="@dimen/default_margin"
|
||||
android:layout_marginStart="@dimen/default_margin"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/header_back"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:src="?chevron_left_24dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/header_headline"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/set_time"
|
||||
android:textAppearance="?textNormal"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
<include
|
||||
layout="@layout/race_time_picker"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@id/header"/>
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?sap_gray_black_30">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:scaleX="1.55"
|
||||
android:scaleY="1.55">
|
||||
|
||||
<NumberPicker
|
||||
android:id="@+id/date_picker"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:descendantFocusability="blocksDescendants"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/time_picker"
|
||||
layout="@layout/time_picker"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"/>
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/set_date_time"
|
||||
style="?attr/buttonSolidSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerInParent="true"
|
||||
android:layout_margin="@dimen/default_margin_twice"
|
||||
android:maxWidth="200dp"
|
||||
android:text="@string/race_set_time"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/debug_time"
|
||||
style="?textSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:visibility="gone"
|
||||
tools:text="12:12:12"/>
|
||||
</RelativeLayout>
|
||||
@@ -323,7 +323,7 @@
|
||||
<string name="race_reset_confirm">Rennen zurücksetzen</string>
|
||||
<string name="race_reset_cancel">Nein danke</string>
|
||||
<string name="race_reset_message">Möchten Sie wirklich das Rennen inklusive aller Einstellungen und getätigten Aktionen zurücksetzen? Das kann nicht rückgängig gemacht werden!</string>
|
||||
<string name="race_set_start">Startzeit setzen</string>
|
||||
<string name="race_set_time">Zeit setzen</string>
|
||||
<string name="race_start_time_in">-#TIME#</string>
|
||||
<string name="race_start_time_ago">#TIME#</string>
|
||||
<string name="tomorrow">Morgen</string>
|
||||
@@ -427,5 +427,6 @@
|
||||
<string name="error_finished_time">Die ausgewählte Zielzeit liegt vor der Zeit, der ersten Schiffeinfahrt. Bitte überprüfe die Uhrzeit.</string>
|
||||
<string name="error_finishing_time">Die ausgewählte Zeit is vor dem Rennstart. Bitte überprüfe die Uhrzeit.</string>
|
||||
<string name="error_time_in_future">Die ausgewählte Zeit liegt in der Zukunft. Bitte überprüfe die Uhrzeit.</string>
|
||||
<string name="error_wrong_race_state">Der RaceState hat nicht den korrekten Status (benötigt: %1$s - aktuell: %2$s)</string>
|
||||
|
||||
</resources>
|
||||
@@ -43,7 +43,7 @@
|
||||
<attr name="chevron_left_24dp" format="reference"/>
|
||||
<attr name="chevron_left_36dp" format="reference"/>
|
||||
<attr name="chevron_right_36dp" format="reference"/>
|
||||
<attr name="create_36dp" format="reference"/>
|
||||
<attr name="create" format="reference"/>
|
||||
<attr name="compass_back" format="reference"/>
|
||||
<attr name="compass_needle" format="reference"/>
|
||||
<attr name="course_triangle_48dp" format="reference"/>
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
<string name="race_start_in_1_minute">1 Minute</string>
|
||||
<string name="race_start_time_in">-#TIME#</string>
|
||||
<string name="race_start_time_ago">#TIME#</string>
|
||||
<string name="race_set_start">Set Start Time</string>
|
||||
<string name="race_set_time">Set Time</string>
|
||||
<string name="race_reset_course">Reset course</string>
|
||||
<string name="no_course_active">No course active</string>
|
||||
<string name="toggle_group_race_mode">Group Race?</string>
|
||||
@@ -447,5 +447,6 @@
|
||||
<string name="error_finished_time">The given finish time is earlier than the first finisher time. Please recheck the time.</string>
|
||||
<string name="error_finishing_time">The selected time is before the race start.</string>
|
||||
<string name="error_time_in_future">The given time is in future. Please recheck the time.</string>
|
||||
<string name="error_wrong_race_state">The RaceState isn\'t in the correct state (needed: %1$s - current: %2$s)</string>
|
||||
|
||||
</resources>
|
||||
@@ -57,7 +57,7 @@
|
||||
<item name="chevron_left_24dp">@drawable/ic_chevron_left_white_24dp</item>
|
||||
<item name="chevron_left_36dp">@drawable/ic_chevron_left_white_36dp</item>
|
||||
<item name="chevron_right_36dp">@drawable/ic_chevron_right_white_36dp</item>
|
||||
<item name="create_36dp">@drawable/ic_create_white_36dp</item>
|
||||
<item name="create">@drawable/ic_create_dark</item>
|
||||
<item name="compass_back">@drawable/compass_back_dark</item>
|
||||
<item name="compass_needle">@drawable/compass_needle_dark</item>
|
||||
<item name="course_triangle_48dp">@drawable/course_triangle_48dp_dark</item>
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
<item name="chevron_left_24dp">@drawable/ic_chevron_left_black_24dp</item>
|
||||
<item name="chevron_left_36dp">@drawable/ic_chevron_left_black_36dp</item>
|
||||
<item name="chevron_right_36dp">@drawable/ic_chevron_right_black_36dp</item>
|
||||
<item name="create_36dp">@drawable/ic_create_black_36dp</item>
|
||||
<item name="create">@drawable/ic_create_light</item>
|
||||
<item name="compass_back">@drawable/compass_back_light</item>
|
||||
<item name="compass_needle">@drawable/compass_needle_light</item>
|
||||
<item name="course_triangle_48dp">@drawable/course_triangle_48dp_light</item>
|
||||
|
||||
+9
-1
@@ -1,6 +1,7 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
|
||||
public class Result {
|
||||
@@ -8,6 +9,7 @@ public class Result {
|
||||
public final static int OK = 0;
|
||||
|
||||
private int mErrorString;
|
||||
private Object[] mObjects;
|
||||
|
||||
public Result() {
|
||||
this(OK);
|
||||
@@ -19,6 +21,7 @@ public class Result {
|
||||
|
||||
public void resetError() {
|
||||
mErrorString = OK;
|
||||
mObjects = null;
|
||||
}
|
||||
|
||||
public void setError(@StringRes int stringRes) {
|
||||
@@ -29,6 +32,11 @@ public class Result {
|
||||
}
|
||||
}
|
||||
|
||||
public void setError(@StringRes int stringRes, @Nullable Object... objects) {
|
||||
setError(stringRes);
|
||||
mObjects = objects;
|
||||
}
|
||||
|
||||
public boolean isOk() {
|
||||
return (mErrorString == OK);
|
||||
}
|
||||
@@ -42,6 +50,6 @@ public class Result {
|
||||
}
|
||||
|
||||
public String getMessage(Context context) {
|
||||
return context.getString(getMessageId());
|
||||
return context.getString(getMessageId(), mObjects);
|
||||
}
|
||||
}
|
||||
+6
-2
@@ -210,22 +210,26 @@ public class MoreFlagsFragment extends BaseFragment implements MoreFlagItemClick
|
||||
}
|
||||
|
||||
private void setFinishTime(TimePoint finishTime) {
|
||||
Result result = null;
|
||||
Result result = new Result();
|
||||
switch (getArguments().getInt(START_MODE, 0)) {
|
||||
case 1: // Race-State: Finishing -> End Finishing
|
||||
if (RaceLogRaceStatus.FINISHING.equals(getRace().getStatus())) {
|
||||
result = getRace().setFinishedTime(finishTime);
|
||||
} else {
|
||||
result.setError(R.string.error_wrong_race_state, RaceLogRaceStatus.FINISHING.name(), getRace().getStatus().name());
|
||||
}
|
||||
break;
|
||||
|
||||
default: // Race-State: Running -> Start Finishing
|
||||
if (RaceLogRaceStatus.RUNNING.equals(getRace().getStatus())) {
|
||||
result = getRace().setFinishingTime(finishTime);
|
||||
} else {
|
||||
result.setError(R.string.error_wrong_race_state, RaceLogRaceStatus.RUNNING.name(), getRace().getStatus().name());
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (result != null && result.hasError()) {
|
||||
if (result.hasError()) {
|
||||
Toast.makeText(getActivity(), result.getMessageId(), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
+30
@@ -50,6 +50,36 @@ public class RaceSummaryFragment extends BaseFragment {
|
||||
mRegionWind = ViewHolder.get(layout, R.id.region_wind);
|
||||
mRegionRecall = ViewHolder.get(layout, R.id.region_individual_recalls);
|
||||
|
||||
View editStartTime = ViewHolder.get(layout, R.id.edit_race_start_time);
|
||||
if (editStartTime != null) {
|
||||
editStartTime.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
replaceFragment(RaceTimeChangeFragment.newInstance(RaceTimeChangeFragment.START_TIME_MODE), R.id.finished_content);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
View editFinishingTime = ViewHolder.get(layout, R.id.edit_race_finish_begin_time);
|
||||
if (editFinishingTime != null) {
|
||||
editFinishingTime.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
replaceFragment(RaceTimeChangeFragment.newInstance(RaceTimeChangeFragment.FINISHING_TIME_MODE), R.id.finished_content);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
View editFinishedTime = ViewHolder.get(layout, R.id.edit_race_finish_end_time);
|
||||
if (editFinishedTime != null) {
|
||||
editFinishedTime.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
replaceFragment(RaceTimeChangeFragment.newInstance(RaceTimeChangeFragment.FINISHED_TIME_MODE), R.id.finished_content);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
|
||||
+157
@@ -0,0 +1,157 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
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;
|
||||
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.utils.ThemeHelper;
|
||||
import com.sap.sailing.racecommittee.app.utils.TimeUtils;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
public class RaceTimeChangeFragment extends BaseFragment implements View.OnClickListener {
|
||||
|
||||
private final static String START_MODE = "startMode";
|
||||
|
||||
public final static int START_TIME_MODE = 0;
|
||||
public final static int FINISHING_TIME_MODE = 1;
|
||||
public final static int FINISHED_TIME_MODE = 2;
|
||||
|
||||
private static final int FUTURE_DAYS = 25;
|
||||
private static final int PAST_DAYS = -3;
|
||||
|
||||
private NumberPicker mDatePicker;
|
||||
private TimePicker mTimePicker;
|
||||
|
||||
public static RaceTimeChangeFragment newInstance(int mode) {
|
||||
RaceTimeChangeFragment fragment = new RaceTimeChangeFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putInt(START_MODE, mode);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View layout = inflater.inflate(R.layout.race_time_change, container, false);
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
||||
View layout = getView();
|
||||
|
||||
if (layout == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
TextView headerText = (TextView) layout.findViewById(R.id.header_headline);
|
||||
if (headerText != null) {
|
||||
switch (getArguments().getInt(START_MODE, 0)) {
|
||||
case FINISHING_TIME_MODE:
|
||||
calendar.setTime(getRaceState().getFinishingTime().asDate());
|
||||
headerText.setText(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));
|
||||
break;
|
||||
|
||||
default: // START_TIME_MODE
|
||||
calendar.setTime(getRaceState().getStartTime().asDate());
|
||||
headerText.setText(getString(R.string.race_summary_start));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mDatePicker = (NumberPicker) layout.findViewById(R.id.date_picker);
|
||||
if (mDatePicker != null) {
|
||||
ThemeHelper.setPickerTextColor(getActivity(), mDatePicker, ThemeHelper.getColor(getActivity(), R.attr.white));
|
||||
TimeUtils.initDatePicker(getActivity(), mDatePicker, calendar, PAST_DAYS, FUTURE_DAYS);
|
||||
int days = TimeUtils.daysBetween(Calendar.getInstance(), calendar) + Math.abs(PAST_DAYS);
|
||||
mDatePicker.setValue(days);
|
||||
}
|
||||
|
||||
mTimePicker = (TimePicker) layout.findViewById(R.id.time_picker);
|
||||
if (mTimePicker != null) {
|
||||
ThemeHelper.setPickerTextColor(getActivity(), mTimePicker, ThemeHelper.getColor(getActivity(), R.attr.white));
|
||||
mTimePicker.setIs24HourView(true);
|
||||
mTimePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
|
||||
mTimePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));
|
||||
}
|
||||
|
||||
View setTime = layout.findViewById(R.id.set_date_time);
|
||||
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
|
||||
public void onClick(View v) {
|
||||
TimePoint time = getPickerTime();
|
||||
|
||||
Result result;
|
||||
switch (getArguments().getInt(START_MODE)) {
|
||||
case FINISHING_TIME_MODE:
|
||||
result = getRace().setFinishingTime(time);
|
||||
if (result.hasError()) {
|
||||
Toast.makeText(getActivity(), result.getMessage(getActivity()), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
break;
|
||||
|
||||
case FINISHED_TIME_MODE:
|
||||
result = getRace().setFinishedTime(time);
|
||||
if (result.hasError()) {
|
||||
Toast.makeText(getActivity(), result.getMessage(getActivity()), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
break;
|
||||
|
||||
default: // START_TIME_MODE
|
||||
getRaceState().forceNewStartTime(MillisecondsTimePoint.now(), time);
|
||||
break;
|
||||
}
|
||||
|
||||
closeFragment();
|
||||
}
|
||||
|
||||
private TimePoint getPickerTime() {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.add(Calendar.DAY_OF_MONTH, mDatePicker.getValue() + PAST_DAYS);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, mTimePicker.getCurrentHour());
|
||||
calendar.set(Calendar.MINUTE, mTimePicker.getCurrentMinute());
|
||||
calendar.set(Calendar.SECOND, 0);
|
||||
calendar.set(Calendar.MILLISECOND, 0);
|
||||
return new MillisecondsTimePoint(calendar.getTime());
|
||||
}
|
||||
|
||||
private void closeFragment() {
|
||||
Intent intent = new Intent(AppConstants.INTENT_ACTION_SHOW_SUMMARY_CONTENT);
|
||||
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
|
||||
}
|
||||
}
|
||||
+5
-42
@@ -1,7 +1,6 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -25,8 +24,6 @@ import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.text.DateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
|
||||
public class StartTimeFragment extends BaseFragment
|
||||
@@ -89,7 +86,7 @@ public class StartTimeFragment extends BaseFragment
|
||||
mMinuteDec.setOnClickListener(this);
|
||||
}
|
||||
|
||||
Button setStart = ViewHolder.get(layout, R.id.set_start_time);
|
||||
Button setStart = ViewHolder.get(layout, R.id.set_date_time);
|
||||
if (setStart != null) {
|
||||
setStart.setOnClickListener(this);
|
||||
}
|
||||
@@ -173,13 +170,13 @@ public class StartTimeFragment extends BaseFragment
|
||||
}
|
||||
}
|
||||
|
||||
mDatePicker = ViewHolder.get(getView(), R.id.start_date_picker);
|
||||
mDatePicker = ViewHolder.get(getView(), R.id.date_picker);
|
||||
if (mDatePicker != null) {
|
||||
ThemeHelper.setPickerTextColor(getActivity(), mDatePicker, ThemeHelper.getColor(getActivity(), R.attr.white));
|
||||
mDatePicker.setOnValueChangedListener(this);
|
||||
initDatePicker(time);
|
||||
TimeUtils.initDatePicker(getActivity(), mDatePicker, time, PAST_DAYS, FUTURE_DAYS);
|
||||
}
|
||||
mTimePicker = ViewHolder.get(getView(), R.id.start_time_picker);
|
||||
mTimePicker = ViewHolder.get(getView(), R.id.time_picker);
|
||||
if (mTimePicker != null) {
|
||||
ThemeHelper.setPickerTextColor(getActivity(), mTimePicker, ThemeHelper.getColor(getActivity(), R.attr.white));
|
||||
mTimePicker.setOnTimeChangedListener(this);
|
||||
@@ -315,7 +312,7 @@ public class StartTimeFragment extends BaseFragment
|
||||
setPickerTime();
|
||||
break;
|
||||
|
||||
case R.id.set_start_time:
|
||||
case R.id.set_date_time:
|
||||
changeFragment(mStartTime);
|
||||
break;
|
||||
|
||||
@@ -366,40 +363,6 @@ public class StartTimeFragment extends BaseFragment
|
||||
return new MillisecondsTimePoint(calendar.getTime());
|
||||
}
|
||||
|
||||
private void initDatePicker(Calendar time) {
|
||||
DateFormat dateFormat = DateFormat.getDateInstance();
|
||||
ArrayList<String> dates = new ArrayList<>();
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
// Past
|
||||
calendar.add(Calendar.DAY_OF_MONTH, PAST_DAYS);
|
||||
for (int i = PAST_DAYS; i < -1; i++) {
|
||||
dates.add(dateFormat.format(calendar.getTime()));
|
||||
calendar.add(Calendar.DAY_OF_MONTH, 1);
|
||||
}
|
||||
dates.add(getString(R.string.yesterday));
|
||||
dates.add(getString(R.string.today));
|
||||
dates.add(getString(R.string.tomorrow));
|
||||
// Future
|
||||
calendar.add(Calendar.DAY_OF_MONTH, 2);
|
||||
for (int i = 3; i <= FUTURE_DAYS + 1; i++) {
|
||||
calendar.add(Calendar.DAY_OF_MONTH, 1);
|
||||
dates.add(dateFormat.format(calendar.getTime()));
|
||||
}
|
||||
mDatePicker.setDisplayedValues(dates.toArray(new String[dates.size()]));
|
||||
mDatePicker.setMinValue(0);
|
||||
mDatePicker.setMaxValue(dates.size() - 1);
|
||||
mDatePicker.setWrapSelectorWheel(false);
|
||||
mDatePicker.setValue(TimeUtils.daysBetween(time, Calendar.getInstance()) + Math.abs(PAST_DAYS));
|
||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
|
||||
TextView date = new TextView(getActivity());
|
||||
date.setText(dateFormat.format(calendar.getTime()));
|
||||
int padding = getResources().getDimensionPixelSize(R.dimen.default_padding_half);
|
||||
date.setPadding(padding, padding, padding, padding);
|
||||
date.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
|
||||
mDatePicker.getLayoutParams().width = date.getMeasuredWidth();
|
||||
}
|
||||
}
|
||||
|
||||
private void changeFragment() {
|
||||
changeFragment(null);
|
||||
}
|
||||
|
||||
+43
-3
@@ -1,12 +1,18 @@
|
||||
package com.sap.sailing.racecommittee.app.utils;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.text.format.DateFormat;
|
||||
|
||||
import android.view.View;
|
||||
import android.widget.NumberPicker;
|
||||
import android.widget.TextView;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
|
||||
public class TimeUtils {
|
||||
|
||||
private TimeUtils() {
|
||||
@@ -109,4 +115,38 @@ public class TimeUtils {
|
||||
String hoursString = hours < 10 ? "0" + Math.abs(hours) : "" + Math.abs(hours);
|
||||
return String.format(timePattern, hoursString, minutesString, secondsString);
|
||||
}
|
||||
|
||||
public static void initDatePicker(Context context, NumberPicker datePicker, Calendar time, int pastDays, int futureDays) {
|
||||
java.text.DateFormat dateFormat = java.text.DateFormat.getDateInstance();
|
||||
ArrayList<String> dates = new ArrayList<>();
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
// Past
|
||||
calendar.add(Calendar.DAY_OF_MONTH, pastDays);
|
||||
for (int i = pastDays; i < -1; i++) {
|
||||
dates.add(dateFormat.format(calendar.getTime()));
|
||||
calendar.add(Calendar.DAY_OF_MONTH, 1);
|
||||
}
|
||||
dates.add(context.getString(R.string.yesterday));
|
||||
dates.add(context.getString(R.string.today));
|
||||
dates.add(context.getString(R.string.tomorrow));
|
||||
// Future
|
||||
calendar.add(Calendar.DAY_OF_MONTH, 2);
|
||||
for (int i = 3; i <= futureDays + 1; i++) {
|
||||
calendar.add(Calendar.DAY_OF_MONTH, 1);
|
||||
dates.add(dateFormat.format(calendar.getTime()));
|
||||
}
|
||||
datePicker.setDisplayedValues(dates.toArray(new String[dates.size()]));
|
||||
datePicker.setMinValue(0);
|
||||
datePicker.setMaxValue(dates.size() - 1);
|
||||
datePicker.setWrapSelectorWheel(false);
|
||||
datePicker.setValue(TimeUtils.daysBetween(time, Calendar.getInstance()) + Math.abs(pastDays));
|
||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
|
||||
TextView date = new TextView(context);
|
||||
date.setText(dateFormat.format(calendar.getTime()));
|
||||
int padding = context.getResources().getDimensionPixelSize(R.dimen.default_padding_half);
|
||||
date.setPadding(padding, padding, padding, padding);
|
||||
date.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
|
||||
datePicker.getLayoutParams().width = date.getMeasuredWidth();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user