add warning sign to the be visible as ofter as necessary

This commit is contained in:
Peter Siegmund
2017-09-28 14:53:08 +02:00
parent 39f4ce817b
commit ba5853e1ca
12 changed files with 188 additions and 54 deletions
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_warning_yellow_36dp" />
</selector>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_warning_yellow_24dp" />
</selector>
@@ -125,5 +125,13 @@
android:layout_height="match_parent"
android:background="?attr/black"
android:visibility="gone" />
<ImageView
android:id="@+id/warning_sign"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:src="@drawable/ic_warning_yellow"
android:visibility="gone" />
</RelativeLayout>
</merge>
@@ -19,7 +19,7 @@
android:layout_height="wrap_content"
android:text="@string/finished_tracking"
android:textAppearance="?attr/textPanelHeader"
android:textSize="@dimen/textSize_18"/>
android:textSize="@dimen/textSize_18" />
<ImageView
android:id="@+id/list_lock"
@@ -48,4 +48,14 @@
android:text="@string/finished_edit"
android:textAppearance="?attr/textPanelCaption" />
</RelativeLayout>
<ImageView
android:id="@+id/warning_sign"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_margin="4dp"
android:src="@drawable/ic_warning_yellow"
android:visibility="gone"
tools:visibility="visible" />
</merge>
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/navigation_drawer_cell_height">
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/navigation_drawer_cell_height">
<RelativeLayout
android:id="@+id/panel_right"
@@ -24,7 +24,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textAppearance="?attr/textXLarge"
tools:text="13:36"/>
tools:text="13:36" />
<TextView
android:id="@+id/race_started"
@@ -32,7 +32,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/race_started"
android:textAppearance="?attr/textXSmall"/>
android:textAppearance="?attr/textXSmall" />
<TextView
android:id="@+id/race_finished"
@@ -40,7 +40,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/race_finished"
android:textAppearance="?attr/textXSmall"/>
android:textAppearance="?attr/textXSmall" />
</LinearLayout>
<TextView
@@ -51,7 +51,7 @@
android:text="@string/race_unscheduled"
android:textColor="?attr/sap_light_gray"
android:textSize="@dimen/textSize_18"
android:visibility="gone"/>
android:visibility="gone" />
<ImageView
android:id="@+id/update_badge"
@@ -62,7 +62,17 @@
android:scaleType="matrix"
android:src="@drawable/updated"
android:visibility="gone"
tools:visibility="visible"/>
tools:visibility="visible" />
<ImageView
android:id="@+id/warning_sign"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:visibility="gone"
android:layout_margin="2dp"
android:src="@drawable/ic_warning_yellow" />
</RelativeLayout>
<RelativeLayout
@@ -76,7 +86,7 @@
android:id="@+id/race_marker"
android:layout_width="@dimen/obesity_line"
android:layout_height="match_parent"
android:src="?attr/marker_race"/>
android:src="?attr/marker_race" />
<LinearLayout
android:id="@+id/additional_info"
@@ -93,7 +103,7 @@
android:layout_margin="5dp"
android:src="?attr/link_24dp"
android:visibility="gone"
tools:visibility="visible"/>
tools:visibility="visible" />
<LinearLayout
android:id="@+id/race_flag"
@@ -110,7 +120,7 @@
android:layout_height="25dp"
android:layout_gravity="center"
android:scaleType="centerInside"
tools:src="@drawable/flag_alpha_64dp"/>
tools:src="@drawable/flag_alpha_64dp" />
<TextView
android:id="@+id/flag_timer"
@@ -119,7 +129,7 @@
android:layout_gravity="center"
android:drawableLeft="?attr/arrow_down"
android:textAppearance="?attr/textXSmall"
tools:text="01:12"/>
tools:text="01:12" />
</LinearLayout>
</LinearLayout>
@@ -141,7 +151,7 @@
android:ellipsize="middle"
android:maxLines="1"
android:textAppearance="?attr/textNormal"
tools:text="Race 3"/>
tools:text="Race 3" />
<TextView
android:id="@+id/depends_on"
@@ -152,7 +162,7 @@
android:textAppearance="?attr/textXSmall"
android:visibility="gone"
tools:text="5 minutes after ABC"
tools:visibility="visible"/>
tools:visibility="visible" />
</LinearLayout>
</RelativeLayout>
@@ -164,11 +174,11 @@
android:background="?attr/factor_background"
android:textAppearance="?attr/textXSmall"
android:textColor="?attr/white_invert"
tools:text="x 3.5"/>
tools:text="x 3.5" />
<ImageView
android:layout_width="match_parent"
android:layout_height="@dimen/thin_line"
android:layout_alignParentBottom="true"
android:background="?attr/black"/>
android:background="?attr/black" />
</RelativeLayout>
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.sap.sailing.racecommittee.app.ui.layouts.TimePanelHeaderLayout
android:id="@+id/race_content_header"
@@ -33,14 +33,14 @@
android:singleLine="true"
android:textColor="?attr/white"
android:textSize="@dimen/panel_button_header_size"
tools:text="@string/time"/>
tools:text="@string/time" />
<ImageView
android:id="@+id/time_marker"
android:layout_width="match_parent"
android:layout_height="@dimen/thin_line"
android:layout_alignParentBottom="true"
android:src="?attr/marker"/>
android:src="?attr/marker" />
<RelativeLayout
android:layout_width="wrap_content"
@@ -65,7 +65,7 @@
android:layout_toRightOf="@+id/linked_locked_area"
android:textColor="?attr/white"
android:textSize="@dimen/panel_button_caption_size"
tools:text="@string/time_start"/>
tools:text="@string/time_start" />
<LinearLayout
android:id="@+id/linked_locked_area"
@@ -81,7 +81,7 @@
android:layout_height="@dimen/side_button_lockSize"
android:src="?attr/lock_outline"
android:visibility="gone"
tools:visibility="visible"/>
tools:visibility="visible" />
<ImageView
android:id="@+id/linked_race"
@@ -90,7 +90,7 @@
android:layout_gravity="center_vertical"
android:src="?attr/link_24dp"
android:visibility="gone"
tools:visibility="visible"/>
tools:visibility="visible" />
</LinearLayout>
</RelativeLayout>
@@ -114,7 +114,7 @@
android:textSize="@dimen/panel_button_caption_size"
android:visibility="invisible"
tools:text="@string/time"
tools:visibility="visible"/>
tools:visibility="visible" />
</RelativeLayout>
</RelativeLayout>
@@ -132,7 +132,8 @@
app:captionPosition="bottom"
app:imageSize="48dp"
app:linePosition="left"
tools:visibility="visible"/>
app:warningSignPosition="topRight"
tools:visibility="visible" />
</LinearLayout>
</com.sap.sailing.racecommittee.app.ui.layouts.TimePanelHeaderLayout>
</RelativeLayout>
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.sap.sailing.racecommittee.app.ui.layouts.TimePanelHeaderLayout
android:id="@+id/race_content_header"
@@ -29,14 +29,14 @@
android:gravity="center"
android:textColor="?attr/white"
android:textSize="@dimen/textSize_40"
tools:text="@string/time"/>
tools:text="@string/time" />
<ImageView
android:id="@+id/time_marker"
android:layout_width="match_parent"
android:layout_height="@dimen/thin_line"
android:layout_alignParentBottom="true"
android:src="?attr/marker"/>
android:src="?attr/marker" />
<RelativeLayout
android:layout_width="wrap_content"
@@ -59,7 +59,7 @@
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/linked_locked_area"
android:textAppearance="?attr/textSmall"
tools:text="@string/time_start"/>
tools:text="@string/time_start" />
<LinearLayout
android:id="@+id/linked_locked_area"
@@ -75,7 +75,7 @@
android:layout_height="wrap_content"
android:src="?attr/lock_outline"
android:visibility="gone"
tools:visibility="visible"/>
tools:visibility="visible" />
<ImageView
android:id="@+id/linked_race"
@@ -84,7 +84,7 @@
android:layout_gravity="center_vertical"
android:src="?attr/link_24dp"
android:visibility="gone"
tools:visibility="visible"/>
tools:visibility="visible" />
</LinearLayout>
</RelativeLayout>
@@ -107,7 +107,7 @@
android:textAppearance="?attr/textSmall"
android:visibility="invisible"
tools:text="@string/time"
tools:visibility="visible"/>
tools:visibility="visible" />
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
@@ -124,7 +124,8 @@
app:captionPosition="bottom"
app:imageSize="64dp"
app:linePosition="left"
tools:visibility="visible"/>
app:warningSignPosition="topRight"
tools:visibility="visible" />
</LinearLayout>
</com.sap.sailing.racecommittee.app.ui.layouts.TimePanelHeaderLayout>
</RelativeLayout>
@@ -32,9 +32,17 @@
<enum name="bottom" value="1" />
</attr>
<attr name="imageSize" format="reference|dimension"/>
<attr name="imageSize" format="reference|dimension" />
<attr name="showLock" format="boolean" />
<attr name="warningSignPosition" format="enum">
<enum name="none" value="-1" />
<enum name="topLeft" value="0" />
<enum name="topRight" value="1" />
<enum name="bottomRight" value="2" />
<enum name="bottomLeft" value="3" />
</attr>
</declare-styleable>
</resources>
@@ -14,6 +14,7 @@ import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.util.BitmapHelper;
import com.sap.sailing.android.shared.util.BroadcastManager;
import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinderResult;
import com.sap.sailing.domain.abstractlog.race.state.RaceState;
@@ -193,6 +194,10 @@ public class ManagedRaceListAdapter extends ArrayAdapter<RaceListDataType> imple
holder.race_name.setText(RaceHelper.getReverseRaceFleetName(race.getRace()));
RaceState state = race.getRace().getState();
if (state != null) {
CompetitorResults results = state.getConfirmedFinishPositioningList();
if (results != null) {
holder.warning_sign.setVisibility(results.hasConflicts() ? View.VISIBLE : View.GONE);
}
if (state.getStartTime() != null) {
int startRes = R.string.race_started;
if (state.getFinishedTime() == null) {
@@ -390,6 +395,9 @@ public class ManagedRaceListAdapter extends ArrayAdapter<RaceListDataType> imple
if (holder.explicit_factor != null) {
holder.explicit_factor.setVisibility(View.GONE);
}
if (holder.warning_sign != null) {
holder.warning_sign.setVisibility(View.GONE);
}
holder.setMarker(0);
}
@@ -513,6 +521,7 @@ public class ManagedRaceListAdapter extends ArrayAdapter<RaceListDataType> imple
/* package */ ImageView has_dependent_races;
/* package */ TextView depends_on;
/* package */ TextView explicit_factor;
/* package */ ImageView warning_sign;
/* package */ void findViews(View layout) {
panel_left = ViewHelper.get(layout, R.id.panel_left);
@@ -534,6 +543,7 @@ public class ManagedRaceListAdapter extends ArrayAdapter<RaceListDataType> imple
has_dependent_races = ViewHelper.get(layout, R.id.has_dependent_races);
depends_on = ViewHelper.get(layout, R.id.depends_on);
explicit_factor = ViewHelper.get(layout, R.id.explicit_factor);
warning_sign = ViewHelper.get(layout, R.id.warning_sign);
}
/* package */ void showFlag(LayerDrawable flag, Drawable arrow, String timer) {
@@ -1,5 +1,13 @@
package com.sap.sailing.racecommittee.app.ui.fragments.panels;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.PhotoListFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.TrackingListFragment;
import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -12,15 +20,9 @@ import android.support.v4.content.LocalBroadcastManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
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.R;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.PhotoListFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.TrackingListFragment;
public class FinishedButtonFragment extends BasePanelFragment {
private final static String TAG = FinishedButtonFragment.class.getName();
@@ -32,6 +34,7 @@ public class FinishedButtonFragment extends BasePanelFragment {
private View mPhotoLock;
private RelativeLayout mList;
private View mListLock;
private ImageView mWarning;
public FinishedButtonFragment() {
mReceiver = new IntentReceiver();
@@ -78,6 +81,8 @@ public class FinishedButtonFragment extends BasePanelFragment {
}
mListLock = ViewHelper.get(layout, R.id.list_lock);
mWarning = ViewHelper.get(layout, R.id.warning_sign);
return layout;
}
@@ -94,6 +99,11 @@ public class FinishedButtonFragment extends BasePanelFragment {
if (!preferences.getRacingProcedureIsResultEntryEnabled(getRaceState().getRacingProcedure().getType())) {
mList.setVisibility(View.GONE);
} else {
CompetitorResults results = getRaceState().getConfirmedFinishPositioningList();
if (results != null) {
mWarning.setVisibility(results.hasConflicts() ? View.VISIBLE : View.GONE);
}
}
}
@@ -158,7 +168,8 @@ public class FinishedButtonFragment extends BasePanelFragment {
break;
case LEVEL_TOGGLED:
replaceFragment(PhotoListFragment.newInstance(getRecentArguments()), getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content, true));
replaceFragment(PhotoListFragment
.newInstance(getRecentArguments()), getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content, true));
break;
default:
@@ -181,7 +192,8 @@ public class FinishedButtonFragment extends BasePanelFragment {
break;
case LEVEL_TOGGLED:
replaceFragment(TrackingListFragment.newInstance(getRecentArguments(), 0), getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content, true));
replaceFragment(TrackingListFragment
.newInstance(getRecentArguments(), 0), getFrameId(getActivity(), R.id.finished_edit, R.id.finished_content, true));
break;
default:
@@ -6,6 +6,7 @@ import java.text.SimpleDateFormat;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.domain.abstractlog.race.CompetitorResults;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinderResult;
import com.sap.sailing.domain.abstractlog.race.state.ReadonlyRaceState;
@@ -105,10 +106,11 @@ public class TimePanelFragment extends BasePanelFragment {
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (preferences.getRacingProcedureIsResultEntryEnabled(getRace().getState().getRacingProcedure().getType())) {
if (preferences.getRacingProcedureIsResultEntryEnabled(getRaceState().getRacingProcedure().getType())) {
mClickListener = new CompetitorPanelClick();
mCompetitorList.setListener(mClickListener);
mCompetitorList.setVisibility(View.VISIBLE);
checkWarnings(getRaceState());
}
}
@@ -249,6 +251,15 @@ public class TimePanelFragment extends BasePanelFragment {
}
}
private void checkWarnings(ReadonlyRaceState state) {
CompetitorResults results = state.getConfirmedFinishPositioningList();
if (results != null) {
mCompetitorList.showWarningSign(results.hasConflicts());
} else {
mCompetitorList.showWarningSign(false);
}
}
private class RaceStateChangedListener extends BaseRaceStateChangedListener {
@Override
@@ -267,6 +278,20 @@ public class TimePanelFragment extends BasePanelFragment {
mLinkedRace = null;
}
@Override
public void onFinishingPositioningsChanged(ReadonlyRaceState state) {
super.onFinishingPositioningsChanged(state);
checkWarnings(state);
}
@Override
public void onFinishingPositionsConfirmed(ReadonlyRaceState state) {
super.onFinishingPositionsConfirmed(state);
checkWarnings(state);
}
}
private class RaceHeaderClick implements View.OnClickListener, DialogInterface.OnClickListener {
@@ -1,5 +1,9 @@
package com.sap.sailing.racecommittee.app.ui.views;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.utils.TouchEventListener;
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.TypedArray;
@@ -17,10 +21,6 @@ import android.widget.RelativeLayout;
import android.widget.Switch;
import android.widget.TextView;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.utils.TouchEventListener;
import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
public class PanelButton extends FrameLayout implements DialogInterface.OnClickListener {
public final static int LEVEL_UNKNOWN = -1;
@@ -85,6 +85,7 @@ public class PanelButton extends FrameLayout implements DialogInterface.OnClickL
private ImageView mMarker;
private View mLine;
private ImageView mWarningSign;
private PanelType mType;
private CaptionPosition mCaptionPosition;
@@ -167,6 +168,9 @@ public class PanelButton extends FrameLayout implements DialogInterface.OnClickL
setLinePosition(a.getInt(R.styleable.PanelButton_linePosition, -1));
mWarningSign = (ImageView) findViewById(R.id.warning_sign);
setWarningSignPosition(a.getInt(R.styleable.PanelButton_warningSignPosition, -1));
a.recycle();
setMarkerLevel(LEVEL_NORMAL);
@@ -306,6 +310,39 @@ public class PanelButton extends FrameLayout implements DialogInterface.OnClickL
}
}
private void setWarningSignPosition(int position) {
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(mWarningSign.getLayoutParams());
switch (position) {
case 0: // top left
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
break;
case 1: // top right
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
break;
case 2: // bottom right
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
break;
case 3: // bottom left
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
break;
default:
break;
}
mWarningSign.setLayoutParams(params);
}
public void showWarningSign(boolean show) {
mWarningSign.setVisibility(show ? VISIBLE : GONE);
}
private void hideValues() {
if (mValue != null) {
mValue.setVisibility(GONE);