Skip to content

Commit

Permalink
Add Widget header background color. Add Day header shading
Browse files Browse the repository at this point in the history
  • Loading branch information
yvolk committed Aug 24, 2019
1 parent 9393db7 commit 9f2046e
Show file tree
Hide file tree
Showing 7 changed files with 111 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import static org.andstatus.todoagenda.util.CalendarIntentUtil.createOpenCalendarEventPendingIntent;
import static org.andstatus.todoagenda.util.CalendarIntentUtil.createOpenCalendarPendingIntent;
import static org.andstatus.todoagenda.util.RemoteViewsUtil.setAlpha;
import static org.andstatus.todoagenda.util.RemoteViewsUtil.setBackgroundColor;
import static org.andstatus.todoagenda.util.RemoteViewsUtil.setColorFilter;
import static org.andstatus.todoagenda.util.RemoteViewsUtil.setImageFromAttr;
import static org.andstatus.todoagenda.util.RemoteViewsUtil.setTextColorFromAttr;
Expand Down Expand Up @@ -63,7 +64,7 @@ public void onDeleted(Context context, int[] appWidgetIds) {
public void onUpdate(Context baseContext, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int widgetId : appWidgetIds) {
InstanceSettings settings = AllSettings.instanceFromId(baseContext, widgetId);
AlarmReceiver.scheduleAlarm(settings.getHeaderThemeContext());
AlarmReceiver.scheduleAlarm(settings.getWidgetHeaderThemeContext());
RemoteViews rv = new RemoteViews(baseContext.getPackageName(), R.layout.widget);
configureBackground(settings, rv);
configureWidgetHeader(settings, rv);
Expand All @@ -74,6 +75,7 @@ public void onUpdate(Context baseContext, AppWidgetManager appWidgetManager, int

private void configureBackground(InstanceSettings settings, RemoteViews rv) {
if (settings.getShowWidgetHeader()) {
setBackgroundColor(rv, R.id.action_bar, settings.getWidgetHeaderBackgroundColor());
rv.setViewVisibility(R.id.action_bar, View.VISIBLE);
} else {
rv.setViewVisibility(R.id.action_bar, View.GONE);
Expand All @@ -97,14 +99,14 @@ private void configureCurrentDate(InstanceSettings settings, RemoteViews rv) {
String formattedDate = DateUtil.createDateString(settings,
DateUtil.now(settings.getTimeZone())).toUpperCase(Locale.getDefault());
rv.setTextViewText(R.id.calendar_current_date, formattedDate);
setTextColorFromAttr(settings.getHeaderThemeContext(), rv, R.id.calendar_current_date, R.attr.header);
setTextColorFromAttr(settings.getWidgetHeaderThemeContext(), rv, R.id.calendar_current_date, R.attr.header);
}

private void setActionIcons(InstanceSettings settings, RemoteViews rv) {
setImageFromAttr(settings.getHeaderThemeContext(), rv, R.id.add_event, R.attr.header_action_add_event);
setImageFromAttr(settings.getHeaderThemeContext(), rv, R.id.refresh, R.attr.header_action_refresh);
setImageFromAttr(settings.getHeaderThemeContext(), rv, R.id.overflow_menu, R.attr.header_action_overflow);
int themeId = themeNameToResId(settings.getHeaderTheme());
setImageFromAttr(settings.getWidgetHeaderThemeContext(), rv, R.id.add_event, R.attr.header_action_add_event);
setImageFromAttr(settings.getWidgetHeaderThemeContext(), rv, R.id.refresh, R.attr.header_action_refresh);
setImageFromAttr(settings.getWidgetHeaderThemeContext(), rv, R.id.overflow_menu, R.attr.header_action_overflow);
int themeId = themeNameToResId(settings.getWidgetHeaderTheme());
int alpha = 255;
if (themeId == R.style.Theme_Calendar_Dark || themeId == R.style.Theme_Calendar_Light) {
alpha = 154;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ private InstanceSettings getSettings() {
public void onDataSetChanged() {
context.setTheme(themeNameToResId(getSettings().getEntryTheme()));
visualizers.clear();
visualizers.add(new DayHeaderVisualizer(context, widgetId));
visualizers.add(new DayHeaderVisualizer(getSettings().getDayHeaderThemeContext(), widgetId));
for (EventProviderType type : EventProviderType.values()) {
if (type.hasEventSources()) {
visualizers.add(type.getVisualizer(context, widgetId));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.preference.PreferenceManager;
import android.text.TextUtils;

Expand Down Expand Up @@ -40,12 +41,16 @@ public class ApplicationPreferences {
static final boolean PREF_SHOW_LOCATION_DEFAULT = true;
static final String PREF_FILL_ALL_DAY = "fillAllDay";
static final boolean PREF_FILL_ALL_DAY_DEFAULT = true;
static final String PREF_ENTRY_THEME = "entryTheme";
public static final String PREF_ENTRY_THEME_DEFAULT = Theme.BLACK.name();
static final String PREF_HEADER_THEME = "headerTheme";
static final String PREF_HEADER_THEME_DEFAULT = Theme.DARK.name();
static final String PREF_WIDGET_HEADER_THEME = "headerTheme";
static final String PREF_WIDGET_HEADER_THEME_DEFAULT = Theme.DARK.name();
static final String PREF_WIDGET_HEADER_BACKGROUND_COLOR = "widgetHeaderBackgroundColor";
static final int PREF_WIDGET_HEADER_BACKGROUND_COLOR_DEFAULT = Color.TRANSPARENT;
static final String PREF_DAY_HEADER_THEME = "dayHeaderTheme";
static final String PREF_DAY_HEADER_THEME_DEFAULT = Theme.DARK.name();
static final String PREF_DAY_HEADER_ALIGNMENT = "dayHeaderAlignment";
static final String PREF_DAY_HEADER_ALIGNMENT_DEFAULT = Alignment.RIGHT.name();
static final String PREF_ENTRY_THEME = "entryTheme";
public static final String PREF_ENTRY_THEME_DEFAULT = Theme.BLACK.name();
static final String PREF_SHOW_PAST_EVENTS_WITH_DEFAULT_COLOR = "showPastEventsWithDefaultColor";
static final String PREF_PAST_EVENTS_BACKGROUND_COLOR = "pastEventsBackgroundColor";
static final int PREF_PAST_EVENTS_BACKGROUND_COLOR_DEFAULT = 0x4affff2b;
Expand Down Expand Up @@ -75,6 +80,7 @@ public static void startEditing(Context context, Integer widgetId) {
setEventsEnded(context, settings.getEventsEnded());
setFillAllDayEvents(context, settings.getFillAllDayEvents());
setHideBasedOnKeywords(context, settings.getHideBasedOnKeywords());
setInt(context, PREF_WIDGET_HEADER_BACKGROUND_COLOR, settings.getWidgetHeaderBackgroundColor());
setInt(context, PREF_PAST_EVENTS_BACKGROUND_COLOR, settings.getPastEventsBackgroundColor());
setShowDaysWithoutEvents(context, settings.getShowDaysWithoutEvents());
setShowDayHeaders(context, settings.getShowDayHeaders());
Expand All @@ -91,8 +97,9 @@ public static void startEditing(Context context, Integer widgetId) {
.getShowOnlyClosestInstanceOfRecurringEvent());
setBoolean(context, PREF_INDICATE_ALERTS, settings.getIndicateAlerts());
setBoolean(context, PREF_INDICATE_RECURRING, settings.getIndicateRecurring());
setString(context, PREF_WIDGET_HEADER_THEME, settings.getWidgetHeaderTheme());
setString(context, PREF_DAY_HEADER_THEME, settings.getDayHeaderTheme());
setString(context, PREF_ENTRY_THEME, settings.getEntryTheme());
setString(context, PREF_HEADER_THEME, settings.getHeaderTheme());
setBoolean(context, PREF_SHOW_WIDGET_HEADER, settings.getShowWidgetHeader());
setInt(context, PREF_BACKGROUND_COLOR, settings.getBackgroundColor());
setString(context, PREF_TEXT_SIZE_SCALE, settings.getTextSizeScale());
Expand Down Expand Up @@ -164,6 +171,12 @@ private static void setHideBasedOnKeywords(Context context, String value) {
setString(context, PREF_HIDE_BASED_ON_KEYWORDS, value);
}

public static int getWidgetHeaderBackgroundColor(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getInt(
PREF_WIDGET_HEADER_BACKGROUND_COLOR,
PREF_WIDGET_HEADER_BACKGROUND_COLOR_DEFAULT);
}

public static int getPastEventsBackgroundColor(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getInt(
PREF_PAST_EVENTS_BACKGROUND_COLOR,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_DATE_FORMAT_DEFAULT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_DAY_HEADER_ALIGNMENT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_DAY_HEADER_ALIGNMENT_DEFAULT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_DAY_HEADER_THEME;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_DAY_HEADER_THEME_DEFAULT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_ENTRY_THEME;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_ENTRY_THEME_DEFAULT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_EVENTS_ENDED;
Expand All @@ -40,8 +42,6 @@
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_EVENT_RANGE_DEFAULT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_FILL_ALL_DAY;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_FILL_ALL_DAY_DEFAULT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_HEADER_THEME;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_HEADER_THEME_DEFAULT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_HIDE_BASED_ON_KEYWORDS;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_INDICATE_ALERTS;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_INDICATE_RECURRING;
Expand All @@ -62,6 +62,10 @@
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_SHOW_WIDGET_HEADER;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_TEXT_SIZE_SCALE;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_TEXT_SIZE_SCALE_DEFAULT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_WIDGET_HEADER_BACKGROUND_COLOR;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_WIDGET_HEADER_BACKGROUND_COLOR_DEFAULT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_WIDGET_HEADER_THEME;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_WIDGET_HEADER_THEME_DEFAULT;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_WIDGET_ID;
import static org.andstatus.todoagenda.prefs.ApplicationPreferences.PREF_WIDGET_INSTANCE_NAME;
import static org.andstatus.todoagenda.prefs.SettingsStorage.saveJson;
Expand All @@ -72,8 +76,9 @@
*/
public class InstanceSettings {
private final Context context;
private volatile ContextThemeWrapper widgetHeaderThemeContext = null;
private volatile ContextThemeWrapper dayHeaderThemeContext = null;
private volatile ContextThemeWrapper entryThemeContext = null;
private volatile ContextThemeWrapper headerThemeContext = null;

final int widgetId;
private final String widgetInstanceName;
Expand All @@ -82,6 +87,7 @@ public class InstanceSettings {
private EndedSomeTimeAgo eventsEnded = EndedSomeTimeAgo.NONE;
private boolean fillAllDayEvents = PREF_FILL_ALL_DAY_DEFAULT;
private String hideBasedOnKeywords = "";
private int widgetHeaderBackgroundColor = PREF_WIDGET_HEADER_BACKGROUND_COLOR_DEFAULT;
private int pastEventsBackgroundColor = PREF_PAST_EVENTS_BACKGROUND_COLOR_DEFAULT;
private boolean showDaysWithoutEvents = false;
private boolean showDayHeaders = true;
Expand All @@ -97,9 +103,10 @@ public class InstanceSettings {
private boolean showOnlyClosestInstanceOfRecurringEvent = false;
private boolean indicateAlerts = true;
private boolean indicateRecurring = false;
private String entryTheme = PREF_ENTRY_THEME_DEFAULT;
private String headerTheme = PREF_HEADER_THEME_DEFAULT;
private boolean showWidgetHeader = true;
private String widgetHeaderTheme = PREF_WIDGET_HEADER_THEME_DEFAULT;
private String dayHeaderTheme = PREF_DAY_HEADER_THEME_DEFAULT;
private String entryTheme = PREF_ENTRY_THEME_DEFAULT;
private int backgroundColor = PREF_BACKGROUND_COLOR_DEFAULT;
private String textSizeScale = PREF_TEXT_SIZE_SCALE_DEFAULT;
private String dayHeaderAlignment = PREF_DAY_HEADER_ALIGNMENT_DEFAULT;
Expand All @@ -126,6 +133,9 @@ public static InstanceSettings fromJson(Context context, JSONObject json) throws
if (json.has(PREF_HIDE_BASED_ON_KEYWORDS)) {
settings.hideBasedOnKeywords = json.getString(PREF_HIDE_BASED_ON_KEYWORDS);
}
if (json.has(PREF_WIDGET_HEADER_BACKGROUND_COLOR)) {
settings.widgetHeaderBackgroundColor = json.getInt(PREF_WIDGET_HEADER_BACKGROUND_COLOR);
}
if (json.has(PREF_PAST_EVENTS_BACKGROUND_COLOR)) {
settings.pastEventsBackgroundColor = json.getInt(PREF_PAST_EVENTS_BACKGROUND_COLOR);
}
Expand Down Expand Up @@ -172,15 +182,18 @@ public static InstanceSettings fromJson(Context context, JSONObject json) throws
if (json.has(PREF_INDICATE_RECURRING)) {
settings.indicateRecurring = json.getBoolean(PREF_INDICATE_RECURRING);
}
if (json.has(PREF_ENTRY_THEME)) {
settings.entryTheme = json.getString(PREF_ENTRY_THEME);
}
if (json.has(PREF_HEADER_THEME)) {
settings.headerTheme = json.getString(PREF_HEADER_THEME);
if (json.has(PREF_WIDGET_HEADER_THEME)) {
settings.widgetHeaderTheme = json.getString(PREF_WIDGET_HEADER_THEME);
}
if (json.has(PREF_SHOW_WIDGET_HEADER)) {
settings.showWidgetHeader = json.getBoolean(PREF_SHOW_WIDGET_HEADER);
}
if (json.has(PREF_DAY_HEADER_THEME)) {
settings.dayHeaderTheme = json.getString(PREF_DAY_HEADER_THEME);
}
if (json.has(PREF_ENTRY_THEME)) {
settings.entryTheme = json.getString(PREF_ENTRY_THEME);
}
if (json.has(PREF_BACKGROUND_COLOR)) {
settings.backgroundColor = json.getInt(PREF_BACKGROUND_COLOR);
}
Expand All @@ -202,6 +215,7 @@ static InstanceSettings fromApplicationPreferences(Context context, int widgetId
settings.eventsEnded = ApplicationPreferences.getEventsEnded(context);
settings.fillAllDayEvents = ApplicationPreferences.getFillAllDayEvents(context);
settings.hideBasedOnKeywords = ApplicationPreferences.getHideBasedOnKeywords(context);
settings.widgetHeaderBackgroundColor = ApplicationPreferences.getWidgetHeaderBackgroundColor(context);
settings.pastEventsBackgroundColor = ApplicationPreferences.getPastEventsBackgroundColor(context);
settings.showDaysWithoutEvents = ApplicationPreferences.getShowDaysWithoutEvents(context);
settings.showDayHeaders = ApplicationPreferences.getShowDayHeaders(context);
Expand All @@ -218,9 +232,10 @@ static InstanceSettings fromApplicationPreferences(Context context, int widgetId
.getShowOnlyClosestInstanceOfRecurringEvent(context);
settings.indicateAlerts = ApplicationPreferences.getBoolean(context, PREF_INDICATE_ALERTS, true);
settings.indicateRecurring = ApplicationPreferences.getBoolean(context, PREF_INDICATE_RECURRING, false);
settings.entryTheme = ApplicationPreferences.getString(context, PREF_ENTRY_THEME, PREF_ENTRY_THEME_DEFAULT);
settings.headerTheme = ApplicationPreferences.getString(context, PREF_HEADER_THEME, PREF_HEADER_THEME_DEFAULT);
settings.widgetHeaderTheme = ApplicationPreferences.getString(context, PREF_WIDGET_HEADER_THEME, PREF_WIDGET_HEADER_THEME_DEFAULT);
settings.showWidgetHeader = ApplicationPreferences.getBoolean(context, PREF_SHOW_WIDGET_HEADER, true);
settings.dayHeaderTheme = ApplicationPreferences.getString(context, PREF_DAY_HEADER_THEME, PREF_DAY_HEADER_THEME_DEFAULT);
settings.entryTheme = ApplicationPreferences.getString(context, PREF_ENTRY_THEME, PREF_ENTRY_THEME_DEFAULT);
settings.backgroundColor = ApplicationPreferences.getInt(context, PREF_BACKGROUND_COLOR,
PREF_BACKGROUND_COLOR_DEFAULT);
settings.textSizeScale = ApplicationPreferences.getString(context, PREF_TEXT_SIZE_SCALE,
Expand Down Expand Up @@ -264,6 +279,7 @@ public JSONObject toJson() {
json.put(PREF_EVENTS_ENDED, eventsEnded.save());
json.put(PREF_FILL_ALL_DAY, fillAllDayEvents);
json.put(PREF_HIDE_BASED_ON_KEYWORDS, hideBasedOnKeywords);
json.put(PREF_WIDGET_HEADER_BACKGROUND_COLOR, widgetHeaderBackgroundColor);
json.put(PREF_PAST_EVENTS_BACKGROUND_COLOR, pastEventsBackgroundColor);
json.put(PREF_SHOW_DAYS_WITHOUT_EVENTS, showDaysWithoutEvents);
json.put(PREF_SHOW_DAY_HEADERS, showDayHeaders);
Expand All @@ -279,9 +295,10 @@ public JSONObject toJson() {
json.put(PREF_SHOW_ONLY_CLOSEST_INSTANCE_OF_RECURRING_EVENT, showOnlyClosestInstanceOfRecurringEvent);
json.put(PREF_INDICATE_ALERTS, indicateAlerts);
json.put(PREF_INDICATE_RECURRING, indicateRecurring);
json.put(PREF_ENTRY_THEME, entryTheme);
json.put(PREF_HEADER_THEME, headerTheme);
json.put(PREF_SHOW_WIDGET_HEADER, showWidgetHeader);
json.put(PREF_WIDGET_HEADER_THEME, widgetHeaderTheme);
json.put(PREF_DAY_HEADER_THEME, dayHeaderTheme);
json.put(PREF_ENTRY_THEME, entryTheme);
json.put(PREF_BACKGROUND_COLOR, backgroundColor);
json.put(PREF_TEXT_SIZE_SCALE, textSizeScale);
json.put(PREF_DAY_HEADER_ALIGNMENT, dayHeaderAlignment);
Expand Down Expand Up @@ -337,6 +354,11 @@ public String getHideBasedOnKeywords() {
return hideBasedOnKeywords;
}


public int getWidgetHeaderBackgroundColor() {
return widgetHeaderBackgroundColor;
}

public int getPastEventsBackgroundColor() {
return pastEventsBackgroundColor;
}
Expand Down Expand Up @@ -424,15 +446,26 @@ public boolean getIndicateRecurring() {
return indicateRecurring;
}

public String getHeaderTheme() {
return headerTheme;
public String getWidgetHeaderTheme() {
return widgetHeaderTheme;
}

public ContextThemeWrapper getWidgetHeaderThemeContext() {
if (widgetHeaderThemeContext == null) {
widgetHeaderThemeContext = new ContextThemeWrapper(context, themeNameToResId(widgetHeaderTheme));
}
return widgetHeaderThemeContext;
}

public String getDayHeaderTheme() {
return dayHeaderTheme;
}

public ContextThemeWrapper getHeaderThemeContext() {
if (headerThemeContext == null) {
headerThemeContext = new ContextThemeWrapper(context, themeNameToResId(headerTheme));
public ContextThemeWrapper getDayHeaderThemeContext() {
if (dayHeaderThemeContext == null) {
dayHeaderThemeContext = new ContextThemeWrapper(context, themeNameToResId(dayHeaderTheme));
}
return headerThemeContext;
return dayHeaderThemeContext;
}

public String getEntryTheme() {
Expand Down
Loading

0 comments on commit 9f2046e

Please sign in to comment.