package com.boardgamegeek.sorter; import android.content.Context; import android.database.Cursor; import android.support.annotation.NonNull; import android.text.format.DateUtils; import com.boardgamegeek.R; import com.boardgamegeek.util.DateTimeUtils; import java.text.SimpleDateFormat; import java.util.Locale; public abstract class CollectionDateSorter extends CollectionSorter { private static final SimpleDateFormat API_FORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.US); private static final SimpleDateFormat DISPLAY_FORMAT = new SimpleDateFormat("MMMM yyyy", Locale.getDefault()); private final String defaultValue; public CollectionDateSorter(@NonNull Context context) { super(context); defaultValue = context.getString(R.string.text_unknown); } @Override protected boolean isSortDescending() { return true; } @Override public String getHeaderText(@NonNull Cursor cursor) { long time = getTime(cursor); if (time == DateTimeUtils.UNKNOWN_DATE) return defaultValue; return DISPLAY_FORMAT.format(time); } @Override public String getDisplayInfo(@NonNull Cursor cursor) { long time = getTime(cursor); if (time == DateTimeUtils.UNKNOWN_DATE) return defaultValue; return DateUtils.getRelativeTimeSpanString(time, System.currentTimeMillis(), DateUtils.DAY_IN_MILLIS).toString(); } private long getTime(@NonNull Cursor cursor) { String date = getString(cursor, getSortColumn(), defaultValue); return DateTimeUtils.tryParseDate(DateTimeUtils.UNPARSED_DATE, date, API_FORMAT); } }