diff --git a/app/src/main/java/org/tasks/injection/FragmentComponent.java b/app/src/main/java/org/tasks/injection/FragmentComponent.java
index 1e8d21728..bcb837d8c 100644
--- a/app/src/main/java/org/tasks/injection/FragmentComponent.java
+++ b/app/src/main/java/org/tasks/injection/FragmentComponent.java
@@ -23,6 +23,7 @@ import org.tasks.preferences.fragments.ScrollableWidget;
import org.tasks.preferences.fragments.Synchronization;
import org.tasks.preferences.fragments.TaskDefaults;
import org.tasks.preferences.fragments.TaskerListNotification;
+import org.tasks.preferences.fragments.Widgets;
import org.tasks.ui.CalendarControlSet;
import org.tasks.ui.DeadlineControlSet;
import org.tasks.ui.DescriptionControlSet;
@@ -100,4 +101,6 @@ public interface FragmentComponent {
void inject(EmptyTaskEditFragment emptyTaskEditFragment);
void inject(NavigationDrawer navigationDrawer);
+
+ void inject(Widgets widgets);
}
diff --git a/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt b/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt
index 47b812776..6445936c3 100644
--- a/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt
+++ b/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt
@@ -5,13 +5,20 @@ import org.tasks.BuildConfig
import org.tasks.R
import org.tasks.injection.FragmentComponent
import org.tasks.injection.InjectingPreferenceFragment
+import org.tasks.widget.AppWidgetManager
+import javax.inject.Inject
class MainSettingsFragment : InjectingPreferenceFragment() {
+
+ @Inject lateinit var appWidgetManager: AppWidgetManager
+
override fun inject(component: FragmentComponent) = component.inject(this)
override fun getPreferenceXml() = R.xml.preferences
override fun setupPreferences(savedInstanceState: Bundle?) {
requires(BuildConfig.DEBUG, R.string.debug)
+
+ requires(appWidgetManager.widgetIds.isNotEmpty(), R.string.widget_settings)
}
}
diff --git a/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt b/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt
new file mode 100644
index 000000000..54370230d
--- /dev/null
+++ b/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt
@@ -0,0 +1,50 @@
+package org.tasks.preferences.fragments
+
+import android.content.Intent
+import android.os.Bundle
+import androidx.preference.Preference
+import org.tasks.R
+import org.tasks.injection.FragmentComponent
+import org.tasks.injection.InjectingPreferenceFragment
+import org.tasks.preferences.DefaultFilterProvider
+import org.tasks.preferences.Preferences
+import org.tasks.widget.AppWidgetManager
+import org.tasks.widget.WidgetConfigActivity
+import org.tasks.widget.WidgetPreferences
+import javax.inject.Inject
+
+
+class Widgets : InjectingPreferenceFragment() {
+
+ @Inject lateinit var preferences: Preferences
+ @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
+ @Inject lateinit var appWidgetManager: AppWidgetManager
+
+ override fun getPreferenceXml() = R.xml.preferences_widgets
+
+ override fun setupPreferences(savedInstanceState: Bundle?) {
+ }
+
+ override fun onResume() {
+ super.onResume()
+
+ preferenceScreen.removeAll()
+ appWidgetManager.widgetIds.forEach {
+ val widgetPrefs = WidgetPreferences(context, preferences, it)
+ val pref = Preference(context)
+ val filter = defaultFilterProvider.getFilterFromPreference(widgetPrefs.filterId)
+ pref.title = filter.listingTitle
+ pref.summary = getString(R.string.widget_id, it)
+ val intent = Intent(context, WidgetConfigActivity::class.java)
+ intent.putExtra(android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID, it)
+ intent.action = "widget_settings"
+ pref.setOnPreferenceClickListener {
+ startActivity(intent)
+ false
+ }
+ preferenceScreen.addPreference(pref)
+ }
+ }
+
+ override fun inject(component: FragmentComponent) = component.inject(this)
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/tasks/themes/CustomIcons.kt b/app/src/main/java/org/tasks/themes/CustomIcons.kt
index b20c6c865..e8d2b03fe 100644
--- a/app/src/main/java/org/tasks/themes/CustomIcons.kt
+++ b/app/src/main/java/org/tasks/themes/CustomIcons.kt
@@ -175,7 +175,8 @@ object CustomIcons {
1135 to R.drawable.ic_single_bed_24px,
1136 to R.drawable.ic_weather_sunset,
1137 to R.drawable.ic_calendar_today_24px,
- 1138 to R.drawable.ic_select_all_24px
+ 1138 to R.drawable.ic_select_all_24px,
+ 1139 to R.drawable.ic_widgets_24px
)
@kotlin.jvm.JvmStatic
diff --git a/app/src/main/java/org/tasks/widget/AppWidgetManager.java b/app/src/main/java/org/tasks/widget/AppWidgetManager.java
index 39a14d564..ff4c3d0c1 100644
--- a/app/src/main/java/org/tasks/widget/AppWidgetManager.java
+++ b/app/src/main/java/org/tasks/widget/AppWidgetManager.java
@@ -19,9 +19,7 @@ public class AppWidgetManager {
}
public void updateWidgets() {
- int[] widgetIds =
- appWidgetManager.getAppWidgetIds(new ComponentName(context, TasksWidget.class));
- appWidgetManager.notifyAppWidgetViewDataChanged(widgetIds, R.id.list_view);
+ appWidgetManager.notifyAppWidgetViewDataChanged(getWidgetIds(), R.id.list_view);
}
public void reconfigureWidget(int appWidgetId) {
@@ -31,4 +29,8 @@ public class AppWidgetManager {
context.sendBroadcast(intent);
updateWidgets();
}
+
+ public int[] getWidgetIds() {
+ return appWidgetManager.getAppWidgetIds(new ComponentName(context, TasksWidget.class));
+ }
}
diff --git a/app/src/main/res/drawable/ic_widgets_24px.xml b/app/src/main/res/drawable/ic_widgets_24px.xml
new file mode 100644
index 000000000..8afdce13d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_widgets_24px.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1ff9b7e77..4f4a03358 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -581,4 +581,5 @@ File %1$s contained %2$s.\n\n
Select all
Share
Hide check button
+ Widget ID: %s
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index fbfce1aea..794580c4a 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -32,6 +32,11 @@
app:icon="@drawable/ic_outline_sd_storage_24px"
app:title="@string/backup_BPr_header" />
+
+
+