Add widget settings button

pull/437/head
Alex Baker 8 years ago
parent 93aec24ca9
commit 323ec90a33

@ -199,6 +199,7 @@
<!-- Activity that configures widget --> <!-- Activity that configures widget -->
<activity <activity
android:name=".widget.WidgetConfigActivity" android:name=".widget.WidgetConfigActivity"
android:taskAffinity=""
android:theme="@style/TranslucentDialog"> android:theme="@style/TranslucentDialog">
<intent-filter> <intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />

@ -25,6 +25,8 @@ import org.tasks.R;
import org.tasks.locale.Locale; import org.tasks.locale.Locale;
import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import org.tasks.themes.ThemeCache;
import org.tasks.themes.WidgetTheme;
import org.tasks.ui.WidgetCheckBoxes; import org.tasks.ui.WidgetCheckBoxes;
import timber.log.Timber; import timber.log.Timber;
@ -34,7 +36,7 @@ import static com.todoroo.andlib.utility.AndroidUtilities.atLeastJellybeanMR1;
public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory { public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
private final WidgetCheckBoxes checkBoxes; private final WidgetCheckBoxes checkBoxes;
private final int themeTextColor; private final ThemeCache themeCache;
private final int widgetId; private final int widgetId;
private final Database database; private final Database database;
private final TaskService taskService; private final TaskService taskService;
@ -42,11 +44,13 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
private final SubtasksHelper subtasksHelper; private final SubtasksHelper subtasksHelper;
private final Preferences preferences; private final Preferences preferences;
private final Context context; private final Context context;
private final String filterId;
private final boolean showDueDates; private boolean showDueDates;
private final boolean hideCheckboxes; private boolean showCheckboxes;
private final float textSize; private float textSize;
private final float dueDateTextSize; private float dueDateTextSize;
private String filterId;
private int themeTextColor;
private TodorooCursor<Task> cursor; private TodorooCursor<Task> cursor;
@ -54,27 +58,23 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
SubtasksHelper subtasksHelper, SubtasksHelper subtasksHelper,
Preferences preferences, Preferences preferences,
Context context, Context context,
String filterId,
int themeTextColor,
int widgetId, int widgetId,
Database database, Database database,
TaskService taskService, TaskService taskService,
DefaultFilterProvider defaultFilterProvider, DefaultFilterProvider defaultFilterProvider,
WidgetCheckBoxes checkBoxes) { WidgetCheckBoxes checkBoxes,
ThemeCache themeCache) {
this.subtasksHelper = subtasksHelper; this.subtasksHelper = subtasksHelper;
this.preferences = preferences; this.preferences = preferences;
this.context = context; this.context = context;
this.filterId = filterId;
this.widgetId = widgetId; this.widgetId = widgetId;
this.database = database; this.database = database;
this.taskService = taskService; this.taskService = taskService;
this.defaultFilterProvider = defaultFilterProvider; this.defaultFilterProvider = defaultFilterProvider;
this.checkBoxes = checkBoxes; this.checkBoxes = checkBoxes;
this.themeTextColor = themeTextColor; this.themeCache = themeCache;
showDueDates = preferences.getBoolean(WidgetConfigActivity.PREF_SHOW_DUE_DATE + widgetId, false);
hideCheckboxes = preferences.getBoolean(WidgetConfigActivity.PREF_HIDE_CHECKBOXES + widgetId, false); updateSettings();
textSize = (float) preferences.getInt(WidgetConfigActivity.PREF_FONT_SIZE + widgetId, 16);
dueDateTextSize = Math.max(10, textSize * 14 / 20);
} }
@Override @Override
@ -157,8 +157,11 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
row.setFloat(R.id.widget_text, "setTextSize", textSize); row.setFloat(R.id.widget_text, "setTextSize", textSize);
if (showDueDates) { if (showDueDates) {
formatDueDate(row, task, textColor); formatDueDate(row, task, textColor);
} else if (task.hasDueDate() && task.isOverdue()) { } else {
textColor = r.getColor(R.color.overdue); row.setViewVisibility(R.id.widget_due_date, View.GONE);
if (task.hasDueDate() && task.isOverdue()) {
textColor = r.getColor(R.color.overdue);
}
} }
row.setTextViewText(R.id.widget_text, textContent); row.setTextViewText(R.id.widget_text, textContent);
@ -171,12 +174,13 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
editIntent.putExtra(TasksWidget.EXTRA_ID, taskId); editIntent.putExtra(TasksWidget.EXTRA_ID, taskId);
row.setOnClickFillInIntent(R.id.widget_row, editIntent); row.setOnClickFillInIntent(R.id.widget_row, editIntent);
if (hideCheckboxes) { if (showCheckboxes) {
row.setViewVisibility(R.id.widget_complete_box, View.GONE); row.setViewVisibility(R.id.widget_complete_box, View.VISIBLE);
} else {
Intent completeIntent = new Intent(TasksWidget.COMPLETE_TASK); Intent completeIntent = new Intent(TasksWidget.COMPLETE_TASK);
completeIntent.putExtra(TasksWidget.EXTRA_ID, taskId); completeIntent.putExtra(TasksWidget.EXTRA_ID, taskId);
row.setOnClickFillInIntent(R.id.widget_complete_box, completeIntent); row.setOnClickFillInIntent(R.id.widget_complete_box, completeIntent);
} else {
row.setViewVisibility(R.id.widget_complete_box, View.GONE);
} }
if (atLeastJellybeanMR1()) { if (atLeastJellybeanMR1()) {
@ -210,6 +214,7 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
if(sort == 0) { if(sort == 0) {
sort = SortHelper.SORT_WIDGET; sort = SortHelper.SORT_WIDGET;
} }
updateSettings();
Filter filter = defaultFilterProvider.getFilterFromPreference(filterId); Filter filter = defaultFilterProvider.getFilterFromPreference(filterId);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.scrollable_widget); RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.scrollable_widget);
@ -235,4 +240,14 @@ public class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFac
row.setViewVisibility(R.id.widget_due_date, View.GONE); row.setViewVisibility(R.id.widget_due_date, View.GONE);
} }
} }
private void updateSettings() {
WidgetTheme widgetTheme = themeCache.getWidgetTheme(preferences.getInt(WidgetConfigActivity.PREF_THEME + widgetId, 0));
themeTextColor = widgetTheme.getTextColor();
showDueDates = preferences.getBoolean(WidgetConfigActivity.PREF_SHOW_DUE_DATE + widgetId, true);
showCheckboxes = preferences.getBoolean(WidgetConfigActivity.PREF_SHOW_CHECKBOXES+ widgetId, true);
textSize = (float) preferences.getInt(WidgetConfigActivity.PREF_FONT_SIZE + widgetId, 16);
dueDateTextSize = Math.max(10, textSize * 14 / 20);
filterId = preferences.getStringValue(WidgetConfigActivity.PREF_WIDGET_ID + widgetId);
}
} }

