package nodomain.freeyourgadget.gadgetbridge.model;
|
|
import android.content.Context;
|
import android.content.res.Resources;
|
import android.text.format.DateUtils;
|
import android.util.TypedValue;
|
import android.view.View;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.RelativeLayout;
|
import android.widget.TextView;
|
|
import androidx.annotation.Nullable;
|
import androidx.core.content.ContextCompat;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import java.text.DecimalFormat;
|
import java.util.Date;
|
import java.util.concurrent.TimeUnit;
|
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
|
import nodomain.freeyourgadget.gadgetbridge.util.FormatUtils;
|
|
public class ActivityListItem {
|
private final View rootView;
|
private final TextView timeFromView;
|
private final TextView timeToView;
|
private final TextView activityName;
|
private final TextView activityLabelText;
|
private final TextView stepLabel;
|
private final TextView distanceLabel;
|
private final TextView hrLabel;
|
private final TextView intensityLabel;
|
private final TextView durationLabel;
|
private final TextView dateLabel;
|
private final LinearLayout timeLayout;
|
private final LinearLayout hrLayout;
|
private final LinearLayout stepsLayout;
|
private final LinearLayout distanceLayout;
|
private final LinearLayout intensityLayout;
|
private final RelativeLayout parentLayout;
|
private final ImageView activityIcon;
|
private final ImageView gpsIcon;
|
|
private final int backgroundColor;
|
private final int alternateColor;
|
private final int selectedColor;
|
|
public ActivityListItem(final View itemView) {
|
this.rootView = itemView;
|
|
this.timeFromView = itemView.findViewById(R.id.line_layout_time_from);
|
this.timeToView = itemView.findViewById(R.id.line_layout_time_to);
|
this.activityName = itemView.findViewById(R.id.line_layout_activity_name);
|
this.activityLabelText = itemView.findViewById(R.id.line_layout_activity_label);
|
this.stepLabel = itemView.findViewById(R.id.line_layout_step_label);
|
this.distanceLabel = itemView.findViewById(R.id.line_layout_distance_label);
|
this.hrLabel = itemView.findViewById(R.id.line_layout_hr_label);
|
this.intensityLabel = itemView.findViewById(R.id.line_layout_intensity_label);
|
this.durationLabel = itemView.findViewById(R.id.line_layout_duration_label);
|
this.dateLabel = itemView.findViewById(R.id.line_layout_date_label);
|
|
this.timeLayout = itemView.findViewById(R.id.line_layout_time);
|
this.hrLayout = itemView.findViewById(R.id.line_layout_hr);
|
this.stepsLayout = itemView.findViewById(R.id.line_layout_step);
|
this.distanceLayout = itemView.findViewById(R.id.line_layout_distance);
|
this.intensityLayout = itemView.findViewById(R.id.line_layout_intensity);
|
|
this.parentLayout = itemView.findViewById(R.id.list_item_parent_layout);
|
|
this.activityIcon = itemView.findViewById(R.id.line_layout_activity_icon);
|
this.gpsIcon = itemView.findViewById(R.id.line_layout_gps_icon);
|
|
this.backgroundColor = 0;
|
this.alternateColor = getThemedColor(itemView.getContext(), R.attr.alternate_row_background);
|
this.selectedColor = ContextCompat.getColor(itemView.getContext(), R.color.accent);
|
}
|
|
public void update(@Nullable final Date timeFrom,
|
@Nullable final Date timeTo,
|
final ActivityKind activityKind,
|
@Nullable final String activityLabel,
|
final int steps,
|
final float distance,
|
final int heartRate,
|
final float intensity,
|
final long duration,
|
final boolean hasGps,
|
@Nullable final Date date,
|
final boolean zebraStripe,
|
final boolean selected) {
|
final String activityKindLabel = activityKind.getLabel(activityName.getContext());
|
if (StringUtils.isNotBlank(activityLabel)) {
|
activityLabelText.setText(String.format("%s", activityKindLabel));
|
activityName.setText(String.format("%s", activityLabel));
|
} else {
|
activityLabelText.setVisibility(View.GONE);
|
activityName.setText(String.format("%s", activityKindLabel));
|
}
|
durationLabel.setText(DateTimeUtils.formatDurationHoursMinutes(duration, TimeUnit.MILLISECONDS));
|
|
if (heartRate > 0) {
|
hrLabel.setText(String.valueOf(heartRate));
|
hrLayout.setVisibility(View.VISIBLE);
|
} else {
|
hrLayout.setVisibility(View.GONE);
|
}
|
|
if (intensity >= 0) {
|
final DecimalFormat df = new DecimalFormat("###");
|
intensityLabel.setText(df.format(intensity));
|
intensityLayout.setVisibility(View.VISIBLE);
|
} else {
|
intensityLayout.setVisibility(View.GONE);
|
}
|
|
if (distance > 0) {
|
distanceLabel.setText(FormatUtils.getFormattedDistanceLabel(distance));
|
distanceLayout.setVisibility(View.VISIBLE);
|
} else {
|
distanceLayout.setVisibility(View.GONE);
|
}
|
|
if (steps > 0) {
|
stepLabel.setText(String.valueOf(steps));
|
stepsLayout.setVisibility(View.VISIBLE);
|
} else {
|
stepsLayout.setVisibility(View.GONE);
|
}
|
|
if (date != null) {
|
dateLabel.setText(DateTimeUtils.formatDateTimeRelative(rootView.getContext(), date));
|
dateLabel.setVisibility(View.VISIBLE);
|
} else {
|
dateLabel.setVisibility(View.GONE);
|
}
|
|
if (timeFrom != null && timeTo != null) {
|
timeFromView.setText(DateTimeUtils.formatTime(timeFrom.getHours(), timeFrom.getMinutes()));
|
timeToView.setText(DateTimeUtils.formatTime(timeTo.getHours(), timeTo.getMinutes()));
|
timeLayout.setVisibility(View.VISIBLE);
|
} else {
|
timeLayout.setVisibility(View.GONE);
|
}
|
|
if (hasGps) {
|
gpsIcon.setVisibility(View.VISIBLE);
|
} else {
|
gpsIcon.setVisibility(View.GONE);
|
}
|
|
activityIcon.setImageResource(activityKind.getIcon());
|
|
if (parentLayout != null) {
|
if (selected) {
|
parentLayout.setBackgroundColor(selectedColor);
|
} else {
|
parentLayout.setBackgroundColor(backgroundColor);
|
}
|
}
|
}
|
|
public static int getThemedColor(Context context, int resid) {
|
TypedValue typedValue = new TypedValue();
|
Resources.Theme theme = context.getTheme();
|
theme.resolveAttribute(resid, typedValue, true);
|
return typedValue.data;
|
}
|
}
|