You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tasks/src/main/java/com/todoroo/astrid/widget/WidgetConfigActivity.java

185 lines
7.6 KiB
Java

/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.widget;
import android.appwidget.AppWidgetManager;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.api.FilterWithCustomIntent;
import org.tasks.R;
import org.tasks.filters.FilterCounter;
import org.tasks.filters.FilterProvider;
import org.tasks.injection.InjectingListActivity;
import org.tasks.preferences.ActivityPreferences;
import org.tasks.widget.WidgetHelper;
import javax.inject.Inject;
import static com.todoroo.andlib.utility.AndroidUtilities.preHoneycomb;
import static com.todoroo.andlib.utility.AndroidUtilities.preIceCreamSandwich;
public class WidgetConfigActivity extends InjectingListActivity {
public static final String PREF_TITLE = "widget-title-";
public static final String PREF_SQL = "widget-sql-";
public static final String PREF_VALUES = "widget-values-";
public static final String PREF_CUSTOM_INTENT = "widget-intent-";
public static final String PREF_CUSTOM_EXTRAS = "widget-extras-";
public static final String PREF_TAG_ID = "widget-tag-id-";
public static final String PREF_SHOW_DUE_DATE = "widget-show-due-date-";
public static final String PREF_HIDE_CHECKBOXES = "widget-hide-checkboxes-";
public static final String PREF_DARK_THEME = "widget-dark-theme-";
public static final String PREF_HIDE_HEADER = "widget-hide-header-";
public static final String PREF_WIDGET_TRANSPARENT = "widget-transparent-";
int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
FilterAdapter adapter = null;
@Inject WidgetHelper widgetHelper;
@Inject FilterCounter filterCounter;
@Inject ActivityPreferences preferences;
@Inject FilterProvider filterProvider;
private void updateWidget() {
if (preIceCreamSandwich()) {
Intent intent = new Intent(this, WidgetUpdateService.class);
intent.putExtra(WidgetUpdateService.EXTRA_WIDGET_ID, mAppWidgetId);
startService(intent);
} else {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
appWidgetManager.updateAppWidget(mAppWidgetId, widgetHelper.createScrollableWidget(this, mAppWidgetId));
TasksWidget.updateScrollableWidgets(this, new int[]{mAppWidgetId});
}
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
preferences.applyLightStatusBarColor();
// Set the view layout resource to use.
setContentView(R.layout.widget_config_activity);
if (preHoneycomb()) {
findViewById(R.id.hideCheckboxes).setVisibility(View.GONE);
}
setTitle(R.string.WCA_title);
// Find the widget id from the intent.
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}
// If they gave us an intent without the widget id, just bail.
if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
finish();
}
// set up ui
adapter = new FilterAdapter(filterProvider, filterCounter, this, getListView(), false);
setListAdapter(adapter);
Button button = (Button) findViewById(R.id.ok);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Save configuration options
CheckBox hideDueDate = (CheckBox) findViewById(R.id.hideDueDate);
CheckBox darkTheme = (CheckBox) findViewById(R.id.darkTheme);
CheckBox hideCheckboxes = (CheckBox) findViewById(R.id.hideCheckboxes);
CheckBox hideHeader = (CheckBox) findViewById(R.id.hideHeader);
CheckBox transparent = (CheckBox) findViewById(R.id.transparentBackground);
saveConfiguration(adapter.getSelection(), !hideDueDate.isChecked(),
darkTheme.isChecked(), hideCheckboxes.isChecked(), hideHeader.isChecked(),
transparent.isChecked());
updateWidget();
// Make sure we pass back the original appWidgetId
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
}
});
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
FilterListItem item = adapter.getItem(position);
adapter.setSelection(item);
}
@Override
protected void onResume() {
super.onResume();
adapter.registerRecevier();
}
@Override
protected void onPause() {
super.onPause();
adapter.unregisterRecevier();
}
private void saveConfiguration(FilterListItem filterListItem, boolean showDueDate,
boolean darkTheme, boolean hideCheckboxes, boolean hideHeader,
boolean transparent){
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
String sql = null;
String contentValuesString = null;
String title = null;
if(filterListItem != null && filterListItem instanceof Filter) {
sql = ((Filter)filterListItem).getSqlQuery();
ContentValues values = ((Filter)filterListItem).valuesForNewTasks;
if(values != null) {
contentValuesString = AndroidUtilities.contentValuesToSerializedString(values);
}
title = ((Filter)filterListItem).listingTitle;
}
preferences.setString(WidgetConfigActivity.PREF_TITLE + mAppWidgetId, title);
preferences.setString(WidgetConfigActivity.PREF_SQL + mAppWidgetId, sql);
preferences.setString(WidgetConfigActivity.PREF_VALUES + mAppWidgetId, contentValuesString);
preferences.setBoolean(WidgetConfigActivity.PREF_SHOW_DUE_DATE + mAppWidgetId, showDueDate);
preferences.setBoolean(WidgetConfigActivity.PREF_DARK_THEME + mAppWidgetId, darkTheme);
preferences.setBoolean(WidgetConfigActivity.PREF_HIDE_CHECKBOXES + mAppWidgetId, hideCheckboxes);
preferences.setBoolean(WidgetConfigActivity.PREF_HIDE_HEADER + mAppWidgetId, hideHeader);
preferences.setBoolean(WidgetConfigActivity.PREF_WIDGET_TRANSPARENT + mAppWidgetId, transparent);
if(filterListItem instanceof FilterWithCustomIntent) {
String flattenedName = ((FilterWithCustomIntent)filterListItem).customTaskList.flattenToString();
preferences.setString(WidgetConfigActivity.PREF_CUSTOM_INTENT + mAppWidgetId,
flattenedName);
String flattenedExtras = AndroidUtilities.bundleToSerializedString(((FilterWithCustomIntent)filterListItem).customExtras);
if (flattenedExtras != null) {
preferences.setString(WidgetConfigActivity.PREF_CUSTOM_EXTRAS + mAppWidgetId,
flattenedExtras);
}
}
}
}