@ -14,15 +14,12 @@ import org.tasks.locale.Locale;
import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import org.tasks.themes.ThemeCache; import org.tasks.themes.ThemeCache;
import org.tasks.themes.WidgetTheme;
import org.tasks.ui.WidgetCheckBoxes; import org.tasks.ui.WidgetCheckBoxes;
import javax.inject.Inject; import javax.inject.Inject;
public class ScrollableWidgetUpdateService extends InjectingRemoteViewsService { public class ScrollableWidgetUpdateService extends InjectingRemoteViewsService {
public static final String FILTER_ID = "org.tasks.widget.FILTER_ID";
@Inject Database database; @Inject Database database;
@Inject TaskService taskService; @Inject TaskService taskService;
@Inject Preferences preferences; @Inject Preferences preferences;
@ -50,11 +47,9 @@ public class ScrollableWidgetUpdateService extends InjectingRemoteViewsService {
return null; return null;
} }
String filterId = (String) extras.get(FILTER_ID);
int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID); int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
WidgetTheme widgetTheme = themeCache.getWidgetTheme(preferences.getInt(WidgetConfigActivity.PREF_THEME + widgetId, 0)); return new ScrollableViewsFactory(subtasksHelper, preferences, locale.createConfigurationContext(getApplicationContext()),
return new ScrollableViewsFactory(subtasksHelper, preferences, locale.createConfigurationContext(getApplicationContext()), filterId, widgetId, database, taskService, defaultFilterProvider, widgetCheckBoxes, themeCache);
widgetTheme.getTextColor(), widgetId, database, taskService, defaultFilterProvider, widgetCheckBoxes);
} }
@Override @Override

