Make 'to' filter of statistics inclusive
This commit is contained in:
parent
32770fe817
commit
f0aec13ea3
|
@ -41,7 +41,8 @@ public class PlaybackStatisticsListAdapter extends StatisticsListAdapter {
|
||||||
}
|
}
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat("MMM yyyy", Locale.getDefault());
|
SimpleDateFormat dateFormat = new SimpleDateFormat("MMM yyyy", Locale.getDefault());
|
||||||
String dateFrom = dateFormat.format(new Date(timeFilterFrom));
|
String dateFrom = dateFormat.format(new Date(timeFilterFrom));
|
||||||
String dateTo = dateFormat.format(new Date(timeFilterTo));
|
// FilterTo is first day of next month => Subtract one day
|
||||||
|
String dateTo = dateFormat.format(new Date(timeFilterTo - 24L * 3600000L));
|
||||||
return context.getString(R.string.statistics_counting_range, dateFrom, dateTo);
|
return context.getString(R.string.statistics_counting_range, dateFrom, dateTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,19 +20,21 @@ import java.util.Locale;
|
||||||
|
|
||||||
public class StatisticsFilterDialog {
|
public class StatisticsFilterDialog {
|
||||||
private final Context context;
|
private final Context context;
|
||||||
private final long oldestDate;
|
|
||||||
private final SharedPreferences prefs;
|
private final SharedPreferences prefs;
|
||||||
private boolean includeMarkedAsPlayed;
|
private boolean includeMarkedAsPlayed;
|
||||||
private long timeFilterFrom;
|
private long timeFilterFrom;
|
||||||
private long timeFilterTo;
|
private long timeFilterTo;
|
||||||
|
private final Pair<String[], Long[]> filterDatesFrom;
|
||||||
|
private final Pair<String[], Long[]> filterDatesTo;
|
||||||
|
|
||||||
public StatisticsFilterDialog(Context context, long oldestDate) {
|
public StatisticsFilterDialog(Context context, long oldestDate) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.oldestDate = oldestDate;
|
|
||||||
prefs = context.getSharedPreferences(StatisticsFragment.PREF_NAME, Context.MODE_PRIVATE);
|
prefs = context.getSharedPreferences(StatisticsFragment.PREF_NAME, Context.MODE_PRIVATE);
|
||||||
includeMarkedAsPlayed = prefs.getBoolean(StatisticsFragment.PREF_INCLUDE_MARKED_PLAYED, false);
|
includeMarkedAsPlayed = prefs.getBoolean(StatisticsFragment.PREF_INCLUDE_MARKED_PLAYED, false);
|
||||||
timeFilterFrom = prefs.getLong(StatisticsFragment.PREF_FILTER_FROM, 0);
|
timeFilterFrom = prefs.getLong(StatisticsFragment.PREF_FILTER_FROM, 0);
|
||||||
timeFilterTo = prefs.getLong(StatisticsFragment.PREF_FILTER_TO, Long.MAX_VALUE);
|
timeFilterTo = prefs.getLong(StatisticsFragment.PREF_FILTER_TO, Long.MAX_VALUE);
|
||||||
|
filterDatesFrom = makeMonthlyList(oldestDate, false);
|
||||||
|
filterDatesTo = makeMonthlyList(oldestDate, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void show() {
|
public void show() {
|
||||||
|
@ -50,25 +52,24 @@ public class StatisticsFilterDialog {
|
||||||
});
|
});
|
||||||
dialogBinding.includeMarkedCheckbox.setChecked(includeMarkedAsPlayed);
|
dialogBinding.includeMarkedCheckbox.setChecked(includeMarkedAsPlayed);
|
||||||
|
|
||||||
Pair<String[], Long[]> filterDates = makeMonthlyList(oldestDate);
|
|
||||||
|
|
||||||
ArrayAdapter<String> adapterFrom = new ArrayAdapter<>(context,
|
ArrayAdapter<String> adapterFrom = new ArrayAdapter<>(context,
|
||||||
android.R.layout.simple_spinner_item, filterDates.first);
|
android.R.layout.simple_spinner_item, filterDatesFrom.first);
|
||||||
adapterFrom.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
adapterFrom.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
dialogBinding.timeFromSpinner.setAdapter(adapterFrom);
|
dialogBinding.timeFromSpinner.setAdapter(adapterFrom);
|
||||||
for (int i = 0; i < filterDates.second.length; i++) {
|
for (int i = 0; i < filterDatesFrom.second.length; i++) {
|
||||||
if (filterDates.second[i] >= timeFilterFrom) {
|
if (filterDatesFrom.second[i] >= timeFilterFrom) {
|
||||||
dialogBinding.timeFromSpinner.setSelection(i);
|
dialogBinding.timeFromSpinner.setSelection(i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayAdapter<String> adapterTo = new ArrayAdapter<>(context,
|
ArrayAdapter<String> adapterTo = new ArrayAdapter<>(context,
|
||||||
android.R.layout.simple_spinner_item, filterDates.first);
|
android.R.layout.simple_spinner_item, filterDatesTo.first);
|
||||||
adapterTo.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
adapterTo.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
dialogBinding.timeToSpinner.setAdapter(adapterTo);
|
dialogBinding.timeToSpinner.setAdapter(adapterTo);
|
||||||
for (int i = 0; i < filterDates.second.length; i++) {
|
for (int i = 0; i < filterDatesTo.second.length; i++) {
|
||||||
if (filterDates.second[i] >= timeFilterTo) {
|
if (filterDatesTo.second[i] >= timeFilterTo) {
|
||||||
dialogBinding.timeToSpinner.setSelection(i);
|
dialogBinding.timeToSpinner.setSelection(i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -76,11 +77,11 @@ public class StatisticsFilterDialog {
|
||||||
|
|
||||||
dialogBinding.allTimeButton.setOnClickListener(v -> {
|
dialogBinding.allTimeButton.setOnClickListener(v -> {
|
||||||
dialogBinding.timeFromSpinner.setSelection(0);
|
dialogBinding.timeFromSpinner.setSelection(0);
|
||||||
dialogBinding.timeToSpinner.setSelection(filterDates.first.length - 1);
|
dialogBinding.timeToSpinner.setSelection(filterDatesTo.first.length - 1);
|
||||||
});
|
});
|
||||||
dialogBinding.lastYearButton.setOnClickListener(v -> {
|
dialogBinding.lastYearButton.setOnClickListener(v -> {
|
||||||
dialogBinding.timeFromSpinner.setSelection(Math.max(0, filterDates.first.length - 14));
|
dialogBinding.timeFromSpinner.setSelection(Math.max(0, filterDatesFrom.first.length - 14));
|
||||||
dialogBinding.timeToSpinner.setSelection(filterDates.first.length - 2);
|
dialogBinding.timeToSpinner.setSelection(filterDatesTo.first.length - 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
builder.setPositiveButton(android.R.string.ok, (dialog, which) -> {
|
||||||
|
@ -90,8 +91,8 @@ public class StatisticsFilterDialog {
|
||||||
timeFilterFrom = 0;
|
timeFilterFrom = 0;
|
||||||
timeFilterTo = Long.MAX_VALUE;
|
timeFilterTo = Long.MAX_VALUE;
|
||||||
} else {
|
} else {
|
||||||
timeFilterFrom = filterDates.second[dialogBinding.timeFromSpinner.getSelectedItemPosition()];
|
timeFilterFrom = filterDatesFrom.second[dialogBinding.timeFromSpinner.getSelectedItemPosition()];
|
||||||
timeFilterTo = filterDates.second[dialogBinding.timeToSpinner.getSelectedItemPosition()];
|
timeFilterTo = filterDatesTo.second[dialogBinding.timeToSpinner.getSelectedItemPosition()];
|
||||||
}
|
}
|
||||||
prefs.edit()
|
prefs.edit()
|
||||||
.putBoolean(StatisticsFragment.PREF_INCLUDE_MARKED_PLAYED, includeMarkedAsPlayed)
|
.putBoolean(StatisticsFragment.PREF_INCLUDE_MARKED_PLAYED, includeMarkedAsPlayed)
|
||||||
|
@ -103,7 +104,7 @@ public class StatisticsFilterDialog {
|
||||||
builder.show();
|
builder.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pair<String[], Long[]> makeMonthlyList(long oldestDate) {
|
private Pair<String[], Long[]> makeMonthlyList(long oldestDate, boolean inclusive) {
|
||||||
Calendar date = Calendar.getInstance();
|
Calendar date = Calendar.getInstance();
|
||||||
date.setTimeInMillis(oldestDate);
|
date.setTimeInMillis(oldestDate);
|
||||||
date.set(Calendar.DAY_OF_MONTH, 1);
|
date.set(Calendar.DAY_OF_MONTH, 1);
|
||||||
|
@ -112,13 +113,18 @@ public class StatisticsFilterDialog {
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat("MMM yyyy", Locale.getDefault());
|
SimpleDateFormat dateFormat = new SimpleDateFormat("MMM yyyy", Locale.getDefault());
|
||||||
while (date.getTimeInMillis() < System.currentTimeMillis()) {
|
while (date.getTimeInMillis() < System.currentTimeMillis()) {
|
||||||
names.add(dateFormat.format(new Date(date.getTimeInMillis())));
|
names.add(dateFormat.format(new Date(date.getTimeInMillis())));
|
||||||
|
if (!inclusive) {
|
||||||
timestamps.add(date.getTimeInMillis());
|
timestamps.add(date.getTimeInMillis());
|
||||||
|
}
|
||||||
if (date.get(Calendar.MONTH) == Calendar.DECEMBER) {
|
if (date.get(Calendar.MONTH) == Calendar.DECEMBER) {
|
||||||
date.set(Calendar.MONTH, Calendar.JANUARY);
|
date.set(Calendar.MONTH, Calendar.JANUARY);
|
||||||
date.set(Calendar.YEAR, date.get(Calendar.YEAR) + 1);
|
date.set(Calendar.YEAR, date.get(Calendar.YEAR) + 1);
|
||||||
} else {
|
} else {
|
||||||
date.set(Calendar.MONTH, date.get(Calendar.MONTH) + 1);
|
date.set(Calendar.MONTH, date.get(Calendar.MONTH) + 1);
|
||||||
}
|
}
|
||||||
|
if (inclusive) {
|
||||||
|
timestamps.add(date.getTimeInMillis());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
names.add(context.getString(R.string.statistics_today));
|
names.add(context.getString(R.string.statistics_today));
|
||||||
timestamps.add(Long.MAX_VALUE);
|
timestamps.add(Long.MAX_VALUE);
|
||||||
|
|
Loading…
Reference in New Issue