package com.orgzly.android.util;
import android.content.Context;
import android.text.SpannableStringBuilder;
import android.text.format.DateUtils;
import com.orgzly.org.datetime.OrgDateTime;
import com.orgzly.org.datetime.OrgRange;
import java.util.Formatter;
import java.util.Locale;
/**
* Formats time to be displayed to user.
*/
public class UserTimeFormatter {
private Context mContext;
/* Reuse Formatter, for speed.
*/
private StringBuilder formatterString;
private Formatter formatter;
public UserTimeFormatter(Context context) {
mContext = context;
}
public CharSequence formatAll(OrgRange time) {
SpannableStringBuilder s = new SpannableStringBuilder();
s.append(formatAll(time.getStartTime()));
if (time.getEndTime() != null) {
s.append(" — ");
s.append(formatAll(time.getEndTime()));
}
return s;
}
public String formatAll(OrgDateTime time) {
StringBuilder s = new StringBuilder();
s.append(formatDate(time));
if (time.hasTime()) {
s.append(" ");
if (time.hasEndTime()) {
s.append(formatTimeAndEndTime(time));
} else {
s.append(formatTime(time));
}
}
if (time.hasRepeater()) {
s.append(" ");
s.append(formatRepeater(time));
}
if (time.hasDelay()) {
s.append(" ");
s.append(formatDelay(time));
}
return s.toString();
}
public String formatDate(OrgDateTime time) {
long timestamp = time.getCalendar().getTimeInMillis();
int flags = DateUtils.FORMAT_SHOW_DATE |
DateUtils.FORMAT_ABBREV_MONTH |
DateUtils.FORMAT_SHOW_WEEKDAY |
DateUtils.FORMAT_ABBREV_WEEKDAY;
return format(timestamp, timestamp, flags);
}
public String formatTime(OrgDateTime time) {
long timestamp = time.getCalendar().getTimeInMillis();
int flags = DateUtils.FORMAT_SHOW_TIME;
return format(timestamp, timestamp, flags);
}
public String formatTimeAndEndTime(OrgDateTime time) {
long t1 = time.getCalendar().getTimeInMillis();
long t2 = time.getEndCalendar().getTimeInMillis();
int flags = DateUtils.FORMAT_SHOW_TIME;
return format(t1, t2, flags);
}
public String formatRepeater(OrgDateTime time) {
return time.getRepeater().toString();
}
public String formatDelay(OrgDateTime time) {
return time.getDelay().toString();
}
/**
* Reuse formatter, for speed. See comment in
* {@link DateUtils#formatDateRange(Context, long, long, int)}.
*/
private String format(long startMillis, long endMillis, int flags) {
if (formatter == null) {
formatterString = new StringBuilder(50);
formatter = new Formatter(formatterString, Locale.getDefault());
} else {
formatterString.setLength(0);
}
return DateUtils.formatDateRange(mContext, formatter, startMillis, endMillis, flags).toString();
}
}