mirror of https://github.com/tasks/tasks
4x2 widget beta... did the old widget break?
parent
7ef47912c2
commit
c918f251b4
@ -0,0 +1,200 @@
|
|||||||
|
package com.todoroo.astrid.widget;
|
||||||
|
|
||||||
|
import android.app.ExpandableListActivity;
|
||||||
|
import android.appwidget.AppWidgetManager;
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.DisplayMetrics;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.Button;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.ExpandableListView;
|
||||||
|
import android.widget.Spinner;
|
||||||
|
|
||||||
|
import com.flurry.android.FlurryAgent;
|
||||||
|
import com.timsu.astrid.R;
|
||||||
|
import com.todoroo.andlib.utility.AndroidUtilities;
|
||||||
|
import com.todoroo.astrid.adapter.FilterAdapter;
|
||||||
|
import com.todoroo.astrid.api.Filter;
|
||||||
|
import com.todoroo.astrid.api.FilterCategory;
|
||||||
|
import com.todoroo.astrid.api.FilterListItem;
|
||||||
|
import com.todoroo.astrid.utility.Constants;
|
||||||
|
import com.todoroo.astrid.utility.Preferences;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure options for the Power Pack widget. Select a color, filter to use, enable/disable encouragements.
|
||||||
|
*
|
||||||
|
* @author jwong
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ConfigurePowerWidget42Activity extends ExpandableListActivity {
|
||||||
|
|
||||||
|
|
||||||
|
int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
|
||||||
|
|
||||||
|
FilterAdapter adapter = null;
|
||||||
|
|
||||||
|
String[] colors = new String[]{
|
||||||
|
"Black",
|
||||||
|
"Blue",
|
||||||
|
"Red",
|
||||||
|
"White"
|
||||||
|
};
|
||||||
|
|
||||||
|
public ConfigurePowerWidget42Activity() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle icicle) {
|
||||||
|
super.onCreate(icicle);
|
||||||
|
|
||||||
|
// Set the result to CANCELED. This will cause the widget host to cancel
|
||||||
|
// out of the widget placement if they press the back button.
|
||||||
|
setResult(RESULT_CANCELED);
|
||||||
|
|
||||||
|
// Set the view layout resource to use.
|
||||||
|
setContentView(R.layout.power_widget_configure);
|
||||||
|
|
||||||
|
setTitle(R.string.PPW_configure_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();
|
||||||
|
}
|
||||||
|
|
||||||
|
ArrayAdapter<String> colorAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, colors);
|
||||||
|
colorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||||
|
|
||||||
|
Spinner colorSpinner = (Spinner) findViewById(R.id.PPW_color);
|
||||||
|
colorSpinner.setAdapter(colorAdapter);
|
||||||
|
|
||||||
|
// set up ui
|
||||||
|
adapter = new FilterAdapter(this, getExpandableListView(),
|
||||||
|
R.layout.filter_adapter_row, true);
|
||||||
|
setListAdapter(adapter);
|
||||||
|
|
||||||
|
Button button = (Button)findViewById(R.id.ok);
|
||||||
|
button.setOnClickListener(mOnClickListener);
|
||||||
|
|
||||||
|
FlurryAgent.onEvent("power-widget-config"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
View.OnClickListener mOnClickListener = new View.OnClickListener() {
|
||||||
|
public void onClick(View v) {
|
||||||
|
final Context context = ConfigurePowerWidget42Activity.this;
|
||||||
|
|
||||||
|
|
||||||
|
Spinner colorSpinner = (Spinner) findViewById(R.id.PPW_color);
|
||||||
|
int colorPos = colorSpinner.getSelectedItemPosition();
|
||||||
|
String color = colors[colorPos];
|
||||||
|
|
||||||
|
// removed calendar option
|
||||||
|
// CheckBox chk_enableCalendar = (CheckBox) findViewById(R.id.PPW_enable_calendar);
|
||||||
|
// boolean enableCalendar = chk_enableCalendar.isChecked();
|
||||||
|
boolean enableCalendar = false;
|
||||||
|
|
||||||
|
CheckBox chk_disableEncouragements = (CheckBox) findViewById(R.id.PPW_disable_encouragements);
|
||||||
|
boolean disableEncouragements = chk_disableEncouragements.isChecked();
|
||||||
|
|
||||||
|
// Save configuration options
|
||||||
|
saveConfiguration(adapter.getSelection(), color, enableCalendar, !disableEncouragements);
|
||||||
|
|
||||||
|
// Push widget update to surface with newly set prefix
|
||||||
|
PowerWidget42.updateAppWidget(context, mAppWidgetId);
|
||||||
|
|
||||||
|
// 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
|
||||||
|
public boolean onChildClick(ExpandableListView parent, View v,
|
||||||
|
int groupPosition, int childPosition, long id) {
|
||||||
|
FilterListItem item = (FilterListItem) adapter.getChild(groupPosition,
|
||||||
|
childPosition);
|
||||||
|
if(item instanceof Filter) {
|
||||||
|
adapter.setSelection(item);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onGroupExpand(int groupPosition) {
|
||||||
|
FilterListItem item = (FilterListItem) adapter.getGroup(groupPosition);
|
||||||
|
if(item instanceof Filter)
|
||||||
|
adapter.setSelection(item);
|
||||||
|
else if(item instanceof FilterCategory)
|
||||||
|
adapter.saveExpansionSetting((FilterCategory) item, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onGroupCollapse(int groupPosition) {
|
||||||
|
FilterListItem item = (FilterListItem) adapter.getGroup(groupPosition);
|
||||||
|
if(item instanceof Filter)
|
||||||
|
adapter.setSelection(item);
|
||||||
|
else if(item instanceof FilterCategory)
|
||||||
|
adapter.saveExpansionSetting((FilterCategory) item, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
adapter.registerRecevier();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
adapter.unregisterRecevier();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
FlurryAgent.onStartSession(this, Constants.FLURRY_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
FlurryAgent.onEndSession(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void saveConfiguration(FilterListItem filterListItem, String color, boolean enableCalendar, boolean enableEncouragements){
|
||||||
|
DisplayMetrics metrics = new DisplayMetrics();
|
||||||
|
getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||||
|
|
||||||
|
String sql = null, contentValuesString = null, title = null;
|
||||||
|
|
||||||
|
if(filterListItem != null && filterListItem instanceof Filter) {
|
||||||
|
sql = ((Filter)filterListItem).sqlQuery;
|
||||||
|
ContentValues values = ((Filter)filterListItem).valuesForNewTasks;
|
||||||
|
if(values != null)
|
||||||
|
contentValuesString = AndroidUtilities.contentValuesToSerializedString(values);
|
||||||
|
title = ((Filter)filterListItem).title;
|
||||||
|
}
|
||||||
|
|
||||||
|
Preferences.setString(PowerWidget.PREF_TITLE + mAppWidgetId, title);
|
||||||
|
Preferences.setString(PowerWidget.PREF_SQL + mAppWidgetId, sql);
|
||||||
|
Preferences.setString(PowerWidget.PREF_VALUES + mAppWidgetId, contentValuesString);
|
||||||
|
|
||||||
|
Preferences.setString(PowerWidget.PREF_COLOR + mAppWidgetId, color);
|
||||||
|
Preferences.setBoolean(PowerWidget.PREF_ENABLE_CALENDAR + mAppWidgetId, enableCalendar);
|
||||||
|
Preferences.setBoolean(PowerWidget.PREF_ENCOURAGEMENTS + mAppWidgetId, enableEncouragements);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package com.todoroo.astrid.widget;
|
||||||
|
|
||||||
|
import com.timsu.astrid.R;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Power Pack widget. Supports 4x2 size. Configured via
|
||||||
|
* ConfigurePowerWidget42Activity when widget is added to homescreen.
|
||||||
|
*
|
||||||
|
* This class extends PowerWidget but sets references to itself for use in Intents.
|
||||||
|
*
|
||||||
|
* @author jwong (jwong@dayspring-tech.com)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("nls")
|
||||||
|
public class PowerWidget42 extends PowerWidget {
|
||||||
|
static final String LOG_TAG = "PowerWidget42";
|
||||||
|
|
||||||
|
|
||||||
|
static {
|
||||||
|
// set reference to my UpdateService for calls to launch the service
|
||||||
|
updateService = PowerWidget42.UpdateService.class;
|
||||||
|
|
||||||
|
ROW_LIMIT = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extend PowerWidget's UpdateService so that the widget provider class
|
||||||
|
* can be specified. We can't just used PowerWidget's UpdateService
|
||||||
|
* since it's a static class and uses PowerWidget's variables, not this
|
||||||
|
* class' variables.
|
||||||
|
*
|
||||||
|
* @author jwong (jwong@dayspring-tech.com)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static class UpdateService extends PowerWidget.UpdateService {
|
||||||
|
static {
|
||||||
|
widgetClass = PowerWidget42.class;
|
||||||
|
widgetLayout = R.layout.widget_power_42;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue