Prevent charts date in the future, documentation and cleanup
This commit is contained in:
parent
b4e34db1d2
commit
e1c02cc373
|
@ -40,10 +40,28 @@ import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample;
|
|||
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
|
||||
|
||||
/**
|
||||
* A base class fragment to be used with ChartsActivity. The fragment can supply
|
||||
* a title to be displayed in the activity by returning non-null in #getTitle()
|
||||
* Broadcast events can be received by overriding #onReceive(Context,Intent).
|
||||
* The chart can be refreshed by calling #refresh()
|
||||
* Implement refreshInBackground(DBHandler, GBDevice) to fetch the samples from the DB,
|
||||
* and add the samples to the chart. The actual rendering, which must be performed in the UI
|
||||
* thread, must be done in #renderCharts().
|
||||
* Access functionality of the hosting activity with #getHost()
|
||||
*
|
||||
* The hosting ChartsHost activity provides a section for displaying a date or date range
|
||||
* being the basis for the chart, as well as two buttons for moving backwards and forward
|
||||
* in time. The date is held by the activity, so that it can be shared by multiple chart
|
||||
* fragments. It is still the responsibility of the (currently visible) chart fragment
|
||||
* to set the desired date in the ChartsActivity via #setDateRange(Date,Date).
|
||||
* The default implementations #handleDatePrev(Date,Date) and #handleDateNext(Date,Date)
|
||||
* shift the date by one day.
|
||||
*/
|
||||
public abstract class AbstractChartFragment extends AbstractGBFragment {
|
||||
protected int ANIM_TIME = 350;
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ActivitySleepChartFragment.class);
|
||||
private static final Logger LOG = LoggerFactory.getLogger(AbstractChartFragment.class);
|
||||
|
||||
private final Set<String> mIntentFilterActions;
|
||||
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
|
||||
|
@ -102,43 +120,6 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
|
|||
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, filter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHiddenChanged(boolean hidden) {
|
||||
super.onHiddenChanged(hidden);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
// View view = super.onCreateView(inflater, container, savedInstanceState);
|
||||
// updateDateInfo(mStartDate, mEndDate);
|
||||
// return view;
|
||||
// }
|
||||
|
||||
private void setStartDate(Date date) {
|
||||
getHost().setStartDate(date);
|
||||
}
|
||||
|
@ -186,16 +167,32 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Default implementation shifts the dates by one day, if visible
|
||||
* and calls #refreshIfVisible().
|
||||
* @param startDate
|
||||
* @param endDate
|
||||
*/
|
||||
protected void handleDatePrev(Date startDate, Date endDate) {
|
||||
if (isVisibleInActivity()) {
|
||||
shiftDates(startDate, endDate, -1);
|
||||
if (!shiftDates(startDate, endDate, -1)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
refreshIfVisible();
|
||||
}
|
||||
|
||||
/**
|
||||
* Default implementation shifts the dates by one day, if visible
|
||||
* and calls #refreshIfVisible().
|
||||
* @param startDate
|
||||
* @param endDate
|
||||
*/
|
||||
protected void handleDateNext(Date startDate, Date endDate) {
|
||||
if (isVisibleInActivity()) {
|
||||
shiftDates(startDate, endDate, +1);
|
||||
if (!shiftDates(startDate, endDate, +1)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
refreshIfVisible();
|
||||
}
|
||||
|
@ -208,11 +205,18 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
|
|||
}
|
||||
}
|
||||
|
||||
protected void shiftDates(Date startDate, Date endDate, int offset) {
|
||||
/**
|
||||
* Shifts the given dates by offset days. offset may be positive or negative.
|
||||
* @param startDate
|
||||
* @param endDate
|
||||
* @param offset a positive or negative number of days to shift the dates
|
||||
* @return true if the shift was successful and false otherwise
|
||||
*/
|
||||
protected boolean shiftDates(Date startDate, Date endDate, int offset) {
|
||||
Date newStart = DateTimeUtils.shiftByDays(startDate, offset);
|
||||
Date newEnd = DateTimeUtils.shiftByDays(endDate, offset);
|
||||
|
||||
setDateRange(newStart, newEnd);
|
||||
return setDateRange(newStart, newEnd);
|
||||
}
|
||||
|
||||
protected Integer getColorFor(int activityKind) {
|
||||
|
@ -326,7 +330,7 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
|
|||
protected abstract void refreshInBackground(DBHandler db, GBDevice device);
|
||||
|
||||
/**
|
||||
* Performs a re-rendering of the chart.
|
||||
* Triggers the actual (re-) rendering of the chart.
|
||||
* Always called from the UI thread.
|
||||
*/
|
||||
protected abstract void renderCharts();
|
||||
|
@ -441,6 +445,14 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement this to supply the samples to be displayed.
|
||||
* @param db
|
||||
* @param device
|
||||
* @param tsFrom
|
||||
* @param tsTo
|
||||
* @return
|
||||
*/
|
||||
protected abstract List<ActivitySample> getSamples(DBHandler db, GBDevice device, int tsFrom, int tsTo);
|
||||
|
||||
protected abstract void setupLegend(Chart chart);
|
||||
|
@ -526,12 +538,23 @@ public abstract class AbstractChartFragment extends AbstractGBFragment {
|
|||
}
|
||||
}
|
||||
|
||||
public void setDateRange(Date from, Date to) {
|
||||
/**
|
||||
* Returns true if the date was successfully shifted, and false if the shift
|
||||
* was ignored, e.g. when the to-value is in the future.
|
||||
* @param from
|
||||
* @param to
|
||||
*/
|
||||
public boolean setDateRange(Date from, Date to) {
|
||||
if (from.compareTo(to) > 0) {
|
||||
throw new IllegalArgumentException("Bad date range: " +from + ".." + to);
|
||||
}
|
||||
Date now = new Date();
|
||||
if (to.after(now)) {
|
||||
return false;
|
||||
}
|
||||
setStartDate(from);
|
||||
setEndDate(to);
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void updateDateInfo(Date from, Date to) {
|
||||
|
|
Loading…
Reference in New Issue