mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2025-02-02 21:17:32 +01:00
Make Sports Activities list use Activity List style
This commit is contained in:
parent
7c374181dc
commit
f60ba212c6
@ -22,13 +22,13 @@ import android.widget.ListView;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.adapter.AbstractItemAdapter;
|
import nodomain.freeyourgadget.gadgetbridge.adapter.AbstractActivityListingAdapter;
|
||||||
|
|
||||||
public abstract class AbstractListActivity<T> extends AbstractGBActivity {
|
public abstract class AbstractListActivity<T> extends AbstractGBActivity {
|
||||||
private AbstractItemAdapter<T> itemAdapter;
|
private AbstractActivityListingAdapter<T> itemAdapter;
|
||||||
private ListView itemListView;
|
private ListView itemListView;
|
||||||
|
|
||||||
public void setItemAdapter(AbstractItemAdapter<T> itemAdapter) {
|
public void setItemAdapter(AbstractActivityListingAdapter<T> itemAdapter) {
|
||||||
this.itemAdapter = itemAdapter;
|
this.itemAdapter = itemAdapter;
|
||||||
itemListView.setAdapter(itemAdapter);
|
itemListView.setAdapter(itemAdapter);
|
||||||
}
|
}
|
||||||
@ -61,7 +61,7 @@ public abstract class AbstractListActivity<T> extends AbstractGBActivity {
|
|||||||
this.itemAdapter.setDeviceFilter(device);
|
this.itemAdapter.setDeviceFilter(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractItemAdapter<T> getItemAdapter() {
|
public AbstractActivityListingAdapter<T> getItemAdapter() {
|
||||||
return itemAdapter;
|
return itemAdapter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ import android.content.Intent;
|
|||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Color;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.SparseBooleanArray;
|
import android.util.SparseBooleanArray;
|
||||||
@ -268,6 +269,7 @@ public class ActivitySummariesActivity extends AbstractListActivity<BaseActivity
|
|||||||
ActivitySummariesAdapter activitySummariesAdapter = new ActivitySummariesAdapter(this, mGBDevice, activityFilter, dateFromFilter, dateToFilter, nameContainsFilter, deviceFilter, itemsFilter);
|
ActivitySummariesAdapter activitySummariesAdapter = new ActivitySummariesAdapter(this, mGBDevice, activityFilter, dateFromFilter, dateToFilter, nameContainsFilter, deviceFilter, itemsFilter);
|
||||||
int backgroundColor = getBackgroundColor(ActivitySummariesActivity.this);
|
int backgroundColor = getBackgroundColor(ActivitySummariesActivity.this);
|
||||||
activitySummariesAdapter.setBackgroundColor(backgroundColor);
|
activitySummariesAdapter.setBackgroundColor(backgroundColor);
|
||||||
|
activitySummariesAdapter.setShowTime(false);
|
||||||
setItemAdapter(activitySummariesAdapter);
|
setItemAdapter(activitySummariesAdapter);
|
||||||
|
|
||||||
getItemListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
getItemListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||||
|
@ -15,15 +15,30 @@ public class ActivityListingAdapter extends AbstractActivityListingAdapter<StepA
|
|||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getDateLabel(StepAnalysis.StepSession item) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasGPS(StepAnalysis.StepSession item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasDate(StepAnalysis.StepSession item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getTimeFrom(StepAnalysis.StepSession item) {
|
protected String getTimeFrom(StepAnalysis.StepSession item) {
|
||||||
Date time = item.getStepStart();
|
Date time = item.getStartTime();
|
||||||
return DateTimeUtils.formatTime(time.getHours(), time.getMinutes());
|
return DateTimeUtils.formatTime(time.getHours(), time.getMinutes());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getTimeTo(StepAnalysis.StepSession item) {
|
protected String getTimeTo(StepAnalysis.StepSession item) {
|
||||||
Date time = item.getStepEnd();
|
Date time = item.getEndTime();
|
||||||
return DateTimeUtils.formatTime(time.getHours(), time.getMinutes());
|
return DateTimeUtils.formatTime(time.getHours(), time.getMinutes());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,7 +79,7 @@ public class ActivityListingAdapter extends AbstractActivityListingAdapter<StepA
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getDurationLabel(StepAnalysis.StepSession item) {
|
protected String getDurationLabel(StepAnalysis.StepSession item) {
|
||||||
long duration = item.getStepEnd().getTime() - item.getStepStart().getTime();
|
long duration = item.getEndTime().getTime() - item.getStartTime().getTime();
|
||||||
return DateTimeUtils.formatDurationHoursMinutes(duration, TimeUnit.MILLISECONDS);
|
return DateTimeUtils.formatDurationHoursMinutes(duration, TimeUnit.MILLISECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,10 +110,19 @@ public class ActivityListingAdapter extends AbstractActivityListingAdapter<StepA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasSteps(StepAnalysis.StepSession item) {
|
||||||
|
if (item.getSteps() > 0) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getIcon(StepAnalysis.StepSession item) {
|
protected int getIcon(StepAnalysis.StepSession item) {
|
||||||
int activityKind = item.getActivityKind();
|
return ActivityKind.getIconId(item.getActivityKind());
|
||||||
return ActivityKind.getIconId(activityKind);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -168,19 +168,19 @@ public class StepAnalysis {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static class StepSession {
|
public static class StepSession {
|
||||||
private final Date stepStart;
|
private final Date startTime;
|
||||||
private final Date stepEnd;
|
private final Date endTime;
|
||||||
private final int steps;
|
private final int steps;
|
||||||
private final int heartRateAverage;
|
private final int heartRateAverage;
|
||||||
private final float intensity;
|
private final float intensity;
|
||||||
private final float distance;
|
private final float distance;
|
||||||
private final int activityKind;
|
private final int activityKind;
|
||||||
|
|
||||||
StepSession(Date stepStart,
|
StepSession(Date startTime,
|
||||||
Date stepEnd,
|
Date endTime,
|
||||||
int steps, int heartRateAverage, float intensity, float distance, int activityKind) {
|
int steps, int heartRateAverage, float intensity, float distance, int activityKind) {
|
||||||
this.stepStart = stepStart;
|
this.startTime = startTime;
|
||||||
this.stepEnd = stepEnd;
|
this.endTime = endTime;
|
||||||
this.steps = steps;
|
this.steps = steps;
|
||||||
this.heartRateAverage = heartRateAverage;
|
this.heartRateAverage = heartRateAverage;
|
||||||
this.intensity = intensity;
|
this.intensity = intensity;
|
||||||
@ -188,12 +188,12 @@ public class StepAnalysis {
|
|||||||
this.activityKind = activityKind;
|
this.activityKind = activityKind;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getStepStart() {
|
public Date getStartTime() {
|
||||||
return stepStart;
|
return startTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Date getStepEnd() {
|
public Date getEndTime() {
|
||||||
return stepEnd;
|
return endTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSteps() {
|
public int getSteps() {
|
||||||
|
@ -45,6 +45,8 @@ public abstract class AbstractActivityListingAdapter<T> extends ArrayAdapter<T>
|
|||||||
private final List<T> items;
|
private final List<T> items;
|
||||||
private int backgroundColor = 0;
|
private int backgroundColor = 0;
|
||||||
private int alternateColor = 0;
|
private int alternateColor = 0;
|
||||||
|
private boolean zebraStripes = true;
|
||||||
|
private boolean showTime = true;
|
||||||
|
|
||||||
public AbstractActivityListingAdapter(Context context) {
|
public AbstractActivityListingAdapter(Context context) {
|
||||||
this(context, new ArrayList<T>());
|
this(context, new ArrayList<T>());
|
||||||
@ -74,22 +76,28 @@ public abstract class AbstractActivityListingAdapter<T> extends ArrayAdapter<T>
|
|||||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
view = inflater.inflate(R.layout.activity_list_item, parent, false);
|
view = inflater.inflate(R.layout.activity_list_item, parent, false);
|
||||||
}
|
}
|
||||||
TextView timeFrom = view.findViewById(R.id.line_layout_timeFrom);
|
TextView timeFrom = view.findViewById(R.id.line_layout_time_from);
|
||||||
TextView timeTo = view.findViewById(R.id.line_layout_timeTo);
|
TextView timeTo = view.findViewById(R.id.line_layout_time_to);
|
||||||
TextView activityName = view.findViewById(R.id.line_layout_activityName);
|
TextView activityName = view.findViewById(R.id.line_layout_activity_name);
|
||||||
TextView stepLabel = view.findViewById(R.id.line_layout_step_label);
|
TextView stepLabel = view.findViewById(R.id.line_layout_step_label);
|
||||||
TextView distanceLabel = view.findViewById(R.id.line_layout_distance_label);
|
TextView distanceLabel = view.findViewById(R.id.line_layout_distance_label);
|
||||||
TextView hrLabel = view.findViewById(R.id.line_layout_hr_label);
|
TextView hrLabel = view.findViewById(R.id.line_layout_hr_label);
|
||||||
TextView intensityLabel = view.findViewById(R.id.line_layout_intensity_label);
|
TextView intensityLabel = view.findViewById(R.id.line_layout_intensity_label);
|
||||||
TextView durationLabel = view.findViewById(R.id.line_layout_duration_labe);
|
TextView durationLabel = view.findViewById(R.id.line_layout_duration_label);
|
||||||
|
TextView dateLabel = view.findViewById(R.id.line_layout_date_label);
|
||||||
|
|
||||||
|
LinearLayout timeLayout = view.findViewById(R.id.line_layout_time);
|
||||||
LinearLayout hrLayout = view.findViewById(R.id.line_layout_hr);
|
LinearLayout hrLayout = view.findViewById(R.id.line_layout_hr);
|
||||||
|
LinearLayout stepsLayout = view.findViewById(R.id.line_layout_step);
|
||||||
LinearLayout distanceLayout = view.findViewById(R.id.line_layout_distance);
|
LinearLayout distanceLayout = view.findViewById(R.id.line_layout_distance);
|
||||||
LinearLayout intensityLayout = view.findViewById(R.id.line_layout_intensity);
|
LinearLayout intensityLayout = view.findViewById(R.id.line_layout_intensity);
|
||||||
|
LinearLayout dateLayout = view.findViewById(R.id.line_layout_date);
|
||||||
|
LinearLayout list_item_subparent_layout = view.findViewById(R.id.list_item_subparent_layout);
|
||||||
|
|
||||||
RelativeLayout parentLayout = view.findViewById(R.id.list_item_parent_layout);
|
RelativeLayout parentLayout = view.findViewById(R.id.list_item_parent_layout);
|
||||||
|
|
||||||
ImageView activityIcon = view.findViewById(R.id.line_layout_activityIcon);
|
ImageView activityIcon = view.findViewById(R.id.line_layout_activity_icon);
|
||||||
|
ImageView gpsIcon = view.findViewById(R.id.line_layout_gps_icon);
|
||||||
|
|
||||||
timeFrom.setText(getTimeFrom(item));
|
timeFrom.setText(getTimeFrom(item));
|
||||||
timeTo.setText(getTimeTo(item));
|
timeTo.setText(getTimeTo(item));
|
||||||
@ -99,6 +107,8 @@ public abstract class AbstractActivityListingAdapter<T> extends ArrayAdapter<T>
|
|||||||
hrLabel.setText(getHrLabel(item));
|
hrLabel.setText(getHrLabel(item));
|
||||||
intensityLabel.setText(getIntensityLabel(item));
|
intensityLabel.setText(getIntensityLabel(item));
|
||||||
durationLabel.setText(getDurationLabel(item));
|
durationLabel.setText(getDurationLabel(item));
|
||||||
|
dateLabel.setText(getDateLabel(item));
|
||||||
|
|
||||||
|
|
||||||
if (!hasHR(item)) {
|
if (!hasHR(item)) {
|
||||||
hrLayout.setVisibility(View.GONE);
|
hrLayout.setVisibility(View.GONE);
|
||||||
@ -118,15 +128,44 @@ public abstract class AbstractActivityListingAdapter<T> extends ArrayAdapter<T>
|
|||||||
distanceLayout.setVisibility(View.VISIBLE);
|
distanceLayout.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!hasSteps(item)) {
|
||||||
|
stepsLayout.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
stepsLayout.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasDate(item)) {
|
||||||
|
dateLayout.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
dateLayout.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!showTime) {
|
||||||
|
timeLayout.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
timeLayout.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hasGPS(item)) {
|
||||||
|
gpsIcon.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
gpsIcon.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
activityIcon.setImageResource(getIcon(item));
|
activityIcon.setImageResource(getIcon(item));
|
||||||
|
|
||||||
if (position % 2 == 0) {
|
if (zebraStripes && position % 2 == 0) {
|
||||||
parentLayout.setBackgroundColor(alternateColor);
|
parentLayout.setBackgroundColor(alternateColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected abstract String getDateLabel(T item);
|
||||||
|
|
||||||
|
protected abstract boolean hasGPS(T item);
|
||||||
|
|
||||||
|
protected abstract boolean hasDate(T item);
|
||||||
|
|
||||||
protected abstract String getTimeFrom(T item);
|
protected abstract String getTimeFrom(T item);
|
||||||
|
|
||||||
protected abstract String getTimeTo(T item);
|
protected abstract String getTimeTo(T item);
|
||||||
@ -149,6 +188,16 @@ public abstract class AbstractActivityListingAdapter<T> extends ArrayAdapter<T>
|
|||||||
|
|
||||||
protected abstract boolean hasDistance(T item);
|
protected abstract boolean hasDistance(T item);
|
||||||
|
|
||||||
|
protected abstract boolean hasSteps(T item);
|
||||||
|
|
||||||
|
public void setZebraStripes(boolean enable) {
|
||||||
|
zebraStripes = enable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShowTime(boolean enable) {
|
||||||
|
showTime = enable;
|
||||||
|
}
|
||||||
|
|
||||||
@DrawableRes
|
@DrawableRes
|
||||||
protected abstract int getIcon(T item);
|
protected abstract int getIcon(T item);
|
||||||
|
|
||||||
@ -167,4 +216,22 @@ public abstract class AbstractActivityListingAdapter<T> extends ArrayAdapter<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setActivityKindFilter(int activityKind) {
|
||||||
|
this.setActivityKindFilter(activityKind);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDateFromFilter(long date) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDateToFilter(long date) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNameContainsFilter(String name) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setItemsFilter(List items) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeviceFilter(long device) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,24 +61,7 @@ public abstract class AbstractItemAdapter<T> extends ArrayAdapter<T> {
|
|||||||
this.horizontalAlignment = horizontalAlignment;
|
this.horizontalAlignment = horizontalAlignment;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setActivityKindFilter(int activityKind){
|
|
||||||
this.setActivityKindFilter(activityKind);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDateFromFilter(long date){
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDateToFilter(long date){
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNameContainsFilter(String name){
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setItemsFilter(List items) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeviceFilter(long device) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View getView(int position, View view, ViewGroup parent) {
|
public View getView(int position, View view, ViewGroup parent) {
|
||||||
|
@ -40,14 +40,15 @@ import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
|||||||
|
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.ActivitySummariesFilter.ALL_DEVICES;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.ActivitySummariesFilter.ALL_DEVICES;
|
||||||
|
|
||||||
public class ActivitySummariesAdapter extends AbstractItemAdapter<BaseActivitySummary> {
|
public class ActivitySummariesAdapter extends AbstractActivityListingAdapter<BaseActivitySummary> {
|
||||||
private final GBDevice device;
|
private final GBDevice device;
|
||||||
private int activityKindFilter;
|
long dateFromFilter = 0;
|
||||||
long dateFromFilter=0;
|
long dateToFilter = 0;
|
||||||
long dateToFilter=0;
|
|
||||||
long deviceFilter;
|
long deviceFilter;
|
||||||
String nameContainsFilter;
|
String nameContainsFilter;
|
||||||
List<Long>itemsFilter;
|
List<Long> itemsFilter;
|
||||||
|
private int activityKindFilter;
|
||||||
|
private int backgroundColor = 0;
|
||||||
|
|
||||||
public ActivitySummariesAdapter(Context context, GBDevice device, int activityKindFilter, long dateFromFilter, long dateToFilter, String nameContainsFilter, long deviceFilter, List itemsFilter) {
|
public ActivitySummariesAdapter(Context context, GBDevice device, int activityKindFilter, long dateFromFilter, long dateToFilter, String nameContainsFilter, long deviceFilter, List itemsFilter) {
|
||||||
super(context);
|
super(context);
|
||||||
@ -81,24 +82,24 @@ public class ActivitySummariesAdapter extends AbstractItemAdapter<BaseActivitySu
|
|||||||
dbDevice.getId())).orderDesc(BaseActivitySummaryDao.Properties.StartTime);
|
dbDevice.getId())).orderDesc(BaseActivitySummaryDao.Properties.StartTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activityKindFilter !=0) {
|
if (activityKindFilter != 0) {
|
||||||
qb.where(
|
qb.where(
|
||||||
BaseActivitySummaryDao.Properties.ActivityKind.eq(activityKindFilter));
|
BaseActivitySummaryDao.Properties.ActivityKind.eq(activityKindFilter));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dateFromFilter !=0) {
|
if (dateFromFilter != 0) {
|
||||||
qb.where(
|
qb.where(
|
||||||
BaseActivitySummaryDao.Properties.StartTime.gt(new Date(dateFromFilter)));
|
BaseActivitySummaryDao.Properties.StartTime.gt(new Date(dateFromFilter)));
|
||||||
}
|
}
|
||||||
if (dateToFilter !=0) {
|
if (dateToFilter != 0) {
|
||||||
qb.where(
|
qb.where(
|
||||||
BaseActivitySummaryDao.Properties.EndTime.lt(new Date(dateToFilter)));
|
BaseActivitySummaryDao.Properties.EndTime.lt(new Date(dateToFilter)));
|
||||||
}
|
}
|
||||||
if (nameContainsFilter !=null && nameContainsFilter.length() > 0) {
|
if (nameContainsFilter != null && nameContainsFilter.length() > 0) {
|
||||||
qb.where(
|
qb.where(
|
||||||
BaseActivitySummaryDao.Properties.Name.like("%" + nameContainsFilter + "%"));
|
BaseActivitySummaryDao.Properties.Name.like("%" + nameContainsFilter + "%"));
|
||||||
}
|
}
|
||||||
if (itemsFilter !=null) {
|
if (itemsFilter != null) {
|
||||||
qb.where(
|
qb.where(
|
||||||
BaseActivitySummaryDao.Properties.Id.in(itemsFilter));
|
BaseActivitySummaryDao.Properties.Id.in(itemsFilter));
|
||||||
}
|
}
|
||||||
@ -109,42 +110,36 @@ public class ActivitySummariesAdapter extends AbstractItemAdapter<BaseActivitySu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setActivityKindFilter(int filter){
|
public void setActivityKindFilter(int filter) {
|
||||||
this.activityKindFilter=filter;
|
this.activityKindFilter = filter;
|
||||||
}
|
}
|
||||||
public void setDateFromFilter(long date){
|
|
||||||
this.dateFromFilter=date;
|
|
||||||
}
|
|
||||||
public void setDateToFilter(long date){
|
|
||||||
this.dateToFilter=date;
|
|
||||||
}
|
|
||||||
public void setNameContainsFilter(String name){
|
|
||||||
this.nameContainsFilter=name;
|
|
||||||
}
|
|
||||||
public void setItemsFilter(List items) { this.itemsFilter = items; }
|
|
||||||
public void setDeviceFilter(long device) { this.deviceFilter = device; }
|
|
||||||
|
|
||||||
@Override
|
public void setDateFromFilter(long date) {
|
||||||
protected String getName(BaseActivitySummary item) {
|
this.dateFromFilter = date;
|
||||||
String name = item.getName();
|
}
|
||||||
if (name == null) name="";
|
|
||||||
String gpxTrack = item.getGpxTrack();
|
public void setDateToFilter(long date) {
|
||||||
String hasGps = " ";
|
this.dateToFilter = date;
|
||||||
if (gpxTrack != null) {
|
}
|
||||||
hasGps=" 🛰️ ";
|
|
||||||
}
|
public void setNameContainsFilter(String name) {
|
||||||
return ActivityKind.asString(item.getActivityKind(), getContext())+ hasGps + name;
|
this.nameContainsFilter = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setItemsFilter(List items) {
|
||||||
|
this.itemsFilter = items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeviceFilter(long device) {
|
||||||
|
this.deviceFilter = device;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getDetails(BaseActivitySummary item) {
|
protected String getDateLabel(BaseActivitySummary item) {
|
||||||
Date startTime = item.getStartTime();
|
Date startTime = item.getStartTime();
|
||||||
|
String separator = ",";
|
||||||
if (startTime != null) {
|
if (startTime != null) {
|
||||||
String activityDay;
|
String activityDay;
|
||||||
String activityTime;
|
|
||||||
String activityDayTime;
|
|
||||||
Long duration = item.getEndTime().getTime() - item.getStartTime().getTime();
|
|
||||||
|
|
||||||
if (DateUtils.isToday(startTime.getTime())) {
|
if (DateUtils.isToday(startTime.getTime())) {
|
||||||
activityDay = getContext().getString(R.string.activity_summary_today);
|
activityDay = getContext().getString(R.string.activity_summary_today);
|
||||||
@ -153,21 +148,103 @@ public class ActivitySummariesAdapter extends AbstractItemAdapter<BaseActivitySu
|
|||||||
} else {
|
} else {
|
||||||
activityDay = DateTimeUtils.formatDate(startTime);
|
activityDay = DateTimeUtils.formatDate(startTime);
|
||||||
}
|
}
|
||||||
Calendar calendar = Calendar.getInstance();
|
String activityTime = DateTimeUtils.formatTime(startTime.getHours(), startTime.getMinutes());
|
||||||
calendar.setTime(startTime);
|
return String.format("%s%s %s", activityDay, separator, activityTime);
|
||||||
int hours = calendar.get(Calendar.HOUR_OF_DAY);
|
|
||||||
int minutes = calendar.get(Calendar.MINUTE);
|
|
||||||
|
|
||||||
activityTime = DateTimeUtils.formatTime(hours, minutes);
|
|
||||||
activityDayTime = String.format("%s, %s", activityDay, activityTime);
|
|
||||||
|
|
||||||
return activityDayTime + " (" + DateTimeUtils.formatDurationHoursMinutes(duration, TimeUnit.MILLISECONDS) + ")";
|
|
||||||
}
|
}
|
||||||
return "Unknown time";
|
return "Unknown time";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasGPS(BaseActivitySummary item) {
|
||||||
|
if (item.getGpxTrack() != null) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasDate(BaseActivitySummary item) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTimeFrom(BaseActivitySummary item) {
|
||||||
|
Date time = item.getStartTime();
|
||||||
|
return DateTimeUtils.formatTime(time.getHours(), time.getMinutes());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getTimeTo(BaseActivitySummary item) {
|
||||||
|
Date time = item.getEndTime();
|
||||||
|
return DateTimeUtils.formatTime(time.getHours(), time.getMinutes());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getActivityName(BaseActivitySummary item) {
|
||||||
|
String activityLabel = item.getName();
|
||||||
|
String separator = ",";
|
||||||
|
if (activityLabel == null) {
|
||||||
|
activityLabel = "";
|
||||||
|
separator = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
String activityKindName = ActivityKind.asString(item.getActivityKind(), getContext());
|
||||||
|
return String.format("%s%s %s", activityKindName, separator, activityLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getStepLabel(BaseActivitySummary item) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getDistanceLabel(BaseActivitySummary item) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getHrLabel(BaseActivitySummary item) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getIntensityLabel(BaseActivitySummary item) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getDurationLabel(BaseActivitySummary item) {
|
||||||
|
Long duration = item.getEndTime().getTime() - item.getStartTime().getTime();
|
||||||
|
return DateTimeUtils.formatDurationHoursMinutes(duration, TimeUnit.MILLISECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasHR(BaseActivitySummary item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasIntensity(BaseActivitySummary item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasDistance(BaseActivitySummary item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean hasSteps(BaseActivitySummary item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getIcon(BaseActivitySummary item) {
|
protected int getIcon(BaseActivitySummary item) {
|
||||||
return ActivityKind.getIconId(item.getActivityKind());
|
return ActivityKind.getIconId(item.getActivityKind());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setBackgroundColor(int backgroundColor) {
|
||||||
|
this.backgroundColor = backgroundColor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
5
app/src/main/res/drawable/list_selector.xml
Normal file
5
app/src/main/res/drawable/list_selector.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:drawable="@drawable/selected" android:state_activated="true" />
|
||||||
|
</selector>
|
@ -3,16 +3,20 @@
|
|||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:id="@+id/list_item_parent_layout"
|
android:id="@+id/list_item_parent_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content">
|
||||||
android:background="?android:attr/activatedBackgroundIndicator">
|
<!--
|
||||||
|
android:background="?android:attr/activatedBackgroundIndicator"
|
||||||
|
-->
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:id="@+id/list_item_subparent_layout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="5dp"
|
android:layout_marginStart="5dp"
|
||||||
android:layout_marginTop="5dp"
|
android:layout_marginTop="5dp"
|
||||||
android:layout_marginEnd="5dp"
|
android:layout_marginEnd="5dp"
|
||||||
android:layout_marginBottom="5dp"
|
android:layout_marginBottom="5dp"
|
||||||
|
android:background="@drawable/list_selector"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@ -21,12 +25,13 @@
|
|||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:id="@+id/line_layout_time"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/line_layout_timeFrom"
|
android:id="@+id/line_layout_time_from"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="end"
|
android:layout_gravity="end"
|
||||||
@ -35,9 +40,9 @@
|
|||||||
android:text="14:30" />
|
android:text="14:30" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/line_layout_timeTo"
|
android:id="@+id/line_layout_time_to"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="0dp"
|
||||||
android:layout_gravity="end"
|
android:layout_gravity="end"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
@ -53,7 +58,7 @@
|
|||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/line_layout_activityIcon"
|
android:id="@+id/line_layout_activity_icon"
|
||||||
android:layout_width="56dp"
|
android:layout_width="56dp"
|
||||||
android:layout_height="56dp"
|
android:layout_height="56dp"
|
||||||
android:layout_marginTop="4dp"
|
android:layout_marginTop="4dp"
|
||||||
@ -70,7 +75,7 @@
|
|||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/line_layout_activityName"
|
android:id="@+id/line_layout_activity_name"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
@ -78,17 +83,35 @@
|
|||||||
android:text="Running"
|
android:text="Running"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<TextView
|
<LinearLayout
|
||||||
android:id="@+id/line_layout_duration_labe"
|
android:id="@+id/line_layout_duration_gps"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="2dp"
|
android:layout_gravity="start"
|
||||||
android:layout_marginEnd="2dp"
|
android:gravity="start"
|
||||||
android:layout_weight="1"
|
android:orientation="horizontal">
|
||||||
android:gravity="end"
|
|
||||||
android:maxLines="1"
|
<TextView
|
||||||
android:scrollHorizontally="false"
|
android:id="@+id/line_layout_duration_label"
|
||||||
android:text="25min" />
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="2dp"
|
||||||
|
android:layout_marginEnd="2dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:scrollHorizontally="false"
|
||||||
|
android:text="25min" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/line_layout_gps_icon"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:contentDescription="@string/candidate_item_device_image"
|
||||||
|
app:srcCompat="@android:drawable/ic_menu_mylocation" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -192,7 +215,7 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/line_layout_hr"
|
android:id="@+id/line_layout_hr"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:layout_gravity="start"
|
android:layout_gravity="start"
|
||||||
android:gravity="start"
|
android:gravity="start"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
@ -220,6 +243,37 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/line_layout_date"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="start"
|
||||||
|
android:gravity="start"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
<!--
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/line_layout_date_icon"
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:layout_gravity="start"
|
||||||
|
android:contentDescription="@string/candidate_item_device_image"
|
||||||
|
app:srcCompat="@drawable/ic_calendar_today" />
|
||||||
|
-->
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/line_layout_date_label"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="start"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="start"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:scrollHorizontally="false"
|
||||||
|
android:text="1.1.1973" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -35,4 +35,6 @@
|
|||||||
<color name="alternate_row_background_light">#FFEDEDED</color>
|
<color name="alternate_row_background_light">#FFEDEDED</color>
|
||||||
<color name="alternate_row_background_dark">#545254</color>
|
<color name="alternate_row_background_dark">#545254</color>
|
||||||
|
|
||||||
|
<drawable name="selected">@color/accent</drawable>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
Loading…
x
Reference in New Issue
Block a user