diff --git a/app/src/main/java/org/tasks/preferences/Preferences.java b/app/src/main/java/org/tasks/preferences/Preferences.java
index 218e19bcc..ac6bd7975 100644
--- a/app/src/main/java/org/tasks/preferences/Preferences.java
+++ b/app/src/main/java/org/tasks/preferences/Preferences.java
@@ -247,8 +247,11 @@ public class Preferences {
}
public int getIntegerFromString(int keyResource, int defaultValue) {
- Resources r = context.getResources();
- String value = prefs.getString(r.getString(keyResource), null);
+ return getIntegerFromString(context.getString(keyResource), defaultValue);
+ }
+
+ public int getIntegerFromString(String keyResource, int defaultValue) {
+ String value = prefs.getString(keyResource, null);
if (value == null) {
return defaultValue;
}
diff --git a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt
index 36fafc8d2..b3ea7ee84 100644
--- a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt
+++ b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt
@@ -4,6 +4,7 @@ import android.app.Activity
import android.appwidget.AppWidgetManager
import android.content.Intent
import android.os.Bundle
+import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.SeekBarPreference
import androidx.preference.SwitchPreferenceCompat
@@ -63,6 +64,7 @@ class ScrollableWidget : InjectingPreferenceFragment() {
setupSlider(R.string.p_widget_font_size, 16)
setupCheckbox(R.string.p_widget_show_due_date)
setupCheckbox(R.string.p_widget_show_checkboxes)
+ setupList(R.string.p_widget_spacing)
val showHeader = setupCheckbox(R.string.p_widget_show_header)
val showSettings = setupCheckbox(R.string.p_widget_show_settings)
showSettings.dependency = showHeader.key
@@ -167,5 +169,13 @@ class ScrollableWidget : InjectingPreferenceFragment() {
return preference
}
+ private fun setupList(resId: Int): ListPreference {
+ val preference = findPreference(resId) as ListPreference
+ val key = getString(resId) + appWidgetId
+ preference.key = key
+ preference.value = preferences.getStringValue(key) ?: "0"
+ return preference
+ }
+
override fun inject(component: FragmentComponent) = component.inject(this)
}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.java b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.java
index cab339308..4ea6f2543 100644
--- a/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.java
+++ b/app/src/main/java/org/tasks/widget/ScrollableViewsFactory.java
@@ -169,19 +169,21 @@ class ScrollableViewsFactory implements RemoteViewsService.RemoteViewsFactory {
editIntent.putExtra(WidgetClickActivity.EXTRA_TASK, task);
row.setOnClickFillInIntent(R.id.widget_row, editIntent);
- int widgetPadding = (int) context.getResources().getDimension(R.dimen.widget_padding);
- int textBottomPadding = showDueDates && task.hasDueDate() ? 0 : widgetPadding;
+ int horizontalPadding = (int) context.getResources().getDimension(R.dimen.widget_padding);
+ int verticalPadding = widgetPreferences.getWidgetSpacing();
+ int textBottomPadding = showDueDates && task.hasDueDate() ? 0 : verticalPadding;
+ row.setViewPadding(R.id.widget_complete_box, horizontalPadding, verticalPadding, horizontalPadding, verticalPadding);
if (showCheckboxes) {
row.setViewVisibility(R.id.widget_complete_box, View.VISIBLE);
Intent completeIntent = new Intent(WidgetClickActivity.COMPLETE_TASK);
completeIntent.putExtra(WidgetClickActivity.EXTRA_TASK, task);
row.setOnClickFillInIntent(R.id.widget_complete_box, completeIntent);
- row.setViewPadding(R.id.widget_text, 0, widgetPadding, widgetPadding, textBottomPadding);
- row.setViewPadding(R.id.widget_due_date, 0, 0, widgetPadding, widgetPadding);
+ row.setViewPadding(R.id.widget_text, 0, verticalPadding, horizontalPadding, textBottomPadding);
+ row.setViewPadding(R.id.widget_due_date, 0, 0, horizontalPadding, verticalPadding);
} else {
row.setViewVisibility(R.id.widget_complete_box, View.GONE);
- row.setViewPadding(R.id.widget_text, widgetPadding, widgetPadding, widgetPadding, textBottomPadding);
- row.setViewPadding(R.id.widget_due_date, widgetPadding, 0, widgetPadding, widgetPadding);
+ row.setViewPadding(R.id.widget_text, horizontalPadding, verticalPadding, horizontalPadding, textBottomPadding);
+ row.setViewPadding(R.id.widget_due_date, horizontalPadding, 0, horizontalPadding, verticalPadding);
}
int dividerColor = ContextCompat.getColor(context, widgetPreferences.getThemeIndex() == 0 ? R.color.black_12 : R.color.white_12);
diff --git a/app/src/main/java/org/tasks/widget/TasksWidget.java b/app/src/main/java/org/tasks/widget/TasksWidget.java
index 0249f2563..c93c63d1c 100644
--- a/app/src/main/java/org/tasks/widget/TasksWidget.java
+++ b/app/src/main/java/org/tasks/widget/TasksWidget.java
@@ -76,6 +76,7 @@ public class TasksWidget extends InjectingAppWidgetProvider {
ThemeColor color = new ThemeColor(context, widgetPreferences.getColor());
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.scrollable_widget);
remoteViews.setInt(R.id.widget, "setLayoutDirection", locale.getDirectionality());
+ int rowSpacing = widgetPreferences.getWidgetSpacing();
if (widgetPreferences.showHeader()) {
remoteViews.setViewVisibility(R.id.widget_header, View.VISIBLE);
remoteViews.setViewVisibility(
diff --git a/app/src/main/java/org/tasks/widget/WidgetPreferences.java b/app/src/main/java/org/tasks/widget/WidgetPreferences.java
index 1cb9ed22f..3d7e1a4e3 100644
--- a/app/src/main/java/org/tasks/widget/WidgetPreferences.java
+++ b/app/src/main/java/org/tasks/widget/WidgetPreferences.java
@@ -38,6 +38,15 @@ public class WidgetPreferences {
return preferences.getBoolean(getKey(R.string.p_widget_show_menu), true);
}
+ int getWidgetSpacing() {
+ int spacing = preferences.getIntegerFromString(getKey(R.string.p_widget_spacing), 0);
+ if (spacing == 2) {
+ return 0;
+ }
+ int dimen = spacing == 1 ? R.dimen.widget_padding_compact : R.dimen.widget_padding;
+ return (int) context.getResources().getDimension(dimen);
+ }
+
int getFontSize() {
return preferences.getInt(getKey(R.string.p_widget_font_size), 16);
}
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 0f6056b98..a42ceba9b 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -22,6 +22,7 @@
3dp
0dp
+ 6dp
12dp
6dp
48dp
diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml
index 66c9c9fea..174b3b701 100644
--- a/app/src/main/res/values/keys.xml
+++ b/app/src/main/res/values/keys.xml
@@ -110,6 +110,18 @@
- 3
+
+ - @string/settings_default
+ - @string/compact
+ - @string/none
+
+
+
+ - 0
+ - 1
+ - 2
+
+
- 0
@@ -261,6 +273,7 @@
widget-show-header-
widget-show-settings-
widget-show-menu-
+ widget-spacing-
dashclock_filter
default_remote_list
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a8d278d1d..081884c4f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -583,4 +583,6 @@ File %1$s contained %2$s.\n\n
Share
Hide check button
Widget ID: %s
+ Default
+ Compact
diff --git a/app/src/main/res/xml/preferences_widget.xml b/app/src/main/res/xml/preferences_widget.xml
index ab0dfae1d..137a208ec 100644
--- a/app/src/main/res/xml/preferences_widget.xml
+++ b/app/src/main/res/xml/preferences_widget.xml
@@ -57,6 +57,14 @@
android:key="@string/p_widget_show_checkboxes"
android:title="@string/widget_show_checkboxes" />
+
+
\ No newline at end of file