@ -97,7 +97,6 @@ public class TasksWidget extends InjectingAppWidgetProvider {
private RemoteViews createScrollableWidget(Context context, int id) { private RemoteViews createScrollableWidget(Context context, int id) {
String filterId = preferences.getStringValue(WidgetConfigActivity.PREF_WIDGET_ID + id); String filterId = preferences.getStringValue(WidgetConfigActivity.PREF_WIDGET_ID + id);
Intent rvIntent = new Intent(context, ScrollableWidgetUpdateService.class); Intent rvIntent = new Intent(context, ScrollableWidgetUpdateService.class);
rvIntent.putExtra(ScrollableWidgetUpdateService.FILTER_ID, filterId);
rvIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id); rvIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id);
rvIntent.setData(Uri.parse(rvIntent.toUri(Intent.URI_INTENT_SCHEME))); rvIntent.setData(Uri.parse(rvIntent.toUri(Intent.URI_INTENT_SCHEME)));
WidgetTheme theme = themeCache.getWidgetTheme(preferences.getInt(WidgetConfigActivity.PREF_THEME + id, 0)); WidgetTheme theme = themeCache.getWidgetTheme(preferences.getInt(WidgetConfigActivity.PREF_THEME + id, 0));
@ -106,13 +105,18 @@ public class TasksWidget extends InjectingAppWidgetProvider {
if (atLeastJellybeanMR1()) { if (atLeastJellybeanMR1()) {
remoteViews.setInt(R.id.widget, "setLayoutDirection", locale.getDirectionality()); remoteViews.setInt(R.id.widget, "setLayoutDirection", locale.getDirectionality());
} }
if (preferences.getBoolean(WidgetConfigActivity.PREF_HIDE_HEADER + id, false)) { if (preferences.getBoolean(WidgetConfigActivity.PREF_SHOW_HEADER + id, true)) {
remoteViews.setViewVisibility(R.id.widget_header, View.GONE); remoteViews.setViewVisibility(R.id.widget_reconfigure, preferences.getBoolean(WidgetConfigActivity.PREF_SHOW_SETTINGS + id, true)
} else { ? View.VISIBLE
: View.GONE);
remoteViews.setInt(R.id.widget_title, "setTextColor", color.getActionBarTint()); remoteViews.setInt(R.id.widget_title, "setTextColor", color.getActionBarTint());
remoteViews.setInt(R.id.widget_button, "setColorFilter", color.getActionBarTint()); remoteViews.setInt(R.id.widget_button, "setColorFilter", color.getActionBarTint());
remoteViews.setInt(R.id.widget_reconfigure, "setColorFilter", color.getActionBarTint());
} else {
remoteViews.setViewVisibility(R.id.widget_header, View.GONE);
} }
int opacity = preferences.getInt(WidgetConfigActivity.PREF_WIDGET_OPACITY + id, WidgetConfigActivity.DEFAULT_OPACITY); int opacityPercentage = preferences.getInt(WidgetConfigActivity.PREF_WIDGET_OPACITY + id, WidgetConfigActivity.DEFAULT_OPACITY);
int opacity = (int)((opacityPercentage / 100.0) * 255.0);
remoteViews.setImageViewBitmap(R.id.widget_background, remoteViews.setImageViewBitmap(R.id.widget_background,
getSolidBackground(theme.getBackgroundColor())); getSolidBackground(theme.getBackgroundColor()));
remoteViews.setImageViewBitmap(R.id.widget_header_background, remoteViews.setImageViewBitmap(R.id.widget_header_background,
@ -126,6 +130,7 @@ public class TasksWidget extends InjectingAppWidgetProvider {
remoteViews.setEmptyView(R.id.list_view, R.id.empty_view); remoteViews.setEmptyView(R.id.list_view, R.id.empty_view);
remoteViews.setOnClickPendingIntent(R.id.widget_title, getOpenListIntent(context, filterId, id)); remoteViews.setOnClickPendingIntent(R.id.widget_title, getOpenListIntent(context, filterId, id));
remoteViews.setOnClickPendingIntent(R.id.widget_button, getNewTaskIntent(context, filterId, id)); remoteViews.setOnClickPendingIntent(R.id.widget_button, getNewTaskIntent(context, filterId, id));
remoteViews.setOnClickPendingIntent(R.id.widget_reconfigure, getWidgetConfigIntent(context, id));
remoteViews.setPendingIntentTemplate(R.id.list_view, getPendingIntentTemplate(context)); remoteViews.setPendingIntentTemplate(R.id.list_view, getPendingIntentTemplate(context));
return remoteViews; return remoteViews;
} }
@ -152,4 +157,11 @@ public class TasksWidget extends InjectingAppWidgetProvider {
intent.setFlags(flags); intent.setFlags(flags);
return PendingIntent.getActivity(context, -widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT); return PendingIntent.getActivity(context, -widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
} }
private PendingIntent getWidgetConfigIntent(Context context, final int widgetId) {
Intent intent = new Intent(context, WidgetConfigActivity.class) {{
putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
}};
return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
} }

@ -5,6 +5,7 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import org.tasks.Broadcaster;
import org.tasks.R; import org.tasks.R;
import org.tasks.analytics.Tracker; import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking; import org.tasks.analytics.Tracking;
@ -18,19 +19,21 @@ public class WidgetConfigActivity extends InjectingAppCompatActivity implements
private static final String FRAG_TAG_WIDGET_CONFIG = "frag_tag_widget_config"; private static final String FRAG_TAG_WIDGET_CONFIG = "frag_tag_widget_config";
public static final int DEFAULT_OPACITY = 255; public static final int DEFAULT_OPACITY = 100;
public static final String PREF_WIDGET_ID = "widget-id-"; public static final String PREF_WIDGET_ID = "widget-id-";
public static final String PREF_SHOW_DUE_DATE = "widget-show-due-date-"; public static final String PREF_SHOW_DUE_DATE = "widget-show-due-date-";
public static final String PREF_HIDE_CHECKBOXES = "widget-hide-checkboxes-"; public static final String PREF_SHOW_CHECKBOXES = "widget-show-checkboxes-";
public static final String PREF_THEME = "widget-theme-v2-"; public static final String PREF_THEME = "widget-theme-v2-";
public static final String PREF_COLOR = "widget-color-"; public static final String PREF_COLOR = "widget-color-";
public static final String PREF_HIDE_HEADER = "widget-hide-header-"; public static final String PREF_SHOW_HEADER = "widget-show-header-";
public static final String PREF_WIDGET_OPACITY = "widget-opacity-v2-"; public static final String PREF_SHOW_SETTINGS = "widget-show-settings-";
public static final String PREF_WIDGET_OPACITY = "widget-opacity-v3-";
public static final String PREF_FONT_SIZE = "widget-font-size-"; public static final String PREF_FONT_SIZE = "widget-font-size-";
@Inject Tracker tracker; @Inject Tracker tracker;
@Inject DialogBuilder dialogBuilder; @Inject DialogBuilder dialogBuilder;
@Inject Broadcaster broadcaster;
private int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; private int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
@ -62,6 +65,7 @@ public class WidgetConfigActivity extends InjectingAppCompatActivity implements
@Override @Override
public void ok() { public void ok() {
tracker.reportEvent(Tracking.Events.WIDGET_ADD, getString(R.string.app_name)); tracker.reportEvent(Tracking.Events.WIDGET_ADD, getString(R.string.app_name));
broadcaster.refresh();
Intent resultValue = new Intent(); Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
setResult(RESULT_OK, resultValue); setResult(RESULT_OK, resultValue);

@ -11,6 +11,7 @@ import android.view.View;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.TextView; import android.widget.TextView;
import com.google.common.base.Strings;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import org.tasks.R; import org.tasks.R;
@ -68,10 +69,11 @@ public class WidgetConfigDialog extends InjectingDialogFragment {
@BindView(R.id.selected_filter) TextView selectedFilter; @BindView(R.id.selected_filter) TextView selectedFilter;
@BindView(R.id.selected_theme) TextView selectedTheme; @BindView(R.id.selected_theme) TextView selectedTheme;
@BindView(R.id.selected_color) TextView selectedColor; @BindView(R.id.selected_color) TextView selectedColor;
@BindView(R.id.hideDueDate) CheckBox hideDueDate; @BindView(R.id.showDueDate) CheckBox showDueDate;
@BindView(R.id.hideCheckboxes) CheckBox hideCheckBoxes; @BindView(R.id.showCheckBoxes) CheckBox showCheckBoxes;
@BindView(R.id.hideHeader) CheckBox hideHeader; @BindView(R.id.showHeader) CheckBox showHeader;
@BindView(R.id.font_size_value) TextView selectedFontSize; @BindView(R.id.font_size_value) TextView selectedFontSize;
@BindView(R.id.showSettings) CheckBox showSettings;
@Inject DialogBuilder dialogBuilder; @Inject DialogBuilder dialogBuilder;
@Inject DefaultFilterProvider defaultFilterProvider; @Inject DefaultFilterProvider defaultFilterProvider;
@ -102,9 +104,20 @@ public class WidgetConfigDialog extends InjectingDialogFragment {
opacityPercentage = savedInstanceState.getInt(EXTRA_OPACITY); opacityPercentage = savedInstanceState.getInt(EXTRA_OPACITY);
fontSize = savedInstanceState.getInt(EXTRA_FONT_SIZE); fontSize = savedInstanceState.getInt(EXTRA_FONT_SIZE);
} else { } else {
filter = defaultFilterProvider.getDefaultFilter(); String filterId = preferences.getStringValue(WidgetConfigActivity.PREF_WIDGET_ID + appWidgetId);
opacityPercentage = 100; if (Strings.isNullOrEmpty(filterId)) {
fontSize = 16; filter = defaultFilterProvider.getDefaultFilter();
} else {
filter = defaultFilterProvider.getFilterFromPreference(filterId);
}
opacityPercentage = preferences.getInt(WidgetConfigActivity.PREF_WIDGET_OPACITY + appWidgetId, 100);
fontSize = preferences.getInt(WidgetConfigActivity.PREF_FONT_SIZE + appWidgetId, 16);
themeIndex = preferences.getInt(WidgetConfigActivity.PREF_THEME + appWidgetId, 0);
colorIndex = preferences.getInt(WidgetConfigActivity.PREF_COLOR + appWidgetId, 0);
showDueDate.setChecked(preferences.getBoolean(WidgetConfigActivity.PREF_SHOW_DUE_DATE + appWidgetId, true));
showCheckBoxes.setChecked(preferences.getBoolean(WidgetConfigActivity.PREF_SHOW_CHECKBOXES + appWidgetId, true));
showHeader.setChecked(preferences.getBoolean(WidgetConfigActivity.PREF_SHOW_HEADER + appWidgetId, true));
showSettings.setChecked(preferences.getBoolean(WidgetConfigActivity.PREF_SHOW_SETTINGS + appWidgetId, true));
} }
updateFilter(); updateFilter();
@ -206,7 +219,7 @@ public class WidgetConfigDialog extends InjectingDialogFragment {
@OnClick(R.id.font_size) @OnClick(R.id.font_size)
public void showFontSizeSlider() { public void showFontSizeSlider() {
SeekBarDialog seekBarDialog = newSeekBarDialog(R.layout.dialog_font_size_seekbar, 16); SeekBarDialog seekBarDialog = newSeekBarDialog(R.layout.dialog_font_size_seekbar, fontSize);
seekBarDialog.setTargetFragment(this, REQUEST_FONT_SIZE); seekBarDialog.setTargetFragment(this, REQUEST_FONT_SIZE);
seekBarDialog.show(getChildFragmentManager(), FRAG_TAG_SEEKBAR); seekBarDialog.show(getChildFragmentManager(), FRAG_TAG_SEEKBAR);
} }
@ -250,12 +263,13 @@ public class WidgetConfigDialog extends InjectingDialogFragment {
private void saveConfiguration(){ private void saveConfiguration(){
preferences.setString(WidgetConfigActivity.PREF_WIDGET_ID + appWidgetId, defaultFilterProvider.getFilterPreferenceValue(filter)); preferences.setString(WidgetConfigActivity.PREF_WIDGET_ID + appWidgetId, defaultFilterProvider.getFilterPreferenceValue(filter));
preferences.setBoolean(WidgetConfigActivity.PREF_SHOW_DUE_DATE + appWidgetId, !hideDueDate.isChecked()); preferences.setBoolean(WidgetConfigActivity.PREF_SHOW_DUE_DATE + appWidgetId, showDueDate.isChecked());
preferences.setBoolean(WidgetConfigActivity.PREF_HIDE_CHECKBOXES + appWidgetId, hideCheckBoxes.isChecked()); preferences.setBoolean(WidgetConfigActivity.PREF_SHOW_CHECKBOXES+ appWidgetId, showCheckBoxes.isChecked());
preferences.setBoolean(WidgetConfigActivity.PREF_HIDE_HEADER + appWidgetId, hideHeader.isChecked()); preferences.setBoolean(WidgetConfigActivity.PREF_SHOW_HEADER + appWidgetId, showHeader.isChecked());
preferences.setBoolean(WidgetConfigActivity.PREF_SHOW_SETTINGS + appWidgetId, showSettings.isChecked());
preferences.setInt(WidgetConfigActivity.PREF_THEME + appWidgetId, themeIndex); preferences.setInt(WidgetConfigActivity.PREF_THEME + appWidgetId, themeIndex);
preferences.setInt(WidgetConfigActivity.PREF_COLOR + appWidgetId, colorIndex); preferences.setInt(WidgetConfigActivity.PREF_COLOR + appWidgetId, colorIndex);
preferences.setInt(WidgetConfigActivity.PREF_WIDGET_OPACITY + appWidgetId, (int)(255.0 * ((double) opacityPercentage / 100.0))); preferences.setInt(WidgetConfigActivity.PREF_WIDGET_OPACITY + appWidgetId, opacityPercentage);
preferences.setInt(WidgetConfigActivity.PREF_FONT_SIZE + appWidgetId, fontSize); preferences.setInt(WidgetConfigActivity.PREF_FONT_SIZE + appWidgetId, fontSize);
// force update after setting preferences // force update after setting preferences

@ -18,7 +18,7 @@
app:sl_maxValue="22" app:sl_maxValue="22"
app:sl_minValue="10" app:sl_minValue="10"
app:sl_stepValue="2" app:sl_stepValue="2"
app:sl_travelAnimDuration="50" /> app:sl_travelAnimDuration="100" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"

@ -18,7 +18,7 @@
app:sl_maxValue="100" app:sl_maxValue="100"
app:sl_minValue="0" app:sl_minValue="0"
app:sl_stepValue="5" app:sl_stepValue="5"
app:sl_travelAnimDuration="50" /> app:sl_travelAnimDuration="100" />
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"

@ -29,26 +29,46 @@
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:paddingEnd="10dp" android:paddingEnd="@dimen/widget_padding"
android:paddingRight="10dp" android:paddingLeft="@dimen/widget_padding"
android:paddingRight="@dimen/widget_padding"
android:paddingStart="@dimen/widget_padding"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:src="@drawable/ic_add_24dp" android:src="@drawable/ic_add_24dp"
android:tint="@android:color/white" /> android:tint="@android:color/white" />
<ImageButton
android:id="@+id/widget_reconfigure"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/widget_button"
android:layout_toStartOf="@id/widget_button"
android:background="@android:color/transparent"
android:paddingEnd="0dp"
android:paddingLeft="@dimen/widget_padding"
android:paddingRight="0dp"
android:paddingStart="@dimen/widget_padding"
android:scaleType="fitCenter"
android:src="@drawable/ic_settings_24dp"
android:tint="@android:color/white" />
<TextView <TextView
android:id="@+id/widget_title" android:id="@+id/widget_title"
android:layout_width="0dp" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignParentLeft="true" android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toLeftOf="@id/widget_button" android:layout_toLeftOf="@id/widget_reconfigure"
android:layout_toStartOf="@id/widget_button" android:layout_toStartOf="@id/widget_reconfigure"
android:ellipsize="end" android:ellipsize="end"
android:gravity="start|center_vertical" android:gravity="start|center_vertical"
android:maxLines="2" android:maxLines="2"
android:paddingLeft="10dp" android:paddingEnd="0dp"
android:paddingStart="10dp" android:paddingLeft="@dimen/widget_padding"
android:paddingRight="0dp"
android:paddingStart="@dimen/widget_padding"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textColor="@android:color/white" android:textColor="@android:color/white"
android:textSize="18sp" /> android:textSize="18sp" />
@ -67,10 +87,10 @@
<ListView <ListView
android:id="@+id/list_view" android:id="@+id/list_view"
android:divider="@null"
android:dividerHeight="0dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="fill_parent" /> android:layout_height="fill_parent"
android:divider="@null"
android:dividerHeight="0dp" />
<TextView <TextView
android:id="@+id/empty_view" android:id="@+id/empty_view"

@ -149,22 +149,28 @@
</RelativeLayout> </RelativeLayout>
<CheckBox <CheckBox
android:id="@+id/hideDueDate" android:id="@+id/showDueDate"
style="@style/WidgetConfigRow.CheckBox" style="@style/WidgetConfigRow.CheckBox"
android:checked="false" android:checked="true"
android:text="@string/widget_hide_due_date" /> android:text="@string/widget_show_due_date" />
<CheckBox <CheckBox
android:id="@+id/hideCheckboxes" android:id="@+id/showCheckBoxes"
style="@style/WidgetConfigRow.CheckBox" style="@style/WidgetConfigRow.CheckBox"
android:checked="false" android:checked="true"
android:text="@string/widget_hide_checkboxes" /> android:text="@string/widget_show_checkboxes" />
<CheckBox <CheckBox
android:id="@+id/hideHeader" android:id="@+id/showHeader"
style="@style/WidgetConfigRow.CheckBox" style="@style/WidgetConfigRow.CheckBox"
android:checked="false" android:checked="true"
android:text="@string/widget_hide_header" /> android:text="@string/widget_show_header" />
<CheckBox
android:id="@+id/showSettings"
style="@style/WidgetConfigRow.CheckBox"
android:checked="true"
android:text="@string/widget_show_settings" />
</LinearLayout> </LinearLayout>

@ -17,7 +17,10 @@
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_gravity="center" android:layout_gravity="center"
android:padding="5dp" /> android:paddingEnd="0dp"
android:paddingLeft="@dimen/widget_padding"
android:paddingRight="0dp"
android:paddingStart="@dimen/widget_padding" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -25,18 +28,20 @@
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toEndOf="@id/widget_complete_box" android:layout_toEndOf="@id/widget_complete_box"
android:layout_toRightOf="@id/widget_complete_box" android:layout_toRightOf="@id/widget_complete_box"
android:orientation="vertical"> android:orientation="vertical"
android:paddingBottom="3dp"
android:paddingTop="3dp">
<TextView <TextView
android:id="@+id/widget_text" android:id="@+id/widget_text"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingEnd="5dp"
android:paddingLeft="0dp"
android:paddingRight="5dp"
android:paddingStart="0dp"
android:singleLine="true"
android:gravity="start|center_vertical" android:gravity="start|center_vertical"
android:paddingEnd="@dimen/widget_padding"
android:paddingLeft="@dimen/widget_padding"
android:paddingRight="@dimen/widget_padding"
android:paddingStart="@dimen/widget_padding"
android:singleLine="true"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textSize="16sp" /> android:textSize="16sp" />
@ -46,10 +51,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="end" android:ellipsize="end"
android:gravity="start|center_vertical" android:gravity="start|center_vertical"
android:paddingEnd="5dp" android:paddingEnd="@dimen/widget_padding"
android:paddingLeft="0dp" android:paddingLeft="@dimen/widget_padding"
android:paddingRight="5dp" android:paddingRight="@dimen/widget_padding"
android:paddingStart="0dp" android:paddingStart="@dimen/widget_padding"
android:singleLine="true" android:singleLine="true"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:textSize="12sp" android:textSize="12sp"

@ -159,9 +159,6 @@
<string name="sync_SPr_interval_title">تحيين في الخلفية</string> <string name="sync_SPr_interval_title">تحيين في الخلفية</string>
<string name="sync_SPr_forget">خروج</string> <string name="sync_SPr_forget">خروج</string>
<string name="sync_forget_confirm">تسجيل الخروج/ مسح معلومات المزامنه؟</string> <string name="sync_forget_confirm">تسجيل الخروج/ مسح معلومات المزامنه؟</string>
<string name="widget_hide_due_date">إخفاء تاريخ الإستحقاق</string>
<string name="widget_hide_checkboxes">إخفاء مربعات الاختيار</string>
<string name="widget_hide_header">إخفاء الجزء العلوي</string>
<string name="notifications">تنبيهات</string> <string name="notifications">تنبيهات</string>
<string name="silent">الصمت</string> <string name="silent">الصمت</string>
<string name="sound">صوت</string> <string name="sound">صوت</string>

@ -282,9 +282,6 @@
<string name="sync_SPr_forget">Излизане</string> <string name="sync_SPr_forget">Излизане</string>
<string name="sync_SPr_forget_description">Изчистване на всички данни от синхронзация</string> <string name="sync_SPr_forget_description">Изчистване на всички данни от синхронзация</string>
<string name="sync_forget_confirm">Изход/изчистване на данните от синхронизация?</string> <string name="sync_forget_confirm">Изход/изчистване на данните от синхронизация?</string>
<string name="widget_hide_due_date">Скриване на крайни срокове</string>
<string name="widget_hide_checkboxes">Скриване на отметки</string>
<string name="widget_hide_header">Скриване на хедър</string>
<string name="notifications">Уведомления</string> <string name="notifications">Уведомления</string>
<string name="silent">Безшумен</string> <string name="silent">Безшумен</string>
<string name="sound">Звук</string> <string name="sound">Звук</string>

@ -274,9 +274,6 @@
<string name="sync_SPr_forget">Abmelden</string> <string name="sync_SPr_forget">Abmelden</string>
<string name="sync_SPr_forget_description">Alle Synchronisationsdaten löschen</string> <string name="sync_SPr_forget_description">Alle Synchronisationsdaten löschen</string>
<string name="sync_forget_confirm">Ausloggen / Synchronisierte Daten löschen?</string> <string name="sync_forget_confirm">Ausloggen / Synchronisierte Daten löschen?</string>
<string name="widget_hide_due_date">Fälligkeitsdatum ausblenden</string>
<string name="widget_hide_checkboxes">Kontrollkästchen ausblenden</string>
<string name="widget_hide_header">Kopfzeile ausblenden</string>
<string name="notifications">Benachrichtigungen</string> <string name="notifications">Benachrichtigungen</string>
<string name="silent">Ton Aus</string> <string name="silent">Ton Aus</string>
<string name="sound">Ton</string> <string name="sound">Ton</string>

@ -278,9 +278,6 @@
<string name="sync_SPr_forget">Cerrar sesión</string> <string name="sync_SPr_forget">Cerrar sesión</string>
<string name="sync_SPr_forget_description">Limpia todos los datos de la sincronización</string> <string name="sync_SPr_forget_description">Limpia todos los datos de la sincronización</string>
<string name="sync_forget_confirm">Cerrar sesión/Limpiar datos de sincronización?</string> <string name="sync_forget_confirm">Cerrar sesión/Limpiar datos de sincronización?</string>
<string name="widget_hide_due_date">Ocultar fechas de vencimiento</string>
<string name="widget_hide_checkboxes">Ocultar casillas de verificación</string>
<string name="widget_hide_header">Ocultar encabezado</string>
<string name="notifications">Notificaciones</string> <string name="notifications">Notificaciones</string>
<string name="silent">Silencioso</string> <string name="silent">Silencioso</string>
<string name="sound">Sonido</string> <string name="sound">Sonido</string>

@ -205,8 +205,6 @@
<string name="DLG_wait">لطفا منتظر بمانید...</string> <string name="DLG_wait">لطفا منتظر بمانید...</string>
<string name="sync_SPr_interval_title">سینک پیش زمینه</string> <string name="sync_SPr_interval_title">سینک پیش زمینه</string>
<string name="sync_SPr_forget">خروج از حساب کاربری</string> <string name="sync_SPr_forget">خروج از حساب کاربری</string>
<string name="widget_hide_due_date">مخفی کردن موعودها</string>
<string name="widget_hide_header">مخفی کردن سربرگ</string>
<string name="notifications">اعلان ها</string> <string name="notifications">اعلان ها</string>
<string name="silent">سکوت</string> <string name="silent">سکوت</string>
<string name="sound">صدا</string> <string name="sound">صدا</string>

@ -275,9 +275,6 @@
<string name="sync_SPr_forget">Se déconnecter</string> <string name="sync_SPr_forget">Se déconnecter</string>
<string name="sync_SPr_forget_description">Supprimer définitivement toutes les données de synchronisation</string> <string name="sync_SPr_forget_description">Supprimer définitivement toutes les données de synchronisation</string>
<string name="sync_forget_confirm">Se déconnecter/Supprimer définitivement toutes les données de synchronisation ?</string> <string name="sync_forget_confirm">Se déconnecter/Supprimer définitivement toutes les données de synchronisation ?</string>
<string name="widget_hide_due_date">Cacher les dates échéantes</string>
<string name="widget_hide_checkboxes">Cacher les cases à cocher</string>
<string name="widget_hide_header">Cacher l\'en-tête</string>
<string name="silent">Silencieux</string> <string name="silent">Silencieux</string>
<string name="sound">Son</string> <string name="sound">Son</string>
<string name="quiet_hours">Heures de repos</string> <string name="quiet_hours">Heures de repos</string>

@ -279,9 +279,6 @@
<string name="sync_SPr_forget">Esci</string> <string name="sync_SPr_forget">Esci</string>
<string name="sync_SPr_forget_description">Cancella tutti i dati di sincronizzazione</string> <string name="sync_SPr_forget_description">Cancella tutti i dati di sincronizzazione</string>
<string name="sync_forget_confirm">Esci / cancella i file di sincronizzazione?</string> <string name="sync_forget_confirm">Esci / cancella i file di sincronizzazione?</string>
<string name="widget_hide_due_date">Nascondi scadenze</string>
<string name="widget_hide_checkboxes">Nascondi caselle di spunta</string>
<string name="widget_hide_header">Nascondi intestazione</string>
<string name="notifications">Notifiche</string> <string name="notifications">Notifiche</string>
<string name="silent">Silente</string> <string name="silent">Silente</string>
<string name="sound">Sonoro</string> <string name="sound">Sonoro</string>

@ -280,9 +280,6 @@
<string name="sync_SPr_forget">התנתק</string> <string name="sync_SPr_forget">התנתק</string>
<string name="sync_SPr_forget_description">מסיר את כל נתוני הסנכרון</string> <string name="sync_SPr_forget_description">מסיר את כל נתוני הסנכרון</string>
<string name="sync_forget_confirm">צא מהחשבון \\ הסר נתוני סנכרון?</string> <string name="sync_forget_confirm">צא מהחשבון \\ הסר נתוני סנכרון?</string>
<string name="widget_hide_due_date">הסתר תאריכי יעד</string>
<string name="widget_hide_checkboxes">הסתר תיבות סימון</string>
<string name="widget_hide_header">הסתר כותרת</string>
<string name="notifications">התראות</string> <string name="notifications">התראות</string>
<string name="silent">שקט</string> <string name="silent">שקט</string>
<string name="sound">שמע</string> <string name="sound">שמע</string>

@ -280,9 +280,6 @@
<string name="sync_SPr_forget">ログアウト</string> <string name="sync_SPr_forget">ログアウト</string>
<string name="sync_SPr_forget_description">すべての同期データを消去します</string> <string name="sync_SPr_forget_description">すべての同期データを消去します</string>
<string name="sync_forget_confirm">ログアウトと同期データを消去しますか?</string> <string name="sync_forget_confirm">ログアウトと同期データを消去しますか?</string>
<string name="widget_hide_due_date">期限を表示しない</string>
<string name="widget_hide_checkboxes">チェックボックスを表示しない</string>
<string name="widget_hide_header">ヘッダーを表示しない</string>
<string name="notifications">通知</string> <string name="notifications">通知</string>
<string name="silent">サイレント</string> <string name="silent">サイレント</string>
<string name="sound">サウンド</string> <string name="sound">サウンド</string>

@ -282,9 +282,6 @@
<string name="sync_SPr_forget">로그아웃</string> <string name="sync_SPr_forget">로그아웃</string>
<string name="sync_SPr_forget_description">모든 동기화 자료 삭제</string> <string name="sync_SPr_forget_description">모든 동기화 자료 삭제</string>
<string name="sync_forget_confirm">로그아웃 / 모든 동기화 데이터 삭제?</string> <string name="sync_forget_confirm">로그아웃 / 모든 동기화 데이터 삭제?</string>
<string name="widget_hide_due_date">완료 예정일 숨기기</string>
<string name="widget_hide_checkboxes">체크박스 숨기기</string>
<string name="widget_hide_header">헤더 숨기기</string>
<string name="notifications">알림</string> <string name="notifications">알림</string>
<string name="silent">무음</string> <string name="silent">무음</string>
<string name="sound">소리</string> <string name="sound">소리</string>

@ -278,9 +278,6 @@
<string name="sync_SPr_forget">Afmelden</string> <string name="sync_SPr_forget">Afmelden</string>
<string name="sync_SPr_forget_description">Alle synchronisatie gegevens verwijderen</string> <string name="sync_SPr_forget_description">Alle synchronisatie gegevens verwijderen</string>
<string name="sync_forget_confirm">Afmelden / synchronisatie gegevens verwijderen?</string> <string name="sync_forget_confirm">Afmelden / synchronisatie gegevens verwijderen?</string>
<string name="widget_hide_due_date">Verberg deadlines</string>
<string name="widget_hide_checkboxes">Verberg vinkboxjes</string>
<string name="widget_hide_header">Verberg header</string>
<string name="notifications">Notificaties</string> <string name="notifications">Notificaties</string>
<string name="silent">Stil</string> <string name="silent">Stil</string>
<string name="sound">Geluid</string> <string name="sound">Geluid</string>

@ -261,9 +261,6 @@
<string name="sync_SPr_forget">Sair</string> <string name="sync_SPr_forget">Sair</string>
<string name="sync_SPr_forget_description">Remove todos os dados de sincronização</string> <string name="sync_SPr_forget_description">Remove todos os dados de sincronização</string>
<string name="sync_forget_confirm">Sair/limpar dados de sincronização?</string> <string name="sync_forget_confirm">Sair/limpar dados de sincronização?</string>
<string name="widget_hide_due_date">Ocultar data limite</string>
<string name="widget_hide_checkboxes">Ocultar caixa de seleção</string>
<string name="widget_hide_header">Ocultar cabeçalho</string>
<string name="notifications">Notificações</string> <string name="notifications">Notificações</string>
<string name="silent">Silêncio</string> <string name="silent">Silêncio</string>
<string name="sound">Som</string> <string name="sound">Som</string>

@ -279,9 +279,6 @@
<string name="sync_SPr_forget">Выйти</string> <string name="sync_SPr_forget">Выйти</string>
<string name="sync_SPr_forget_description">Очищает все данные синхронизации</string> <string name="sync_SPr_forget_description">Очищает все данные синхронизации</string>
<string name="sync_forget_confirm">Выйти / очистить данные синхронизации?</string> <string name="sync_forget_confirm">Выйти / очистить данные синхронизации?</string>
<string name="widget_hide_due_date">Спрятать даты</string>
<string name="widget_hide_checkboxes">Спрятать чекбоксы</string>
<string name="widget_hide_header">Спрятать заголовок</string>
<string name="notifications">Уведомления</string> <string name="notifications">Уведомления</string>
<string name="silent">Без звука</string> <string name="silent">Без звука</string>
<string name="sound">Звук</string> <string name="sound">Звук</string>

@ -255,9 +255,6 @@
<string name="sync_SPr_forget">Odhlásiť</string> <string name="sync_SPr_forget">Odhlásiť</string>
<string name="sync_SPr_forget_description">Vymazať všetky synchronizačné údaje</string> <string name="sync_SPr_forget_description">Vymazať všetky synchronizačné údaje</string>
<string name="sync_forget_confirm">Odhlásiť sa/vymazať synchronizačné údaje?</string> <string name="sync_forget_confirm">Odhlásiť sa/vymazať synchronizačné údaje?</string>
<string name="widget_hide_due_date">Skryť termín</string>
<string name="widget_hide_checkboxes">Skryť zaškrtávacie políčka</string>
<string name="widget_hide_header">Skryť hlavičku</string>
<string name="notifications">Oznámenia</string> <string name="notifications">Oznámenia</string>
<string name="silent">Tichý</string> <string name="silent">Tichý</string>
<string name="sound">Zvuk</string> <string name="sound">Zvuk</string>

@ -278,9 +278,6 @@
<string name="sync_SPr_forget">Logga ut</string> <string name="sync_SPr_forget">Logga ut</string>
<string name="sync_SPr_forget_description">Rensar alla synkroniseringsdata</string> <string name="sync_SPr_forget_description">Rensar alla synkroniseringsdata</string>
<string name="sync_forget_confirm">Logga ut / rensa synkroniseringsdata?</string> <string name="sync_forget_confirm">Logga ut / rensa synkroniseringsdata?</string>
<string name="widget_hide_due_date">Dölj förfallodatum</string>
<string name="widget_hide_checkboxes">Dölj kryssrutor</string>
<string name="widget_hide_header">Dölj rubrik</string>
<string name="notifications">Påminnelser</string> <string name="notifications">Påminnelser</string>
<string name="silent">Tyst</string> <string name="silent">Tyst</string>
<string name="sound">Ljud</string> <string name="sound">Ljud</string>

@ -282,9 +282,6 @@
<string name="sync_SPr_forget">Вийти</string> <string name="sync_SPr_forget">Вийти</string>
<string name="sync_SPr_forget_description">Очищує всю синхронізовану інформацію</string> <string name="sync_SPr_forget_description">Очищує всю синхронізовану інформацію</string>
<string name="sync_forget_confirm">Вийти/очистити синхронізовану інофрмацію?</string> <string name="sync_forget_confirm">Вийти/очистити синхронізовану інофрмацію?</string>
<string name="widget_hide_due_date">Приховати дати виконання</string>
<string name="widget_hide_checkboxes">Сховати галочки</string>
<string name="widget_hide_header">Сховати заголовок</string>
<string name="notifications">Сповіщення</string> <string name="notifications">Сповіщення</string>
<string name="silent">Безшумно</string> <string name="silent">Безшумно</string>
<string name="sound">Звук</string> <string name="sound">Звук</string>

@ -23,4 +23,6 @@
<dimen name="elevation_toolbar">8dp</dimen> <dimen name="elevation_toolbar">8dp</dimen>
<dimen name="elevation_task_list">6dp</dimen> <dimen name="elevation_task_list">6dp</dimen>
<dimen name="elevation_padding">0dp</dimen> <dimen name="elevation_padding">0dp</dimen>
<dimen name="widget_padding">10dp</dimen>
</resources> </resources>

@ -747,9 +747,10 @@ File %1$s contained %2$s.\n\n
<!-- confirmation dialog for sync log out --> <!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Log out/clear synchronization data?</string> <string name="sync_forget_confirm">Log out/clear synchronization data?</string>
<string name="widget_hide_due_date">Hide due dates</string> <string name="widget_show_due_date">Show due dates</string>
<string name="widget_hide_checkboxes">Hide checkboxes</string> <string name="widget_show_checkboxes">Show checkboxes</string>
<string name="widget_hide_header">Hide header</string> <string name="widget_show_header">Show header</string>
<string name="widget_show_settings">Show settings</string>
<string name="notifications">Notifications</string> <string name="notifications">Notifications</string>
<string name="silent">Silent</string> <string name="silent">Silent</string>
<string name="sound">Sound</string> <string name="sound">Sound</string>

Loading…
Cancel
Save