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" /> + + +