package com.plusonelabs.calendar.widget;
import android.content.Context;
import android.support.annotation.LayoutRes;
import android.support.annotation.StringRes;
import android.text.TextUtils;
import android.view.View;
import android.widget.RemoteViews;
import com.plusonelabs.calendar.R;
import com.plusonelabs.calendar.RemoteViewsUtil;
import static com.plusonelabs.calendar.RemoteViewsUtil.*;
/**
* @author yvolk@yurivolkov.com
*/
public enum EventEntryLayout {
DEFAULT(R.layout.event_entry, "DEFAULT", R.string.default_multiline_layout) {
@Override
protected void setEventDetails(CalendarEntry entry, RemoteViews rv) {
String eventDetails = entry.getEventTimeString() + entry.getLocationString();
if (TextUtils.isEmpty(eventDetails)) {
rv.setViewVisibility(R.id.event_entry_details, View.GONE);
} else {
rv.setViewVisibility(R.id.event_entry_details, View.VISIBLE);
rv.setTextViewText(R.id.event_entry_details, eventDetails);
setTextSize(entry.getSettings(), rv, R.id.event_entry_details, R.dimen.event_entry_details);
setTextColorFromAttr(entry.getSettings().getEntryThemeContext(), rv, R.id.event_entry_details,
R.attr.eventEntryDetails);
}
}
},
ONE_LINE(R.layout.event_entry_one_line, "ONE_LINE", R.string.single_line_layout) {
@Override
protected String getTitleString(CalendarEntry event) {
return event.getTitle() + event.getLocationString();
}
@Override
protected void setEventDate(CalendarEntry entry, RemoteViews rv) {
if (entry.getSettings().getShowDayHeaders()) {
rv.setViewVisibility(R.id.event_entry_date, View.GONE);
rv.setViewVisibility(R.id.event_entry_date_right, View.GONE);
} else {
int days = entry.getDaysFromToday();
int viewToShow = days < -1 || days > 1 ? R.id.event_entry_date_right : R.id.event_entry_date;
int viewToHide = viewToShow == R.id.event_entry_date ? R.id.event_entry_date_right : R.id.event_entry_date;
rv.setViewVisibility(viewToHide, View.GONE);
rv.setViewVisibility(viewToShow, View.VISIBLE);
rv.setTextViewText(viewToShow, getDaysFromTodayString(entry.getSettings().getEntryThemeContext(), days));
}
}
private CharSequence getDaysFromTodayString(Context context, int daysFromToday) {
switch (daysFromToday) {
case -1:
return context.getText(R.string.yesterday);
case 0:
return context.getText(R.string.today);
case 1:
return context.getText(R.string.tomorrow);
default:
return Integer.toString(daysFromToday);
}
}
@Override
protected void setEventTime(CalendarEntry entry, RemoteViews rv) {
RemoteViewsUtil.setMultiline(rv, R.id.event_entry_time, entry.getSettings().getShowEndTime());
rv.setTextViewText(R.id.event_entry_time, entry.getEventTimeString().replace(CalendarEntry
.SPACE_DASH_SPACE, " "));
}
};
@LayoutRes
public final int layoutId;
public final String value;
@StringRes
public final int summaryResId;
EventEntryLayout(@LayoutRes int layoutId, String value, int summaryResId) {
this.layoutId = layoutId;
this.value = value;
this.summaryResId = summaryResId;
}
public static EventEntryLayout fromValue(String value) {
EventEntryLayout layout = DEFAULT;
for (EventEntryLayout item : EventEntryLayout.values()) {
if (item.value.equals(value)) {
layout = item;
break;
}
}
return layout;
}
public void visualizeEvent(CalendarEntry entry, RemoteViews rv) {
setTitle(entry, rv);
setEventDate(entry, rv);
setEventTime(entry, rv);
setEventDetails(entry, rv);
}
protected void setTitle(CalendarEntry event, RemoteViews rv) {
rv.setTextViewText(R.id.event_entry_title, getTitleString(event));
setTextSize(event.getSettings(), rv, R.id.event_entry_title, R.dimen.event_entry_title);
setTextColorFromAttr(event.getSettings().getEntryThemeContext(), rv, R.id.event_entry_title, R.attr.eventEntryTitle);
setMultiline(rv, R.id.event_entry_title, event.getSettings().isTitleMultiline());
}
protected String getTitleString(CalendarEntry event) {
return event.getTitle();
}
protected void setEventDate(CalendarEntry entry, RemoteViews rv) {
// Empty
}
protected void setEventTime(CalendarEntry entry, RemoteViews rv) {
// Empty
}
protected void setEventDetails(CalendarEntry entry, RemoteViews rv) {
// Empty
}
}