mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-30 01:16:40 +00:00
optimized Tracking List for Phones
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
</item>
|
||||
<item android:right="@dimen/default_margin_half">
|
||||
<bitmap
|
||||
android:src="@drawable/ic_delete_white_36dp"
|
||||
android:src="@drawable/ic_delete_white_24dp"
|
||||
android:gravity="right|center_vertical"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -5,7 +5,7 @@
|
||||
</item>
|
||||
<item android:right="@dimen/default_margin_half">
|
||||
<bitmap
|
||||
android:src="@drawable/ic_delete_black_36dp"
|
||||
android:src="@drawable/ic_delete_black_24dp"
|
||||
android:gravity="right|center_vertical"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -5,7 +5,7 @@
|
||||
</item>
|
||||
<item android:left="@dimen/default_margin_half">
|
||||
<bitmap
|
||||
android:src="@drawable/ic_delete_white_36dp"
|
||||
android:src="@drawable/ic_delete_white_24dp"
|
||||
android:gravity="left|center_vertical"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -5,7 +5,7 @@
|
||||
</item>
|
||||
<item android:left="@dimen/default_margin_half">
|
||||
<bitmap
|
||||
android:src="@drawable/ic_delete_black_36dp"
|
||||
android:src="@drawable/ic_delete_black_24dp"
|
||||
android:gravity="left|center_vertical"/>
|
||||
</item>
|
||||
</layer-list>
|
||||
+4
-5
@@ -3,17 +3,16 @@
|
||||
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:minHeight="?android:attr/listPreferredItemHeight">
|
||||
android:layout_height="42dp">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/container"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="@dimen/default_padding"
|
||||
android:paddingRight="@dimen/default_padding">
|
||||
android:paddingLeft="@dimen/side_padding"
|
||||
android:paddingRight="@dimen/side_padding">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/vessel_id"
|
||||
+15
-16
@@ -13,20 +13,6 @@
|
||||
android:orientation="horizontal"
|
||||
tools:ignore="UseCompoundDrawables">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@id/drag_handle"
|
||||
android:layout_width="42dp"
|
||||
android:layout_height="42dp"
|
||||
android:layout_gravity="center_vertical">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:background="@drawable/dragster"
|
||||
android:contentDescription="@string/drag_handle_description"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/position"
|
||||
android:layout_width="0dp"
|
||||
@@ -51,8 +37,7 @@
|
||||
android:layout_gravity="center_vertical"
|
||||
android:padding="5dp"
|
||||
android:textAppearance="?textSmall"
|
||||
tools:text="GDR001"
|
||||
/>
|
||||
tools:text="GDR001"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/competitor"
|
||||
@@ -64,5 +49,19 @@
|
||||
android:textAppearance="?textSmall"
|
||||
tools:text="Cool Runnings"/>
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@id/drag_handle"
|
||||
android:layout_width="42dp"
|
||||
android:layout_height="42dp"
|
||||
android:layout_gravity="center_vertical">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:background="@drawable/dragster"
|
||||
android:contentDescription="@string/drag_handle_description"/>
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
+12
-12
@@ -18,19 +18,19 @@
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="@dimen/default_margin_half"
|
||||
android:layout_marginLeft="@dimen/default_margin_half"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:text="@string/positionings"
|
||||
android:text="@string/availableFinishingCompetitors"
|
||||
android:textAppearance="?textNormal"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/default_margin_half"
|
||||
android:layout_marginRight="@dimen/default_margin_half"
|
||||
android:layout_weight="1"
|
||||
android:gravity="center"
|
||||
android:text="@string/availableFinishingCompetitors"
|
||||
android:text="@string/tracking_list"
|
||||
android:textAppearance="?textNormal"/>
|
||||
</LinearLayout>
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:text="@string/confirm_positionings"/>
|
||||
android:text="@string/confirm_tracking_list"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
@@ -65,18 +65,18 @@
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/list_positioning_chosen"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginRight="@dimen/default_margin_half"
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/list_positioning_all"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginLeft="@dimen/default_margin_half"
|
||||
android:layout_weight="1"/>
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/list_positioning_chosen"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginRight="@dimen/default_margin_half"
|
||||
android:layout_weight="1"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,147 @@
|
||||
<?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:clickable="true">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/tracking_header"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/selector_header_height"
|
||||
android:background="?sap_gray"
|
||||
android:clickable="false">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/header_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginLeft="@dimen/side_padding"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/header_back"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:src="?chevron_left_24dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/header_caption"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:text="@string/tracking_list"
|
||||
android:textAppearance="?textHeader"/>
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/line_top"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/unscheduled_header_line"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:background="?black"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/bottom_bar"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:background="?sap_gray_black_30"
|
||||
android:clickable="false"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/thin_line"
|
||||
android:background="?attr/sap_gray"
|
||||
android:layout_alignParentTop="true"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/confirm"
|
||||
style="?button"
|
||||
android:layout_width="@dimen/default_button_width"
|
||||
android:layout_height="@dimen/default_button_height"
|
||||
android:layout_centerInParent="true"
|
||||
android:layout_marginTop="@dimen/default_margin_half"
|
||||
android:layout_marginBottom="@dimen/default_margin_half"
|
||||
android:text="@string/confirm_tracking_list"
|
||||
android:textSize="@dimen/textSize_18"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_above="@id/bottom_bar"
|
||||
android:layout_below="@+id/tracking_header"
|
||||
android:background="?sap_gray_black_30"
|
||||
android:paddingTop="@dimen/side_padding">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/panel_switcher"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="40dp"
|
||||
android:layout_alignParentBottom="true">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/nav_prev"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:src="?button_prev"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/nav_next"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:src="?button_next"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/panel_1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="5dp"
|
||||
tools:src="@drawable/ic_dot"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/panel_2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:src="@drawable/ic_dot"/>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_above="@id/panel_switcher"
|
||||
android:paddingLeft="@dimen/side_padding"
|
||||
android:paddingRight="@dimen/side_padding">
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/list_positioning_chosen"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="visible"/>
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/list_positioning_all"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone"/>
|
||||
</FrameLayout>
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
@@ -97,9 +97,9 @@
|
||||
<string name="retry">Wiederholen</string>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nein</string>
|
||||
<string name="positionings">Ergebnisliste</string>
|
||||
<string name="set_positionings">Ergebnisliste füllen</string>
|
||||
<string name="confirm_positionings">Ergebnisliste bestätigen</string>
|
||||
<string name="tracking_list">Ergebnisliste</string>
|
||||
<string name="set_tracking_list">Ergebnisliste füllen</string>
|
||||
<string name="confirm_tracking_list">Ergebnisliste bestätigen</string>
|
||||
<string name="availableFinishingCompetitors">Segler</string>
|
||||
<string name="choose_blue_flag_finishing">Rennen beenden</string>
|
||||
<string name="drag_handle_description">Cursor</string>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
<item name="race_list_header" type="layout">@layout/race_list_header_small</item>
|
||||
<item name="race_list_list" type="layout">@layout/race_list_list_top</item>
|
||||
<item name="race_tracking_list" type="layout">@layout/race_tracking_list_large</item>
|
||||
<item name="wind_view" type="layout">@layout/wind_view_xlarge</item>
|
||||
|
||||
</resources>
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<item name="race_positioning" type="layout">@layout/race_tracking_list_small</item>
|
||||
|
||||
</resources>
|
||||
@@ -9,6 +9,7 @@
|
||||
<item name="race_main" type="layout">@layout/race_main_small</item>
|
||||
<item name="race_panel_flags" type="layout">@layout/race_panel_flags_hor</item>
|
||||
<item name="race_panel_setup" type="layout">@layout/race_panel_setup_hor</item>
|
||||
<item name="race_tracking_list" type="layout">@layout/race_tracking_list_small</item>
|
||||
<item name="race_schedule_course_marks" type="layout">@layout/race_schedule_course_marks_small</item>
|
||||
<item name="race_time_picker" type="layout">@layout/race_time_picker_small</item>
|
||||
<item name="toolbar_racing_activity" type="layout">@layout/toolbar</item>
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
<string name="retry">Retry</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="positionings">Positioning</string>
|
||||
<string name="tracking_list">Tracking List</string>
|
||||
<string name="availableFinishingCompetitors">Competitors</string>
|
||||
<string name="choose_blue_flag_finishing">Finish race</string>
|
||||
<string name="drag_handle_description">Drag handle</string>
|
||||
@@ -182,8 +182,8 @@
|
||||
<string name="start">Set start time</string>
|
||||
<string name="nationality">Nationality</string>
|
||||
<string name="number">Number</string>
|
||||
<string name="set_positionings">Set positionings</string>
|
||||
<string name="confirm_positionings">Confirm positionings</string>
|
||||
<string name="set_tracking_list">Set tracking list</string>
|
||||
<string name="confirm_tracking_list">Confirm tracking list</string>
|
||||
<string name="snap">Snap</string>
|
||||
<string name="logout_dialog_title">Are you sure want to logout?</string>
|
||||
<string name="logout_dialog_message">Logging out stops automatic monitoring for all races.</string>
|
||||
|
||||
+8
-4
@@ -1,14 +1,18 @@
|
||||
package com.sap.sailing.racecommittee.app.data;
|
||||
|
||||
import com.sap.sailing.domain.base.*;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.EventBase;
|
||||
import com.sap.sailing.domain.base.Mark;
|
||||
import com.sap.sailing.domain.base.SharedDomainFactory;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
public interface DataStore {
|
||||
|
||||
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.SeriesBase;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
|
||||
+1
@@ -5,6 +5,7 @@ import android.content.DialogInterface.OnClickListener;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.ActionBar;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ public class CompetitorAdapter extends RecyclerView.Adapter<CompetitorAdapter.Vi
|
||||
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View layout = LayoutInflater.from(mContext).inflate(R.layout.race_positioning_competitor_item, parent, false);
|
||||
View layout = LayoutInflater.from(mContext).inflate(R.layout.race_tracking_list_competitor_item, parent, false);
|
||||
return new ViewHolder(layout);
|
||||
}
|
||||
|
||||
|
||||
+5
-4
@@ -50,7 +50,7 @@ public class FinishListAdapter extends BaseDraggableSwipeAdapter<FinishListAdapt
|
||||
|
||||
@Override
|
||||
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
View layout = LayoutInflater.from(mContext).inflate(R.layout.race_positioning_draggable_item, parent, false);
|
||||
View layout = LayoutInflater.from(mContext).inflate(R.layout.race_tracking_list_draggable_item, parent, false);
|
||||
return new ViewHolder(layout);
|
||||
}
|
||||
|
||||
@@ -217,13 +217,14 @@ public class FinishListAdapter extends BaseDraggableSwipeAdapter<FinishListAdapt
|
||||
public ViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
||||
itemView.setOnLongClickListener(this);
|
||||
|
||||
container = ViewHelper.get(itemView, R.id.container);
|
||||
dragHandle = ViewHelper.get(itemView, R.id.drag_handle);
|
||||
position = ViewHelper.get(itemView, R.id.position);
|
||||
vesselId = ViewHelper.get(itemView, R.id.vessel_id);
|
||||
competitor = ViewHelper.get(itemView, R.id.competitor);
|
||||
position = ViewHelper.get(itemView, R.id.position);
|
||||
if (position != null) {
|
||||
position.setOnLongClickListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
-1
@@ -7,7 +7,6 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.view.LayoutInflater;
|
||||
|
||||
+1
@@ -9,6 +9,7 @@ import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.RelativeLayout;
|
||||
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
|
||||
+52
@@ -1,9 +1,14 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.IdRes;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.util.BroadcastManager;
|
||||
@@ -14,6 +19,8 @@ import com.sap.sailing.racecommittee.app.AppPreferences;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.utils.BitmapHelper;
|
||||
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
|
||||
import com.sap.sailing.racecommittee.app.utils.TickListener;
|
||||
import com.sap.sailing.racecommittee.app.utils.TickSingleton;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
@@ -26,6 +33,10 @@ public abstract class RaceFragment extends LoggableFragment implements TickListe
|
||||
protected ManagedRace managedRace;
|
||||
protected AppPreferences preferences;
|
||||
|
||||
protected ArrayList<ImageView> mDots;
|
||||
protected ArrayList<View> mPanels;
|
||||
protected int mActivePage = 0;
|
||||
|
||||
public static Bundle createArguments(ManagedRace race) {
|
||||
Bundle arguments = new Bundle();
|
||||
arguments.putString(AppConstants.RACE_ID_KEY, race.getId());
|
||||
@@ -136,4 +147,45 @@ public abstract class RaceFragment extends LoggableFragment implements TickListe
|
||||
}
|
||||
return frame;
|
||||
}
|
||||
|
||||
|
||||
protected void viewPanel(int direction) {
|
||||
if (mDots.size() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// find next active page (with overflow)
|
||||
mActivePage += direction;
|
||||
if (mActivePage < 0) {
|
||||
mActivePage = mDots.size() - 1;
|
||||
}
|
||||
if (mActivePage == mDots.size()) {
|
||||
mActivePage = 0;
|
||||
}
|
||||
|
||||
// ignore invisible dots
|
||||
if (mDots.get(mActivePage).getVisibility() == View.GONE) {
|
||||
viewPanel(direction);
|
||||
}
|
||||
|
||||
// tint all dots gray
|
||||
for (ImageView mDot : mDots) {
|
||||
int tint = ThemeHelper.getColor(getActivity(), R.attr.sap_light_gray);
|
||||
Drawable drawable = BitmapHelper.getTintedDrawable(getActivity(), R.drawable.ic_dot, tint);
|
||||
mDot.setImageDrawable(drawable);
|
||||
}
|
||||
|
||||
// tint current dot black
|
||||
int tint = ThemeHelper.getColor(getActivity(), R.attr.black);
|
||||
Drawable drawable = BitmapHelper.getTintedDrawable(getActivity(), R.drawable.ic_dot, tint);
|
||||
mDots.get(mActivePage).setImageDrawable(drawable);
|
||||
|
||||
// hide all panels
|
||||
for (View view : mPanels) {
|
||||
view.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
// show current panel
|
||||
mPanels.get(mActivePage).setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -19,10 +19,10 @@ import com.sap.sailing.android.shared.util.ViewHelper;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.CourseFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.PhotoListFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.PositioningFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.LineStartModeFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.PhotoListFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.StartProcedureFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.TrackingListFragment;
|
||||
|
||||
public class FinishedButtonFragment extends BasePanelFragment {
|
||||
|
||||
@@ -180,7 +180,7 @@ public class FinishedButtonFragment extends BasePanelFragment {
|
||||
break;
|
||||
|
||||
case LEVEL_TOGGLED:
|
||||
replaceFragment(PositioningFragment.newInstance(getRecentArguments()), R.id.finished_content);
|
||||
replaceFragment(TrackingListFragment.newInstance(getRecentArguments()), getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
-1
@@ -7,7 +7,6 @@ import android.app.FragmentTransaction;
|
||||
import android.support.annotation.IdRes;
|
||||
import android.support.annotation.IntDef;
|
||||
|
||||
import com.sap.sailing.android.shared.util.AppUtils;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
|
||||
|
||||
+81
-19
@@ -18,6 +18,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.h6ah4i.android.widget.advrecyclerview.animator.SwipeDismissItemAnimator;
|
||||
@@ -25,6 +26,7 @@ import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropM
|
||||
import com.h6ah4i.android.widget.advrecyclerview.swipeable.RecyclerViewSwipeManager;
|
||||
import com.h6ah4i.android.widget.advrecyclerview.touchguard.RecyclerViewTouchActionGuardManager;
|
||||
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
|
||||
import com.sap.sailing.android.shared.util.ViewHelper;
|
||||
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
|
||||
import com.sap.sailing.domain.abstractlog.race.impl.CompetitorResultsImpl;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
@@ -44,14 +46,13 @@ import com.sap.sailing.racecommittee.app.ui.comparators.NaturalNamedComparator;
|
||||
import com.sap.sse.common.Util;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
public class PositioningFragment extends BaseFragment
|
||||
implements CompetitorAdapter.CompetitorClick, FinishListAdapter.FinishEvents {
|
||||
public class TrackingListFragment extends BaseFragment
|
||||
implements CompetitorAdapter.CompetitorClick, FinishListAdapter.FinishEvents, View.OnClickListener {
|
||||
|
||||
private RecyclerViewDragDropManager mDragDropManager;
|
||||
private RecyclerViewSwipeManager mSwipeManager;
|
||||
private RecyclerViewTouchActionGuardManager mGuardManager;
|
||||
private RecyclerView mFinishView;
|
||||
private RecyclerView mCompetitorView;
|
||||
private Button mConfirm;
|
||||
|
||||
private RecyclerView.Adapter<FinishListAdapter.ViewHolder> mFinishedAdapter;
|
||||
@@ -61,19 +62,58 @@ public class PositioningFragment extends BaseFragment
|
||||
private ArrayList<Competitor> mCompetitorData;
|
||||
private long mId = 0;
|
||||
|
||||
public PositioningFragment() {
|
||||
public TrackingListFragment() {
|
||||
mCompetitorData = new ArrayList<>();
|
||||
}
|
||||
|
||||
public static PositioningFragment newInstance(Bundle args) {
|
||||
PositioningFragment fragment = new PositioningFragment();
|
||||
public static TrackingListFragment newInstance(Bundle args) {
|
||||
TrackingListFragment fragment = new TrackingListFragment();
|
||||
fragment.setArguments(args);
|
||||
return fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View layout = inflater.inflate(R.layout.race_positioning, container, false);
|
||||
View layout = inflater.inflate(R.layout.race_tracking_list, container, false);
|
||||
|
||||
mDots = new ArrayList<>();
|
||||
mPanels = new ArrayList<>();
|
||||
|
||||
ImageView dot;
|
||||
dot = ViewHelper.get(layout, R.id.panel_1);
|
||||
if (dot != null) {
|
||||
mDots.add(dot);
|
||||
}
|
||||
dot = ViewHelper.get(layout, R.id.panel_2);
|
||||
if (dot != null) {
|
||||
mDots.add(dot);
|
||||
}
|
||||
dot = ViewHelper.get(layout, R.id.panel_3);
|
||||
if (dot != null) {
|
||||
mDots.add(dot);
|
||||
}
|
||||
|
||||
ImageView btnPrev = ViewHelper.get(layout, R.id.nav_prev);
|
||||
if (btnPrev != null) {
|
||||
btnPrev.setOnClickListener(this);
|
||||
}
|
||||
|
||||
ImageView btnNext = ViewHelper.get(layout, R.id.nav_next);
|
||||
if (btnNext != null) {
|
||||
btnNext.setOnClickListener(this);
|
||||
}
|
||||
|
||||
View home = ViewHelper.get(layout, R.id.header_text);
|
||||
if (home != null) {
|
||||
home.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
sendIntent(AppConstants.INTENT_ACTION_CLEAR_TOGGLE);
|
||||
sendIntent(AppConstants.INTENT_ACTION_SHOW_SUMMARY_CONTENT);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return layout;
|
||||
}
|
||||
|
||||
@@ -85,6 +125,18 @@ public class PositioningFragment extends BaseFragment
|
||||
loadCompetitors();
|
||||
|
||||
if (getView() != null) {
|
||||
RecyclerView competitorView = (RecyclerView) getView().findViewById(R.id.list_positioning_all);
|
||||
if (competitorView != null) {
|
||||
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
|
||||
mCompetitorAdapter = new CompetitorAdapter(getActivity(), mCompetitorData);
|
||||
mCompetitorAdapter.setListener(this);
|
||||
|
||||
competitorView.setLayoutManager(layoutManager);
|
||||
competitorView.setAdapter(mCompetitorAdapter);
|
||||
|
||||
mPanels.add(competitorView);
|
||||
}
|
||||
|
||||
mFinishView = (RecyclerView) getView().findViewById(R.id.list_positioning_chosen);
|
||||
if (mFinishView != null) {
|
||||
mGuardManager = new RecyclerViewTouchActionGuardManager();
|
||||
@@ -116,20 +168,12 @@ public class PositioningFragment extends BaseFragment
|
||||
mGuardManager.attachRecyclerView(mFinishView);
|
||||
mDragDropManager.attachRecyclerView(mFinishView);
|
||||
mSwipeManager.attachRecyclerView(mFinishView);
|
||||
}
|
||||
|
||||
mCompetitorView = (RecyclerView) getView().findViewById(R.id.list_positioning_all);
|
||||
if (mCompetitorView != null) {
|
||||
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
|
||||
mCompetitorAdapter = new CompetitorAdapter(getActivity(), mCompetitorData);
|
||||
mCompetitorAdapter.setListener(this);
|
||||
|
||||
mCompetitorView.setLayoutManager(layoutManager);
|
||||
mCompetitorView.setAdapter(mCompetitorAdapter);
|
||||
mPanels.add(mFinishView);
|
||||
}
|
||||
|
||||
mConfirm = (Button) getView().findViewById(R.id.confirm);
|
||||
if (mConfirm != null) {
|
||||
mConfirm.setEnabled(mDots.size() == 0);
|
||||
mConfirm.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@@ -144,6 +188,7 @@ public class PositioningFragment extends BaseFragment
|
||||
Util.addAll(getRace().getCompetitors(), mCompetitorData);
|
||||
Collections.sort(mCompetitorData, new NaturalNamedComparator());
|
||||
mCompetitorAdapter.notifyDataSetChanged();
|
||||
viewPanel(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -183,6 +228,7 @@ public class PositioningFragment extends BaseFragment
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
|
||||
private void loadCompetitors() {
|
||||
// invalidate all competitors of this race
|
||||
ReadonlyDataManager dataManager = OnlineDataManager.create(getActivity());
|
||||
@@ -203,7 +249,9 @@ public class PositioningFragment extends BaseFragment
|
||||
|
||||
@Override
|
||||
public void onLoadSucceeded(Collection<Competitor> data, boolean isCached) {
|
||||
onLoadCompetitorsSucceeded(data);
|
||||
if (isAdded()) {
|
||||
onLoadCompetitorsSucceeded(data);
|
||||
}
|
||||
}
|
||||
|
||||
}));
|
||||
@@ -346,8 +394,22 @@ public class PositioningFragment extends BaseFragment
|
||||
private CompetitorResults getCompetitorResults() {
|
||||
CompetitorResults result = new CompetitorResultsImpl();
|
||||
for (CompetitorsWithIdImpl item : mFinishedData) {
|
||||
result.add(new Util.Triple<Serializable, String, MaxPointsReason>(item.getKey(), item.getText(), item.getReason()));
|
||||
result.add(new Util.Triple<>(item.getKey(), item.getText(), item.getReason()));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.nav_prev:
|
||||
viewPanel(-1);
|
||||
break;
|
||||
|
||||
case R.id.nav_next:
|
||||
viewPanel(1);
|
||||
break;
|
||||
}
|
||||
mConfirm.setEnabled(mActivePage != 0);
|
||||
}
|
||||
}
|
||||
-43
@@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.app.FragmentTransaction;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
@@ -20,18 +19,12 @@ import com.sap.sailing.domain.abstractlog.race.state.racingprocedure.rrs26.RRS26
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.panels.MorePanelFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.BaseRaceInfoRaceFragment;
|
||||
import com.sap.sailing.racecommittee.app.utils.BitmapHelper;
|
||||
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
|
||||
|
||||
public abstract class BaseStartphaseRaceFragment<ProcedureType extends RacingProcedure> extends BaseRaceInfoRaceFragment<ProcedureType>
|
||||
implements View.OnClickListener {
|
||||
|
||||
private ArrayList<ImageView> mDots;
|
||||
private ArrayList<View> mPanels;
|
||||
private RaceStateListener mStateListener;
|
||||
|
||||
private int mActivePage = 0;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View layout = inflater.inflate(R.layout.race_main, container, false);
|
||||
@@ -135,42 +128,6 @@ public abstract class BaseStartphaseRaceFragment<ProcedureType extends RacingPro
|
||||
}
|
||||
}
|
||||
|
||||
private void viewPanel(int direction) {
|
||||
// find next active page (with overflow)
|
||||
mActivePage += direction;
|
||||
if (mActivePage < 0) {
|
||||
mActivePage = mDots.size() - 1;
|
||||
}
|
||||
if (mActivePage == mDots.size()) {
|
||||
mActivePage = 0;
|
||||
}
|
||||
|
||||
// ignore invisible dots
|
||||
if (mDots.get(mActivePage).getVisibility() == View.GONE) {
|
||||
viewPanel(direction);
|
||||
}
|
||||
|
||||
// tint all dots gray
|
||||
for (ImageView mDot : mDots) {
|
||||
int tint = ThemeHelper.getColor(getActivity(), R.attr.sap_light_gray);
|
||||
Drawable drawable = BitmapHelper.getTintedDrawable(getActivity(), R.drawable.ic_dot, tint);
|
||||
mDot.setImageDrawable(drawable);
|
||||
}
|
||||
|
||||
// tint current dot black
|
||||
int tint = ThemeHelper.getColor(getActivity(), R.attr.black);
|
||||
Drawable drawable = BitmapHelper.getTintedDrawable(getActivity(), R.drawable.ic_dot, tint);
|
||||
mDots.get(mActivePage).setImageDrawable(drawable);
|
||||
|
||||
// hide all panels
|
||||
for (View view : mPanels) {
|
||||
view.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
// show current panel
|
||||
mPanels.get(mActivePage).setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
private class RaceStateListener extends BaseRaceStateChangedListener {
|
||||
|
||||
@Override
|
||||
|
||||
-1
@@ -10,7 +10,6 @@ import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.AttrRes;
|
||||
import android.support.annotation.ColorRes;
|
||||
import android.support.annotation.DrawableRes;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.graphics.drawable.DrawableCompat;
|
||||
|
||||
+7
-6
@@ -1,11 +1,5 @@
|
||||
package com.sap.sailing.racecommittee.app.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.Nullable;
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
@@ -13,6 +7,13 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
|
||||
public class CameraHelper {
|
||||
|
||||
public static final int MEDIA_TYPE_IMAGE = 1;
|
||||
|
||||
+6
-5
@@ -1,14 +1,15 @@
|
||||
package com.sap.sailing.racecommittee.app.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
public class MailHelper {
|
||||
|
||||
public static void send(String recipient, String subject, String text, Uri attachment, Context context) {
|
||||
|
||||
+1
@@ -1,6 +1,7 @@
|
||||
package com.sap.sailing.racecommittee.app.utils;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
|
||||
+3
-2
@@ -1,5 +1,7 @@
|
||||
package com.sap.sailing.racecommittee.app.utils;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
@@ -12,14 +14,13 @@ import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.NumberPicker;
|
||||
import android.widget.TimePicker;
|
||||
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.util.ViewHelper;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.AppPreferences;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
public class ThemeHelper {
|
||||
|
||||
private static final String TAG = ThemeHelper.class.getName();
|
||||
|
||||
+1
@@ -4,6 +4,7 @@ import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import android.os.Handler;
|
||||
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
|
||||
+6
-5
@@ -1,5 +1,10 @@
|
||||
package com.sap.sailing.racecommittee.app.utils.autoupdate;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnClickListener;
|
||||
@@ -7,6 +12,7 @@ import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.Uri;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
||||
import com.sap.sailing.android.shared.logging.ExLog;
|
||||
import com.sap.sailing.android.shared.util.FileHandlerUtils;
|
||||
import com.sap.sailing.racecommittee.app.AppPreferences;
|
||||
@@ -14,11 +20,6 @@ import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.ui.activities.PreferenceActivity;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.preference.GeneralPreferenceFragment;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
public class AutoUpdater {
|
||||
|
||||
private static final String TAG = AutoUpdater.class.getName();
|
||||
|
||||
+6
-5
@@ -1,16 +1,17 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.SeriesBase;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.domain.base.racegroup.impl.RaceGroupImpl;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
|
||||
import com.sap.sse.common.Util.Triple;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
/**
|
||||
* This test verifies the algorithm used to escape and unescape SimpleRaceIdentifier components as used in
|
||||
|
||||
+10
-8
@@ -1,17 +1,19 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.activities;
|
||||
|
||||
import android.support.test.rule.ActivityTestRule;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static android.support.test.espresso.Espresso.onView;
|
||||
import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
|
||||
import static android.support.test.espresso.matcher.ViewMatchers.withId;
|
||||
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import android.support.test.rule.ActivityTestRule;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@SmallTest
|
||||
public class LoginActivityTest {
|
||||
|
||||
Reference in New Issue
Block a user