Edit widget settings from app preferences

pull/996/head
Alex Baker 6 years ago
parent 087c387462
commit d19bd08208

@ -23,6 +23,7 @@ import org.tasks.preferences.fragments.ScrollableWidget;
import org.tasks.preferences.fragments.Synchronization; import org.tasks.preferences.fragments.Synchronization;
import org.tasks.preferences.fragments.TaskDefaults; import org.tasks.preferences.fragments.TaskDefaults;
import org.tasks.preferences.fragments.TaskerListNotification; import org.tasks.preferences.fragments.TaskerListNotification;
import org.tasks.preferences.fragments.Widgets;
import org.tasks.ui.CalendarControlSet; import org.tasks.ui.CalendarControlSet;
import org.tasks.ui.DeadlineControlSet; import org.tasks.ui.DeadlineControlSet;
import org.tasks.ui.DescriptionControlSet; import org.tasks.ui.DescriptionControlSet;
@ -100,4 +101,6 @@ public interface FragmentComponent {
void inject(EmptyTaskEditFragment emptyTaskEditFragment); void inject(EmptyTaskEditFragment emptyTaskEditFragment);
void inject(NavigationDrawer navigationDrawer); void inject(NavigationDrawer navigationDrawer);
void inject(Widgets widgets);
} }

@ -5,13 +5,20 @@ import org.tasks.BuildConfig
import org.tasks.R import org.tasks.R
import org.tasks.injection.FragmentComponent import org.tasks.injection.FragmentComponent
import org.tasks.injection.InjectingPreferenceFragment import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.widget.AppWidgetManager
import javax.inject.Inject
class MainSettingsFragment : InjectingPreferenceFragment() { class MainSettingsFragment : InjectingPreferenceFragment() {
@Inject lateinit var appWidgetManager: AppWidgetManager
override fun inject(component: FragmentComponent) = component.inject(this) override fun inject(component: FragmentComponent) = component.inject(this)
override fun getPreferenceXml() = R.xml.preferences override fun getPreferenceXml() = R.xml.preferences
override fun setupPreferences(savedInstanceState: Bundle?) { override fun setupPreferences(savedInstanceState: Bundle?) {
requires(BuildConfig.DEBUG, R.string.debug) requires(BuildConfig.DEBUG, R.string.debug)
requires(appWidgetManager.widgetIds.isNotEmpty(), R.string.widget_settings)
} }
} }

@ -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)
}

@ -175,7 +175,8 @@ object CustomIcons {
1135 to R.drawable.ic_single_bed_24px, 1135 to R.drawable.ic_single_bed_24px,
1136 to R.drawable.ic_weather_sunset, 1136 to R.drawable.ic_weather_sunset,
1137 to R.drawable.ic_calendar_today_24px, 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 @kotlin.jvm.JvmStatic

@ -19,9 +19,7 @@ public class AppWidgetManager {
} }
public void updateWidgets() { public void updateWidgets() {
int[] widgetIds = appWidgetManager.notifyAppWidgetViewDataChanged(getWidgetIds(), R.id.list_view);
appWidgetManager.getAppWidgetIds(new ComponentName(context, TasksWidget.class));
appWidgetManager.notifyAppWidgetViewDataChanged(widgetIds, R.id.list_view);
} }
public void reconfigureWidget(int appWidgetId) { public void reconfigureWidget(int appWidgetId) {
@ -31,4 +29,8 @@ public class AppWidgetManager {
context.sendBroadcast(intent); context.sendBroadcast(intent);
updateWidgets(); updateWidgets();
} }
public int[] getWidgetIds() {
return appWidgetManager.getAppWidgetIds(new ComponentName(context, TasksWidget.class));
}
} }

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M16.66,4.52l2.83,2.83 -2.83,2.83 -2.83,-2.83 2.83,-2.83M9,5v4L5,9L5,5h4m10,10v4h-4v-4h4M9,15v4L5,19v-4h4m7.66,-13.31L11,7.34 16.66,13l5.66,-5.66 -5.66,-5.65zM11,3L3,3v8h8L11,3zM21,13h-8v8h8v-8zM11,13L3,13v8h8v-8z"/>
</vector>

@ -581,4 +581,5 @@ File %1$s contained %2$s.\n\n
<string name="select_all">Select all</string> <string name="select_all">Select all</string>
<string name="share">Share</string> <string name="share">Share</string>
<string name="hide_check_button">Hide check button</string> <string name="hide_check_button">Hide check button</string>
<string name="widget_id">Widget ID: %s</string>
</resources> </resources>

@ -32,6 +32,11 @@
app:icon="@drawable/ic_outline_sd_storage_24px" app:icon="@drawable/ic_outline_sd_storage_24px"
app:title="@string/backup_BPr_header" /> app:title="@string/backup_BPr_header" />
<Preference
app:fragment="org.tasks.preferences.fragments.Widgets"
app:icon="@drawable/ic_widgets_24px"
app:title="@string/widget_settings" />
<Preference <Preference
app:fragment="org.tasks.preferences.fragments.Advanced" app:fragment="org.tasks.preferences.fragments.Advanced"
app:icon="@drawable/ic_outline_build_24px" app:icon="@drawable/ic_outline_build_24px"

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen/>
Loading…
Cancel
Save