Merge branch 'ubilabs--tracking_app--bug-2688'
No files matched your search
|
After Width: | Height: | Size: 502 B |
|
After Width: | Height: | Size: 360 B |
|
After Width: | Height: | Size: 634 B |
|
After Width: | Height: | Size: 834 B |
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- pressed -->
|
||||
<item android:drawable="@drawable/pressed_btn_blue" android:state_pressed="true" />
|
||||
<!-- default -->
|
||||
<item android:drawable="@drawable/normal_btn_blue" />
|
||||
</selector>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<gradient
|
||||
android:angle="90"
|
||||
android:endColor="#def1f1"
|
||||
android:startColor="#dce3eb"
|
||||
android:type="linear"/>
|
||||
|
||||
<corners
|
||||
android:radius="0dp"/>
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<corners
|
||||
android:radius="@dimen/button_radius"/>
|
||||
|
||||
<solid android:color="@color/blue_button_normal"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<corners
|
||||
android:radius="@dimen/button_radius"/>
|
||||
|
||||
<solid android:color="@color/normal_button" />
|
||||
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="@color/separator_color" />
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<corners
|
||||
android:radius="@dimen/button_radius"/>
|
||||
|
||||
<solid android:color="@color/blue_button_pressed"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<corners
|
||||
android:radius="@dimen/button_radius"/>
|
||||
|
||||
<solid android:color="@color/normal_button_pressed"/>
|
||||
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="@color/separator_color" />
|
||||
</shape>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- pressed -->
|
||||
<item android:drawable="@drawable/pressed_btn_white" android:state_pressed="true" />
|
||||
<!-- default -->
|
||||
<item android:drawable="@drawable/normal_btn_white" />
|
||||
</selector>
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |
@@ -1,80 +1,64 @@
|
||||
<?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">
|
||||
|
||||
<View
|
||||
android:id="@+id/toolbar_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/toolbar_separator_height"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="@color/sap_yellow"/>
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/fiori_main_background">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/homeBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_above="@+id/two_buttons_layout"
|
||||
android:layout_alignParentTop="true"
|
||||
android:contentDescription="@string/empty"
|
||||
android:layout_below="@id/toolbar_separator"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/working_title"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/bottomLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/qr_code_label_height"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:background="@color/black_transparent"
|
||||
>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:gravity="center"
|
||||
android:text="@string/scan_hint"
|
||||
android:textColor="@color/white"/>
|
||||
</RelativeLayout>
|
||||
<TextView
|
||||
android:id="@+id/scan_hint_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginBottom="@dimen/home_land_margin"
|
||||
android:text="@string/scan_hint"
|
||||
android:textColor="@color/fiori_text_color"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/two_buttons_layout"
|
||||
android:orientation="horizontal"
|
||||
android:layout_above="@+id/bottomLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_above="@+id/scan_hint_text"
|
||||
android:layout_marginBottom="@dimen/home_land_margin"
|
||||
android:layout_marginTop="@dimen/home_land_margin"
|
||||
android:orientation="horizontal"
|
||||
>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/noQrCode"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="@dimen/home_button_height"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:layout_marginLeft="@dimen/home_land_margin"
|
||||
android:layout_marginRight="@dimen/home_land_margin"
|
||||
android:layout_weight="0.4"
|
||||
android:background="@drawable/white_button"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:background="@drawable/rounded_btn_white"
|
||||
android:textColor="@color/black"
|
||||
android:text="@string/no_qr_code"/>
|
||||
android:text="@string/no_qr_code"
|
||||
android:textColor="@color/fiori_text_color"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/scanQr"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="@dimen/home_button_height"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:background="@drawable/rounded_btn_yellow"
|
||||
android:layout_marginLeft="@dimen/home_land_margin"
|
||||
android:layout_marginRight="@dimen/home_land_margin"
|
||||
android:layout_weight="0.6"
|
||||
android:background="@drawable/blue_button"
|
||||
android:text="@string/scan_qr"
|
||||
android:textAllCaps="true"
|
||||
android:textStyle="bold"
|
||||
android:text="@string/scan_qr"/>
|
||||
android:textStyle="bold"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
@@ -85,8 +69,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@id/two_buttons_layout"
|
||||
android:layout_below="@id/toolbar_separator"
|
||||
android:divider="@android:color/white"
|
||||
android:layout_alignParentTop="true"
|
||||
android:divider="@color/separator_color"
|
||||
android:dividerHeight="1dp"
|
||||
>
|
||||
</ListView>
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
<?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">
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/toolbar_separator_height"
|
||||
android:background="@color/sap_yellow"/>
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/fiori_main_background">
|
||||
|
||||
<View
|
||||
android:id="@+id/center_anchor"
|
||||
@@ -14,7 +11,7 @@
|
||||
android:layout_centerInParent="true"
|
||||
/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/license_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/about_button_height"
|
||||
@@ -24,13 +21,13 @@
|
||||
android:layout_marginLeft="@dimen/about_button_side_margin"
|
||||
android:layout_marginRight="@dimen/about_button_side_margin"
|
||||
android:layout_marginTop="@dimen/about_button_top_bottom_margin"
|
||||
android:background="@drawable/rounded_btn_yellow"
|
||||
android:background="@drawable/blue_button"
|
||||
android:text="@string/license_information"
|
||||
android:textAllCaps="false"
|
||||
android:textSize="@dimen/about_button_text_size"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/eula_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/about_button_height"
|
||||
@@ -40,29 +37,32 @@
|
||||
android:layout_marginLeft="@dimen/about_button_side_margin"
|
||||
android:layout_marginRight="@dimen/about_button_side_margin"
|
||||
android:layout_marginTop="@dimen/about_button_top_bottom_margin"
|
||||
android:background="@drawable/rounded_btn_yellow"
|
||||
android:background="@drawable/blue_button"
|
||||
android:text="@string/eula"
|
||||
android:textAllCaps="false"
|
||||
android:textSize="@dimen/about_button_text_size"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/system_information_application_version_header"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/application_version"
|
||||
android:layout_marginLeft="@dimen/about_button_side_margin"
|
||||
android:layout_above="@+id/system_information_application_version"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@id/eula_button"/>
|
||||
android:layout_marginLeft="@dimen/about_button_side_margin"
|
||||
android:text="@string/application_version"
|
||||
android:textColor="@color/fiori_text_color"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/system_information_application_version"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/about_button_side_margin"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@id/system_information_application_version_header"/>
|
||||
android:layout_marginBottom="@dimen/about_button_top_bottom_margin"
|
||||
android:layout_marginLeft="@dimen/about_button_side_margin"
|
||||
android:textColor="@color/fiori_text_color"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -1,46 +1,57 @@
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/toolbar"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/ThemeOverlay.AppCompat.ActionBar">
|
||||
android:layout_height="@dimen/toolbar_height"
|
||||
android:minHeight="@dimen/toolbar_height"
|
||||
android:theme="@style/AppTheme.Toolbar">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center_vertical"
|
||||
android:padding="10dp">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/toolbar_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:lines="1"
|
||||
android:singleLine="true"
|
||||
android:textColor="@color/toolbar_text_color"
|
||||
android:textSize="16sp"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/toolbar_subtitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:lines="1"
|
||||
android:singleLine="true"
|
||||
android:textColor="@color/toolbar_text_color"
|
||||
android:textSize="12sp"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar>
|
||||
|
||||
<View
|
||||
android:id="@+id/toolbar_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/toolbar_separator_height"
|
||||
android:background="@color/separator_color"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/content_frame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@id/toolbar"/>
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
@@ -1,21 +1,14 @@
|
||||
<?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">
|
||||
|
||||
<View
|
||||
android:id="@+id/toolbar_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/toolbar_separator_height"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="@color/sap_yellow"/>
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/fiori_main_background">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/homeBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_below="@id/toolbar_separator"
|
||||
android:layout_above="@+id/scanQr"
|
||||
android:contentDescription="@string/empty"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/working_title"/>
|
||||
@@ -23,60 +16,58 @@
|
||||
<RelativeLayout
|
||||
android:id="@+id/bottomLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/qr_code_label_height"
|
||||
android:layout_height="50dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:background="@color/black_transparent">
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:gravity="center"
|
||||
android:text="@string/scan_hint"
|
||||
android:textColor="@color/white"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/scanQr"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/home_button_height"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="80dp"
|
||||
android:layout_above="@+id/noQrCode"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:background="@drawable/qr_button"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:layout_marginTop="20dp"
|
||||
android:background="@drawable/blue_button"
|
||||
android:text="@string/scan_qr"
|
||||
android:textAllCaps="true"
|
||||
android:textSize="18sp"
|
||||
android:textStyle="bold"/>
|
||||
android:textSize="@dimen/highlight_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/noQrCode"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="@dimen/no_qr_code_button_height"
|
||||
android:layout_above="@+id/bottomLayout"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:background="@drawable/rounded_btn_white"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:background="@drawable/white_button"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:text="@string/no_qr_code"
|
||||
android:textAllCaps="true"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="18sp"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/button_text_size"/>
|
||||
|
||||
<ListView
|
||||
android:id="@+id/listRegatta"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@id/scanQr"
|
||||
android:layout_below="@id/toolbar_separator"
|
||||
android:divider="@android:color/white"
|
||||
android:layout_alignParentTop="true"
|
||||
android:divider="@color/separator_color"
|
||||
android:dividerHeight="1dp"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -18,7 +18,7 @@
|
||||
android:layout_height="match_parent"
|
||||
android:padding="10dp">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/toolbar_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -27,7 +27,7 @@
|
||||
android:singleLine="true"
|
||||
android:textSize="16sp"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/toolbar_subtitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -39,12 +39,11 @@
|
||||
</LinearLayout>
|
||||
|
||||
</com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar>
|
||||
|
||||
<View
|
||||
android:id="@+id/top_bar"
|
||||
android:id="@+id/toolbar_separator"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="@dimen/toolbar_separator_height"
|
||||
android:background="@color/sap_yellow"/>
|
||||
android:background="@color/separator_color"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/content_frame"
|
||||
|
||||
@@ -1,39 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout
|
||||
<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="50dp"
|
||||
android:background="@color/colorPrimary"
|
||||
tools:ignore="Overdraw">
|
||||
android:layout_height="@dimen/list_row_height"
|
||||
android:background="@color/list_item_background_color"
|
||||
tools:ignore="Overdraw" >
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/nextPage"
|
||||
android:layout_width="22dp"
|
||||
android:layout_height="22dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:baselineAlignBottom="@+id/regattaName"
|
||||
android:contentDescription="@string/empty"
|
||||
android:src="@drawable/yellow_arrow_right"
|
||||
android:layout_marginTop="13dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginRight="14dp"
|
||||
android:layout_marginEnd="14dp"
|
||||
android:textColor="@color/white"/>
|
||||
android:src="@drawable/white_arrow_right"
|
||||
android:paddingTop="15dp"
|
||||
android:layout_marginRight="@dimen/list_arrow_right_margin"
|
||||
android:layout_marginEnd="@dimen/list_arrow_right_margin" />
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/regattaName"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+id/nextPage"
|
||||
android:layout_toStartOf="@+id/nextPage"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:textSize="18sp"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="15dp"
|
||||
android:singleLine="true"
|
||||
android:textColor="@color/white"/>
|
||||
android:textColor="@color/fiori_text_color" />
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -1,18 +1,23 @@
|
||||
<?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="@color/colorPrimary"
|
||||
tools:ignore="Overdraw">
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/list_header_background_color">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/list_header_height">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="16dp"
|
||||
android:textSize="16sp"
|
||||
android:background="@color/colorPrimary"
|
||||
android:textColor="@color/white"
|
||||
android:text="@string/your_regattas"/>
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textSize="@dimen/list_header_text_size"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:text="@string/your_regattas" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<dimen name="home_button_height">80dp</dimen>
|
||||
<dimen name="qr_code_label_height">50dp</dimen>
|
||||
<dimen name="home_land_margin">10dp</dimen>
|
||||
</resources>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="preference_server_marks_path" translatable="false">/sailingserver/api/v1/leaderboards/{leaderboard_name}/marks?</string>
|
||||
<string name="preference_server_leaderboard_path" translatable="false">/sailingserver/api/v1/leaderboards/{leaderboard_name}</string>
|
||||
</resources>
|
||||
@@ -47,5 +47,20 @@
|
||||
<color name="gray">#333333</color>
|
||||
<color name="colorPrimary">@color/gray</color>
|
||||
<color name="yellow_button_pressed">#D6B363</color>
|
||||
<color name="yellow_button_disabled">#7fEEAA29</color>
|
||||
|
||||
<color name="toolbar_text_color">@color/black</color>
|
||||
<color name="toolbar_background">@color/white</color>
|
||||
|
||||
<color name="separator_color">#d1d3d4</color>
|
||||
<color name="list_header_background_color">#def1f1</color>
|
||||
<color name="list_item_background_color">#f6fbfb</color>
|
||||
|
||||
<color name="fiori_primary_color">#009de0</color>
|
||||
<color name="fiori_text_color">@color/black</color>
|
||||
|
||||
<color name="blue_button_normal">@color/fiori_primary_color</color>
|
||||
<color name="blue_button_pressed">#007aad</color>
|
||||
|
||||
<color name="normal_button">#f3f3f3</color>
|
||||
<color name="normal_button_pressed">#bfbfbf</color>
|
||||
</resources>
|
||||
@@ -21,16 +21,35 @@
|
||||
<dimen name="tab_space_plus1">3dp</dimen>
|
||||
<dimen name="tab_space_bottom_line">36sp</dimen>
|
||||
<dimen name="tab_space_unselected_top">6sp</dimen>
|
||||
|
||||
<!-- Default screen margins, per the Android Design guidelines. -->
|
||||
<dimen name="activity_horizontal_margin">16dp</dimen>
|
||||
<dimen name="toolbar_separator_height">4dp</dimen>
|
||||
|
||||
<!-- Fragment -->
|
||||
<dimen name="fragment_side_margin">20dp</dimen>
|
||||
|
||||
<!-- Toolbar -->
|
||||
<dimen name="toolbar_separator_height">1dp</dimen>
|
||||
<dimen name="toolbar_left_padding">@dimen/fragment_side_margin</dimen>
|
||||
<dimen name="toolbar_height">60dp</dimen>
|
||||
|
||||
<!-- List -->
|
||||
<dimen name="list_header_height">50dp</dimen>
|
||||
<dimen name="list_row_height">80dp</dimen>
|
||||
<dimen name="list_arrow_right_margin">10dp</dimen>
|
||||
|
||||
<!-- Values for buttons -->
|
||||
<dimen name="about_button_top_bottom_margin">10dp</dimen>
|
||||
<dimen name="about_button_side_margin">16dp</dimen>
|
||||
<dimen name="about_button_height">80dp</dimen>
|
||||
<dimen name="about_button_text_size">18sp</dimen>
|
||||
<dimen name="home_button_height">80dp</dimen>
|
||||
<dimen name="qr_code_label_height">50dp</dimen>
|
||||
<dimen name="no_qr_code_button_height">50dp</dimen>
|
||||
<dimen name="button_radius">3dp</dimen>
|
||||
<dimen name="button_text_size">@dimen/default_text_size</dimen>
|
||||
|
||||
<!-- Values for text -->
|
||||
<dimen name="default_text_size">16sp</dimen>
|
||||
<dimen name="highlight_text_size">21sp</dimen>
|
||||
<dimen name="list_header_text_size">18sp</dimen>
|
||||
|
||||
</resources>
|
||||
@@ -343,4 +343,9 @@
|
||||
<item name="android:textColor">@color/welter_light_gray</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar">
|
||||
<item name="android:textColorPrimary">@color/toolbar_text_color</item>
|
||||
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -1,5 +1,5 @@
|
||||
package com.sap.sailing.android.shared.data;
|
||||
|
||||
public abstract class AbstractCheckinData {
|
||||
public abstract class BaseCheckinData {
|
||||
|
||||
}
|
||||
@@ -1,7 +1,12 @@
|
||||
package com.sap.sailing.android.shared.data;
|
||||
|
||||
public class CheckinUrlInfo {
|
||||
|
||||
public static int TYPE_COMPETITOR = 0;
|
||||
public static int TYPE_MARK = 1;
|
||||
|
||||
public String urlString;
|
||||
public String checkinDigest;
|
||||
public int type;
|
||||
public int rowId;
|
||||
}
|
||||
@@ -16,12 +16,13 @@ import com.sap.sailing.android.ui.fragments.AbstractHomeFragment;
|
||||
public abstract class AbstractStartActivity extends CheckinDataActivity {
|
||||
|
||||
private final static String TAG = AbstractStartActivity.class.getName();
|
||||
protected OpenSansToolbar toolbar;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.fragment_container);
|
||||
OpenSansToolbar toolbar = (OpenSansToolbar) findViewById(R.id.toolbar);
|
||||
toolbar = (OpenSansToolbar) findViewById(R.id.toolbar);
|
||||
if (toolbar != null) {
|
||||
setSupportActionBar(toolbar);
|
||||
toolbar.hideSubtitle();
|
||||
|
||||
@@ -4,13 +4,13 @@ import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
|
||||
import com.sap.sailing.android.shared.R;
|
||||
import com.sap.sailing.android.shared.data.AbstractCheckinData;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.util.CheckinDataHandler;
|
||||
|
||||
public abstract class CheckinDataActivity extends AbstractBaseActivity implements CheckinDataHandler {
|
||||
|
||||
@Override
|
||||
public abstract void onCheckinDataAvailable(AbstractCheckinData data);
|
||||
public abstract void onCheckinDataAvailable(BaseCheckinData data);
|
||||
|
||||
/**
|
||||
* Shows a pop-up-dialog that informs the user than an DB-operation has failed.
|
||||
|
||||
@@ -48,8 +48,6 @@ public class OpenSansToolbar extends Toolbar {
|
||||
}
|
||||
|
||||
public void hideSubtitle() {
|
||||
TextView titleTextView = (TextView) findViewById(R.id.toolbar_title);
|
||||
titleTextView.setPadding(0, 6, 0, 0);
|
||||
TextView subtitleTextView = (TextView) findViewById(R.id.toolbar_subtitle);
|
||||
subtitleTextView.setVisibility(View.GONE);
|
||||
}
|
||||
@@ -57,6 +55,6 @@ public class OpenSansToolbar extends Toolbar {
|
||||
public void setTitleSize(float size) {
|
||||
TextView titleTextView = (TextView) findViewById(R.id.toolbar_title);
|
||||
titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
|
||||
titleTextView.setTextColor(getResources().getColor(R.color.white));
|
||||
titleTextView.setTextColor(getResources().getColor(R.color.toolbar_text_color));
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.sap.sailing.android.shared.util;
|
||||
|
||||
import com.sap.sailing.android.shared.data.AbstractCheckinData;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
|
||||
public interface CheckinDataHandler {
|
||||
public void onCheckinDataAvailable(AbstractCheckinData data);
|
||||
public void onCheckinDataAvailable(BaseCheckinData data);
|
||||
}
|
||||
@@ -19,7 +19,7 @@ import android.widget.Button;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.sap.sailing.android.shared.R;
|
||||
import com.sap.sailing.android.shared.data.AbstractCheckinData;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.activities.AbstractStartActivity;
|
||||
import com.sap.sailing.android.shared.ui.adapters.AbstractRegattaAdapter;
|
||||
@@ -108,7 +108,7 @@ public abstract class AbstractHomeFragment extends BaseFragment {
|
||||
*
|
||||
* @param checkinData
|
||||
*/
|
||||
public abstract void displayUserConfirmationScreen(final AbstractCheckinData data);
|
||||
public abstract void displayUserConfirmationScreen(final BaseCheckinData data);
|
||||
|
||||
protected void clearScannedQRCodeInPrefs() {
|
||||
prefs.setLastScannedQRCode(null);
|
||||
|
||||
@@ -77,6 +77,13 @@
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".ui.activities.StartActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.BuoyActivity"
|
||||
android:screenOrientation="portrait">
|
||||
<meta-data
|
||||
android:name="android.support.PARENT_ACTIVITY"
|
||||
android:value=".ui.activities.StartActivity"/>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".ui.activities.TrackingActivity"
|
||||
android:label="@string/title_activity_tracking"
|
||||
|
||||
|
After Width: | Height: | Size: 478 B |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 377 B |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 568 B |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 706 B |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
@@ -1,12 +1,18 @@
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:drawable="@color/background_material_dark"/>
|
||||
android:drawable="@drawable/fiori_main_background"/>
|
||||
|
||||
<item>
|
||||
<item android:bottom="60dp">
|
||||
<bitmap
|
||||
android:gravity="center"
|
||||
android:src="@drawable/launch_screen_icon"/>
|
||||
</item>
|
||||
|
||||
<item android:top="80dp">
|
||||
<bitmap
|
||||
android:src="@drawable/launch_screen_text"
|
||||
android:gravity="center|clip_horizontal|clip_vertical"/>
|
||||
</item>
|
||||
|
||||
</layer-list>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<corners
|
||||
android:radius="@dimen/button_radius"/>
|
||||
|
||||
<solid android:color="@color/start_tracking_button_normal"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<corners
|
||||
android:radius="@dimen/button_radius"/>
|
||||
|
||||
<solid android:color="@color/stop_tracking_button_normal"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<corners
|
||||
android:radius="@dimen/button_radius"/>
|
||||
|
||||
<solid android:color="@color/start_tracking_button_pressed"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<corners
|
||||
android:radius="@dimen/button_radius"/>
|
||||
|
||||
<solid android:color="@color/stop_tracking_button_pressed"/>
|
||||
</shape>
|
||||
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<solid android:color="@color/sap_green"/>
|
||||
|
||||
<corners
|
||||
android:bottomLeftRadius="5dip"
|
||||
android:bottomRightRadius="5dip"
|
||||
android:topLeftRadius="5dip"
|
||||
android:topRightRadius="5dip"/>
|
||||
</shape>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<solid android:color="@color/white_less_transparent" />
|
||||
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="@color/white" />
|
||||
|
||||
<corners
|
||||
android:bottomLeftRadius="5dip"
|
||||
android:bottomRightRadius="5dip"
|
||||
android:topLeftRadius="5dip"
|
||||
android:topRightRadius="5dip" />
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- pressed -->
|
||||
<item android:drawable="@drawable/pressed_btn_green" android:state_pressed="true" />
|
||||
<!-- default -->
|
||||
<item android:drawable="@drawable/normal_btn_green" />
|
||||
</selector>
|
||||
|
Before Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- pressed -->
|
||||
<item android:drawable="@drawable/pressed_btn_red" android:state_pressed="true" />
|
||||
<!-- default -->
|
||||
<item android:drawable="@drawable/normal_btn_red" />
|
||||
</selector>
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |
@@ -64,7 +64,7 @@
|
||||
android:layout_marginRight="10dp"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:background="@drawable/rounded_btn_white"
|
||||
android:background="@drawable/normal_btn_white"
|
||||
android:textColor="@color/black"
|
||||
android:text="@string/no_qr_code"/>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<View
|
||||
android:id="@+id/top_bar"
|
||||
android:id="@+id/toolbar_separator"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="4dp"
|
||||
android:layout_alignParentLeft="true"
|
||||
@@ -18,7 +18,7 @@
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_above="@id/start_tracking_box"
|
||||
android:layout_below="@id/top_bar"
|
||||
android:layout_below="@id/toolbar_separator"
|
||||
android:baselineAligned="false"
|
||||
android:orientation="horizontal">
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
android:id="@+id/change_photo_button"
|
||||
android:layout_width="35dp"
|
||||
android:layout_height="35dp"
|
||||
android:background="@drawable/stift"/>
|
||||
android:background="@drawable/edit_pencil"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
@@ -381,8 +381,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="@dimen/regatta_button_margin"
|
||||
android:layout_marginLeft="@dimen/regatta_button_side_margin"
|
||||
android:layout_marginRight="@dimen/regatta_button_side_margin"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:padding="@dimen/regatta_button_padding"
|
||||
android:text="@string/show_event"
|
||||
android:background="@drawable/rounded_btn_blue"
|
||||
@@ -429,8 +429,8 @@
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_margin="@dimen/regatta_button_margin"
|
||||
android:layout_marginLeft="@dimen/regatta_button_side_margin"
|
||||
android:layout_marginRight="@dimen/regatta_button_side_margin"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:layout_weight="0.50"
|
||||
android:background="@drawable/rounded_btn_yellow"
|
||||
android:padding="@dimen/regatta_button_padding"
|
||||
@@ -443,10 +443,10 @@
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_margin="@dimen/regatta_button_margin"
|
||||
android:layout_marginLeft="@dimen/regatta_button_side_margin"
|
||||
android:layout_marginRight="@dimen/regatta_button_side_margin"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:layout_weight="0.50"
|
||||
android:background="@drawable/rounded_btn_green"
|
||||
android:background="@drawable/normal_btn_green"
|
||||
android:padding="@dimen/regatta_button_padding"
|
||||
android:text="@string/start_tracking"
|
||||
android:textAllCaps="true"
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/fiori_main_background">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/ThemeOverlay.AppCompat.ActionBar">
|
||||
android:theme="@style/AppTheme.Toolbar">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
@@ -21,7 +22,8 @@
|
||||
android:layout_gravity="center"
|
||||
android:lines="1"
|
||||
android:singleLine="true"
|
||||
android:textSize="16sp" />
|
||||
android:textColor="@color/toolbar_text_color"
|
||||
android:textSize="16sp"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
android:id="@+id/toolbar_subtitle"
|
||||
@@ -30,53 +32,58 @@
|
||||
android:layout_gravity="center"
|
||||
android:lines="1"
|
||||
android:singleLine="true"
|
||||
android:textSize="12sp" />
|
||||
android:textColor="@color/toolbar_text_color"
|
||||
android:textSize="12sp"/>
|
||||
</LinearLayout>
|
||||
</com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar>
|
||||
|
||||
<View
|
||||
android:id="@+id/toolbar_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/toolbar_separator_height"
|
||||
android:layout_below="@id/toolbar"
|
||||
android:background="@color/separator_color"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_above="@+id/stop_tracking"
|
||||
android:layout_below="@id/toolbar"
|
||||
android:layout_below="@id/toolbar_separator"
|
||||
android:orientation="vertical">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/tracking_linear_layout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:padding="0dp" />
|
||||
android:padding="0dp"/>
|
||||
|
||||
<android.support.v4.view.ViewPager
|
||||
android:id="@+id/pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1" />
|
||||
android:layout_weight="1"/>
|
||||
</LinearLayout>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/stop_tracking"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="100dp"
|
||||
android:layout_height="@dimen/tracking_button_height"
|
||||
android:layout_above="@+id/title_page_indicator"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:layout_marginTop="0dp"
|
||||
android:background="@drawable/rounded_btn_red"
|
||||
android:background="@drawable/stop_tracking_button"
|
||||
android:padding="0dp"
|
||||
android:text="@string/stop_tracking"
|
||||
android:textAllCaps="true"
|
||||
android:textStyle="bold" />
|
||||
android:textSize="@dimen/highlight_text_size"/>
|
||||
|
||||
<com.viewpagerindicator.CirclePageIndicator
|
||||
android:id="@+id/title_page_indicator"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:background="@color/black"
|
||||
android:paddingBottom="10dp"
|
||||
android:paddingTop="10dp" />
|
||||
android:layout_marginBottom="10dp"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -3,13 +3,6 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<View
|
||||
android:id="@+id/top_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="4dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="@color/sap_yellow"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/linearLayout"
|
||||
android:layout_width="match_parent"
|
||||
@@ -17,7 +10,7 @@
|
||||
android:layout_alignParentBottom="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/license_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/about_button_height"
|
||||
@@ -25,13 +18,12 @@
|
||||
android:layout_marginLeft="@dimen/about_button_side_margin"
|
||||
android:layout_marginRight="@dimen/about_button_side_margin"
|
||||
android:layout_marginTop="@dimen/about_button_top_bottom_margin"
|
||||
android:background="@drawable/rounded_btn_yellow"
|
||||
android:background="@drawable/blue_button"
|
||||
android:text="@string/license_information"
|
||||
android:textAllCaps="false"
|
||||
android:textSize="@dimen/about_button_text_size"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/eula_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/about_button_height"
|
||||
@@ -39,20 +31,19 @@
|
||||
android:layout_marginLeft="@dimen/about_button_side_margin"
|
||||
android:layout_marginRight="@dimen/about_button_side_margin"
|
||||
android:layout_marginTop="@dimen/about_button_top_bottom_margin"
|
||||
android:background="@drawable/rounded_btn_yellow"
|
||||
android:background="@drawable/blue_button"
|
||||
android:text="@string/eula"
|
||||
android:textAllCaps="false"
|
||||
android:textSize="@dimen/about_button_text_size"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/system_information_application_version_header"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/about_button_side_margin"
|
||||
android:text="@string/application_version"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/system_information_application_version"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -66,7 +57,6 @@
|
||||
android:layout_above="@+id/linearLayout"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/top_bar"
|
||||
android:layout_marginTop="@dimen/about_header_margin_top"
|
||||
android:fillViewport="false">
|
||||
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/fiori_main_background">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/buoy_Name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:textSize="@dimen/tracking_button_text_size"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/start_tracking"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/tracking_button_height"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_marginBottom="@dimen/regatta_button_margin"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:background="@drawable/start_tracking_button"
|
||||
android:padding="@dimen/regatta_button_padding"
|
||||
android:text="@string/start_tracking"
|
||||
android:textSize="@dimen/tracking_button_text_size"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -1,8 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:custom="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
|
||||
@@ -10,22 +7,24 @@
|
||||
android:id="@+id/compass_bearing_header_text_view"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="10dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:text="@string/course_over_ground"
|
||||
android:textColor="@android:color/darker_gray"
|
||||
android:textSize="15sp"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="10dp"
|
||||
android:paddingTop="15dp"
|
||||
android:text="@string/course_over_ground"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"
|
||||
/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.AutoResizeLightTextView
|
||||
android:id="@+id/compass_bearing_text_view"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:gravity="center"
|
||||
android:text="@string/initial_hyphen_degrees"
|
||||
android:layout_centerInParent="true"
|
||||
android:gravity="center"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="@dimen/fragment_side_margin"
|
||||
android:text="@string/initial_hyphen_degrees"
|
||||
android:textSize="124sp"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -2,7 +2,9 @@
|
||||
<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:layout_height="match_parent"
|
||||
xmlns:Tools="http://schemas.android.com/apk/res-auto"
|
||||
android:background="@drawable/fiori_main_background">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/image"
|
||||
@@ -38,15 +40,15 @@
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:src="@drawable/ic_menu_camera"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/add_photo_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:text="@string/add_team_photo"
|
||||
android:textColor="@color/white"/>
|
||||
android:textColor="@color/fiori_text_color"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
@@ -55,111 +57,126 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:background="@color/white_transparent"
|
||||
android:background="@color/white_less_transparent"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone"
|
||||
tools:visibility="gone">
|
||||
|
||||
<ProgressBar
|
||||
style="?android:attr/progressBarStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="?android:attr/progressBarStyle"
|
||||
android:indeterminate="true"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/upload_progress_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:text="@string/upload_in_progress"
|
||||
android:textColor="@color/white"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/image_bottom"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_alignParentBottom="true"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/retry_upload"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@id/image_bottom"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:background="@color/white_transparent"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone"
|
||||
android:layout_marginBottom="107dp"
|
||||
android:background="@color/white_less_transparent"
|
||||
android:clickable="true"
|
||||
android:onClick="retryUpload"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/retry_upload_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:drawableLeft="@drawable/ic_action_navigation_refresh"
|
||||
android:drawablePadding="8dp"
|
||||
android:paddingRight="8dp"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="8dp"
|
||||
android:paddingTop="8dp"
|
||||
android:text="@string/upload_retry"
|
||||
android:textColor="@color/white"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/competitor_info_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="40dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:background="@color/black_transparent"
|
||||
android:background="@color/competitor_background_color"
|
||||
android:baselineAligned="false"
|
||||
android:measureWithLargestChild="false"
|
||||
android:orientation="horizontal"
|
||||
android:padding="10dp">
|
||||
android:paddingBottom="10dp"
|
||||
android:paddingTop="10dp">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/competitor_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_weight="1"
|
||||
android:gravity="start|center_vertical"
|
||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||
android:gravity="start"
|
||||
android:text="@string/empty"
|
||||
android:textColor="@color/white"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="10dp"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_weight="0.53"
|
||||
android:cropToPadding="true"
|
||||
android:paddingTop="3dp"
|
||||
android:paddingBottom="3dp"
|
||||
android:gravity="end"
|
||||
android:paddingBottom="3dp"
|
||||
android:paddingLeft="5dp"
|
||||
android:paddingRight="5dp">
|
||||
android:paddingRight="5dp"
|
||||
android:paddingTop="3dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/flag_image"
|
||||
android:layout_width="20dp"
|
||||
android:layout_height="fill_parent"
|
||||
android:scaleType="fitXY"
|
||||
android:contentDescription="@string/content_description_flag_icon"
|
||||
android:adjustViewBounds="true"
|
||||
android:textColor="@color/white"/>
|
||||
android:contentDescription="@string/content_description_flag_icon"
|
||||
android:scaleType="fitXY"
|
||||
android:textColor="@color/fiori_text_color"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/sail_id"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:gravity="end|center_vertical"
|
||||
android:padding="0dp"
|
||||
android:text="@string/empty"
|
||||
android:textColor="@color/white"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"
|
||||
android:textStyle="bold"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
@@ -167,49 +184,40 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@id/competitor_info_layout"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:layout_marginRight="15dp"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:background="@drawable/background_transparent_box"
|
||||
android:layout_marginRight="15dp"
|
||||
android:background="@color/white_less_transparent"
|
||||
android:orientation="horizontal"
|
||||
android:padding="0dp">
|
||||
|
||||
<Button
|
||||
android:id="@+id/change_photo_button"
|
||||
android:layout_width="35dp"
|
||||
android:layout_height="35dp"
|
||||
android:background="@drawable/stift"/>
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:background="@drawable/edit_pencil"/>
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/bottom_bar"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="4dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/toolbar_separator_height"
|
||||
android:layout_alignBottom="@+id/competitor_info_layout"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:background="@color/sap_yellow"/>
|
||||
android:background="@color/separator_color"/>
|
||||
|
||||
<View
|
||||
android:id="@+id/top_bar"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="4dp"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="@color/sap_yellow"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/scroll_view"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="100dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="true"
|
||||
android:layout_above="@+id/start_tracking_box"
|
||||
android:layout_below="@id/image"
|
||||
android:layout_gravity="center"
|
||||
android:background="@color/black"
|
||||
android:isScrollContainer="true"
|
||||
android:orientation="vertical"
|
||||
android:scrollbars="vertical">
|
||||
@@ -218,6 +226,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<!-- deprecated layout -->
|
||||
<RelativeLayout
|
||||
android:id="@+id/thank_you_layout"
|
||||
android:layout_width="match_parent"
|
||||
@@ -225,244 +234,234 @@
|
||||
android:baselineAligned="false"
|
||||
android:measureWithLargestChild="false"
|
||||
android:orientation="horizontal"
|
||||
android:padding="10dp"
|
||||
android:visibility="invisible">
|
||||
android:paddingTop="10dp"
|
||||
android:visibility="gone">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/thank_you_note"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="start"
|
||||
android:padding="0dp"
|
||||
android:text="@string/thank_you_you_successfully_participated"
|
||||
android:textColor="@color/white"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textStyle="bold"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/start_date_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:measureWithLargestChild="false"
|
||||
android:orientation="horizontal"
|
||||
android:padding="10dp">
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/regatta_starts_in"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:gravity="center"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="10dp"
|
||||
android:paddingTop="10dp"
|
||||
android:text="@string/regatta_starts_in"
|
||||
android:textColor="@color/white"
|
||||
android:textStyle="bold"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/three_boxes_regatta_starts"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/regatta_starts_in"
|
||||
android:baselineAligned="false"
|
||||
android:gravity="center"
|
||||
android:gravity="center_horizontal"
|
||||
android:measureWithLargestChild="false"
|
||||
android:orientation="horizontal"
|
||||
android:padding="10dp">
|
||||
tools:visibility="gone">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/three_boxes_days_box"
|
||||
android:layout_width="80dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="5dp"
|
||||
android:background="@drawable/background_box"
|
||||
android:layout_marginLeft="@dimen/regatta_start_date_side_margin"
|
||||
android:layout_marginRight="@dimen/regatta_start_date_side_margin"
|
||||
android:baselineAligned="false"
|
||||
android:gravity="center"
|
||||
android:measureWithLargestChild="false"
|
||||
android:orientation="vertical"
|
||||
android:padding="0dp">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/starts_in_days"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="0dp"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="40sp"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/highlight_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/starts_in_days_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="0dp"
|
||||
android:text="@string/days"
|
||||
android:singleLine="true"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:textColor="@color/white"/>
|
||||
android:text="@string/days"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="@dimen/countdown_separator_width"
|
||||
android:layout_height="@dimen/countdown_separator_height"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:background="@color/separator_color"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/three_boxes_hours_box"
|
||||
android:layout_width="80dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="5dp"
|
||||
android:background="@drawable/background_box"
|
||||
android:layout_marginLeft="@dimen/regatta_start_date_side_margin"
|
||||
android:layout_marginRight="@dimen/regatta_start_date_side_margin"
|
||||
android:baselineAligned="false"
|
||||
android:gravity="center"
|
||||
android:measureWithLargestChild="false"
|
||||
android:orientation="vertical"
|
||||
android:padding="0dp">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/starts_in_hours"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="0dp"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="40sp"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/highlight_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/starts_in_hours_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="0dp"
|
||||
android:text="@string/hours"
|
||||
android:singleLine="true"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:textColor="@color/white"/>
|
||||
android:text="@string/hours"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="@dimen/countdown_separator_width"
|
||||
android:layout_height="@dimen/countdown_separator_height"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:background="@color/separator_color"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/three_boxes_minutes_box"
|
||||
android:layout_width="80dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="5dp"
|
||||
android:background="@drawable/background_box"
|
||||
android:layout_marginLeft="@dimen/regatta_start_date_side_margin"
|
||||
android:layout_marginRight="@dimen/regatta_start_date_side_margin"
|
||||
android:baselineAligned="false"
|
||||
android:gravity="center"
|
||||
android:measureWithLargestChild="false"
|
||||
android:orientation="vertical"
|
||||
android:padding="0dp">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/starts_in_minutes"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="0dp"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="40sp"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/highlight_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/starts_in_minutes_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="0dp"
|
||||
android:text="@string/minutes"
|
||||
android:singleLine="true"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:textColor="@color/white"/>
|
||||
android:text="@string/minutes"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
</ScrollView>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/start_tracking_box"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="200dp"
|
||||
android:layout_above="@id/bottomLayout"
|
||||
android:background="@color/black">
|
||||
|
||||
<View
|
||||
android:id="@+id/white_bar"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:background="@color/white_transparent"/>
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/regatta_button_layout_height"
|
||||
android:layout_above="@+id/bottom_announcement">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/event_buttons"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/regatta_button_height"
|
||||
android:layout_below="@id/white_bar"
|
||||
android:layout_above="@+id/layout_start_tracking"
|
||||
android:layout_marginBottom="@dimen/regatta_button_margin"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.sap.sailing.android.tracking.app.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/show_event_button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="@dimen/regatta_button_margin"
|
||||
android:layout_marginLeft="@dimen/regatta_button_side_margin"
|
||||
android:layout_marginRight="@dimen/regatta_button_side_margin"
|
||||
android:padding="@dimen/regatta_button_padding"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/blue_button"
|
||||
android:padding="@dimen/regatta_button_padding"
|
||||
android:text="@string/show_event"
|
||||
android:background="@drawable/rounded_btn_blue"
|
||||
android:textAllCaps="true"
|
||||
android:textStyle="bold"
|
||||
android:textSize="@dimen/button_text_size"
|
||||
tools:text="Show Event"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/show_leaderboards_button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="@dimen/regatta_button_margin"
|
||||
android:layout_marginLeft="@dimen/regatta_button_side_margin"
|
||||
android:layout_marginRight="@dimen/regatta_button_side_margin"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/rounded_btn_yellow"
|
||||
android:background="@drawable/blue_button"
|
||||
android:padding="@dimen/regatta_button_padding"
|
||||
android:text="@string/show_leaderboard"
|
||||
android:textAllCaps="true"
|
||||
android:textStyle="bold"/>
|
||||
android:textSize="@dimen/button_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/layout_start_tracking"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/regatta_button_height"
|
||||
android:layout_below="@+id/event_buttons">
|
||||
android:layout_height="@dimen/tracking_button_height"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_marginTop="@dimen/regatta_button_margin">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansButton
|
||||
<Button
|
||||
android:id="@+id/start_tracking"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_margin="@dimen/regatta_button_margin"
|
||||
android:layout_marginLeft="@dimen/regatta_button_side_margin"
|
||||
android:layout_marginRight="@dimen/regatta_button_side_margin"
|
||||
android:background="@drawable/rounded_btn_green"
|
||||
android:layout_marginLeft="@dimen/fragment_side_margin"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:background="@drawable/start_tracking_button"
|
||||
android:padding="@dimen/regatta_button_padding"
|
||||
android:text="@string/start_tracking"
|
||||
android:textAllCaps="true"
|
||||
android:textStyle="bold"/>
|
||||
android:textSize="@dimen/tracking_button_text_size"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/bottomLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
<TextView
|
||||
android:id="@+id/bottom_announcement"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:background="@color/darker_gray">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
android:id="@+id/bottom_announcement"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:gravity="center"
|
||||
android:text="@string/please_listen_to_announcements"
|
||||
android:textColor="@color/white"/>
|
||||
</RelativeLayout>
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_marginBottom="@dimen/regatta_button_margin"
|
||||
android:layout_marginTop="@dimen/regatta_button_margin"
|
||||
android:text="@string/please_listen_to_announcements"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -1,8 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:custom="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent">
|
||||
|
||||
@@ -10,12 +8,12 @@
|
||||
android:id="@+id/speed_header_text_view"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/speed_over_ground"
|
||||
android:textColor="@android:color/darker_gray"
|
||||
android:textSize="14sp"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="10dp"
|
||||
android:paddingTop="15dp"/>
|
||||
android:paddingTop="15dp"
|
||||
android:text="@string/speed_over_ground"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="fill_parent"
|
||||
@@ -29,11 +27,12 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/white"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="@dimen/fragment_side_margin"
|
||||
android:singleLine="true"
|
||||
android:textSize="124sp"
|
||||
android:textStyle="bold"
|
||||
tools:text="13.556Kn"/>
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -1,21 +1,23 @@
|
||||
<?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="wrap_content"
|
||||
android:baselineAligned="false"
|
||||
android:paddingTop="15dp">
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:baselineAligned="false"
|
||||
android:paddingTop="15dp">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/tracking_time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="10dp"
|
||||
android:text="@string/tracking_time" />
|
||||
android:text="@string/tracking_time"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/wait_for_gps"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -24,7 +26,9 @@
|
||||
android:layout_toRightOf="@+id/tracking_time"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="10dp"
|
||||
android:text="@string/waiting_for_gps" />
|
||||
android:text="@string/waiting_for_gps"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.AutoResizeLightTextView
|
||||
android:id="@+id/tracking_time_label"
|
||||
@@ -33,10 +37,10 @@
|
||||
android:layout_marginBottom="0dp"
|
||||
android:gravity="center"
|
||||
android:paddingBottom="0dp"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="10dp"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="@dimen/fragment_side_margin"
|
||||
android:text="@string/initial_timer_text_zerozero"
|
||||
android:textSize="100sp"
|
||||
tools:ignore="InconsistentLayout" />
|
||||
tools:ignore="InconsistentLayout"/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -1,9 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/scroll_view"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="402dp"
|
||||
android:layout_gravity="center"
|
||||
@@ -14,146 +13,155 @@
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/black">
|
||||
android:background="@color/tracking_status_row_color">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/mode_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="50dp"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_below="@+id/gps_quality"
|
||||
android:layout_below="@+id/tracking_status_label"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="10dp"
|
||||
android:text="@string/tracking_mode"/>
|
||||
android:text="@string/tracking_mode"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/mode"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBaseline="@id/mode_label"
|
||||
android:layout_alignBottom="@id/mode_label"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:paddingRight="10dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="@dimen/fragment_side_margin"
|
||||
android:text="@string/tracking_mode_caching"
|
||||
android:textColor="@color/sap_green"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/tracking_unsent_fixes_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="50dp"
|
||||
android:layout_below="@+id/mode_label"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="10dp"
|
||||
android:paddingLeft="10dp"
|
||||
android:text="@string/tracking_unsent_fixes"/>
|
||||
android:text="@string/tracking_unsent_fixes"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/tracking_unsent_fixes"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="50dp"
|
||||
android:layout_alignBaseline="@id/tracking_unsent_fixes_label"
|
||||
android:layout_alignBottom="@id/tracking_unsent_fixes_label"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:paddingRight="10dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:paddingLeft="10dp"
|
||||
android:text="@string/none"/>
|
||||
android:paddingRight="@dimen/fragment_side_margin"
|
||||
android:text="@string/none"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/tracking_status_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="50dp"
|
||||
android:layout_below="@+id/tracking_unsent_fixes_label"
|
||||
android:layout_alignParentTop="true"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="10dp"
|
||||
android:text="@string/tracking_status"/>
|
||||
android:text="@string/tracking_status"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/tracking_status"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignBaseline="@id/tracking_status_label"
|
||||
android:layout_alignBottom="@id/tracking_status_label"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:paddingRight="10dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="@dimen/fragment_side_margin"
|
||||
android:text="@string/tracking_status_tracking"
|
||||
android:textColor="@color/sap_green"/>
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/gps_quality_info_layout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="50dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignBottom="@+id/gps_quality"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/gps_accuracy_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="9dp"
|
||||
android:paddingLeft="9dp"
|
||||
android:text=""/>
|
||||
android:text=""
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.SignalQualityIndicatorView
|
||||
android:id="@+id/gps_quality_indicator"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/fragment_side_margin"
|
||||
android:contentDescription="@string/signal_accuracy_indicator_view_description"
|
||||
android:focusable="true"
|
||||
android:paddingRight="10dp"
|
||||
android:paddingLeft="10dp"
|
||||
app:signalQuality="none"/>
|
||||
</LinearLayout>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
<TextView
|
||||
android:id="@+id/gps_quality"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="50dp"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_below="@+id/tracking_unsent_fixes_label"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingLeft="@dimen/fragment_side_margin"
|
||||
android:paddingRight="10dp"
|
||||
android:text="@string/tracking_gps_accuracy"/>
|
||||
android:text="@string/tracking_gps_accuracy"
|
||||
android:textColor="@color/fiori_text_color"
|
||||
android:textSize="@dimen/default_text_size"/>
|
||||
|
||||
<!-- Separators -->
|
||||
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_below="@id/mode_label"
|
||||
android:background="@android:color/darker_gray"/>
|
||||
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_below="@id/tracking_status_label"
|
||||
android:background="@android:color/darker_gray"/>
|
||||
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_below="@id/tracking_unsent_fixes_label"
|
||||
android:background="@android:color/darker_gray"/>
|
||||
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_below="@id/gps_quality"
|
||||
android:background="@android:color/darker_gray"/>
|
||||
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_below="@id/tracking_status_label"
|
||||
android:background="@android:color/darker_gray"/>
|
||||
</RelativeLayout>
|
||||
</ScrollView>
|
||||
@@ -1,21 +1,20 @@
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/toolbar"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:theme="@style/ThemeOverlay.AppCompat.ActionBar">
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="10dp">
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
@@ -25,6 +24,7 @@
|
||||
android:layout_gravity="center"
|
||||
android:lines="1"
|
||||
android:singleLine="true"
|
||||
android:textColor="@color/toolbar_text_color"
|
||||
android:textSize="16sp"/>
|
||||
|
||||
<com.sap.sailing.android.shared.ui.customviews.OpenSansTextView
|
||||
@@ -34,6 +34,7 @@
|
||||
android:layout_gravity="center"
|
||||
android:lines="1"
|
||||
android:singleLine="true"
|
||||
android:textColor="@color/toolbar_text_color"
|
||||
android:textSize="12sp"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -41,10 +42,10 @@
|
||||
</com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar>
|
||||
|
||||
<View
|
||||
android:id="@+id/top_bar"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="4dp"
|
||||
android:background="@color/sap_yellow"/>
|
||||
android:id="@+id/toolbar_separator"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/toolbar_separator_height"
|
||||
android:background="@color/separator_color"/>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/content_frame"
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
<?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="50dp"
|
||||
android:background="@color/colorPrimary"
|
||||
tools:ignore="Overdraw" >
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/nextPage"
|
||||
android:layout_width="22dp"
|
||||
android:layout_height="22dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:contentDescription="@string/empty"
|
||||
android:src="@drawable/yellow_arrow_right"
|
||||
android:layout_marginTop="13dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:textColor="@color/white" />
|
||||
|
||||
<com.sap.sailing.android.tracking.app.customviews.OpenSansTextView
|
||||
android:id="@+id/regattaName"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toLeftOf="@+id/nextPage"
|
||||
android:layout_toStartOf="@+id/nextPage"
|
||||
android:paddingLeft="15dp"
|
||||
android:paddingRight="15dp"
|
||||
android:singleLine="true"
|
||||
android:textColor="@color/white" />
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -1,18 +0,0 @@
|
||||
<?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="@color/colorPrimary"
|
||||
tools:ignore="Overdraw">
|
||||
|
||||
<com.sap.sailing.android.tracking.app.customviews.OpenSansTextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="14dp"
|
||||
android:textSize="18sp"
|
||||
android:background="@color/colorPrimary"
|
||||
android:textColor="@color/white"
|
||||
android:text="@string/your_regattas" />
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/options_menu_settings"
|
||||
android:icon="@drawable/settings_grey"
|
||||
android:title="@string/options_menu_settings"
|
||||
app:showAsAction=""/>
|
||||
|
||||
<item
|
||||
android:id="@+id/options_menu_checkout"
|
||||
android:icon="@drawable/ic_menu_info_details"
|
||||
android:title="@string/options_menu_checkout"
|
||||
app:showAsAction=""/>
|
||||
|
||||
<item
|
||||
android:id="@+id/options_menu_info"
|
||||
android:title="@string/about"/>
|
||||
</menu>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Values for regatta buttons-->
|
||||
<dimen name="regatta_button_layout_height">190dp</dimen>
|
||||
<dimen name="regatta_button_margin">10dp</dimen>
|
||||
<dimen name="regatta_button_padding">10dp</dimen>
|
||||
<dimen name="tracking_button_height">120dp</dimen>
|
||||
</resources>
|
||||
@@ -3,6 +3,16 @@
|
||||
|
||||
<style name="AppTheme" parent="AppTheme.Base">
|
||||
<!-- Customize your theme using Material Design here. -->
|
||||
<item name="buttonStyle">@style/shadowLessButtonStyle</item>
|
||||
<item name="android:colorPrimaryDark">@color/fiori_primary_color</item>
|
||||
</style>
|
||||
|
||||
<style name="shadowLessButtonStyle" parent="@android:style/Widget.Material.Button.Borderless">
|
||||
<item name="android:textAppearance">@style/Base.TextAppearance.AppCompat.Button</item>
|
||||
<item name="android:textAllCaps">false</item>
|
||||
<item name="android:textColor">@color/white</item>
|
||||
<item name="android:elevation">0dp</item>
|
||||
<item name="android:stateListAnimator">@null</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -5,8 +5,8 @@
|
||||
<string name="preference_server_checkout_path" translatable="false">/sailingserver/api/v1/leaderboards/{leaderboard-name}/device_mappings/end</string>
|
||||
<string name="preference_server_event_path" translatable="false">/sailingserver/api/v1/events/{event_id}</string>
|
||||
<string name="preference_server_event_url" translatable="false">/gwt/Home.html?navigationTab=Regattas#EventPlace:eventId=%s</string>
|
||||
<string name="preference_server_leaderboard_path" translatable="false">/sailingserver/api/v1/leaderboards/{leaderboard_name}</string>
|
||||
<string name="preference_server_competitor_path" translatable="false">/sailingserver/api/v1/competitors/{competitor_id}</string>
|
||||
<string name="preference_server_team_info_path" translatable="false">/sailingserver/api/v1/competitors/{competitor_id}/team</string>
|
||||
<string name="preference_server_team_image_upload_path" translatable="false">/sailingserver/api/v1/competitors/{competitor_id}/team/image</string>
|
||||
<string name="preferece_server_mark_path" translatable="false">/sailingserver/api/v1/leaderboards/{leaderboardName}/marks/{markId}</string>
|
||||
</resources>
|
||||
@@ -2,13 +2,24 @@
|
||||
|
||||
<color name="white">#FFFFFF</color>
|
||||
<color name="white_transparent">#55FFFFFF</color>
|
||||
<color name="white_less_transparent">#CCFFFFFF</color>
|
||||
<color name="white_less_transparent">#f3f3f3</color>
|
||||
<color name="green">#00FF00</color>
|
||||
<color name="gray">#333333</color>
|
||||
<color name="darker_gray">#242424</color>
|
||||
<color name="black_transparent">#55000000</color>
|
||||
|
||||
<color name="colorPrimary">@color/gray</color>
|
||||
<color name="colorPrimaryDark">@color/colorPrimary</color>
|
||||
<color name="colorAccent">@color/sap_yellow</color>
|
||||
<color name="colorAccent">@color/fiori_primary_color</color>
|
||||
|
||||
<color name="start_tracking_button_normal">#0e7733</color>
|
||||
<color name="start_tracking_button_pressed">#08451e</color>
|
||||
|
||||
<color name="stop_tracking_button_normal">#cd201b</color>
|
||||
<color name="stop_tracking_button_pressed">#991814</color>
|
||||
|
||||
<color name="competitor_background_color">#B3f3f3f3</color>
|
||||
|
||||
<color name="tracking_status_row_color">#f6fbfb</color>
|
||||
|
||||
</resources>
|
||||
@@ -5,9 +5,14 @@
|
||||
<!-- <dimen name="activity_vertical_margin">16dp</dimen> -->
|
||||
|
||||
<!-- Values for regatta buttons-->
|
||||
<dimen name="regatta_button_height">90dp</dimen>
|
||||
<dimen name="regatta_button_side_margin">4dp</dimen>
|
||||
<dimen name="regatta_button_layout_height">140dp</dimen>
|
||||
<dimen name="regatta_button_height">@dimen/no_qr_code_button_height</dimen>
|
||||
<dimen name="regatta_button_margin">10dp</dimen>
|
||||
<dimen name="regatta_button_padding">10dp</dimen>
|
||||
<dimen name="tracking_button_height">80dp</dimen>
|
||||
<dimen name="tracking_button_text_size">@dimen/highlight_text_size</dimen>
|
||||
<dimen name="regatta_start_date_side_margin">22dp</dimen>
|
||||
<dimen name="countdown_separator_height">35dp</dimen>
|
||||
<dimen name="countdown_separator_width">2dp</dimen>
|
||||
|
||||
</resources>
|
||||
@@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<!-- <dimen name="fragment_padding">10dp</dimen>
|
||||
<dimen name="list_view_height">100dp</dimen>
|
||||
<dimen name="team_picture_height">150dp</dimen>
|
||||
<dimen name="team_picture_negative_margin">-25dp</dimen> -->
|
||||
|
||||
</resources>
|
||||
@@ -4,7 +4,7 @@
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="AppTheme.Base"/>
|
||||
|
||||
<style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
|
||||
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
|
||||
<!-- Customize your theme here. -->
|
||||
|
||||
@@ -20,10 +20,18 @@
|
||||
<!-- You can also set colorControlNormal, colorControlActivated colorControlHighlight & colorSwitchThumbNormal. -->
|
||||
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
|
||||
<item name="buttonStyle">@style/buttonStyle</item>
|
||||
</style>
|
||||
|
||||
<style name="launchScreenTheme" parent="Theme.AppCompat.NoActionBar">
|
||||
<item name="android:windowBackground">@drawable/launch_screen</item>
|
||||
</style>
|
||||
|
||||
<style name="buttonStyle" parent="Base.Widget.AppCompat.Button">
|
||||
<item name="android:textAllCaps">false</item>
|
||||
<item name="android:textColor">@color/white</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -16,18 +16,18 @@
|
||||
|
||||
<resources>
|
||||
<bool name="default_circle_indicator_centered">true</bool>
|
||||
<color name="default_circle_indicator_fill_color">#FFFFFFFF</color>
|
||||
<color name="default_circle_indicator_page_color">#00000000</color>
|
||||
<color name="default_circle_indicator_fill_color">@color/fiori_primary_color</color>
|
||||
<color name="default_circle_indicator_page_color">#999999</color>
|
||||
<integer name="default_circle_indicator_orientation">0</integer>
|
||||
<dimen name="default_circle_indicator_radius">3dp</dimen>
|
||||
<bool name="default_circle_indicator_snap">false</bool>
|
||||
<color name="default_circle_indicator_stroke_color">#FFDDDDDD</color>
|
||||
<dimen name="default_circle_indicator_stroke_width">1dp</dimen>
|
||||
<dimen name="default_circle_indicator_stroke_width">0dp</dimen>
|
||||
|
||||
<dimen name="default_line_indicator_line_width">12dp</dimen>
|
||||
<dimen name="default_line_indicator_gap_width">4dp</dimen>
|
||||
<dimen name="default_line_indicator_stroke_width">1dp</dimen>
|
||||
<color name="default_line_indicator_selected_color">#FF33B5E5</color>
|
||||
<color name="default_line_indicator_selected_color">@color/fiori_primary_color</color>
|
||||
<color name="default_line_indicator_unselected_color">#FFBBBBBB</color>
|
||||
<bool name="default_line_indicator_centered">true</bool>
|
||||
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
package com.sap.sailing.android.tracking.app.customviews;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
|
||||
public class OpenSansToolbar extends Toolbar {
|
||||
|
||||
public OpenSansToolbar(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
public OpenSansToolbar(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
}
|
||||
|
||||
public OpenSansToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTitle(int resId) {
|
||||
TextView titleTextView = (TextView)findViewById(R.id.toolbar_title);
|
||||
titleTextView.setText(resId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSubtitle(int resId) {
|
||||
TextView subtitleTextView = (TextView)findViewById(R.id.toolbar_subtitle);
|
||||
subtitleTextView.setText(resId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTitle(CharSequence arg0) {
|
||||
TextView titleTextView = (TextView)findViewById(R.id.toolbar_title);
|
||||
titleTextView.setText(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSubtitle(CharSequence arg0) {
|
||||
TextView subtitleTextView = (TextView)findViewById(R.id.toolbar_subtitle);
|
||||
subtitleTextView.setText(arg0);
|
||||
}
|
||||
}
|
||||
@@ -30,9 +30,16 @@ public class AnalyticsContract {
|
||||
String EVENT_CHECKIN_DIGEST = "event_checkin_digest";
|
||||
}
|
||||
|
||||
interface CheckinUriColumns {
|
||||
interface markColums {
|
||||
String MARK_ID = "mark_id";
|
||||
String MARK_NAME = "mark_name";
|
||||
String MARK_CHECKIN_DIGEST = "mark_checkin_digest";
|
||||
}
|
||||
|
||||
interface CheckinColumns {
|
||||
String CHECKIN_URI_VALUE = "uri_value";
|
||||
String CHECKIN_URI_CHECKIN_DIGEST = "uri_checkin_digest";
|
||||
String CHECKIN_TYPE = "checkin_type";
|
||||
}
|
||||
|
||||
public static final String CONTENT_AUTHORITY = "com.sap.sailing.android.tracking.app.provider.db";
|
||||
@@ -40,9 +47,10 @@ public class AnalyticsContract {
|
||||
public static final Uri BASE_CONTENT_URI = Uri.parse("content://" + CONTENT_AUTHORITY);
|
||||
|
||||
private static final String PATH_COMPETITOR = "competitors";
|
||||
private static final String PATH_EVENT = "events";
|
||||
private static final String PATH_LEADERBOARD = "leaderboards";
|
||||
private static final String PATH_CHECKIN_URI = "checkin_uris";
|
||||
public static final String PATH_EVENT = "events";
|
||||
public static final String PATH_LEADERBOARD = "leaderboards";
|
||||
public static final String PATH_CHECKIN = "checkin_uris";
|
||||
private static final String PATH_MARK = "marks";
|
||||
|
||||
public static class LeaderboardsEventsJoined {
|
||||
public final static Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon().appendPath("leaderboards_events_joined")
|
||||
@@ -54,6 +62,11 @@ public class AnalyticsContract {
|
||||
.appendPath("event_leaderboard_competitor_joined").build();
|
||||
}
|
||||
|
||||
public static class EventLeaderboardMarkJoined {
|
||||
public final static Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon()
|
||||
.appendPath("event_leaderboard_mark_joined").build();
|
||||
}
|
||||
|
||||
public static class Competitor implements CompetitorColumns, BaseColumns {
|
||||
public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon().appendPath(PATH_COMPETITOR).build();
|
||||
|
||||
@@ -116,8 +129,8 @@ public class AnalyticsContract {
|
||||
}
|
||||
}
|
||||
|
||||
public static class CheckinUri implements CheckinUriColumns, BaseColumns {
|
||||
public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon().appendPath(PATH_CHECKIN_URI).build();
|
||||
public static class Checkin implements CheckinColumns, BaseColumns {
|
||||
public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon().appendPath(PATH_CHECKIN).build();
|
||||
|
||||
public static final String CONTENT_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE
|
||||
+ "/vnd.sap_sailing_analytics.uri";
|
||||
@@ -134,6 +147,23 @@ public class AnalyticsContract {
|
||||
}
|
||||
}
|
||||
|
||||
public static class Mark implements markColums, BaseColumns {
|
||||
public static final Uri CONTENT_URI = BASE_CONTENT_URI.buildUpon().appendPath(PATH_MARK).build();
|
||||
public static final String CONTENT_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE
|
||||
+ "/vnd.sap_sailing_analytics.Mark";
|
||||
public static final String CONTENT_ITEM_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE
|
||||
+ "/vnd.sap_sailing_analytics.Mark";
|
||||
public static final String DEFAULT_SORT = BaseColumns._ID + " ASC ";
|
||||
|
||||
public static Uri buildMarkUri(String leaderboardId) {
|
||||
return CONTENT_URI.buildUpon().appendPath(leaderboardId).build();
|
||||
}
|
||||
|
||||
public static String getMarkId(Uri uri) {
|
||||
return uri.getPathSegments().get(1);
|
||||
}
|
||||
}
|
||||
|
||||
private AnalyticsContract() {
|
||||
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Event;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.EventColumns;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Leaderboard;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.LeaderboardColumns;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.CheckinUriColumns;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.CheckinColumns;
|
||||
|
||||
public class AnalyticsDatabase extends SQLiteOpenHelper {
|
||||
|
||||
@@ -20,8 +20,13 @@ public class AnalyticsDatabase extends SQLiteOpenHelper {
|
||||
|
||||
private static final String DATABASE_NAME = "sap_sailing_analytics.db";
|
||||
|
||||
private static final int VER_2014_RELEASE_1 = 1;
|
||||
private static final int CUR_DATABASE_VERSION = VER_2014_RELEASE_1;
|
||||
private static final int VER_2016_RELEASE_1 = 2;
|
||||
private static final int CUR_DATABASE_VERSION = VER_2016_RELEASE_1;
|
||||
|
||||
private static final String createMarkTable = "CREATE TABLE " + Tables.MARKS + " (" + BaseColumns._ID
|
||||
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + AnalyticsContract.Mark.MARK_ID + " TEXT, "
|
||||
+ AnalyticsContract.Mark.MARK_NAME + " TEXT, "
|
||||
+ AnalyticsContract.Mark.MARK_CHECKIN_DIGEST + " TEXT );" ;
|
||||
|
||||
private final Context mContext;
|
||||
|
||||
@@ -31,15 +36,23 @@ public class AnalyticsDatabase extends SQLiteOpenHelper {
|
||||
String EVENTS_COMPETITORS = "events_competitors";
|
||||
String LEADERBOARDS = "leaderboards";
|
||||
String CHECKIN_URIS = "checkin_uris";
|
||||
String MARKS = "marks";
|
||||
String EVENTS_JOIN_LEADERBOARDS_JOIN_MARKS = Tables.LEADERBOARDS + " INNER JOIN " + Tables.EVENTS
|
||||
+ " ON (" + Tables.LEADERBOARDS + "." + Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = " + Tables.EVENTS
|
||||
+ "." + Event.EVENT_CHECKIN_DIGEST + ") " + " INNER JOIN " + Tables.MARKS + " ON ("
|
||||
+ Tables.LEADERBOARDS + "." + Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = " + Tables.MARKS + "."
|
||||
+ AnalyticsContract.Mark.MARK_CHECKIN_DIGEST + ") ";
|
||||
String EVENTS_JOIN_LEADERBOARDS_JOIN_COMPETITORS = Tables.LEADERBOARDS + " INNER JOIN " + Tables.EVENTS
|
||||
+ " ON (" + Tables.LEADERBOARDS + "." + Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = " + Tables.EVENTS
|
||||
+ "." + Event.EVENT_CHECKIN_DIGEST + ") " + " INNER JOIN " + Tables.COMPETITORS + " ON ("
|
||||
+ Tables.LEADERBOARDS + "." + Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = " + Tables.COMPETITORS + "."
|
||||
+ Competitor.COMPETITOR_CHECKIN_DIGEST + ") ";
|
||||
|
||||
String LEADERBOARDS_JOIN_EVENTS = "events LEFT JOIN leaderboards ON " + Tables.EVENTS + "."
|
||||
+ Event.EVENT_CHECKIN_DIGEST + " = " + Tables.LEADERBOARDS + "."
|
||||
+ Leaderboard.LEADERBOARD_CHECKIN_DIGEST;
|
||||
String LEADERBOARDS_JOIN_EVENTS = Tables.LEADERBOARDS + " INNER JOIN " + Tables.EVENTS
|
||||
+ " ON (" + Tables.LEADERBOARDS + "." + Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = " + Tables.EVENTS
|
||||
+ "." + Event.EVENT_CHECKIN_DIGEST + ") " + " INNER JOIN " + Tables.CHECKIN_URIS + " ON ("
|
||||
+ Tables.LEADERBOARDS + "." + Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = " + Tables.CHECKIN_URIS + "."
|
||||
+ AnalyticsContract.Checkin.CHECKIN_URI_CHECKIN_DIGEST + ") ";
|
||||
}
|
||||
|
||||
public AnalyticsDatabase(Context context) {
|
||||
@@ -54,8 +67,9 @@ public class AnalyticsDatabase extends SQLiteOpenHelper {
|
||||
+ LeaderboardColumns.LEADERBOARD_NAME + " TEXT );");
|
||||
|
||||
db.execSQL("CREATE TABLE " + Tables.CHECKIN_URIS + " (" + BaseColumns._ID
|
||||
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + CheckinUriColumns.CHECKIN_URI_CHECKIN_DIGEST + " TEXT, "
|
||||
+ CheckinUriColumns.CHECKIN_URI_VALUE + " TEXT );");
|
||||
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + CheckinColumns.CHECKIN_URI_CHECKIN_DIGEST + " TEXT, "
|
||||
+ CheckinColumns.CHECKIN_URI_VALUE + " TEXT, "
|
||||
+ CheckinColumns.CHECKIN_TYPE + " INTEGER );");
|
||||
|
||||
db.execSQL("CREATE TABLE " + Tables.COMPETITORS + " (" + BaseColumns._ID
|
||||
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + CompetitorColumns.COMPETITOR_ID + " TEXT, "
|
||||
@@ -69,24 +83,16 @@ public class AnalyticsDatabase extends SQLiteOpenHelper {
|
||||
+ EventColumns.EVENT_DATE_START + " INTEGER, " + EventColumns.EVENT_DATE_END + " INTEGER, "
|
||||
+ EventColumns.EVENT_SERVER + " TEXT, " + EventColumns.EVENT_IMAGE_URL + " TEXT, "
|
||||
+ EventColumns.EVENT_CHECKIN_DIGEST + " TEXT )");
|
||||
|
||||
db.execSQL(createMarkTable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||
ExLog.i(mContext, TAG, "onUpgrade() from " + oldVersion + " to " + newVersion);
|
||||
|
||||
int version = oldVersion;
|
||||
|
||||
if (version != CUR_DATABASE_VERSION) {
|
||||
ExLog.i(mContext, TAG, "Upgrade unsuccessful - destroying old data during upgrade");
|
||||
|
||||
db.execSQL("DROP TABLE IF EXISTS " + Tables.COMPETITORS);
|
||||
db.execSQL("DROP TABLE IF EXISTS " + Tables.EVENTS);
|
||||
db.execSQL("DROP TABLE IF EXISTS " + Tables.LEADERBOARDS);
|
||||
db.execSQL("DROP TABLE IF EXISTS " + Tables.CHECKIN_URIS);
|
||||
|
||||
onCreate(db);
|
||||
version = CUR_DATABASE_VERSION;
|
||||
if (oldVersion == 1 && newVersion == 2) {
|
||||
db.execSQL(createMarkTable);
|
||||
db.execSQL("ALTER TABLE " + Tables.CHECKIN_URIS + " ADD COLUMN " + AnalyticsContract.Checkin.CHECKIN_TYPE + " INTEGER DEFAULT 0");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.sap.sailing.android.tracking.app.provider;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
@@ -13,15 +15,13 @@ import android.provider.BaseColumns;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.util.SelectionBuilder;
|
||||
import com.sap.sailing.android.tracking.app.BuildConfig;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Checkin;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Competitor;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Event;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Leaderboard;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsDatabase.Tables;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.CheckinUri;
|
||||
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class AnalyticsProvider extends ContentProvider {
|
||||
|
||||
private static final String TAG = AnalyticsProvider.class.getName();
|
||||
@@ -46,11 +46,15 @@ public class AnalyticsProvider extends ContentProvider {
|
||||
private static final int CHECKIN_URI_ID = 501;
|
||||
|
||||
private static final int EVENT_LEADERBOARD_COMPETITOR_JOINED = 600;
|
||||
private static final int EVENT_LEADERBOARD_MARK_JOINED = 601;
|
||||
|
||||
private static final int EVENT_GPS_FIXES_JOINED = 700;
|
||||
|
||||
private static final int LEADERBOARDS_EVENTS_JOINED = 800;
|
||||
|
||||
private static final int MARK = 900;
|
||||
private static final int MARK_ID = 901;
|
||||
|
||||
private static UriMatcher buildUriMatcher() {
|
||||
final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
|
||||
final String authority = AnalyticsContract.CONTENT_AUTHORITY;
|
||||
@@ -71,11 +75,15 @@ public class AnalyticsProvider extends ContentProvider {
|
||||
matcher.addURI(authority, "messages/#", MESSAGE_ID);
|
||||
|
||||
matcher.addURI(authority, "event_leaderboard_competitor_joined", EVENT_LEADERBOARD_COMPETITOR_JOINED);
|
||||
matcher.addURI(authority, "event_leaderboard_mark_joined", EVENT_LEADERBOARD_MARK_JOINED);
|
||||
|
||||
matcher.addURI(authority, "event_gps_fix_joined", EVENT_GPS_FIXES_JOINED);
|
||||
|
||||
matcher.addURI(authority, "leaderboards_events_joined", LEADERBOARDS_EVENTS_JOINED);
|
||||
|
||||
matcher.addURI(authority, "marks", MARK);
|
||||
matcher.addURI(authority, "marks/*", MARK_ID);
|
||||
|
||||
return matcher;
|
||||
}
|
||||
|
||||
@@ -95,8 +103,8 @@ public class AnalyticsProvider extends ContentProvider {
|
||||
@Override
|
||||
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
|
||||
if (BuildConfig.DEBUG && AppPreferences.getPrintDatabaseOperationDebugMessages()) {
|
||||
String message = "query: uri=" + uri + " projection=" + Arrays.toString(projection) + " selection=["
|
||||
+ selection + "] args=" + Arrays.toString(selectionArgs) + " order=[" + sortOrder + "]";
|
||||
String message = "query: uri=" + uri + " projection=" + Arrays.toString(projection) + " selection=[" + selection + "] args=" + Arrays
|
||||
.toString(selectionArgs) + " order=[" + sortOrder + "]";
|
||||
ExLog.i(getContext(), TAG, message);
|
||||
}
|
||||
|
||||
@@ -106,58 +114,67 @@ public class AnalyticsProvider extends ContentProvider {
|
||||
|
||||
switch (sUriMatcher.match(uri)) {
|
||||
|
||||
case EVENT_LEADERBOARD_COMPETITOR_JOINED:
|
||||
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
|
||||
qb.setTables(Tables.EVENTS_JOIN_LEADERBOARDS_JOIN_COMPETITORS);
|
||||
cursor = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder);
|
||||
return cursor;
|
||||
case EVENT_LEADERBOARD_MARK_JOINED:
|
||||
SQLiteQueryBuilder mqb = new SQLiteQueryBuilder();
|
||||
mqb.setTables(Tables.EVENTS_JOIN_LEADERBOARDS_JOIN_MARKS);
|
||||
cursor = mqb.query(db, projection, selection, selectionArgs, null, null, sortOrder);
|
||||
return cursor;
|
||||
case EVENT_LEADERBOARD_COMPETITOR_JOINED:
|
||||
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
|
||||
qb.setTables(Tables.EVENTS_JOIN_LEADERBOARDS_JOIN_COMPETITORS);
|
||||
cursor = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder);
|
||||
return cursor;
|
||||
|
||||
case LEADERBOARDS_EVENTS_JOINED:
|
||||
SQLiteQueryBuilder el = new SQLiteQueryBuilder();
|
||||
el.setTables(Tables.LEADERBOARDS_JOIN_EVENTS);
|
||||
cursor = el.query(db, projection, selection, selectionArgs, null, null, sortOrder);
|
||||
return cursor;
|
||||
case LEADERBOARDS_EVENTS_JOINED:
|
||||
SQLiteQueryBuilder el = new SQLiteQueryBuilder();
|
||||
el.setTables(Tables.LEADERBOARDS_JOIN_EVENTS);
|
||||
cursor = el.query(db, projection, selection, selectionArgs, null, null, sortOrder);
|
||||
return cursor;
|
||||
|
||||
default:
|
||||
final SelectionBuilder builder = buildExpandedSelection(uri);
|
||||
default:
|
||||
final SelectionBuilder builder = buildExpandedSelection(uri);
|
||||
|
||||
cursor = builder.where(selection, selectionArgs).query(db, false, projection, sortOrder, null);
|
||||
cursor = builder.where(selection, selectionArgs).query(db, false, projection, sortOrder, null);
|
||||
|
||||
Context context = getContext();
|
||||
if (context != null) {
|
||||
cursor.setNotificationUri(context.getContentResolver(), uri);
|
||||
}
|
||||
Context context = getContext();
|
||||
if (context != null) {
|
||||
cursor.setNotificationUri(context.getContentResolver(), uri);
|
||||
}
|
||||
|
||||
return cursor;
|
||||
return cursor;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType(Uri uri) {
|
||||
switch (sUriMatcher.match(uri)) {
|
||||
case COMPETITOR:
|
||||
return Competitor.CONTENT_TYPE;
|
||||
case COMPETITOR:
|
||||
return Competitor.CONTENT_TYPE;
|
||||
|
||||
case COMPETITOR_ID:
|
||||
return Competitor.CONTENT_ITEM_TYPE;
|
||||
case COMPETITOR_ID:
|
||||
return Competitor.CONTENT_ITEM_TYPE;
|
||||
|
||||
case EVENT:
|
||||
return Event.CONTENT_TYPE;
|
||||
case EVENT:
|
||||
return Event.CONTENT_TYPE;
|
||||
|
||||
case EVENT_ID:
|
||||
return Event.CONTENT_ITEM_TYPE;
|
||||
case EVENT_ID:
|
||||
return Event.CONTENT_ITEM_TYPE;
|
||||
|
||||
case LEADERBOARD:
|
||||
return Leaderboard.CONTENT_TYPE;
|
||||
case LEADERBOARD:
|
||||
return Leaderboard.CONTENT_TYPE;
|
||||
|
||||
case LEADERBOARD_ID:
|
||||
return Leaderboard.CONTENT_ITEM_TYPE;
|
||||
case CHECKIN_URI:
|
||||
return CheckinUri.CONTENT_TYPE;
|
||||
case CHECKIN_URI_ID:
|
||||
return CheckinUri.CONTENT_ITEM_TYPE;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
case LEADERBOARD_ID:
|
||||
return Leaderboard.CONTENT_ITEM_TYPE;
|
||||
case CHECKIN_URI:
|
||||
return Checkin.CONTENT_TYPE;
|
||||
case CHECKIN_URI_ID:
|
||||
return Checkin.CONTENT_ITEM_TYPE;
|
||||
case MARK:
|
||||
return AnalyticsContract.Mark.CONTENT_TYPE;
|
||||
case MARK_ID:
|
||||
return AnalyticsContract.Mark.CONTENT_ITEM_TYPE;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,34 +188,40 @@ public class AnalyticsProvider extends ContentProvider {
|
||||
final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
|
||||
|
||||
switch (sUriMatcher.match(uri)) {
|
||||
case COMPETITOR:
|
||||
long competitorId = db.insertOrThrow(Tables.COMPETITORS, null, values);
|
||||
notifyChange(uri);
|
||||
return Competitor.buildCompetitorUri(String.valueOf(competitorId));
|
||||
case COMPETITOR:
|
||||
long competitorId = db.insertOrThrow(Tables.COMPETITORS, null, values);
|
||||
notifyChange(uri);
|
||||
return Competitor.buildCompetitorUri(String.valueOf(competitorId));
|
||||
|
||||
case EVENT:
|
||||
long eventId = db.insertOrThrow(Tables.EVENTS, null, values);
|
||||
notifyChange(uri);
|
||||
return Event.buildEventUri(String.valueOf(eventId));
|
||||
case EVENT:
|
||||
long eventId = db.insertOrThrow(Tables.EVENTS, null, values);
|
||||
notifyChange(uri);
|
||||
return Event.buildEventUri(String.valueOf(eventId));
|
||||
|
||||
case LEADERBOARD:
|
||||
long leaderboardId = db.insertOrThrow(Tables.LEADERBOARDS, null, values);
|
||||
notifyChange(uri);
|
||||
return Leaderboard.buildLeaderboardUri(String.valueOf(leaderboardId));
|
||||
case CHECKIN_URI:
|
||||
long checkinUriID = db.insertOrThrow(Tables.CHECKIN_URIS, null, values);
|
||||
notifyChange(uri);
|
||||
return CheckinUri.builCheckInUri(String.valueOf(checkinUriID));
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
case LEADERBOARD:
|
||||
long leaderboardId = db.insertOrThrow(Tables.LEADERBOARDS, null, values);
|
||||
notifyChange(uri);
|
||||
return Leaderboard.buildLeaderboardUri(String.valueOf(leaderboardId));
|
||||
|
||||
case CHECKIN_URI:
|
||||
long checkinUriID = db.insertOrThrow(Tables.CHECKIN_URIS, null, values);
|
||||
notifyChange(uri);
|
||||
return Checkin.builCheckInUri(String.valueOf(checkinUriID));
|
||||
|
||||
case MARK:
|
||||
long markUriID = db.insertOrThrow(Tables.MARKS, null, values);
|
||||
notifyChange(uri);
|
||||
return AnalyticsContract.Mark.buildMarkUri(String.valueOf(markUriID));
|
||||
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int delete(Uri uri, String selection, String[] selectionArgs) {
|
||||
if (BuildConfig.DEBUG && AppPreferences.getPrintDatabaseOperationDebugMessages()) {
|
||||
String message = "delete: uri=" + uri + " selection=[" + selection + "] args="
|
||||
+ Arrays.toString(selectionArgs);
|
||||
String message = "delete: uri=" + uri + " selection=[" + selection + "] args=" + Arrays.toString(selectionArgs);
|
||||
ExLog.i(getContext(), TAG, message);
|
||||
}
|
||||
|
||||
@@ -206,42 +229,47 @@ public class AnalyticsProvider extends ContentProvider {
|
||||
|
||||
switch (sUriMatcher.match(uri)) {
|
||||
|
||||
case COMPETITOR:
|
||||
int numCompetitorRowsDeleted = db.delete(Tables.COMPETITORS, selection, selectionArgs);
|
||||
notifyChange(uri);
|
||||
return numCompetitorRowsDeleted;
|
||||
case COMPETITOR:
|
||||
int numCompetitorRowsDeleted = db.delete(Tables.COMPETITORS, selection, selectionArgs);
|
||||
notifyChange(uri);
|
||||
return numCompetitorRowsDeleted;
|
||||
|
||||
case EVENT:
|
||||
int numEventRowsDeleted = db.delete(Tables.EVENTS, selection, selectionArgs);
|
||||
notifyChange(uri);
|
||||
return numEventRowsDeleted;
|
||||
case EVENT:
|
||||
int numEventRowsDeleted = db.delete(Tables.EVENTS, selection, selectionArgs);
|
||||
notifyChange(uri);
|
||||
return numEventRowsDeleted;
|
||||
|
||||
case LEADERBOARD:
|
||||
int numLeaderboardRowsDeleted = db.delete(Tables.LEADERBOARDS, selection, selectionArgs);
|
||||
notifyChange(uri);
|
||||
return numLeaderboardRowsDeleted;
|
||||
case CHECKIN_URI:
|
||||
int numCheckinUriRowsDeleted = db.delete(Tables.CHECKIN_URIS, selection, selectionArgs);
|
||||
notifyChange(uri);
|
||||
return numCheckinUriRowsDeleted;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
case LEADERBOARD:
|
||||
int numLeaderboardRowsDeleted = db.delete(Tables.LEADERBOARDS, selection, selectionArgs);
|
||||
notifyChange(uri);
|
||||
return numLeaderboardRowsDeleted;
|
||||
case CHECKIN_URI:
|
||||
int numCheckinUriRowsDeleted = db.delete(Tables.CHECKIN_URIS, selection, selectionArgs);
|
||||
notifyChange(uri);
|
||||
return numCheckinUriRowsDeleted;
|
||||
case MARK:
|
||||
int numMarkRowsDeleted = db.delete(Tables.MARKS, selection, selectionArgs);
|
||||
notifyChange(uri);
|
||||
return numMarkRowsDeleted;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
|
||||
if (BuildConfig.DEBUG && AppPreferences.getPrintDatabaseOperationDebugMessages()) {
|
||||
String message = "update: uri=" + uri + " values=[" + values == null ? "null" : values.toString()
|
||||
+ "] selection=[" + selection + "]" + " args=" + Arrays.toString(selectionArgs);
|
||||
String message = "update: uri=" + uri + " values=[" + values == null ?
|
||||
"null" :
|
||||
values.toString() + "] selection=[" + selection + "]" + " args=" + Arrays.toString(selectionArgs);
|
||||
ExLog.i(getContext(), TAG, message);
|
||||
}
|
||||
|
||||
// final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
|
||||
|
||||
switch (sUriMatcher.match(uri)) {
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,34 +281,39 @@ public class AnalyticsProvider extends ContentProvider {
|
||||
final SelectionBuilder builder = new SelectionBuilder(getContext());
|
||||
|
||||
switch (sUriMatcher.match(uri)) {
|
||||
case COMPETITOR:
|
||||
return builder.table(Tables.COMPETITORS);
|
||||
case COMPETITOR:
|
||||
return builder.table(Tables.COMPETITORS);
|
||||
|
||||
case COMPETITOR_ID:
|
||||
final String competitor_id = Competitor.getCompetitorId(uri);
|
||||
return builder.table(Tables.COMPETITORS).where(Competitor.COMPETITOR_ID + " = ?", competitor_id);
|
||||
case COMPETITOR_ID:
|
||||
final String competitor_id = Competitor.getCompetitorId(uri);
|
||||
return builder.table(Tables.COMPETITORS).where(Competitor.COMPETITOR_ID + " = ?", competitor_id);
|
||||
|
||||
case LEADERBOARD:
|
||||
return builder.table(Tables.LEADERBOARDS);
|
||||
case LEADERBOARD:
|
||||
return builder.table(Tables.LEADERBOARDS);
|
||||
|
||||
case LEADERBOARD_ID:
|
||||
final String leaderboard_id = Leaderboard.getLeaderboardId(uri);
|
||||
return builder.table(Tables.LEADERBOARDS).where(BaseColumns._ID + " = ?", leaderboard_id);
|
||||
case LEADERBOARD_ID:
|
||||
final String leaderboard_id = Leaderboard.getLeaderboardId(uri);
|
||||
return builder.table(Tables.LEADERBOARDS).where(BaseColumns._ID + " = ?", leaderboard_id);
|
||||
|
||||
case EVENT:
|
||||
return builder.table(Tables.EVENTS);
|
||||
case EVENT:
|
||||
return builder.table(Tables.EVENTS);
|
||||
|
||||
case EVENT_ID:
|
||||
final String event_id = Event.getEventId(uri);
|
||||
return builder.table(Tables.EVENTS).where(Event.EVENT_ID + " = ?", event_id);
|
||||
case CHECKIN_URI:
|
||||
return builder.table(Tables.CHECKIN_URIS);
|
||||
case CHECKIN_URI_ID:
|
||||
final String checkinUriId = AnalyticsContract.CheckinUri.getCheckinUriId(uri);
|
||||
return builder.table(Tables.CHECKIN_URIS).where(BaseColumns._ID + " = ?", checkinUriId);
|
||||
case EVENT_ID:
|
||||
final String event_id = Event.getEventId(uri);
|
||||
return builder.table(Tables.EVENTS).where(Event.EVENT_ID + " = ?", event_id);
|
||||
case CHECKIN_URI:
|
||||
return builder.table(Tables.CHECKIN_URIS);
|
||||
case CHECKIN_URI_ID:
|
||||
final String checkinUriId = Checkin.getCheckinUriId(uri);
|
||||
return builder.table(Tables.CHECKIN_URIS).where(BaseColumns._ID + " = ?", checkinUriId);
|
||||
case MARK:
|
||||
return builder.table(Tables.MARKS);
|
||||
case MARK_ID:
|
||||
final String mark_id = AnalyticsContract.Mark.getMarkId(uri);
|
||||
return builder.table(Tables.MARKS).where(BaseColumns._ID + " = ?", mark_id);
|
||||
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.android.tracking.app.ui.activities;
|
||||
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
|
||||
@@ -19,14 +20,15 @@ public class AboutActivity extends BaseActivity {
|
||||
toolbar.hideSubtitle();
|
||||
toolbar.setTitleSize(20);
|
||||
setSupportActionBar(toolbar);
|
||||
toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
|
||||
}
|
||||
if (getSupportActionBar() != null) {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setHomeButtonEnabled(true);
|
||||
toolbar.setNavigationIcon(R.drawable.sap_logo_64dp);
|
||||
toolbar.setPadding(20, 0, 0, 0);
|
||||
toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
|
||||
int sidePadding = (int) getResources().getDimension(R.dimen.toolbar_left_padding);
|
||||
toolbar.setPadding(sidePadding, 0, 0, 0);
|
||||
ColorDrawable backgroundDrawable = new ColorDrawable(getResources().getColor(R.color.toolbar_background));
|
||||
getSupportActionBar().setBackgroundDrawable(backgroundDrawable);
|
||||
getSupportActionBar().setTitle(R.string.about_this_app);
|
||||
}
|
||||
replaceFragment(R.id.content_frame, AboutFragment.newInstance());
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
package com.sap.sailing.android.tracking.app.ui.activities;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.sap.sailing.android.shared.data.LeaderboardInfo;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.activities.AbstractBaseActivity;
|
||||
import com.sap.sailing.android.shared.util.NetworkHelper;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
import com.sap.sailing.android.tracking.app.ui.fragments.BuoyFragment;
|
||||
import com.sap.sailing.android.tracking.app.utils.AboutHelper;
|
||||
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
|
||||
import com.sap.sailing.android.tracking.app.utils.CheckoutHelper;
|
||||
import com.sap.sailing.android.tracking.app.utils.DatabaseHelper;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.EventInfo;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.MarkInfo;
|
||||
|
||||
public class BuoyActivity extends AbstractBaseActivity {
|
||||
|
||||
private static String TAG = BuoyActivity.class.getName();
|
||||
|
||||
private EventInfo event;
|
||||
private MarkInfo mark;
|
||||
private LeaderboardInfo leaderboard;
|
||||
private String checkinDigest;
|
||||
|
||||
private AppPreferences prefs;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
Intent intent = getIntent();
|
||||
checkinDigest = intent.getStringExtra(getString(R.string.checkin_digest));
|
||||
|
||||
prefs = new AppPreferences(this);
|
||||
mark = DatabaseHelper.getInstance().getMarkInfo(this, checkinDigest);
|
||||
event = DatabaseHelper.getInstance().getEventInfo(this, checkinDigest);
|
||||
leaderboard = DatabaseHelper.getInstance().getLeaderboard(this, checkinDigest);
|
||||
|
||||
setContentView(R.layout.fragment_container);
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
if (toolbar != null) {
|
||||
setSupportActionBar(toolbar);
|
||||
}
|
||||
if (getSupportActionBar() != null) {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setHomeButtonEnabled(true);
|
||||
toolbar.setNavigationIcon(R.drawable.sap_logo_64dp);
|
||||
int sidePadding = (int) getResources().getDimension(R.dimen.toolbar_left_padding);
|
||||
toolbar.setPadding(sidePadding, 0, 0, 0);
|
||||
getSupportActionBar().setTitle(leaderboard.name);
|
||||
getSupportActionBar().setSubtitle(event.name);
|
||||
ColorDrawable backgroundDrawable = new ColorDrawable(getResources().getColor(R.color.toolbar_background));
|
||||
getSupportActionBar().setBackgroundDrawable(backgroundDrawable);
|
||||
}
|
||||
replaceFragment(R.id.content_frame, BuoyFragment.newInstance(mark.markName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
if (prefs != null && prefs.getTrackerIsTracking()) {
|
||||
String checkinDigest = prefs.getTrackerIsTrackingCheckinDigest();
|
||||
startTrackingActivity(checkinDigest);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getOptionsMenuResId() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = getMenuInflater();
|
||||
inflater.inflate(R.menu.buoy_menu, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.options_menu_settings:
|
||||
ExLog.i(this, TAG, "Clicked SETTINGS.");
|
||||
startActivity(new Intent(this, SettingsActivity.class));
|
||||
return true;
|
||||
case R.id.options_menu_checkout:
|
||||
ExLog.i(this, TAG, "Clicked CHECKOUT.");
|
||||
displayCheckoutConfirmationDialog();
|
||||
return true;
|
||||
case R.id.options_menu_info:
|
||||
AboutHelper.showInfoActivity(this);
|
||||
return true;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
private void startTrackingActivity(String checkinDigest) {
|
||||
Intent intent = new Intent(this, TrackingActivity.class);
|
||||
intent.putExtra(getString(R.string.tracking_activity_checkin_digest_parameter), checkinDigest);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
public void startTrackingActivity() {
|
||||
Intent intent = new Intent(this, TrackingActivity.class);
|
||||
intent.putExtra(getString(R.string.tracking_activity_checkin_digest_parameter), checkinDigest);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
private void displayCheckoutConfirmationDialog() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle(R.string.warning);
|
||||
builder.setMessage(R.string.checkout_warning_message);
|
||||
builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
checkout();
|
||||
}
|
||||
});
|
||||
builder.setNegativeButton(R.string.no, null);
|
||||
builder.show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check out from regatta;
|
||||
*/
|
||||
public void checkout() {
|
||||
CheckoutHelper checkoutHelper = new CheckoutHelper();
|
||||
checkoutHelper.checkoutMark(this, leaderboard.name, event.server, mark.markId, new NetworkHelper.NetworkHelperSuccessListener() {
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(BuoyActivity.this, event.checkinDigest);
|
||||
dismissProgressDialog();
|
||||
finish();
|
||||
}
|
||||
}, new NetworkHelper.NetworkHelperFailureListener() {
|
||||
@Override
|
||||
public void performAction(NetworkHelper.NetworkHelperError e) {
|
||||
dismissProgressDialog();
|
||||
showErrorPopup(R.string.error,
|
||||
R.string.error_could_not_complete_operation_on_server_try_again);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.sap.sailing.android.tracking.app.ui.activities;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
|
||||
@@ -30,14 +31,16 @@ public class LeaderboardWebViewActivity extends BaseActivity {
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
if (toolbar != null) {
|
||||
setSupportActionBar(toolbar);
|
||||
toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
|
||||
}
|
||||
if (getSupportActionBar() != null) {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setHomeButtonEnabled(true);
|
||||
toolbar.setNavigationIcon(R.drawable.sap_logo_64dp);
|
||||
toolbar.setPadding(20, 0, 0, 0);
|
||||
int sidePadding = (int) getResources().getDimension(R.dimen.toolbar_left_padding);
|
||||
toolbar.setPadding(sidePadding, 0, 0, 0);
|
||||
getSupportActionBar().setTitle(getString(R.string.title_activity_leaderboard));
|
||||
ColorDrawable backgroundDrawable = new ColorDrawable(getResources().getColor(R.color.toolbar_background));
|
||||
getSupportActionBar().setBackgroundDrawable(backgroundDrawable);
|
||||
}
|
||||
|
||||
replaceFragment(R.id.content_frame, new LeaderboardFragment());
|
||||
|
||||
@@ -19,7 +19,7 @@ import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.net.Uri;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
@@ -35,11 +35,10 @@ import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.sap.sailing.android.shared.data.AbstractCheckinData;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.data.CheckinUrlInfo;
|
||||
import com.sap.sailing.android.shared.data.LeaderboardInfo;
|
||||
import com.sap.sailing.android.shared.data.http.HttpGetRequest;
|
||||
import com.sap.sailing.android.shared.data.http.HttpJsonPostRequest;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.activities.AbstractRegattaActivity;
|
||||
import com.sap.sailing.android.shared.util.BitmapHelper;
|
||||
@@ -47,7 +46,6 @@ import com.sap.sailing.android.shared.util.NetworkHelper;
|
||||
import com.sap.sailing.android.shared.util.NetworkHelper.NetworkHelperError;
|
||||
import com.sap.sailing.android.shared.util.NetworkHelper.NetworkHelperFailureListener;
|
||||
import com.sap.sailing.android.shared.util.NetworkHelper.NetworkHelperSuccessListener;
|
||||
import com.sap.sailing.android.shared.util.UniqueDeviceUuid;
|
||||
import com.sap.sailing.android.tracking.app.BuildConfig;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
import com.sap.sailing.android.tracking.app.ui.fragments.RegattaFragment;
|
||||
@@ -57,8 +55,10 @@ import com.sap.sailing.android.tracking.app.upload.UploadTeamImageTask;
|
||||
import com.sap.sailing.android.tracking.app.utils.AboutHelper;
|
||||
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
|
||||
import com.sap.sailing.android.tracking.app.utils.CheckinManager;
|
||||
import com.sap.sailing.android.tracking.app.utils.CheckoutHelper;
|
||||
import com.sap.sailing.android.tracking.app.utils.DatabaseHelper;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CompetitorCheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CompetitorInfo;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.EventInfo;
|
||||
|
||||
@@ -104,15 +104,17 @@ public class RegattaActivity extends AbstractRegattaActivity
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
if (toolbar != null) {
|
||||
setSupportActionBar(toolbar);
|
||||
toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
|
||||
}
|
||||
if (getSupportActionBar() != null) {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setHomeButtonEnabled(true);
|
||||
toolbar.setNavigationIcon(R.drawable.sap_logo_64dp);
|
||||
toolbar.setPadding(20, 0, 0, 0);
|
||||
int sidePadding = (int) getResources().getDimension(R.dimen.toolbar_left_padding);
|
||||
toolbar.setPadding(sidePadding, 0, 0, 0);
|
||||
getSupportActionBar().setTitle(leaderboard.name);
|
||||
getSupportActionBar().setSubtitle(event.name);
|
||||
ColorDrawable backgroundDrawable = new ColorDrawable(getResources().getColor(R.color.toolbar_background));
|
||||
getSupportActionBar().setBackgroundDrawable(backgroundDrawable);
|
||||
}
|
||||
RegattaFragment regattaFragment = new RegattaFragment();
|
||||
regattaFragment.setFragmentWatcher(this);
|
||||
@@ -410,19 +412,23 @@ public class RegattaActivity extends AbstractRegattaActivity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckinDataAvailable(AbstractCheckinData checkinData) {
|
||||
public void onCheckinDataAvailable(BaseCheckinData checkinData) {
|
||||
if (checkinData != null) {
|
||||
CheckinData data = (CheckinData) checkinData;
|
||||
try {
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(this, checkinDigest);
|
||||
DatabaseHelper.getInstance().storeCheckinRow(this, data.getEvent(), data.getCompetitor(), data.getLeaderboard(), data.getCheckinUrl());
|
||||
competitor = DatabaseHelper.getInstance().getCompetitor(this, checkinDigest);
|
||||
event = DatabaseHelper.getInstance().getEventInfo(this, checkinDigest);
|
||||
leaderboard = DatabaseHelper.getInstance().getLeaderboard(this, checkinDigest);
|
||||
checkinUrl = DatabaseHelper.getInstance().getCheckinUrl(this, checkinDigest);
|
||||
RegattaFragment regattaFragment = new RegattaFragment();
|
||||
regattaFragment.setFragmentWatcher(this);
|
||||
replaceFragment(R.id.content_frame, regattaFragment);
|
||||
if (data instanceof CompetitorCheckinData) {
|
||||
CompetitorCheckinData competitorCheckinData = (CompetitorCheckinData) data;
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(this, checkinDigest);
|
||||
DatabaseHelper.getInstance().storeCompetitorCheckinRow(this, competitorCheckinData.getEvent(), competitorCheckinData.getCompetitor(),
|
||||
competitorCheckinData.getLeaderboard(), competitorCheckinData.getCheckinUrl());
|
||||
competitor = DatabaseHelper.getInstance().getCompetitor(this, checkinDigest);
|
||||
event = DatabaseHelper.getInstance().getEventInfo(this, checkinDigest);
|
||||
leaderboard = DatabaseHelper.getInstance().getLeaderboard(this, checkinDigest);
|
||||
checkinUrl = DatabaseHelper.getInstance().getCheckinUrl(this, checkinDigest);
|
||||
RegattaFragment regattaFragment = new RegattaFragment();
|
||||
regattaFragment.setFragmentWatcher(this);
|
||||
replaceFragment(R.id.content_frame, regattaFragment);
|
||||
}
|
||||
} catch (DatabaseHelper.GeneralDatabaseHelperException e) {
|
||||
ExLog.e(this, TAG, "Batch insert failed: " + e.getMessage());
|
||||
displayDatabaseError();
|
||||
@@ -461,48 +467,23 @@ public class RegattaActivity extends AbstractRegattaActivity
|
||||
* Check out from regatta;
|
||||
*/
|
||||
public void checkout() {
|
||||
final String checkoutURLStr = event.server
|
||||
+ prefs.getServerCheckoutPath().replace("{leaderboard-name}", Uri.encode(leaderboard.name));
|
||||
|
||||
showProgressDialog(R.string.please_wait, R.string.checking_out);
|
||||
|
||||
JSONObject checkoutData = new JSONObject();
|
||||
try {
|
||||
checkoutData.put("competitorId", competitor.id);
|
||||
checkoutData.put("deviceUuid", UniqueDeviceUuid.getUniqueId(this));
|
||||
checkoutData.put("toMillis", System.currentTimeMillis());
|
||||
} catch (JSONException e) {
|
||||
showErrorPopup(R.string.error, R.string.error_could_not_complete_operation_on_server_try_again);
|
||||
ExLog.e(this, TAG, "Error populating checkout-data: " + e.getMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
HttpJsonPostRequest request = new HttpJsonPostRequest(this, new URL(checkoutURLStr), checkoutData.toString());
|
||||
NetworkHelper.getInstance(this).executeHttpJsonRequestAsync(request,
|
||||
new NetworkHelperSuccessListener() {
|
||||
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(RegattaActivity.this,
|
||||
event.checkinDigest);
|
||||
deleteImageFile(getLeaderboardImageFileName(leaderboard.name));
|
||||
dismissProgressDialog();
|
||||
finish();
|
||||
}
|
||||
}, new NetworkHelperFailureListener() {
|
||||
|
||||
@Override
|
||||
public void performAction(NetworkHelperError e) {
|
||||
dismissProgressDialog();
|
||||
showErrorPopup(R.string.error,
|
||||
R.string.error_could_not_complete_operation_on_server_try_again);
|
||||
}
|
||||
});
|
||||
|
||||
} catch (MalformedURLException e) {
|
||||
ExLog.w(this, TAG, "Error, can't check out, MalformedURLException: " + e.getMessage());
|
||||
}
|
||||
CheckoutHelper checkoutHelper = new CheckoutHelper();
|
||||
checkoutHelper.checkoutCompetitor(this, leaderboard.name, event.server, competitor.id, new NetworkHelperSuccessListener() {
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(RegattaActivity.this, event.checkinDigest);
|
||||
deleteImageFile(getLeaderboardImageFileName(leaderboard.name));
|
||||
dismissProgressDialog();
|
||||
finish();
|
||||
}
|
||||
}, new NetworkHelperFailureListener() {
|
||||
@Override
|
||||
public void performAction(NetworkHelperError e) {
|
||||
dismissProgressDialog();
|
||||
showErrorPopup(R.string.error,
|
||||
R.string.error_could_not_complete_operation_on_server_try_again);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package com.sap.sailing.android.tracking.app.ui.activities;
|
||||
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.View;
|
||||
|
||||
import com.sap.sailing.android.shared.ui.customviews.OpenSansToolbar;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
import com.sap.sailing.android.tracking.app.ui.fragments.preference.GeneralPreferenceFragment;
|
||||
|
||||
@@ -15,9 +16,10 @@ public class SettingsActivity extends AppCompatActivity {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.pref_with_actionbar);
|
||||
|
||||
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||
OpenSansToolbar toolbar = (OpenSansToolbar) findViewById(R.id.toolbar);
|
||||
if (toolbar != null) {
|
||||
setSupportActionBar(toolbar);
|
||||
toolbar.hideSubtitle();
|
||||
toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
|
||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
@@ -31,8 +33,11 @@ public class SettingsActivity extends AppCompatActivity {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setHomeButtonEnabled(true);
|
||||
getSupportActionBar().setTitle(R.string.preferences);
|
||||
ColorDrawable backgroundDrawable = new ColorDrawable(getResources().getColor(R.color.toolbar_background));
|
||||
getSupportActionBar().setBackgroundDrawable(backgroundDrawable);
|
||||
toolbar.setNavigationIcon(R.drawable.sap_logo_64dp);
|
||||
toolbar.setPadding(20, 0, 0, 0);
|
||||
int sidePadding = (int) getResources().getDimension(R.dimen.toolbar_left_padding);
|
||||
toolbar.setPadding(sidePadding, 0, 0, 0);
|
||||
}
|
||||
|
||||
getFragmentManager().beginTransaction().replace(R.id.content_frame, new GeneralPreferenceFragment()).commit();
|
||||
|
||||
@@ -3,12 +3,13 @@ package com.sap.sailing.android.tracking.app.ui.activities;
|
||||
import java.util.List;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.sap.sailing.android.shared.data.AbstractCheckinData;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.activities.AbstractStartActivity;
|
||||
import com.sap.sailing.android.shared.util.EulaHelper;
|
||||
@@ -19,6 +20,8 @@ import com.sap.sailing.android.tracking.app.utils.AppPreferences;
|
||||
import com.sap.sailing.android.tracking.app.utils.CheckinManager;
|
||||
import com.sap.sailing.android.tracking.app.utils.DatabaseHelper;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CompetitorCheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.MarkCheckinData;
|
||||
import com.sap.sailing.android.ui.fragments.AbstractHomeFragment;
|
||||
|
||||
public class StartActivity extends AbstractStartActivity {
|
||||
@@ -34,6 +37,10 @@ public class StartActivity extends AbstractStartActivity {
|
||||
if (getSupportActionBar() != null) {
|
||||
getSupportActionBar().setTitle(getString(R.string.title_activity_start));
|
||||
getSupportActionBar().setHomeButtonEnabled(false);
|
||||
ColorDrawable backgroundDrawable = new ColorDrawable(getResources().getColor(R.color.toolbar_background));
|
||||
getSupportActionBar().setBackgroundDrawable(backgroundDrawable);
|
||||
int sidePadding = (int) getResources().getDimension(R.dimen.toolbar_left_padding);
|
||||
toolbar.setPadding(sidePadding, 0, 0, 0);
|
||||
}
|
||||
replaceFragment(R.id.content_frame, new HomeFragment());
|
||||
refreshDatabase();
|
||||
@@ -49,6 +56,7 @@ public class StartActivity extends AbstractStartActivity {
|
||||
|
||||
if (prefs.getTrackerIsTracking()) {
|
||||
String checkinDigest = prefs.getTrackerIsTrackingCheckinDigest();
|
||||
// TODO: Type in preferences write / read
|
||||
startRegatta(checkinDigest);
|
||||
}
|
||||
}
|
||||
@@ -60,6 +68,7 @@ public class StartActivity extends AbstractStartActivity {
|
||||
}
|
||||
|
||||
private void startRegatta(String checkinDigest) {
|
||||
// TODO: Check which activity to be called
|
||||
Intent intent = new Intent(this, RegattaActivity.class);
|
||||
intent.putExtra(getString(R.string.checkin_digest), checkinDigest);
|
||||
startActivity(intent);
|
||||
@@ -93,7 +102,7 @@ public class StartActivity extends AbstractStartActivity {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCheckinDataAvailable(AbstractCheckinData data) {
|
||||
public void onCheckinDataAvailable(BaseCheckinData data) {
|
||||
if (data != null && data instanceof CheckinData) {
|
||||
CheckinData checkinData = (CheckinData) data;
|
||||
if (!checkinData.isUpdate()) {
|
||||
@@ -104,16 +113,29 @@ public class StartActivity extends AbstractStartActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private void updateRegatta(AbstractCheckinData data) {
|
||||
if (data instanceof CheckinData)
|
||||
{
|
||||
private void updateRegatta(BaseCheckinData data) {
|
||||
if (data instanceof CheckinData) {
|
||||
CheckinData checkinData = (CheckinData) data;
|
||||
try {
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(this, checkinData.getCheckinUrl().checkinDigest);
|
||||
DatabaseHelper.getInstance().storeCheckinRow(this, checkinData.getEvent(), checkinData.getCompetitor(), checkinData.getLeaderboard(), checkinData.getCheckinUrl());
|
||||
} catch (DatabaseHelper.GeneralDatabaseHelperException e) {
|
||||
ExLog.e(this, TAG, "Batch insert failed: " + e.getMessage());
|
||||
displayDatabaseError();
|
||||
if (checkinData instanceof CompetitorCheckinData) {
|
||||
CompetitorCheckinData competitorCheckinData = (CompetitorCheckinData) checkinData;
|
||||
try {
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(this, checkinData.getCheckinUrl().checkinDigest);
|
||||
DatabaseHelper.getInstance()
|
||||
.storeCompetitorCheckinRow(this, checkinData.getEvent(), competitorCheckinData.getCompetitor(), checkinData.getLeaderboard(), checkinData.getCheckinUrl());
|
||||
} catch (DatabaseHelper.GeneralDatabaseHelperException e) {
|
||||
ExLog.e(this, TAG, "Batch insert failed: " + e.getMessage());
|
||||
displayDatabaseError();
|
||||
}
|
||||
} else if (checkinData instanceof MarkCheckinData) {
|
||||
MarkCheckinData markCheckinData = (MarkCheckinData) checkinData;
|
||||
try {
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(this, checkinData.getCheckinUrl().checkinDigest);
|
||||
DatabaseHelper.getInstance()
|
||||
.storeMarkCheckinRow(this, checkinData.getEvent(), markCheckinData.getMark(), checkinData.getLeaderboard(), checkinData.getCheckinUrl());
|
||||
} catch (DatabaseHelper.GeneralDatabaseHelperException e) {
|
||||
ExLog.e(this, TAG, "Batch insert failed: " + e.getMessage());
|
||||
displayDatabaseError();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.location.LocationManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
@@ -19,6 +20,7 @@ import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.android.shared.data.LeaderboardInfo;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.services.sending.MessageSendingService;
|
||||
import com.sap.sailing.android.shared.services.sending.MessageSendingService.APIConnectivity;
|
||||
@@ -100,15 +102,18 @@ public class TrackingActivity extends BaseActivity implements GPSQualityListener
|
||||
}
|
||||
|
||||
if (getSupportActionBar() != null) {
|
||||
EventInfo eventInfo = DatabaseHelper.getInstance().getEventInfoWithLeaderboardAndCompetitor(this, checkinDigest);
|
||||
EventInfo eventInfo = DatabaseHelper.getInstance().getEventInfo(this, checkinDigest);
|
||||
LeaderboardInfo leaderboardInfo = DatabaseHelper.getInstance().getLeaderboard(this, checkinDigest);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setHomeButtonEnabled(true);
|
||||
getSupportActionBar().setTitle(eventInfo.leaderboardName);
|
||||
getSupportActionBar().setTitle(leaderboardInfo.name);
|
||||
getSupportActionBar().setSubtitle(getString(R.string.tracking_colon) + " " + eventInfo.name);
|
||||
ColorDrawable backgroundDrawable = new ColorDrawable(getResources().getColor(R.color.toolbar_background));
|
||||
getSupportActionBar().setBackgroundDrawable(backgroundDrawable);
|
||||
if (toolbar != null) {
|
||||
toolbar.setNavigationIcon(R.drawable.sap_logo_64dp);
|
||||
toolbar.setPadding(20, 0, 0, 0);
|
||||
toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
|
||||
int sidePadding = (int) getResources().getDimension(R.dimen.toolbar_left_padding);
|
||||
toolbar.setPadding(sidePadding, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.android.shared.ui.customviews.OpenSansTextView;
|
||||
import com.sap.sailing.android.shared.util.AppUtils;
|
||||
import com.sap.sailing.android.shared.util.EulaHelper;
|
||||
import com.sap.sailing.android.shared.util.LicenseHelper;
|
||||
@@ -48,7 +47,7 @@ public class AboutFragment extends com.sap.sailing.android.ui.fragments.BaseFrag
|
||||
EulaHelper.with(getActivity()).openEulaPage();
|
||||
}
|
||||
});
|
||||
OpenSansTextView versionTextView = (OpenSansTextView) view.findViewById(R.id.system_information_application_version);
|
||||
TextView versionTextView = (TextView) view.findViewById(R.id.system_information_application_version);
|
||||
versionTextView.setText(AppUtils.with(getActivity()).getBuildInfo());
|
||||
return view;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.sap.sailing.android.tracking.app.ui.fragments;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.android.shared.util.LocationHelper;
|
||||
import com.sap.sailing.android.shared.util.ViewHelper;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
import com.sap.sailing.android.tracking.app.ui.activities.BuoyActivity;
|
||||
|
||||
public class BuoyFragment extends BaseFragment {
|
||||
|
||||
private static String EXTRA_MARK_NAME = "mark_name";
|
||||
|
||||
public static BuoyFragment newInstance(String markName) {
|
||||
BuoyFragment fragment = new BuoyFragment();
|
||||
Bundle args = new Bundle();
|
||||
args.putString(EXTRA_MARK_NAME, markName);
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_buoy, container, false);
|
||||
TextView markNameText = ViewHelper.get(view, R.id.buoy_Name);
|
||||
markNameText.setText(getArguments().getString(EXTRA_MARK_NAME));
|
||||
Button startTrackingButton = ViewHelper.get(view, R.id.start_tracking);
|
||||
startTrackingButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (LocationHelper.isGPSEnabled(getActivity())) {
|
||||
BuoyActivity buoyActivity = (BuoyActivity) getActivity();
|
||||
buoyActivity.startTrackingActivity();
|
||||
} else {
|
||||
LocationHelper.showNoGPSError(getActivity(), getString(R.string.enable_gps));
|
||||
}
|
||||
}
|
||||
});
|
||||
return view;
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Date;
|
||||
|
||||
import android.widget.AdapterView;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
@@ -21,12 +20,15 @@ import android.support.v4.content.Loader;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView.OnItemLongClickListener;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.AdapterView.OnItemLongClickListener;
|
||||
import android.widget.ListView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.sap.sailing.android.shared.data.AbstractCheckinData;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.data.CheckinUrlInfo;
|
||||
import com.sap.sailing.android.shared.data.LeaderboardInfo;
|
||||
import com.sap.sailing.android.shared.data.http.HttpJsonPostRequest;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.util.NetworkHelper;
|
||||
@@ -37,14 +39,21 @@ import com.sap.sailing.android.tracking.app.BuildConfig;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
import com.sap.sailing.android.tracking.app.adapter.RegattaAdapter;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract;
|
||||
import com.sap.sailing.android.tracking.app.ui.activities.BuoyActivity;
|
||||
import com.sap.sailing.android.tracking.app.ui.activities.RegattaActivity;
|
||||
import com.sap.sailing.android.tracking.app.ui.activities.StartActivity;
|
||||
import com.sap.sailing.android.tracking.app.utils.AppPreferences;
|
||||
import com.sap.sailing.android.tracking.app.utils.CheckinHelper;
|
||||
import com.sap.sailing.android.tracking.app.utils.CheckinManager;
|
||||
import com.sap.sailing.android.tracking.app.utils.CheckoutHelper;
|
||||
import com.sap.sailing.android.tracking.app.utils.DatabaseHelper;
|
||||
import com.sap.sailing.android.tracking.app.utils.DatabaseHelper.GeneralDatabaseHelperException;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CompetitorCheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CompetitorInfo;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.EventInfo;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.MarkCheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.MarkInfo;
|
||||
import com.sap.sailing.android.ui.fragments.AbstractHomeFragment;
|
||||
|
||||
public class HomeFragment extends AbstractHomeFragment implements LoaderCallbacks<Cursor> {
|
||||
@@ -86,18 +95,21 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
|
||||
/**
|
||||
* Perform a checkin request and launch RegattaAcitivity afterwards
|
||||
* <p/>
|
||||
* TODO: Google Cloud Messaging token?
|
||||
*
|
||||
* @param deviceMappingData
|
||||
*/
|
||||
private void checkInWithAPIAndDisplayTrackingActivity(CheckinData checkinData) {
|
||||
if (DatabaseHelper.getInstance().eventLeaderboardCompetitorCombinationAvailable(getActivity(),
|
||||
checkinData.checkinDigest)) {
|
||||
try {
|
||||
DatabaseHelper.getInstance().storeCheckinRow(getActivity(), checkinData.getEvent(),
|
||||
checkinData.getCompetitor(), checkinData.getLeaderboard(), checkinData.getCheckinUrl());
|
||||
if (checkinData instanceof CompetitorCheckinData) {
|
||||
storeCompetitorCheckinData((CompetitorCheckinData) checkinData);
|
||||
} else if (checkinData instanceof MarkCheckinData) {
|
||||
storeMarkCheckinData((MarkCheckinData) checkinData);
|
||||
}
|
||||
performAPICheckin(checkinData);
|
||||
}
|
||||
|
||||
private void storeCompetitorCheckinData(CompetitorCheckinData checkinData) {
|
||||
if (DatabaseHelper.getInstance().eventLeaderboardCompetitorCombinationAvailable(getActivity(), checkinData.checkinDigest)) {
|
||||
try {
|
||||
DatabaseHelper.getInstance().storeCompetitorCheckinRow(getActivity(), checkinData.getEvent(), checkinData.getCompetitor(), checkinData
|
||||
.getLeaderboard(), checkinData.getCheckinUrl());
|
||||
adapter.notifyDataSetChanged();
|
||||
} catch (GeneralDatabaseHelperException e) {
|
||||
ExLog.e(getActivity(), TAG, "Batch insert failed: " + e.getMessage());
|
||||
@@ -110,10 +122,29 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
}
|
||||
} else {
|
||||
ExLog.w(getActivity(), TAG, "Combination of eventId, leaderboardName and competitorId already exists!");
|
||||
Toast.makeText(getActivity(), getString(R.string.info_already_checked_in_this_qr_code), Toast.LENGTH_LONG)
|
||||
.show();
|
||||
Toast.makeText(getActivity(), getString(R.string.info_already_checked_in_this_qr_code), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
private void storeMarkCheckinData(MarkCheckinData checkinData) {
|
||||
if (DatabaseHelper.getInstance().eventLeaderboardMarkCombinationAvailable(getActivity(), checkinData.checkinDigest)) {
|
||||
try {
|
||||
DatabaseHelper.getInstance().storeMarkCheckinRow(getActivity(), checkinData.getEvent(), checkinData.getMark(), checkinData
|
||||
.getLeaderboard(), checkinData.getCheckinUrl());
|
||||
adapter.notifyDataSetChanged();
|
||||
} catch (GeneralDatabaseHelperException e) {
|
||||
ExLog.e(getActivity(), TAG, "Batch insert failed: " + e.getMessage());
|
||||
((StartActivity) getActivity()).displayDatabaseError();
|
||||
return;
|
||||
}
|
||||
|
||||
if (BuildConfig.DEBUG) {
|
||||
ExLog.i(getActivity(), TAG, "Batch-insert of checkinData completed.");
|
||||
}
|
||||
} else {
|
||||
ExLog.w(getActivity(), TAG, "Combination of eventId, leaderboardName and markID already exists!");
|
||||
Toast.makeText(getActivity(), getString(R.string.info_already_checked_in_this_qr_code), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
performAPICheckin(checkinData);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -126,14 +157,22 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
StartActivity startActivity = (StartActivity) getActivity();
|
||||
startActivity.showProgressDialog(R.string.please_wait, R.string.checking_in);
|
||||
try {
|
||||
JSONObject requestObject = CheckinHelper.getCheckinJson(checkinData.competitorId, checkinData.deviceUid,
|
||||
"TODO push device ID!!", date.getTime());
|
||||
HttpJsonPostRequest request = new HttpJsonPostRequest(getActivity(), new URL(checkinData.checkinURL),
|
||||
requestObject.toString());
|
||||
JSONObject requestObject = null;
|
||||
if (checkinData instanceof CompetitorCheckinData) {
|
||||
CompetitorCheckinData competitorCheckinData = (CompetitorCheckinData) checkinData;
|
||||
requestObject = CheckinHelper
|
||||
.getCompetitorCheckinJson(competitorCheckinData.competitorId, competitorCheckinData.deviceUid, "TODO push device ID!!", date
|
||||
.getTime());
|
||||
} else if (checkinData instanceof MarkCheckinData) {
|
||||
MarkCheckinData markCheckinData = (MarkCheckinData) checkinData;
|
||||
requestObject = CheckinHelper
|
||||
.getMarkCheckinJson(markCheckinData.getMark().getId().toString(), markCheckinData.deviceUid, "TODO push device ID!!", date
|
||||
.getTime());
|
||||
}
|
||||
HttpJsonPostRequest request = new HttpJsonPostRequest(getActivity(), new URL(checkinData.checkinURL), requestObject.toString());
|
||||
NetworkHelper.getInstance(getActivity())
|
||||
.executeHttpJsonRequestAsync(request, new CheckinListener(checkinData.checkinDigest),
|
||||
new CheckinErrorListener(checkinData.checkinDigest));
|
||||
} catch (JSONException e) {
|
||||
.executeHttpJsonRequestAsync(request, new CheckinListener(checkinData.checkinDigest, checkinData.getCheckinType()), new CheckinErrorListener(checkinData.checkinDigest));
|
||||
} catch (JSONException|NullPointerException e) {
|
||||
ExLog.e(getActivity(), TAG, "Failed to generate checkin JSON: " + e.getMessage());
|
||||
displayAPIErrorRecommendRetry();
|
||||
} catch (MalformedURLException e) {
|
||||
@@ -151,35 +190,37 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
|
||||
/**
|
||||
* Display a confirmation-dialog in which the user confirms his full name and sail-id.
|
||||
*
|
||||
* @param checkinData
|
||||
*/
|
||||
@Override
|
||||
public void displayUserConfirmationScreen(final AbstractCheckinData data) {
|
||||
final CheckinData checkinData = (CheckinData) data;
|
||||
String message1 = getString(R.string.confirm_data_hello_name)
|
||||
.replace("{full_name}", checkinData.competitorName);
|
||||
String message2 = getString(R.string.confirm_data_you_are_signed_in_as_sail_id).replace("{sail_id}",
|
||||
checkinData.competitorSailId);
|
||||
public void displayUserConfirmationScreen(final BaseCheckinData data) {
|
||||
if (data instanceof CompetitorCheckinData) {
|
||||
final CompetitorCheckinData checkinData = (CompetitorCheckinData) data;
|
||||
String message1 = getString(R.string.confirm_data_hello_name).replace("{full_name}", checkinData.competitorName);
|
||||
String message2 = getString(R.string.confirm_data_you_are_signed_in_as_sail_id).replace("{sail_id}", checkinData.competitorSailId);
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setMessage(message1 + "\n\n" + message2);
|
||||
builder.setCancelable(true);
|
||||
builder.setPositiveButton(getString(R.string.confirm_data_is_correct), new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
clearScannedQRCodeInPrefs();
|
||||
checkInWithAPIAndDisplayTrackingActivity(checkinData);
|
||||
}
|
||||
}).setNegativeButton(R.string.decline_data_is_incorrect, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
clearScannedQRCodeInPrefs();
|
||||
dialog.cancel();
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setMessage(message1 + "\n\n" + message2);
|
||||
builder.setCancelable(true);
|
||||
builder.setPositiveButton(getString(R.string.confirm_data_is_correct), new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
clearScannedQRCodeInPrefs();
|
||||
checkInWithAPIAndDisplayTrackingActivity(checkinData);
|
||||
}
|
||||
}).setNegativeButton(R.string.decline_data_is_incorrect, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
clearScannedQRCodeInPrefs();
|
||||
dialog.cancel();
|
||||
}
|
||||
});
|
||||
AlertDialog alert = builder.create();
|
||||
alert.show();
|
||||
} else if (data instanceof MarkCheckinData) {
|
||||
MarkCheckinData checkinData = (MarkCheckinData) data;
|
||||
clearScannedQRCodeInPrefs();
|
||||
checkInWithAPIAndDisplayTrackingActivity(checkinData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -187,8 +228,13 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
*
|
||||
* @param checkinDigest
|
||||
*/
|
||||
private void startRegatta(String checkinDigest) {
|
||||
Intent intent = new Intent(getActivity(), RegattaActivity.class);
|
||||
private void startRegatta(String checkinDigest, int type) {
|
||||
Intent intent = new Intent();
|
||||
if (type == CheckinUrlInfo.TYPE_COMPETITOR) {
|
||||
intent.setClass(getActivity(), RegattaActivity.class);
|
||||
} else if (type == CheckinUrlInfo.TYPE_MARK) {
|
||||
intent.setClass(getActivity(), BuoyActivity.class);
|
||||
}
|
||||
intent.putExtra(getString(R.string.checkin_digest), checkinDigest);
|
||||
getActivity().startActivity(intent);
|
||||
}
|
||||
@@ -196,47 +242,49 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
@Override
|
||||
public Loader<Cursor> onCreateLoader(int loaderId, Bundle bundle) {
|
||||
switch (loaderId) {
|
||||
case REGATTA_LOADER:
|
||||
String[] projection = new String[] { "events.event_checkin_digest", "events.event_id", "events._id",
|
||||
"events.event_name", "events.event_server", "competitors.competitor_display_name",
|
||||
"competitors.competitor_id", "leaderboards.leaderboard_name",
|
||||
"competitors.competitor_country_code", "competitors.competitor_sail_id" };
|
||||
return new CursorLoader(getActivity(), AnalyticsContract.EventLeaderboardCompetitorJoined.CONTENT_URI,
|
||||
projection, null, null, null);
|
||||
case REGATTA_LOADER:
|
||||
String[] projection = new String[] { AnalyticsContract.PATH_EVENT + "." + AnalyticsContract.Event.EVENT_CHECKIN_DIGEST,
|
||||
AnalyticsContract.PATH_EVENT + "." + AnalyticsContract.Event._ID,
|
||||
AnalyticsContract.PATH_EVENT + "." + AnalyticsContract.Event.EVENT_NAME,
|
||||
AnalyticsContract.PATH_EVENT + "." + AnalyticsContract.Event.EVENT_SERVER,
|
||||
AnalyticsContract.PATH_LEADERBOARD + "." + AnalyticsContract.Leaderboard.LEADERBOARD_NAME,
|
||||
AnalyticsContract.PATH_CHECKIN + "." + AnalyticsContract.Checkin.CHECKIN_TYPE};
|
||||
return new CursorLoader(getActivity(), AnalyticsContract.LeaderboardsEventsJoined.CONTENT_URI, projection, null, null, null);
|
||||
|
||||
default:
|
||||
return null;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
|
||||
switch (loader.getId()) {
|
||||
case REGATTA_LOADER:
|
||||
adapter.changeCursor(cursor);
|
||||
break;
|
||||
case REGATTA_LOADER:
|
||||
adapter.changeCursor(cursor);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoaderReset(Loader<Cursor> loader) {
|
||||
switch (loader.getId()) {
|
||||
case REGATTA_LOADER:
|
||||
adapter.changeCursor(null);
|
||||
break;
|
||||
case REGATTA_LOADER:
|
||||
adapter.changeCursor(null);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean showDeleteConfirmationDialog(int position) {
|
||||
// -1, because there's a header row
|
||||
Cursor cursor = (Cursor) adapter.getItem(position - 1);
|
||||
final String checkinDigest = cursor.getString(cursor.getColumnIndex("event_checkin_digest"));
|
||||
final String checkinDigest = cursor.getString(cursor.getColumnIndex(AnalyticsContract.Event.EVENT_CHECKIN_DIGEST));
|
||||
final int type = cursor.getInt(cursor.getColumnIndex(AnalyticsContract.Checkin.CHECKIN_TYPE));
|
||||
DatabaseHelper.getInstance().getEventInfo(getActivity(), checkinDigest);
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.Base_Theme_AppCompat_Dialog_Alert);
|
||||
builder.setMessage(getString(R.string.confirm_delete_checkin));
|
||||
@@ -245,7 +293,7 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
builder.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
deleteRegatta(checkinDigest);
|
||||
deleteRegatta(checkinDigest, type);
|
||||
}
|
||||
});
|
||||
builder.show();
|
||||
@@ -253,10 +301,38 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
return true;
|
||||
}
|
||||
|
||||
private void deleteRegatta(String checkinDigest) {
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(getActivity(), checkinDigest);
|
||||
adapter.swapCursor(null);
|
||||
adapter.notifyDataSetInvalidated();
|
||||
private void deleteRegatta(final String checkinDigest, final int type) {
|
||||
NetworkHelperSuccessListener successListener = new NetworkHelperSuccessListener() {
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
StartActivity startActivity = (StartActivity) getActivity();
|
||||
startActivity.dismissProgressDialog();
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(getActivity(), checkinDigest);
|
||||
adapter.swapCursor(null);
|
||||
adapter.notifyDataSetInvalidated();
|
||||
}
|
||||
};
|
||||
NetworkHelperFailureListener failureListener = new NetworkHelperFailureListener() {
|
||||
@Override
|
||||
public void performAction(NetworkHelperError e) {
|
||||
StartActivity startActivity = (StartActivity) getActivity();
|
||||
startActivity.dismissProgressDialog();
|
||||
startActivity.showErrorPopup(R.string.error,
|
||||
R.string.error_could_not_complete_operation_on_server_try_again);
|
||||
}
|
||||
};
|
||||
CheckoutHelper checkoutHelper = new CheckoutHelper();
|
||||
LeaderboardInfo leaderboardInfo = DatabaseHelper.getInstance().getLeaderboard(getActivity(), checkinDigest);
|
||||
EventInfo eventInfo = DatabaseHelper.getInstance().getEventInfo(getActivity(), checkinDigest);
|
||||
if (type == CheckinUrlInfo.TYPE_COMPETITOR) {
|
||||
CompetitorInfo competitorInfo = DatabaseHelper.getInstance().getCompetitor(getActivity(), checkinDigest);
|
||||
checkoutHelper.checkoutCompetitor((StartActivity) getActivity(), leaderboardInfo.name, eventInfo.server, competitorInfo.id,
|
||||
successListener, failureListener);
|
||||
} else if (type == CheckinUrlInfo.TYPE_MARK) {
|
||||
MarkInfo markInfo = DatabaseHelper.getInstance().getMarkInfo(getActivity(), checkinDigest);
|
||||
checkoutHelper.checkoutMark((StartActivity) getActivity(), leaderboardInfo.name, eventInfo.server, markInfo.markId,
|
||||
successListener, failureListener);
|
||||
}
|
||||
}
|
||||
|
||||
private class ItemClickListener implements OnItemClickListener {
|
||||
@@ -272,8 +348,9 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
// -1, because there's a header row
|
||||
Cursor cursor = (Cursor) adapter.getItem(position - 1);
|
||||
|
||||
String checkinDigest = cursor.getString(cursor.getColumnIndex("event_checkin_digest"));
|
||||
startRegatta(checkinDigest);
|
||||
String checkinDigest = cursor.getString(cursor.getColumnIndex(AnalyticsContract.Event.EVENT_CHECKIN_DIGEST));
|
||||
int type = cursor.getInt(cursor.getColumnIndex(AnalyticsContract.Checkin.CHECKIN_TYPE));
|
||||
startRegatta(checkinDigest, type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -293,16 +370,18 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
private class CheckinListener implements NetworkHelperSuccessListener {
|
||||
|
||||
public String checkinDigest;
|
||||
public int type;
|
||||
|
||||
public CheckinListener(String checkinDigest) {
|
||||
public CheckinListener(String checkinDigest, int type) {
|
||||
this.checkinDigest = checkinDigest;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
StartActivity startActivity = (StartActivity) getActivity();
|
||||
startActivity.dismissProgressDialog();
|
||||
startRegatta(checkinDigest);
|
||||
startRegatta(checkinDigest, type);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,12 +403,10 @@ public class HomeFragment extends AbstractHomeFragment implements LoaderCallback
|
||||
|
||||
StartActivity startActivity = (StartActivity) getActivity();
|
||||
startActivity.dismissProgressDialog();
|
||||
startActivity.showErrorPopup(R.string.error,
|
||||
R.string.error_could_not_complete_operation_on_server_try_again);
|
||||
startActivity.showErrorPopup(R.string.error, R.string.error_could_not_complete_operation_on_server_try_again);
|
||||
|
||||
DatabaseHelper.getInstance().deleteRegattaFromDatabase(getActivity(), checkinDigest);
|
||||
Toast.makeText(getActivity(), getString(R.string.error_while_receiving_server_data), Toast.LENGTH_LONG)
|
||||
.show();
|
||||
Toast.makeText(getActivity(), getString(R.string.error_while_receiving_server_data), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.net.Uri;
|
||||
@@ -77,8 +76,6 @@ public class RegattaFragment extends BaseFragment implements OnClickListener {
|
||||
TextView addPhotoText = (TextView) view.findViewById(R.id.add_photo_text);
|
||||
addPhotoText.setOnClickListener(this);
|
||||
|
||||
setLeaderboardImageHeight(view);
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@@ -93,17 +90,6 @@ public class RegattaFragment extends BaseFragment implements OnClickListener {
|
||||
}
|
||||
}
|
||||
|
||||
private void setLeaderboardImageHeight(View view){
|
||||
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
|
||||
RelativeLayout imageLayout = (RelativeLayout) view.findViewById(R.id.image);
|
||||
ViewGroup.LayoutParams layoutParams = imageLayout.getLayoutParams();
|
||||
int displayHeight = getResources().getDisplayMetrics().heightPixels;
|
||||
// calculate 1/3 of display height
|
||||
layoutParams.height = displayHeight / 3;
|
||||
imageLayout.setLayoutParams(layoutParams);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If the regatta started, don't display the countdown any more.
|
||||
*/
|
||||
@@ -117,13 +103,21 @@ public class RegattaFragment extends BaseFragment implements OnClickListener {
|
||||
|
||||
if (System.currentTimeMillis() > regattaStart) {
|
||||
textView.setText(getString(R.string.regatta_in_progress));
|
||||
threeBoxesLayout.setVisibility(View.INVISIBLE);
|
||||
threeBoxesLayout.setVisibility(View.GONE);
|
||||
centerViewInParent(textView);
|
||||
} else {
|
||||
textView.setText(getString(R.string.regatta_starts_in));
|
||||
threeBoxesLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
private void centerViewInParent(View view) {
|
||||
RelativeLayout.LayoutParams layoutParams =
|
||||
(RelativeLayout.LayoutParams) view.getLayoutParams();
|
||||
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
|
||||
view.setLayoutParams(layoutParams);
|
||||
}
|
||||
|
||||
public boolean isShowingBigCheckoutButton() {
|
||||
return showingThankYouNote;
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ public class TrackingFragment extends BaseFragment {
|
||||
textView.setTextColor(getResources().getColor(R.color.sap_red));
|
||||
} else {
|
||||
textView.setText(getString(R.string.tracking_status_tracking));
|
||||
textView.setTextColor(getResources().getColor(R.color.sap_green));
|
||||
textView.setTextColor(getResources().getColor(R.color.fiori_text_color));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -137,21 +137,21 @@ public class TrackingFragment extends BaseFragment {
|
||||
if (apiConnectivity == APIConnectivity.transmissionSuccess) {
|
||||
if (prefs.getEnergySavingEnabledByUser()) {
|
||||
textView.setText(getString(R.string.tracking_mode_battery_saving));
|
||||
textView.setTextColor(getResources().getColor(R.color.sap_yellow));
|
||||
textView.setTextColor(getResources().getColor(R.color.fiori_text_color));
|
||||
} else {
|
||||
textView.setText(getString(R.string.tracking_mode_live));
|
||||
textView.setTextColor(getResources().getColor(R.color.sap_green));
|
||||
textView.setTextColor(getResources().getColor(R.color.fiori_text_color));
|
||||
}
|
||||
|
||||
} else if (apiConnectivity == APIConnectivity.noAttempt) {
|
||||
textView.setText(getString(R.string.tracking_mode_offline));
|
||||
textView.setTextColor(getResources().getColor(R.color.sap_green));
|
||||
textView.setTextColor(getResources().getColor(R.color.fiori_text_color));
|
||||
} else if (apiConnectivity == APIConnectivity.transmissionError) {
|
||||
textView.setText(getString(R.string.tracking_mode_api_error));
|
||||
textView.setTextColor(getResources().getColor(R.color.sap_red));
|
||||
} else {
|
||||
textView.setText(getString(R.string.tracking_mode_caching));
|
||||
textView.setTextColor(getResources().getColor(R.color.sap_green));
|
||||
textView.setTextColor(getResources().getColor(R.color.fiori_text_color));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -6,21 +6,32 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.android.shared.util.LocationHelper;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
|
||||
public class TrackingTimeFragment extends BaseFragment {
|
||||
|
||||
private final static String SIS_TRACKING_TIMER = "savedInstanceTrackingTimer";
|
||||
private TextView timerView;
|
||||
private TextView noGPSView;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
super.onCreateView(inflater, container, savedInstanceState);
|
||||
ViewGroup view = (ViewGroup) inflater.inflate(R.layout.fragment_time, container, false);
|
||||
timerView = (TextView) view.findViewById(R.id.tracking_time_label);
|
||||
noGPSView = (TextView) view.findViewById(R.id.wait_for_gps);
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
if (LocationHelper.isGPSEnabled(getActivity())) {
|
||||
noGPSView.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
|
||||
@@ -19,7 +19,7 @@ public class GeneralPreferenceFragment extends BasePreferenceFragment {
|
||||
AppPreferences prefs = new AppPreferences(getActivity());
|
||||
String currentDeviceId = prefs.getDeviceIdentifier();
|
||||
|
||||
Preference deviceIdPreference = (Preference) findPreference(getString(R.string.preference_device_identifier_key));
|
||||
Preference deviceIdPreference = findPreference(getString(R.string.preference_device_identifier_key));
|
||||
|
||||
if (currentDeviceId != null && currentDeviceId.length() > 0) {
|
||||
deviceIdPreference.setSummary(currentDeviceId);
|
||||
@@ -35,8 +35,8 @@ public class GeneralPreferenceFragment extends BasePreferenceFragment {
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
|
||||
SwitchPreference prefEnergy = (SwitchPreference) findPreference(R.string.preference_energy_saving_enabled_key);
|
||||
SwitchPreference prefDeclination = (SwitchPreference) findPreference(R.string.preference_heading_with_declination_subtracted_key);
|
||||
SwitchPreference prefEnergy = findPreference(R.string.preference_energy_saving_enabled_key);
|
||||
SwitchPreference prefDeclination = findPreference(R.string.preference_heading_with_declination_subtracted_key);
|
||||
|
||||
AppPreferences prefs = new AppPreferences(getActivity());
|
||||
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
package com.sap.sailing.android.tracking.app.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import com.sap.sailing.android.shared.util.PrefUtils;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import com.sap.sailing.android.shared.util.BaseAppPreferences;
|
||||
import com.sap.sailing.android.shared.util.PrefUtils;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
import com.sap.sailing.domain.abstractlog.AbstractLogEventAuthor;
|
||||
import com.sap.sailing.domain.abstractlog.impl.LogEventAuthorImpl;
|
||||
|
||||
@@ -68,6 +67,11 @@ public class AppPreferences extends BaseAppPreferences {
|
||||
competitorId);
|
||||
}
|
||||
|
||||
public String getServerMarkPath(String leaderboardName, String markId) {
|
||||
String path = context.getString(R.string.preferece_server_mark_path);
|
||||
return path.replace("{leaderboardName}", leaderboardName).replace("{markId}", markId);
|
||||
}
|
||||
|
||||
public int getGPSFixInterval() {
|
||||
// EditTextPreference saves value as string, even if android:inputType="number" is set
|
||||
String value = PrefUtils.getString(context, R.string.preference_gps_fix_interval_ms_key,
|
||||
|
||||
@@ -3,18 +3,32 @@ package com.sap.sailing.android.tracking.app.utils;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants;
|
||||
|
||||
public class CheckinHelper {
|
||||
public static JSONObject getCheckinJson(String competitorId, String deviceUuid, String pushDeviceId, long fromMillis)
|
||||
public static JSONObject getCompetitorCheckinJson(String competitorId, String deviceUuid, String pushDeviceId, long fromMillis)
|
||||
throws JSONException {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put(DeviceMappingConstants.JSON_COMPETITOR_ID_AS_STRING, competitorId);
|
||||
// TODO alternatively map device to a mark, providing a mark_id; see also LeaderboardsResource.postCheckin
|
||||
return getBaseCheckinJsom(deviceUuid, pushDeviceId, fromMillis, jsonObject);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static JSONObject getBaseCheckinJsom(String deviceUuid, String pushDeviceId, long fromMillis, JSONObject jsonObject)
|
||||
throws JSONException {
|
||||
jsonObject.put(DeviceMappingConstants.JSON_DEVICE_TYPE, "android");
|
||||
jsonObject.put(DeviceMappingConstants.JSON_DEVICE_UUID, deviceUuid);
|
||||
jsonObject.put(DeviceMappingConstants.JSON_PUSH_DEVICE_ID, pushDeviceId);
|
||||
jsonObject.put(DeviceMappingConstants.JSON_FROM_MILLIS, fromMillis);
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
public static JSONObject getMarkCheckinJson(String markId, String deviceUuid, String pushDeviceId, long fromMillis)
|
||||
throws JSONException {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put(DeviceMappingConstants.JSON_MARK_ID_AS_STRING, markId);
|
||||
return getBaseCheckinJsom(deviceUuid, pushDeviceId, fromMillis, jsonObject);
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.json.JSONException;
|
||||
@@ -17,24 +18,31 @@ import android.content.DialogInterface;
|
||||
import android.net.Uri;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.sap.sailing.android.shared.data.AbstractCheckinData;
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.data.http.HttpGetRequest;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.activities.CheckinDataActivity;
|
||||
import com.sap.sailing.android.shared.util.JsonHelper;
|
||||
import com.sap.sailing.android.shared.util.NetworkHelper;
|
||||
import com.sap.sailing.android.shared.util.UniqueDeviceUuid;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CompetitorCheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CompetitorUrlData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.MarkCheckinData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.MarkUrlData;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.UrlData;
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.RaceLogResolver;
|
||||
import com.sap.sailing.domain.base.EventBase;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.impl.SharedDomainFactoryImpl;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants;
|
||||
import com.sap.sailing.domain.common.tracking.impl.CompetitorJsonConstants;
|
||||
import com.sap.sailing.domain.racelogtracking.DeviceIdentifier;
|
||||
import com.sap.sailing.domain.racelogtracking.impl.SmartphoneUUIDIdentifierImpl;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.coursedata.impl.MarkDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.CourseAreaJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.EventBaseJsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.LeaderboardGroupBaseJsonDeserializer;
|
||||
@@ -45,7 +53,7 @@ import com.sap.sse.shared.media.ImageDescriptor;
|
||||
public class CheckinManager {
|
||||
|
||||
private final static String TAG = CheckinManager.class.getName();
|
||||
private AbstractCheckinData checkinData;
|
||||
private BaseCheckinData checkinData;
|
||||
private CheckinDataActivity activity;
|
||||
private AppPreferences prefs;
|
||||
private String url;
|
||||
@@ -62,7 +70,7 @@ public class CheckinManager {
|
||||
Uri uri = Uri.parse(url);
|
||||
String scheme = uri.getScheme();
|
||||
|
||||
final URLData urlData = extractRequestParametersFromUri(uri, scheme);
|
||||
final UrlData urlData = extractRequestParametersFromUri(uri, scheme);
|
||||
if (urlData == null) {
|
||||
setCheckinData(null);
|
||||
return;
|
||||
@@ -80,25 +88,37 @@ public class CheckinManager {
|
||||
}
|
||||
}
|
||||
|
||||
private URLData extractRequestParametersFromUri(Uri uri, String scheme) {
|
||||
URLData urlData = new URLData();
|
||||
urlData.uriStr = uri.toString();
|
||||
urlData.server = scheme + "://" + uri.getHost();
|
||||
urlData.port = uri.getPort();
|
||||
urlData.hostWithPort = urlData.server + (urlData.port == -1 ? "" : (":" + urlData.port));
|
||||
private UrlData extractRequestParametersFromUri(Uri uri, String scheme) {
|
||||
UrlData urlData = null;
|
||||
String server = scheme + "://" + uri.getHost();
|
||||
int port = uri.getPort();
|
||||
Exception exception = null;
|
||||
try {
|
||||
String leaderboardNameFromQR = URLEncoder.encode(uri.getQueryParameter(DeviceMappingConstants.URL_LEADERBOARD_NAME), "UTF-8")
|
||||
.replace("+", "%20");
|
||||
urlData.competitorId = uri.getQueryParameter(DeviceMappingConstants.URL_COMPETITOR_ID_AS_STRING);
|
||||
// TODO alternatively consider a mark_id
|
||||
Set<String> parameterNames = uri.getQueryParameterNames();
|
||||
if (parameterNames.contains(DeviceMappingConstants.URL_COMPETITOR_ID_AS_STRING)) {
|
||||
CompetitorUrlData competitorUrlData = new CompetitorUrlData(server, port);
|
||||
competitorUrlData.competitorId = uri.getQueryParameter(DeviceMappingConstants.URL_COMPETITOR_ID_AS_STRING);
|
||||
competitorUrlData.competitorUrl = competitorUrlData.hostWithPort + prefs.getServerCompetitorPath(competitorUrlData.competitorId);
|
||||
urlData = competitorUrlData;
|
||||
} else if (parameterNames.contains(DeviceMappingConstants.URL_MARK_ID_AS_STRING)) {
|
||||
MarkUrlData markUrlData = new MarkUrlData(server, port);
|
||||
markUrlData.setMarkId(uri.getQueryParameter(DeviceMappingConstants.URL_MARK_ID_AS_STRING));
|
||||
markUrlData.setMarkUrl(markUrlData.hostWithPort + prefs.getServerMarkPath(leaderboardNameFromQR, markUrlData.getMarkId()));
|
||||
urlData = markUrlData;
|
||||
} else {
|
||||
ExLog.e(activity, TAG, "Neither mark nor competitor checkin");
|
||||
exception = new Exception();
|
||||
}
|
||||
urlData.uriStr = uri.toString();
|
||||
urlData.checkinURLStr = urlData.hostWithPort + prefs.getServerCheckinPath().replace("{leaderboard-name}", leaderboardNameFromQR);
|
||||
urlData.eventId = uri.getQueryParameter(DeviceMappingConstants.URL_EVENT_ID);
|
||||
urlData.leaderboardName = leaderboardNameFromQR;
|
||||
urlData.deviceUuid = new SmartphoneUUIDIdentifierImpl(UUID.fromString(UniqueDeviceUuid.getUniqueId(activity)));
|
||||
urlData.eventUrl = urlData.hostWithPort + prefs.getServerEventPath(urlData.eventId);
|
||||
urlData.leaderboardUrl = urlData.hostWithPort + prefs.getServerLeaderboardPath(urlData.leaderboardName);
|
||||
urlData.competitorUrl = urlData.hostWithPort + prefs.getServerCompetitorPath(urlData.competitorId);
|
||||
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
ExLog.e(activity, TAG, "Failed to encode leaderboard name: " + e.getMessage());
|
||||
exception = e;
|
||||
@@ -114,16 +134,15 @@ public class CheckinManager {
|
||||
return urlData;
|
||||
}
|
||||
|
||||
private void getLeaderBoardFromServer(final URLData urlData, HttpGetRequest getLeaderboardRequest) {
|
||||
private void getLeaderBoardFromServer(final UrlData urlData, HttpGetRequest getLeaderboardRequest) {
|
||||
NetworkHelper.getInstance(activity)
|
||||
.executeHttpJsonRequestAsync(getLeaderboardRequest, new NetworkHelper.NetworkHelperSuccessListener() {
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
|
||||
final String leaderboardName;
|
||||
|
||||
try {
|
||||
leaderboardName = response.getString("name");
|
||||
// Check if call to leaderboard returned valid response
|
||||
response.getString("name");
|
||||
} catch (JSONException e) {
|
||||
ExLog.e(activity, TAG, "Error getting data from call on URL: " + urlData.leaderboardUrl + ", Error: " + e.getMessage());
|
||||
handleApiError();
|
||||
@@ -133,7 +152,7 @@ public class CheckinManager {
|
||||
HttpGetRequest getEventRequest;
|
||||
try {
|
||||
getEventRequest = new HttpGetRequest(new URL(urlData.eventUrl), activity);
|
||||
getEventFromServer(leaderboardName, getEventRequest, urlData);
|
||||
getEventFromServer(getEventRequest, urlData);
|
||||
} catch (MalformedURLException e1) {
|
||||
ExLog.e(activity, TAG, "Error: Failed to perform checking due to a MalformedURLException: " + e1.getMessage());
|
||||
handleApiError();
|
||||
@@ -149,7 +168,7 @@ public class CheckinManager {
|
||||
});
|
||||
}
|
||||
|
||||
private void getEventFromServer(final String leaderboardName, HttpGetRequest getEventRequest, final URLData urlData) {
|
||||
private void getEventFromServer(HttpGetRequest getEventRequest, final UrlData urlData) {
|
||||
NetworkHelper.getInstance(activity).executeHttpJsonRequestAsync(getEventRequest, new NetworkHelper.NetworkHelperSuccessListener() {
|
||||
|
||||
@Override
|
||||
@@ -179,15 +198,27 @@ public class CheckinManager {
|
||||
handleApiError();
|
||||
return;
|
||||
}
|
||||
HttpGetRequest getCompetitorRequest;
|
||||
try {
|
||||
getCompetitorRequest = new HttpGetRequest(new URL(urlData.competitorUrl), activity);
|
||||
getCompetitorFromServer(getCompetitorRequest, urlData, leaderboardName);
|
||||
if (urlData instanceof CompetitorUrlData) {
|
||||
CompetitorUrlData competitorUrlData = (CompetitorUrlData) urlData;
|
||||
try {
|
||||
HttpGetRequest getCompetitorRequest = new HttpGetRequest(new URL(competitorUrlData.competitorUrl), activity);
|
||||
getCompetitorFromServer(getCompetitorRequest, competitorUrlData);
|
||||
|
||||
} catch (MalformedURLException e2) {
|
||||
ExLog.e(activity, TAG, "Error: Failed to perform checking due to a MalformedURLException: " + e2.getMessage());
|
||||
handleApiError();
|
||||
} catch (MalformedURLException e2) {
|
||||
ExLog.e(activity, TAG, "Error: Failed to perform checking due to a MalformedURLException: " + e2.getMessage());
|
||||
handleApiError();
|
||||
}
|
||||
} else if (urlData instanceof MarkUrlData) {
|
||||
MarkUrlData markUrlData = (MarkUrlData) urlData;
|
||||
try {
|
||||
HttpGetRequest getMarkRequest = new HttpGetRequest(new URL(markUrlData.getMarkUrl()), activity);
|
||||
getMarkFromServer(getMarkRequest, markUrlData);
|
||||
} catch (MalformedURLException exception) {
|
||||
ExLog.e(activity, TAG, "Error: Failed to perform checking due to a MalformedURLException: " + exception.getMessage());
|
||||
handleApiError();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}, new NetworkHelper.NetworkHelperFailureListener() {
|
||||
|
||||
@@ -199,7 +230,7 @@ public class CheckinManager {
|
||||
});
|
||||
}
|
||||
|
||||
private void getCompetitorFromServer(HttpGetRequest getCompetitorRequest, final URLData urlData, final String leaderboardName) {
|
||||
private void getCompetitorFromServer(HttpGetRequest getCompetitorRequest, final CompetitorUrlData urlData) {
|
||||
NetworkHelper.getInstance(activity)
|
||||
.executeHttpJsonRequestAsync(getCompetitorRequest, new NetworkHelper.NetworkHelperSuccessListener() {
|
||||
@Override
|
||||
@@ -217,7 +248,7 @@ public class CheckinManager {
|
||||
handleApiError();
|
||||
return;
|
||||
}
|
||||
saveCheckinDataAndNotifyListeners(urlData, leaderboardName);
|
||||
saveCheckinDataAndNotifyListeners(urlData);
|
||||
}
|
||||
}, new NetworkHelper.NetworkHelperFailureListener() {
|
||||
@Override
|
||||
@@ -228,43 +259,65 @@ public class CheckinManager {
|
||||
});
|
||||
}
|
||||
|
||||
private void saveCheckinDataAndNotifyListeners(URLData urlData, String leaderboardName) {
|
||||
CheckinData data = new CheckinData();
|
||||
private void getMarkFromServer(HttpGetRequest getMarkRequest, final MarkUrlData urlData) {
|
||||
NetworkHelper.getInstance(activity)
|
||||
.executeHttpJsonRequestAsync(getMarkRequest, new NetworkHelper.NetworkHelperSuccessListener() {
|
||||
@Override
|
||||
public void performAction(JSONObject response) {
|
||||
try {
|
||||
org.json.simple.JSONObject simpleMark;
|
||||
simpleMark = JsonHelper.convertToSimple(response);
|
||||
MarkDeserializer markDeserializer = new MarkDeserializer(new SharedDomainFactoryImpl(null));
|
||||
Mark mark = markDeserializer.deserialize(simpleMark);
|
||||
urlData.setMark(mark);
|
||||
} catch (ParseException|JsonDeserializationException e) {
|
||||
ExLog.e(activity, TAG, "Failed to deserialize mark");
|
||||
if (activity != null) {
|
||||
activity.dismissProgressDialog();
|
||||
displayAPIErrorRecommendRetry();
|
||||
}
|
||||
return;
|
||||
}
|
||||
saveCheckinDataAndNotifyListeners(urlData);
|
||||
}
|
||||
}, new NetworkHelper.NetworkHelperFailureListener() {
|
||||
@Override
|
||||
public void performAction(NetworkHelper.NetworkHelperError e) {
|
||||
ExLog.e(activity, TAG, "Failed to get mark from server: " + e.getMessage());
|
||||
if (activity != null) {
|
||||
activity.dismissProgressDialog();
|
||||
displayAPIErrorRecommendRetry();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void saveCheckinDataAndNotifyListeners(UrlData urlData) {
|
||||
CheckinData data;
|
||||
if (urlData instanceof CompetitorUrlData) {
|
||||
CompetitorUrlData competitorUrlData = (CompetitorUrlData) urlData;
|
||||
data = new CompetitorCheckinData(competitorUrlData);
|
||||
} else {
|
||||
MarkUrlData markUrlData = (MarkUrlData) urlData;
|
||||
data = new MarkCheckinData(markUrlData);
|
||||
}
|
||||
data.setUpdate(update);
|
||||
data.competitorName = urlData.competitorName;
|
||||
data.competitorId = urlData.competitorId;
|
||||
data.competitorSailId = urlData.competitorSailId;
|
||||
data.competitorNationality = urlData.competitorNationality;
|
||||
data.competitorCountryCode = urlData.competitorCountryCode;
|
||||
data.eventId = urlData.eventId;
|
||||
data.eventName = urlData.eventName;
|
||||
data.eventStartDateStr = urlData.eventStartDateStr;
|
||||
data.eventEndDateStr = urlData.eventEndDateStr;
|
||||
data.eventFirstImageUrl = urlData.eventFirstImageUrl;
|
||||
data.eventServerUrl = urlData.hostWithPort;
|
||||
data.checkinURL = urlData.checkinURLStr;
|
||||
data.leaderboardName = leaderboardName;
|
||||
data.deviceUid = urlData.deviceUuid.getStringRepresentation();
|
||||
data.uriString = urlData.uriStr;
|
||||
try {
|
||||
data.setCheckinDigestFromString(urlData.uriStr);
|
||||
activity.dismissProgressDialog();
|
||||
setCheckinData(data);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
ExLog.e(activity, TAG, "Failed to get generate digest of qr-code string (" + urlData.uriStr + "). " + e.getMessage());
|
||||
handleApiError();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
} catch (UnsupportedEncodingException | NoSuchAlgorithmException e) {
|
||||
ExLog.e(activity, TAG, "Failed to get generate digest of qr-code string (" + urlData.uriStr + "). " + e.getMessage());
|
||||
handleApiError();
|
||||
}
|
||||
}
|
||||
|
||||
public void setCheckinData(AbstractCheckinData data) {
|
||||
public void setCheckinData(CheckinData data) {
|
||||
checkinData = data;
|
||||
activity.onCheckinDataAvailable(getCheckinData());
|
||||
}
|
||||
|
||||
public AbstractCheckinData getCheckinData() {
|
||||
public BaseCheckinData getCheckinData() {
|
||||
return checkinData;
|
||||
}
|
||||
|
||||
@@ -295,30 +348,4 @@ public class CheckinManager {
|
||||
setCheckinData(null);
|
||||
}
|
||||
|
||||
private class URLData {
|
||||
public String uriStr;
|
||||
public String server;
|
||||
public int port;
|
||||
public String hostWithPort;
|
||||
public String competitorId;
|
||||
public String checkinURLStr;
|
||||
public String eventId;
|
||||
public String leaderboardName;
|
||||
public DeviceIdentifier deviceUuid;
|
||||
public String eventUrl;
|
||||
public String leaderboardUrl;
|
||||
public String competitorUrl;
|
||||
public String competitorName;
|
||||
public String eventName;
|
||||
public String competitorSailId;
|
||||
public String eventStartDateStr;
|
||||
public String eventEndDateStr;
|
||||
public String eventFirstImageUrl;
|
||||
public String competitorNationality;
|
||||
public String competitorCountryCode;
|
||||
|
||||
public URLData() {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package com.sap.sailing.android.tracking.app.utils;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.net.Uri;
|
||||
|
||||
import com.sap.sailing.android.shared.data.http.HttpJsonPostRequest;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.ui.activities.AbstractBaseActivity;
|
||||
import com.sap.sailing.android.shared.util.NetworkHelper;
|
||||
import com.sap.sailing.android.shared.util.UniqueDeviceUuid;
|
||||
import com.sap.sailing.android.tracking.app.R;
|
||||
import com.sap.sailing.domain.common.racelog.tracking.DeviceMappingConstants;
|
||||
|
||||
public class CheckoutHelper {
|
||||
private static String TAG = CheckoutHelper.class.getName();
|
||||
|
||||
public void checkoutCompetitor(AbstractBaseActivity activity, String leaderboardName, String eventServer, String competitorId,
|
||||
NetworkHelper.NetworkHelperSuccessListener successListener, NetworkHelper.NetworkHelperFailureListener failureListener) {
|
||||
AppPreferences prefs = new AppPreferences(activity);
|
||||
final String checkoutURLStr = eventServer
|
||||
+ prefs.getServerCheckoutPath().replace("{leaderboard-name}", Uri.encode(leaderboardName));
|
||||
|
||||
activity.showProgressDialog(R.string.please_wait, R.string.checking_out);
|
||||
|
||||
JSONObject checkoutData = new JSONObject();
|
||||
try {
|
||||
checkoutData.put(DeviceMappingConstants.JSON_COMPETITOR_ID_AS_STRING, competitorId);
|
||||
checkoutData.put(DeviceMappingConstants.JSON_DEVICE_UUID, UniqueDeviceUuid.getUniqueId(activity));
|
||||
checkoutData.put(DeviceMappingConstants.JSON_TO_MILLIS, System.currentTimeMillis());
|
||||
} catch (JSONException e) {
|
||||
activity.dismissProgressDialog();
|
||||
activity.showErrorPopup(R.string.error, R.string.error_could_not_complete_operation_on_server_try_again);
|
||||
ExLog.e(activity, TAG, "Error populating checkout-data: " + e.getMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
HttpJsonPostRequest request = new HttpJsonPostRequest(activity, new URL(checkoutURLStr), checkoutData.toString());
|
||||
com.sap.sailing.android.shared.util.NetworkHelper.getInstance(activity).executeHttpJsonRequestAsync(request,
|
||||
successListener, failureListener);
|
||||
|
||||
} catch (MalformedURLException e) {
|
||||
ExLog.w(activity, TAG, "Error, can't check out, MalformedURLException: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void checkoutMark(AbstractBaseActivity activity, String leaderboardName, String eventServer, String markId,
|
||||
NetworkHelper.NetworkHelperSuccessListener successListener, NetworkHelper.NetworkHelperFailureListener failureListener) {
|
||||
AppPreferences prefs = new AppPreferences(activity);
|
||||
final String checkoutURLStr = eventServer
|
||||
+ prefs.getServerCheckoutPath().replace("{leaderboard-name}", Uri.encode(leaderboardName));
|
||||
|
||||
activity.showProgressDialog(R.string.please_wait, R.string.checking_out);
|
||||
|
||||
JSONObject checkoutData = new JSONObject();
|
||||
try {
|
||||
checkoutData.put(DeviceMappingConstants.JSON_MARK_ID_AS_STRING, markId);
|
||||
checkoutData.put(DeviceMappingConstants.JSON_DEVICE_UUID, UniqueDeviceUuid.getUniqueId(activity));
|
||||
checkoutData.put(DeviceMappingConstants.JSON_TO_MILLIS, System.currentTimeMillis());
|
||||
} catch (JSONException e) {
|
||||
activity.dismissProgressDialog();
|
||||
activity.showErrorPopup(R.string.error, R.string.error_could_not_complete_operation_on_server_try_again);
|
||||
ExLog.e(activity, TAG, "Error populating checkout-data: " + e.getMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
HttpJsonPostRequest request = new HttpJsonPostRequest(activity, new URL(checkoutURLStr), checkoutData.toString());
|
||||
com.sap.sailing.android.shared.util.NetworkHelper.getInstance(activity).executeHttpJsonRequestAsync(request,
|
||||
successListener, failureListener);
|
||||
|
||||
} catch (MalformedURLException e) {
|
||||
ExLog.w(activity, TAG, "Error, can't check out, MalformedURLException: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
package com.sap.sailing.android.tracking.app.utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import android.content.ContentProviderOperation;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
@@ -9,22 +12,21 @@ import android.database.Cursor;
|
||||
import android.os.RemoteException;
|
||||
import android.provider.BaseColumns;
|
||||
|
||||
import com.sap.sailing.android.shared.data.CheckinUrlInfo;
|
||||
import com.sap.sailing.android.shared.data.LeaderboardInfo;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.tracking.app.BuildConfig;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Checkin;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Competitor;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Event;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.EventLeaderboardCompetitorJoined;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.Leaderboard;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsContract.CheckinUri;
|
||||
import com.sap.sailing.android.tracking.app.provider.AnalyticsDatabase;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.CompetitorInfo;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.EventInfo;
|
||||
import com.sap.sailing.android.shared.data.CheckinUrlInfo;
|
||||
import com.sap.sailing.android.shared.data.LeaderboardInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import com.sap.sailing.android.tracking.app.valueobjects.MarkInfo;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
|
||||
public class DatabaseHelper {
|
||||
|
||||
@@ -43,11 +45,11 @@ public class DatabaseHelper {
|
||||
public List<String> getCheckinUrls(Context context) {
|
||||
List<String> checkinUrls = new ArrayList<>();
|
||||
ContentResolver cr = context.getContentResolver();
|
||||
Cursor cursor = cr.query(CheckinUri.CONTENT_URI, null, null, null, null);
|
||||
Cursor cursor = cr.query(Checkin.CONTENT_URI, null, null, null, null);
|
||||
if (cursor != null) {
|
||||
cursor.moveToFirst();
|
||||
while (!cursor.isAfterLast()) {
|
||||
String checkinUrl = cursor.getString(cursor.getColumnIndex(CheckinUri.CHECKIN_URI_VALUE));
|
||||
String checkinUrl = cursor.getString(cursor.getColumnIndex(Checkin.CHECKIN_URI_VALUE));
|
||||
if (!checkinUrls.contains(checkinUrl)) {
|
||||
checkinUrls.add(checkinUrl);
|
||||
}
|
||||
@@ -161,12 +163,13 @@ public class DatabaseHelper {
|
||||
CheckinUrlInfo checkinUrlInfo = new CheckinUrlInfo();
|
||||
checkinUrlInfo.checkinDigest = checkinDigest;
|
||||
|
||||
Cursor uc = context.getContentResolver().query(CheckinUri.CONTENT_URI, null,
|
||||
CheckinUri.CHECKIN_URI_CHECKIN_DIGEST + " = ?", new String[] { checkinDigest }, null);
|
||||
Cursor uc = context.getContentResolver().query(Checkin.CONTENT_URI, null,
|
||||
Checkin.CHECKIN_URI_CHECKIN_DIGEST + " = ?", new String[] { checkinDigest }, null);
|
||||
if (uc != null) {
|
||||
if (uc.moveToFirst()) {
|
||||
checkinUrlInfo.rowId = uc.getInt(uc.getColumnIndex(BaseColumns._ID));
|
||||
checkinUrlInfo.urlString = uc.getString(uc.getColumnIndex(CheckinUri.CHECKIN_URI_VALUE));
|
||||
checkinUrlInfo.urlString = uc.getString(uc.getColumnIndex(Checkin.CHECKIN_URI_VALUE));
|
||||
checkinUrlInfo.type = uc.getInt(uc.getColumnIndex(Checkin.CHECKIN_TYPE));
|
||||
}
|
||||
|
||||
uc.close();
|
||||
@@ -175,19 +178,37 @@ public class DatabaseHelper {
|
||||
return checkinUrlInfo;
|
||||
}
|
||||
|
||||
public MarkInfo getMarkInfo(Context context, String checkinDigest) {
|
||||
MarkInfo markInfo = new MarkInfo();
|
||||
markInfo.checkinDigest = checkinDigest;
|
||||
Cursor markCursor = context.getContentResolver().query(AnalyticsContract.Mark.CONTENT_URI, null,
|
||||
AnalyticsContract.Mark.MARK_CHECKIN_DIGEST + " = ?", new String[] { checkinDigest }, null);
|
||||
if (markCursor != null) {
|
||||
if (markCursor.moveToFirst()) {
|
||||
markInfo.markId = markCursor.getString(markCursor.getColumnIndex(AnalyticsContract.Mark.MARK_ID));
|
||||
markInfo.markName = markCursor.getString(markCursor.getColumnIndex(AnalyticsContract.Mark.MARK_NAME));
|
||||
}
|
||||
|
||||
markCursor.close();
|
||||
}
|
||||
return markInfo;
|
||||
}
|
||||
|
||||
public void deleteRegattaFromDatabase(Context context, String checkinDigest) {
|
||||
ContentResolver cr = context.getContentResolver();
|
||||
|
||||
int d1 = cr.delete(Event.CONTENT_URI, Event.EVENT_CHECKIN_DIGEST + " = ?", new String[] { checkinDigest });
|
||||
int d2 = cr.delete(Competitor.CONTENT_URI, Competitor.COMPETITOR_CHECKIN_DIGEST + " = ?", new String[] { checkinDigest });
|
||||
int d3 = cr.delete(Leaderboard.CONTENT_URI, Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = ?", new String[] { checkinDigest });
|
||||
int d4 = cr.delete(CheckinUri.CONTENT_URI, CheckinUri.CHECKIN_URI_CHECKIN_DIGEST + " = ?", new String[] { checkinDigest });
|
||||
int d4 = cr.delete(Checkin.CONTENT_URI, Checkin.CHECKIN_URI_CHECKIN_DIGEST + " = ?", new String[] { checkinDigest });
|
||||
int d5 = cr.delete(AnalyticsContract.Mark.CONTENT_URI, AnalyticsContract.Mark.MARK_CHECKIN_DIGEST + " = ?", new String[] { checkinDigest });
|
||||
|
||||
if (BuildConfig.DEBUG) {
|
||||
ExLog.i(context, TAG, "Checkout, number of events deleted: " + d1);
|
||||
ExLog.i(context, TAG, "Checkout, number of competitors deleted: " + d2);
|
||||
ExLog.i(context, TAG, "Checkout, number of leaderbards deleted: " + d3);
|
||||
ExLog.i(context, TAG, "Checkout, number of leaderboards deleted: " + d3);
|
||||
ExLog.i(context, TAG, "Checkout, number of checkinurls deleted: " + d4);
|
||||
ExLog.i(context, TAG, "Checkout, number of marks deleted: " + d5);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -201,33 +222,12 @@ public class DatabaseHelper {
|
||||
* @return success or failure
|
||||
* @throws GeneralDatabaseHelperException
|
||||
*/
|
||||
public void storeCheckinRow(Context context, EventInfo event, CompetitorInfo competitor,
|
||||
public void storeCompetitorCheckinRow(Context context, EventInfo event, CompetitorInfo competitor,
|
||||
LeaderboardInfo leaderboard, CheckinUrlInfo checkinURL) throws GeneralDatabaseHelperException {
|
||||
|
||||
// inserting leaderboard first
|
||||
|
||||
ContentResolver cr = context.getContentResolver();
|
||||
|
||||
ContentValues clv = new ContentValues();
|
||||
clv.put(Leaderboard.LEADERBOARD_NAME, leaderboard.name);
|
||||
clv.put(Leaderboard.LEADERBOARD_CHECKIN_DIGEST, leaderboard.checkinDigest);
|
||||
cr.insert(Leaderboard.CONTENT_URI, clv);
|
||||
|
||||
// now insert event
|
||||
|
||||
ContentResolver contentResolver = context.getContentResolver();
|
||||
ArrayList<ContentProviderOperation> opList = new ArrayList<>();
|
||||
|
||||
ContentValues cev = new ContentValues();
|
||||
cev.put(Event.EVENT_ID, event.id);
|
||||
cev.put(Event.EVENT_NAME, event.name);
|
||||
cev.put(Event.EVENT_DATE_START, event.startMillis);
|
||||
cev.put(Event.EVENT_DATE_END, event.endMillis);
|
||||
cev.put(Event.EVENT_SERVER, event.server);
|
||||
cev.put(Event.EVENT_IMAGE_URL, event.imageUrl);
|
||||
cev.put(Event.EVENT_CHECKIN_DIGEST, event.checkinDigest);
|
||||
|
||||
opList.add(ContentProviderOperation.newInsert(Event.CONTENT_URI).withValues(cev).build());
|
||||
|
||||
// competitor
|
||||
|
||||
ContentValues ccv = new ContentValues();
|
||||
@@ -240,23 +240,68 @@ public class DatabaseHelper {
|
||||
ccv.put(Competitor.COMPETITOR_CHECKIN_DIGEST, competitor.checkinDigest);
|
||||
|
||||
opList.add(ContentProviderOperation.newInsert(Competitor.CONTENT_URI).withValues(ccv).build());
|
||||
storeBasicInformation(leaderboard, event, checkinURL, opList, contentResolver);
|
||||
|
||||
try {
|
||||
contentResolver.applyBatch(AnalyticsContract.CONTENT_AUTHORITY, opList);
|
||||
} catch (RemoteException| OperationApplicationException e) {
|
||||
throw new GeneralDatabaseHelperException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void storeMarkCheckinRow(Context context, EventInfo event, Mark mark,
|
||||
LeaderboardInfo leaderboard, CheckinUrlInfo checkinURL) throws GeneralDatabaseHelperException {
|
||||
|
||||
// Store Mark information
|
||||
ContentResolver contentResolver = context.getContentResolver();
|
||||
ArrayList<ContentProviderOperation> opList = new ArrayList<>();
|
||||
ContentValues markValues = new ContentValues();
|
||||
markValues.put(AnalyticsContract.Mark.MARK_ID, mark.getId().toString());
|
||||
markValues.put(AnalyticsContract.Mark.MARK_NAME, mark.getName());
|
||||
markValues.put(AnalyticsContract.Mark.MARK_CHECKIN_DIGEST, checkinURL.checkinDigest);
|
||||
opList.add(ContentProviderOperation.newInsert(AnalyticsContract.Mark.CONTENT_URI).withValues(markValues).build());
|
||||
|
||||
storeBasicInformation(leaderboard, event, checkinURL, opList, contentResolver);
|
||||
|
||||
try {
|
||||
contentResolver.applyBatch(AnalyticsContract.CONTENT_AUTHORITY, opList);
|
||||
} catch (RemoteException| OperationApplicationException e) {
|
||||
throw new GeneralDatabaseHelperException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private void storeBasicInformation(LeaderboardInfo leaderboard, EventInfo event, CheckinUrlInfo checkinURL,
|
||||
ArrayList<ContentProviderOperation> opList, ContentResolver contentResolver) {
|
||||
|
||||
// inserting leaderboard first
|
||||
|
||||
ContentValues clv = new ContentValues();
|
||||
clv.put(Leaderboard.LEADERBOARD_NAME, leaderboard.name);
|
||||
clv.put(Leaderboard.LEADERBOARD_CHECKIN_DIGEST, leaderboard.checkinDigest);
|
||||
contentResolver.insert(Leaderboard.CONTENT_URI, clv);
|
||||
|
||||
// now insert event
|
||||
|
||||
ContentValues cev = new ContentValues();
|
||||
cev.put(Event.EVENT_ID, event.id);
|
||||
cev.put(Event.EVENT_NAME, event.name);
|
||||
cev.put(Event.EVENT_DATE_START, event.startMillis);
|
||||
cev.put(Event.EVENT_DATE_END, event.endMillis);
|
||||
cev.put(Event.EVENT_SERVER, event.server);
|
||||
cev.put(Event.EVENT_IMAGE_URL, event.imageUrl);
|
||||
cev.put(Event.EVENT_CHECKIN_DIGEST, event.checkinDigest);
|
||||
|
||||
opList.add(ContentProviderOperation.newInsert(Event.CONTENT_URI).withValues(cev).build());
|
||||
|
||||
// checkin url
|
||||
|
||||
ContentValues ccuv = new ContentValues();
|
||||
|
||||
ccuv.put(CheckinUri.CHECKIN_URI_VALUE, checkinURL.urlString);
|
||||
ccuv.put(CheckinUri.CHECKIN_URI_CHECKIN_DIGEST, checkinURL.checkinDigest);
|
||||
ccuv.put(Checkin.CHECKIN_URI_VALUE, checkinURL.urlString);
|
||||
ccuv.put(Checkin.CHECKIN_URI_CHECKIN_DIGEST, checkinURL.checkinDigest);
|
||||
ccuv.put(Checkin.CHECKIN_TYPE, checkinURL.type);
|
||||
|
||||
opList.add(ContentProviderOperation.newInsert(CheckinUri.CONTENT_URI).withValues(ccuv).build());
|
||||
|
||||
try {
|
||||
cr.applyBatch(AnalyticsContract.CONTENT_AUTHORITY, opList);
|
||||
} catch (RemoteException e) {
|
||||
throw new GeneralDatabaseHelperException(e.getMessage());
|
||||
} catch (OperationApplicationException e) {
|
||||
throw new GeneralDatabaseHelperException(e.getMessage());
|
||||
}
|
||||
opList.add(ContentProviderOperation.newInsert(Checkin.CONTENT_URI).withValues(ccuv).build());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -282,6 +327,29 @@ public class DatabaseHelper {
|
||||
return count == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the combination of event, leaderboard and mark does not exist in the DB. (based on the
|
||||
* digest of the checkin- url obtained from the QR-code.)
|
||||
*
|
||||
* @param checkinDigest
|
||||
* SHA-256 digest of QR-code string
|
||||
* @return combination available or not
|
||||
*/
|
||||
public boolean eventLeaderboardMarkCombinationAvailable(Context context, String checkinDigest) {
|
||||
ContentResolver cr = context.getContentResolver();
|
||||
String sel = AnalyticsDatabase.Tables.LEADERBOARDS + "." + Leaderboard.LEADERBOARD_CHECKIN_DIGEST + " = ? "
|
||||
+ "AND " + AnalyticsDatabase.Tables.MARKS + "." + AnalyticsContract.Mark.MARK_CHECKIN_DIGEST + " = ? "
|
||||
+ "AND " + AnalyticsDatabase.Tables.EVENTS + "." + Event.EVENT_CHECKIN_DIGEST + " = ?";
|
||||
Cursor cursor = cr.query(AnalyticsContract.EventLeaderboardMarkJoined.CONTENT_URI, null, sel, new String[] { checkinDigest,
|
||||
checkinDigest, checkinDigest }, null);
|
||||
int count = 0;
|
||||
if (cursor != null) {
|
||||
count = cursor.getCount();
|
||||
cursor.close();
|
||||
}
|
||||
return count == 0;
|
||||
}
|
||||
|
||||
public class GeneralDatabaseHelperException extends Exception {
|
||||
private static final long serialVersionUID = 4333494334720305541L;
|
||||
|
||||
|
||||
@@ -1,33 +1,41 @@
|
||||
package com.sap.sailing.android.tracking.app.valueobjects;
|
||||
|
||||
import com.sap.sailing.android.shared.data.AbstractCheckinData;
|
||||
import com.sap.sailing.android.shared.data.CheckinUrlInfo;
|
||||
import com.sap.sailing.android.shared.data.LeaderboardInfo;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
public class CheckinData extends AbstractCheckinData {
|
||||
import com.sap.sailing.android.shared.data.BaseCheckinData;
|
||||
import com.sap.sailing.android.shared.data.CheckinUrlInfo;
|
||||
import com.sap.sailing.android.shared.data.LeaderboardInfo;
|
||||
|
||||
public abstract class CheckinData extends BaseCheckinData {
|
||||
// public String gcmId;
|
||||
public String leaderboardName;
|
||||
public String eventId;
|
||||
public String eventName;
|
||||
public String eventStartDateStr;
|
||||
public String eventEndDateStr;
|
||||
public String eventFirstImageUrl;
|
||||
public String eventServerUrl;
|
||||
private String leaderboardName;
|
||||
private String eventId;
|
||||
private String eventName;
|
||||
private String eventStartDateStr;
|
||||
private String eventEndDateStr;
|
||||
private String eventFirstImageUrl;
|
||||
private String eventServerUrl;
|
||||
public String checkinURL;
|
||||
public String competitorName;
|
||||
public String competitorId;
|
||||
public String competitorSailId;
|
||||
public String competitorNationality;
|
||||
public String competitorCountryCode;
|
||||
public String deviceUid;
|
||||
public String uriString;
|
||||
private String uriString;
|
||||
public String checkinDigest;
|
||||
private boolean update;
|
||||
|
||||
public CheckinData(UrlData data) {
|
||||
leaderboardName = data.leaderboardName.replace("%20", " ");
|
||||
deviceUid = data.deviceUuid.getStringRepresentation();
|
||||
eventId = data.eventId;
|
||||
eventName = data.eventName;
|
||||
eventStartDateStr = data.eventStartDateStr;
|
||||
eventEndDateStr = data.eventEndDateStr;
|
||||
eventFirstImageUrl = data.eventFirstImageUrl;
|
||||
eventServerUrl = data.hostWithPort;
|
||||
checkinURL = data.checkinURLStr;
|
||||
uriString = data.uriStr;
|
||||
}
|
||||
|
||||
public void setCheckinDigestFromString(String checkinString) throws UnsupportedEncodingException,
|
||||
NoSuchAlgorithmException {
|
||||
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
||||
@@ -59,24 +67,16 @@ public class CheckinData extends AbstractCheckinData {
|
||||
return leaderboard;
|
||||
}
|
||||
|
||||
public CompetitorInfo getCompetitor() {
|
||||
CompetitorInfo competitor = new CompetitorInfo();
|
||||
competitor.name = competitorName;
|
||||
competitor.id = competitorId;
|
||||
competitor.sailId = competitorSailId;
|
||||
competitor.nationality = competitorNationality;
|
||||
competitor.countryCode = competitorCountryCode;
|
||||
competitor.checkinDigest = checkinDigest;
|
||||
return competitor;
|
||||
}
|
||||
|
||||
public CheckinUrlInfo getCheckinUrl() {
|
||||
CheckinUrlInfo checkinUrlInfo = new CheckinUrlInfo();
|
||||
checkinUrlInfo.urlString = uriString;
|
||||
checkinUrlInfo.checkinDigest = checkinDigest;
|
||||
checkinUrlInfo.type = getCheckinType();
|
||||
return checkinUrlInfo;
|
||||
}
|
||||
|
||||
public abstract int getCheckinType();
|
||||
|
||||
public boolean isUpdate() {
|
||||
return update;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.sap.sailing.android.tracking.app.valueobjects;
|
||||
|
||||
import com.sap.sailing.android.shared.data.CheckinUrlInfo;
|
||||
|
||||
public class CompetitorCheckinData extends CheckinData {
|
||||
|
||||
|
||||
public String competitorName;
|
||||
public String competitorId;
|
||||
public String competitorUrl;
|
||||
public String competitorSailId;
|
||||
public String competitorNationality;
|
||||
public String competitorCountryCode;
|
||||
|
||||
public CompetitorCheckinData(CompetitorUrlData urlData) {
|
||||
super(urlData);
|
||||
competitorName = urlData.competitorName;
|
||||
competitorId = urlData.competitorId;
|
||||
competitorUrl = urlData.competitorUrl;
|
||||
competitorSailId = urlData.competitorSailId;
|
||||
competitorNationality = urlData.competitorNationality;
|
||||
competitorCountryCode = urlData.competitorCountryCode;
|
||||
}
|
||||
|
||||
public CompetitorInfo getCompetitor() {
|
||||
CompetitorInfo competitor = new CompetitorInfo();
|
||||
competitor.name = competitorName;
|
||||
competitor.id = competitorId;
|
||||
competitor.sailId = competitorSailId;
|
||||
competitor.nationality = competitorNationality;
|
||||
competitor.countryCode = competitorCountryCode;
|
||||
competitor.checkinDigest = checkinDigest;
|
||||
return competitor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCheckinType() {
|
||||
return CheckinUrlInfo.TYPE_COMPETITOR;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.sap.sailing.android.tracking.app.valueobjects;
|
||||
|
||||
public class CompetitorUrlData extends UrlData {
|
||||
|
||||
public String competitorId;
|
||||
public String competitorUrl;
|
||||
public String competitorName;
|
||||
public String competitorSailId;
|
||||
public String competitorNationality;
|
||||
public String competitorCountryCode;
|
||||
|
||||
public CompetitorUrlData(String server, int port) {
|
||||
super(server, port);
|
||||
}
|
||||
}
|
||||