mirror of https://github.com/tasks/tasks
Migrate WidgetConfigActivity to androidx prefs
parent
4d901351da
commit
09d2314411
@ -0,0 +1,82 @@
|
|||||||
|
package org.tasks.preferences
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.appcompat.widget.Toolbar
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.preference.Preference
|
||||||
|
import androidx.preference.PreferenceFragmentCompat
|
||||||
|
import org.tasks.R
|
||||||
|
import org.tasks.databinding.ActivityPreferencesBinding
|
||||||
|
import org.tasks.injection.ThemedInjectingAppCompatActivity
|
||||||
|
import org.tasks.ui.MenuColorizer
|
||||||
|
|
||||||
|
private const val EXTRA_TITLE = "extra_title"
|
||||||
|
|
||||||
|
abstract class BasePreferences : ThemedInjectingAppCompatActivity(),
|
||||||
|
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
|
||||||
|
|
||||||
|
lateinit var toolbar: Toolbar
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
val binding = ActivityPreferencesBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
toolbar = binding.toolbar.toolbar
|
||||||
|
if (savedInstanceState == null) {
|
||||||
|
supportFragmentManager
|
||||||
|
.beginTransaction()
|
||||||
|
.replace(R.id.settings, getRootPreference())
|
||||||
|
.commit()
|
||||||
|
toolbar.title = getString(getRootTitle())
|
||||||
|
} else {
|
||||||
|
toolbar.title = savedInstanceState.getCharSequence(EXTRA_TITLE)
|
||||||
|
}
|
||||||
|
supportFragmentManager.addOnBackStackChangedListener {
|
||||||
|
if (supportFragmentManager.backStackEntryCount == 0) {
|
||||||
|
toolbar.title = getString(getRootTitle())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
toolbar.navigationIcon = ContextCompat.getDrawable(this, R.drawable.ic_outline_arrow_back_24px);
|
||||||
|
toolbar.setNavigationOnClickListener { onBackPressed() }
|
||||||
|
setupMenu()
|
||||||
|
MenuColorizer.colorToolbar(this, toolbar)
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun setupMenu() {}
|
||||||
|
|
||||||
|
abstract fun getRootTitle(): Int
|
||||||
|
|
||||||
|
abstract fun getRootPreference(): PreferenceFragmentCompat
|
||||||
|
|
||||||
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
|
super.onSaveInstanceState(outState)
|
||||||
|
outState.putCharSequence(EXTRA_TITLE, toolbar.title)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSupportNavigateUp(): Boolean {
|
||||||
|
if (supportFragmentManager.popBackStackImmediate()) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return super.onSupportNavigateUp()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPreferenceStartFragment(
|
||||||
|
caller: PreferenceFragmentCompat,
|
||||||
|
pref: Preference
|
||||||
|
): Boolean {
|
||||||
|
val args = pref.extras
|
||||||
|
val fragment = supportFragmentManager.fragmentFactory.instantiate(
|
||||||
|
classLoader,
|
||||||
|
pref.fragment
|
||||||
|
).apply {
|
||||||
|
arguments = args
|
||||||
|
setTargetFragment(caller, 0)
|
||||||
|
}
|
||||||
|
supportFragmentManager.beginTransaction()
|
||||||
|
.replace(R.id.settings, fragment)
|
||||||
|
.addToBackStack(null)
|
||||||
|
.commit()
|
||||||
|
toolbar.title = pref.title
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
@ -1,81 +1,16 @@
|
|||||||
package org.tasks.preferences
|
package org.tasks.preferences
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.appcompat.widget.Toolbar
|
|
||||||
import androidx.core.content.ContextCompat
|
|
||||||
import androidx.preference.Preference
|
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
|
||||||
import org.tasks.R
|
import org.tasks.R
|
||||||
import org.tasks.databinding.ActivityPreferencesBinding
|
|
||||||
import org.tasks.injection.ActivityComponent
|
import org.tasks.injection.ActivityComponent
|
||||||
import org.tasks.injection.ThemedInjectingAppCompatActivity
|
|
||||||
import org.tasks.preferences.fragments.HelpAndFeedback
|
import org.tasks.preferences.fragments.HelpAndFeedback
|
||||||
import org.tasks.ui.MenuColorizer
|
|
||||||
|
|
||||||
private const val EXTRA_TITLE = "extra_title"
|
class HelpAndFeedback : BasePreferences() {
|
||||||
|
|
||||||
class HelpAndFeedback : ThemedInjectingAppCompatActivity(),
|
override fun getRootTitle() = R.string.help_and_feedback
|
||||||
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
|
|
||||||
|
|
||||||
lateinit var toolbar: Toolbar
|
override fun getRootPreference() = HelpAndFeedback()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
val binding = ActivityPreferencesBinding.inflate(layoutInflater)
|
|
||||||
setContentView(binding.root)
|
|
||||||
toolbar = binding.toolbar.toolbar
|
|
||||||
if (savedInstanceState == null) {
|
|
||||||
supportFragmentManager
|
|
||||||
.beginTransaction()
|
|
||||||
.replace(R.id.settings, HelpAndFeedback())
|
|
||||||
.commit()
|
|
||||||
toolbar.title = getString(R.string.help_and_feedback)
|
|
||||||
} else {
|
|
||||||
toolbar.title = savedInstanceState.getCharSequence(EXTRA_TITLE)
|
|
||||||
}
|
|
||||||
supportFragmentManager.addOnBackStackChangedListener {
|
|
||||||
if (supportFragmentManager.backStackEntryCount == 0) {
|
|
||||||
toolbar.title = getString(R.string.help_and_feedback)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
toolbar.navigationIcon = ContextCompat.getDrawable(this, R.drawable.ic_outline_arrow_back_24px);
|
|
||||||
toolbar.setNavigationOnClickListener { onBackPressed() }
|
|
||||||
MenuColorizer.colorToolbar(this, toolbar)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun inject(component: ActivityComponent) {
|
override fun inject(component: ActivityComponent) {
|
||||||
component.inject(this)
|
component.inject(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
|
||||||
super.onSaveInstanceState(outState)
|
|
||||||
outState.putCharSequence(EXTRA_TITLE, toolbar.title)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSupportNavigateUp(): Boolean {
|
|
||||||
if (supportFragmentManager.popBackStackImmediate()) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return super.onSupportNavigateUp()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPreferenceStartFragment(
|
|
||||||
caller: PreferenceFragmentCompat,
|
|
||||||
pref: Preference
|
|
||||||
): Boolean {
|
|
||||||
val args = pref.extras
|
|
||||||
val fragment = supportFragmentManager.fragmentFactory.instantiate(
|
|
||||||
classLoader,
|
|
||||||
pref.fragment
|
|
||||||
).apply {
|
|
||||||
arguments = args
|
|
||||||
setTargetFragment(caller, 0)
|
|
||||||
}
|
|
||||||
supportFragmentManager.beginTransaction()
|
|
||||||
.replace(R.id.settings, fragment)
|
|
||||||
.addToBackStack(null)
|
|
||||||
.commit()
|
|
||||||
toolbar.title = pref.title
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -0,0 +1,172 @@
|
|||||||
|
package org.tasks.preferences.fragments
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import android.appwidget.AppWidgetManager
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.preference.Preference
|
||||||
|
import androidx.preference.SeekBarPreference
|
||||||
|
import androidx.preference.SwitchPreferenceCompat
|
||||||
|
import com.todoroo.astrid.api.Filter
|
||||||
|
import org.tasks.LocalBroadcastManager
|
||||||
|
import org.tasks.R
|
||||||
|
import org.tasks.activities.ColorPickerActivity
|
||||||
|
import org.tasks.activities.FilterSelectionActivity
|
||||||
|
import org.tasks.injection.FragmentComponent
|
||||||
|
import org.tasks.injection.InjectingPreferenceFragment
|
||||||
|
import org.tasks.locale.Locale
|
||||||
|
import org.tasks.preferences.DefaultFilterProvider
|
||||||
|
import org.tasks.preferences.Preferences
|
||||||
|
import org.tasks.themes.ThemeCache
|
||||||
|
import org.tasks.themes.ThemeColor
|
||||||
|
import org.tasks.themes.WidgetTheme
|
||||||
|
import org.tasks.widget.TasksWidget
|
||||||
|
import org.tasks.widget.WidgetPreferences
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
private const val REQUEST_FILTER = 1005
|
||||||
|
private const val REQUEST_THEME_SELECTION = 1006
|
||||||
|
private const val REQUEST_COLOR_SELECTION = 1007
|
||||||
|
|
||||||
|
const val EXTRA_WIDGET_ID = "extra_widget_id"
|
||||||
|
|
||||||
|
class ScrollableWidget : InjectingPreferenceFragment() {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun newScrollableWidget(appWidgetId: Int): ScrollableWidget {
|
||||||
|
val widget = ScrollableWidget()
|
||||||
|
val args = Bundle()
|
||||||
|
args.putInt(EXTRA_WIDGET_ID, appWidgetId)
|
||||||
|
widget.arguments = args
|
||||||
|
return widget
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider
|
||||||
|
@Inject lateinit var preferences: Preferences
|
||||||
|
@Inject lateinit var locale: Locale
|
||||||
|
@Inject lateinit var themeCache: ThemeCache
|
||||||
|
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
|
||||||
|
|
||||||
|
private lateinit var widgetPreferences: WidgetPreferences
|
||||||
|
private var appWidgetId = 0
|
||||||
|
|
||||||
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
|
setPreferencesFromResource(R.xml.preferences_widget, rootKey)
|
||||||
|
|
||||||
|
appWidgetId = arguments!!.getInt(EXTRA_WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID)
|
||||||
|
widgetPreferences = WidgetPreferences(context, preferences, appWidgetId)
|
||||||
|
|
||||||
|
setupSlider(R.string.p_widget_opacity, 100)
|
||||||
|
setupSlider(R.string.p_widget_font_size, 16)
|
||||||
|
setupCheckbox(R.string.p_widget_show_due_date)
|
||||||
|
setupCheckbox(R.string.p_widget_show_checkboxes)
|
||||||
|
val showHeader = setupCheckbox(R.string.p_widget_show_header)
|
||||||
|
val showSettings = setupCheckbox(R.string.p_widget_show_settings)
|
||||||
|
showSettings.dependency = showHeader.key
|
||||||
|
|
||||||
|
findPreference(R.string.p_widget_filter)
|
||||||
|
.setOnPreferenceClickListener {
|
||||||
|
val intent = Intent(context, FilterSelectionActivity::class.java)
|
||||||
|
intent.putExtra(FilterSelectionActivity.EXTRA_FILTER, getFilter())
|
||||||
|
intent.putExtra(FilterSelectionActivity.EXTRA_RETURN_FILTER, true)
|
||||||
|
startActivityForResult(intent, REQUEST_FILTER)
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
findPreference(R.string.p_widget_theme)
|
||||||
|
.setOnPreferenceClickListener {
|
||||||
|
val intent = Intent(context, ColorPickerActivity::class.java)
|
||||||
|
intent.putExtra(
|
||||||
|
ColorPickerActivity.EXTRA_PALETTE,
|
||||||
|
ColorPickerActivity.ColorPalette.WIDGET_BACKGROUND)
|
||||||
|
intent.putExtra(
|
||||||
|
ColorPickerActivity.EXTRA_THEME_INDEX, widgetPreferences.themeIndex)
|
||||||
|
startActivityForResult(intent, REQUEST_THEME_SELECTION)
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
val colorPreference = findPreference(R.string.p_widget_color)
|
||||||
|
colorPreference.dependency = showHeader.key
|
||||||
|
colorPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
|
||||||
|
val intent = Intent(context, ColorPickerActivity::class.java)
|
||||||
|
intent.putExtra(
|
||||||
|
ColorPickerActivity.EXTRA_PALETTE, ColorPickerActivity.ColorPalette.COLORS)
|
||||||
|
intent.putExtra(ColorPickerActivity.EXTRA_THEME_INDEX, widgetPreferences.colorIndex)
|
||||||
|
startActivityForResult(intent, REQUEST_COLOR_SELECTION)
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
updateFilter()
|
||||||
|
updateTheme()
|
||||||
|
updateColor()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
|
if (requestCode == REQUEST_FILTER) {
|
||||||
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
|
val filter: Filter = data!!.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER)!!
|
||||||
|
widgetPreferences.setFilter(defaultFilterProvider.getFilterPreferenceValue(filter))
|
||||||
|
updateFilter()
|
||||||
|
}
|
||||||
|
} else if (requestCode == REQUEST_THEME_SELECTION) {
|
||||||
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
|
widgetPreferences.setTheme(data!!.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0))
|
||||||
|
updateTheme()
|
||||||
|
}
|
||||||
|
} else if (requestCode == REQUEST_COLOR_SELECTION) {
|
||||||
|
if (resultCode == Activity.RESULT_OK) {
|
||||||
|
widgetPreferences.setColor(data!!.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0))
|
||||||
|
updateColor()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPause() {
|
||||||
|
super.onPause()
|
||||||
|
|
||||||
|
localBroadcastManager.broadcastRefresh()
|
||||||
|
// force update after setting preferences
|
||||||
|
val intent = Intent(context, TasksWidget::class.java)
|
||||||
|
intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
|
||||||
|
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(appWidgetId))
|
||||||
|
activity!!.sendBroadcast(intent)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateTheme() {
|
||||||
|
val widgetTheme: WidgetTheme = themeCache.getWidgetTheme(widgetPreferences.themeIndex)
|
||||||
|
findPreference(R.string.p_widget_theme).summary = widgetTheme.name
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateColor() {
|
||||||
|
val themeColor: ThemeColor = themeCache.getThemeColor(widgetPreferences.colorIndex)
|
||||||
|
findPreference(R.string.p_widget_color).summary = themeColor.name
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateFilter() {
|
||||||
|
findPreference(R.string.p_widget_filter).summary = getFilter()!!.listingTitle
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getFilter(): Filter? {
|
||||||
|
return defaultFilterProvider.getFilterFromPreference(widgetPreferences.filterId)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupSlider(resId: Int, defValue: Int): SeekBarPreference {
|
||||||
|
val preference = findPreference(resId) as SeekBarPreference
|
||||||
|
preference.key = widgetPreferences.getKey(resId)
|
||||||
|
preference.value = preferences.getInt(preference.key, defValue)
|
||||||
|
return preference
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupCheckbox(resId: Int): SwitchPreferenceCompat {
|
||||||
|
val preference = findPreference(resId) as SwitchPreferenceCompat
|
||||||
|
val key = getString(resId) + appWidgetId
|
||||||
|
preference.key = key
|
||||||
|
preference.isChecked = preferences.getBoolean(key, true)
|
||||||
|
return preference
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun inject(component: FragmentComponent) = component.inject(this)
|
||||||
|
}
|
@ -1,232 +0,0 @@
|
|||||||
package org.tasks.widget;
|
|
||||||
|
|
||||||
import static org.tasks.dialogs.NativeSeekBarDialog.newSeekBarDialog;
|
|
||||||
|
|
||||||
import android.appwidget.AppWidgetManager;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.preference.CheckBoxPreference;
|
|
||||||
import android.preference.Preference;
|
|
||||||
import com.todoroo.astrid.api.Filter;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import org.tasks.LocalBroadcastManager;
|
|
||||||
import org.tasks.R;
|
|
||||||
import org.tasks.activities.ColorPickerActivity;
|
|
||||||
import org.tasks.activities.FilterSelectionActivity;
|
|
||||||
import org.tasks.analytics.Tracker;
|
|
||||||
import org.tasks.dialogs.DialogBuilder;
|
|
||||||
import org.tasks.dialogs.NativeSeekBarDialog;
|
|
||||||
import org.tasks.injection.ActivityComponent;
|
|
||||||
import org.tasks.injection.InjectingPreferenceActivity;
|
|
||||||
import org.tasks.locale.Locale;
|
|
||||||
import org.tasks.preferences.DefaultFilterProvider;
|
|
||||||
import org.tasks.preferences.Preferences;
|
|
||||||
import org.tasks.themes.ThemeCache;
|
|
||||||
import org.tasks.themes.ThemeColor;
|
|
||||||
import org.tasks.themes.WidgetTheme;
|
|
||||||
|
|
||||||
public class WidgetConfigActivity extends InjectingPreferenceActivity
|
|
||||||
implements NativeSeekBarDialog.SeekBarCallback {
|
|
||||||
|
|
||||||
private static final String FRAG_TAG_OPACITY_SEEKBAR = "frag_tag_opacity_seekbar";
|
|
||||||
private static final String FRAG_TAG_FONT_SIZE_SEEKBAR = "frag_tag_font_size_seekbar";
|
|
||||||
|
|
||||||
private static final int REQUEST_FILTER = 1005;
|
|
||||||
private static final int REQUEST_THEME_SELECTION = 1006;
|
|
||||||
private static final int REQUEST_COLOR_SELECTION = 1007;
|
|
||||||
private static final int REQUEST_OPACITY = 1008;
|
|
||||||
private static final int REQUEST_FONT_SIZE = 1009;
|
|
||||||
|
|
||||||
@Inject Tracker tracker;
|
|
||||||
@Inject DialogBuilder dialogBuilder;
|
|
||||||
@Inject LocalBroadcastManager localBroadcastManager;
|
|
||||||
@Inject Preferences preferences;
|
|
||||||
@Inject DefaultFilterProvider defaultFilterProvider;
|
|
||||||
@Inject ThemeCache themeCache;
|
|
||||||
@Inject Locale locale;
|
|
||||||
|
|
||||||
private WidgetPreferences widgetPreferences;
|
|
||||||
private int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
addPreferencesFromResource(R.xml.preferences_widget);
|
|
||||||
|
|
||||||
appWidgetId =
|
|
||||||
getIntent()
|
|
||||||
.getIntExtra(
|
|
||||||
AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
|
|
||||||
|
|
||||||
// If they gave us an intent without the widget id, just bail.
|
|
||||||
if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
|
|
||||||
finish();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
widgetPreferences = new WidgetPreferences(this, preferences, appWidgetId);
|
|
||||||
Intent data = new Intent();
|
|
||||||
data.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
|
|
||||||
mergeResults(data.getExtras());
|
|
||||||
|
|
||||||
setupCheckbox(R.string.p_widget_show_due_date);
|
|
||||||
setupCheckbox(R.string.p_widget_show_checkboxes);
|
|
||||||
CheckBoxPreference showHeader = setupCheckbox(R.string.p_widget_show_header);
|
|
||||||
CheckBoxPreference showSettings = setupCheckbox(R.string.p_widget_show_settings);
|
|
||||||
showSettings.setDependency(showHeader.getKey());
|
|
||||||
|
|
||||||
findPreference(R.string.p_widget_filter)
|
|
||||||
.setOnPreferenceClickListener(
|
|
||||||
preference -> {
|
|
||||||
Intent intent = new Intent(WidgetConfigActivity.this, FilterSelectionActivity.class);
|
|
||||||
intent.putExtra(FilterSelectionActivity.EXTRA_FILTER, getFilter());
|
|
||||||
intent.putExtra(FilterSelectionActivity.EXTRA_RETURN_FILTER, true);
|
|
||||||
startActivityForResult(intent, REQUEST_FILTER);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
findPreference(R.string.p_widget_theme)
|
|
||||||
.setOnPreferenceClickListener(
|
|
||||||
preference -> {
|
|
||||||
Intent intent = new Intent(WidgetConfigActivity.this, ColorPickerActivity.class);
|
|
||||||
intent.putExtra(
|
|
||||||
ColorPickerActivity.EXTRA_PALETTE,
|
|
||||||
ColorPickerActivity.ColorPalette.WIDGET_BACKGROUND);
|
|
||||||
intent.putExtra(
|
|
||||||
ColorPickerActivity.EXTRA_THEME_INDEX, widgetPreferences.getThemeIndex());
|
|
||||||
startActivityForResult(intent, REQUEST_THEME_SELECTION);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
Preference colorPreference = findPreference(R.string.p_widget_color);
|
|
||||||
colorPreference.setDependency(showHeader.getKey());
|
|
||||||
colorPreference.setOnPreferenceClickListener(
|
|
||||||
preference -> {
|
|
||||||
Intent intent = new Intent(WidgetConfigActivity.this, ColorPickerActivity.class);
|
|
||||||
intent.putExtra(
|
|
||||||
ColorPickerActivity.EXTRA_PALETTE, ColorPickerActivity.ColorPalette.COLORS);
|
|
||||||
intent.putExtra(ColorPickerActivity.EXTRA_THEME_INDEX, widgetPreferences.getColorIndex());
|
|
||||||
startActivityForResult(intent, REQUEST_COLOR_SELECTION);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
findPreference(R.string.p_widget_opacity)
|
|
||||||
.setOnPreferenceClickListener(
|
|
||||||
preference -> {
|
|
||||||
newSeekBarDialog(
|
|
||||||
R.layout.dialog_opacity_seekbar,
|
|
||||||
0,
|
|
||||||
100,
|
|
||||||
widgetPreferences.getOpacity(),
|
|
||||||
REQUEST_OPACITY)
|
|
||||||
.show(getFragmentManager(), FRAG_TAG_OPACITY_SEEKBAR);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
findPreference(R.string.p_widget_font_size)
|
|
||||||
.setOnPreferenceClickListener(
|
|
||||||
preference -> {
|
|
||||||
newSeekBarDialog(
|
|
||||||
R.layout.dialog_font_size_seekbar,
|
|
||||||
10,
|
|
||||||
22,
|
|
||||||
widgetPreferences.getFontSize(),
|
|
||||||
REQUEST_FONT_SIZE)
|
|
||||||
.show(getFragmentManager(), FRAG_TAG_FONT_SIZE_SEEKBAR);
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
updateFilter();
|
|
||||||
updateOpacity();
|
|
||||||
updateFontSize();
|
|
||||||
updateTheme();
|
|
||||||
updateColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
private CheckBoxPreference setupCheckbox(int resId) {
|
|
||||||
CheckBoxPreference preference = (CheckBoxPreference) findPreference(resId);
|
|
||||||
String key = getString(resId) + appWidgetId;
|
|
||||||
preference.setKey(key);
|
|
||||||
preference.setChecked(preferences.getBoolean(key, true));
|
|
||||||
return preference;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateOpacity() {
|
|
||||||
int opacity = widgetPreferences.getOpacity();
|
|
||||||
findPreference(R.string.p_widget_opacity).setSummary(locale.formatPercentage(opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateFontSize() {
|
|
||||||
int fontSize = widgetPreferences.getFontSize();
|
|
||||||
findPreference(R.string.p_widget_font_size).setSummary(locale.formatNumber(fontSize));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateFilter() {
|
|
||||||
findPreference(R.string.p_widget_filter).setSummary(getFilter().listingTitle);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Filter getFilter() {
|
|
||||||
return defaultFilterProvider.getFilterFromPreference(widgetPreferences.getFilterId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateTheme() {
|
|
||||||
WidgetTheme widgetTheme = themeCache.getWidgetTheme(widgetPreferences.getThemeIndex());
|
|
||||||
findPreference(R.string.p_widget_theme).setSummary(widgetTheme.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateColor() {
|
|
||||||
ThemeColor themeColor = themeCache.getThemeColor(widgetPreferences.getColorIndex());
|
|
||||||
findPreference(R.string.p_widget_color).setSummary(themeColor.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
|
|
||||||
localBroadcastManager.broadcastRefresh();
|
|
||||||
// force update after setting preferences
|
|
||||||
Intent intent = new Intent(this, TasksWidget.class);
|
|
||||||
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
|
|
||||||
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {appWidgetId});
|
|
||||||
sendBroadcast(intent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
if (requestCode == REQUEST_FILTER) {
|
|
||||||
if (resultCode == RESULT_OK) {
|
|
||||||
Filter filter = data.getParcelableExtra(FilterSelectionActivity.EXTRA_FILTER);
|
|
||||||
widgetPreferences.setFilter(defaultFilterProvider.getFilterPreferenceValue(filter));
|
|
||||||
updateFilter();
|
|
||||||
}
|
|
||||||
} else if (requestCode == REQUEST_THEME_SELECTION) {
|
|
||||||
if (resultCode == RESULT_OK) {
|
|
||||||
widgetPreferences.setTheme(data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0));
|
|
||||||
updateTheme();
|
|
||||||
}
|
|
||||||
} else if (requestCode == REQUEST_COLOR_SELECTION) {
|
|
||||||
if (resultCode == RESULT_OK) {
|
|
||||||
widgetPreferences.setColor(data.getIntExtra(ColorPickerActivity.EXTRA_THEME_INDEX, 0));
|
|
||||||
updateColor();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void inject(ActivityComponent component) {
|
|
||||||
component.inject(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void valueSelected(int value, int requestCode) {
|
|
||||||
if (requestCode == REQUEST_OPACITY) {
|
|
||||||
widgetPreferences.setOpacity(value);
|
|
||||||
updateOpacity();
|
|
||||||
} else if (requestCode == REQUEST_FONT_SIZE) {
|
|
||||||
widgetPreferences.setFontSize(value);
|
|
||||||
updateFontSize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,34 @@
|
|||||||
|
package org.tasks.widget
|
||||||
|
|
||||||
|
import android.appwidget.AppWidgetManager
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import org.tasks.R
|
||||||
|
import org.tasks.injection.ActivityComponent
|
||||||
|
import org.tasks.preferences.BasePreferences
|
||||||
|
import org.tasks.preferences.fragments.ScrollableWidget.Companion.newScrollableWidget
|
||||||
|
|
||||||
|
class WidgetConfigActivity : BasePreferences() {
|
||||||
|
|
||||||
|
private var appWidgetId: Int = 0
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID)
|
||||||
|
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
// If they gave us an intent without the widget id, just bail.
|
||||||
|
if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
|
||||||
|
finish()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
setResult(RESULT_OK, Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getRootTitle() = R.string.widget_settings
|
||||||
|
|
||||||
|
override fun getRootPreference() = newScrollableWidget(appWidgetId)
|
||||||
|
|
||||||
|
override fun inject(component: ActivityComponent) = component.inject(this)
|
||||||
|
}
|
Loading…
Reference in New Issue