Merge remote branch 'upstream/master' into dev

pull/14/head
Arne Jans 16 years ago
commit e76dc3328a

@ -84,10 +84,10 @@
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
</intent-filter> </intent-filter>
</activity> </activity>
<!-- Activity that displays filter list --> <!-- Activity that displays filter list -->
<activity android:name="com.todoroo.astrid.activity.FilterListActivity" <activity android:name="com.todoroo.astrid.activity.FilterListActivity"
android:launchMode="singleTop" android:launchMode="singleTop"
android:finishOnTaskLaunch="true"
android:theme="@style/Theme"> android:theme="@style/Theme">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.SEARCH" /> <action android:name="android.intent.action.SEARCH" />
@ -313,6 +313,7 @@
</receiver> </receiver>
<activity android:name="com.todoroo.astrid.reminders.NotificationActivity" <activity android:name="com.todoroo.astrid.reminders.NotificationActivity"
android:taskAffinity="com.todoroo.astrid.reminders.NotificationActivity" android:taskAffinity="com.todoroo.astrid.reminders.NotificationActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:clearTaskOnLaunch="true" /> android:clearTaskOnLaunch="true" />

@ -10,5 +10,5 @@
# Indicates whether an apk should be generated for each density. # Indicates whether an apk should be generated for each density.
split.density=false split.density=false
# Project target. # Project target.
target=Motorola, Inc.:MILESTONE:7 target=android-8
apk-configurations= apk-configurations=

@ -15,6 +15,7 @@ import android.util.Log;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.utility.Preferences; import com.todoroo.astrid.utility.Preferences;
/** /**
@ -44,9 +45,11 @@ public class BackupService extends Service {
@Override @Override
public void onStart(Intent intent, int startId) { public void onStart(Intent intent, int startId) {
if (intent.getAction().equals(BACKUP_ACTION)) { try {
ContextManager.setContext(this); ContextManager.setContext(this);
startBackup(this); startBackup(this);
} catch (Exception e) {
PluginServices.getExceptionService().reportError("backup-bg-sync", e); //$NON-NLS-1$
} }
} }

@ -91,18 +91,18 @@ abstract public class SyncProviderPreferences extends TodorooPreferences {
if (r.getString(getUtilities().getSyncIntervalKey()).equals( if (r.getString(getUtilities().getSyncIntervalKey()).equals(
preference.getKey())) { preference.getKey())) {
int index = AndroidUtilities.indexOf( int index = AndroidUtilities.indexOf(
r.getStringArray(R.array.rmilk_MPr_interval_values), r.getStringArray(R.array.sync_SPr_interval_values),
(String) value); (String) value);
if (index <= 0) if (index <= 0)
preference.setSummary(R.string.sync_SPr_interval_desc_disabled); preference.setSummary(R.string.sync_SPr_interval_desc_disabled);
else else
preference.setSummary(r.getString( preference.setSummary(r.getString(
R.string.sync_SPr_interval_desc, R.string.sync_SPr_interval_desc,
r.getStringArray(R.array.rmilk_MPr_interval_entries)[index])); r.getStringArray(R.array.sync_SPr_interval_entries)[index]));
} }
// status // status
else if (r.getString(R.string.rmilk_MPr_status_key).equals(preference.getKey())) { else if (r.getString(R.string.sync_SPr_status_key).equals(preference.getKey())) {
boolean loggedIn = getUtilities().isLoggedIn(); boolean loggedIn = getUtilities().isLoggedIn();
String status; String status;
String subtitle = ""; //$NON-NLS-1$ String subtitle = ""; //$NON-NLS-1$
@ -168,7 +168,7 @@ abstract public class SyncProviderPreferences extends TodorooPreferences {
} }
// sync button // sync button
else if (r.getString(R.string.rmilk_MPr_sync_key).equals(preference.getKey())) { else if (r.getString(R.string.sync_SPr_sync_key).equals(preference.getKey())) {
boolean loggedIn = getUtilities().isLoggedIn(); boolean loggedIn = getUtilities().isLoggedIn();
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) { public boolean onPreferenceClick(Preference p) {
@ -182,12 +182,12 @@ abstract public class SyncProviderPreferences extends TodorooPreferences {
} }
// log out button // log out button
else if (r.getString(R.string.rmilk_MPr_forget_key).equals(preference.getKey())) { else if (r.getString(R.string.sync_SPr_forget_key).equals(preference.getKey())) {
boolean loggedIn = getUtilities().isLoggedIn(); boolean loggedIn = getUtilities().isLoggedIn();
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) { public boolean onPreferenceClick(Preference p) {
dialogUtilities.okCancelDialog(SyncProviderPreferences.this, dialogUtilities.okCancelDialog(SyncProviderPreferences.this,
r.getString(R.string.rmilk_forget_confirm), new OnClickListener() { r.getString(R.string.sync_forget_confirm), new OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, public void onClick(DialogInterface dialog,
int which) { int which) {

@ -10,15 +10,15 @@ import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.Button; import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.Toast; import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
import com.flurry.android.FlurryAgent; import com.flurry.android.FlurryAgent;
import com.timsu.astrid.R; import com.timsu.astrid.R;
@ -93,7 +93,7 @@ public class GCalControlSet implements TaskEditControlSet {
Intent intent = new Intent(Intent.ACTION_EDIT, calendarUri); Intent intent = new Intent(Intent.ACTION_EDIT, calendarUri);
try { try {
if(cursor.getCount() == 0) { if(cursor == null || cursor.getCount() == 0) {
// event no longer exists, recreate it // event no longer exists, recreate it
calendarUri = null; calendarUri = null;
writeToModel(myTask); writeToModel(myTask);
@ -106,6 +106,7 @@ public class GCalControlSet implements TaskEditControlSet {
Log.e("gcal-error", "Error opening calendar", e); //$NON-NLS-1$ //$NON-NLS-2$ Log.e("gcal-error", "Error opening calendar", e); //$NON-NLS-1$ //$NON-NLS-2$
Toast.makeText(activity, R.string.gcal_TEA_error, Toast.LENGTH_LONG); Toast.makeText(activity, R.string.gcal_TEA_error, Toast.LENGTH_LONG);
} finally { } finally {
if(cursor != null)
cursor.close(); cursor.close();
} }

@ -186,6 +186,9 @@ public final class LocaleEditAlerts extends ExpandableListActivity {
.setPositiveButton(android.R.string.ok, .setPositiveButton(android.R.string.ok,
AddOnActivity.createAddOnClicker(LocaleEditAlerts.this, true)) AddOnActivity.createAddOnClicker(LocaleEditAlerts.this, true))
.show(); .show();
FlurryAgent.onEvent("locale-edit-alerts-no-plugin"); //$NON-NLS-1$
} else {
FlurryAgent.onEvent("locale-edit-alerts"); //$NON-NLS-1$
} }
} }

@ -11,6 +11,7 @@ import android.util.Log;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.producteev.sync.ProducteevSyncProvider; import com.todoroo.astrid.producteev.sync.ProducteevSyncProvider;
import com.todoroo.astrid.utility.Preferences; import com.todoroo.astrid.utility.Preferences;
@ -35,8 +36,11 @@ public class ProducteevBackgroundService extends Service {
/** Receive the alarm - start the synchronize service! */ /** Receive the alarm - start the synchronize service! */
@Override @Override
public void onStart(Intent intent, int startId) { public void onStart(Intent intent, int startId) {
if(intent != null && SYNC_ACTION.equals(intent.getAction())) try {
startSynchronization(this); startSynchronization(this);
} catch (Exception e) {
PluginServices.getExceptionService().reportError("pdv-bg-sync", e); //$NON-NLS-1$
}
} }
/** Start the actual synchronization */ /** Start the actual synchronization */
@ -49,6 +53,7 @@ public class ProducteevBackgroundService extends Service {
if(ProducteevUtilities.INSTANCE.isOngoing()) if(ProducteevUtilities.INSTANCE.isOngoing())
return; return;
PluginServices.getTaskService();
new ProducteevSyncProvider().synchronize(context); new ProducteevSyncProvider().synchronize(context);
} }

@ -3,10 +3,14 @@
*/ */
package com.todoroo.astrid.producteev; package com.todoroo.astrid.producteev;
import java.util.TreeMap;
import java.util.Map.Entry;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.util.Pair;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
@ -32,10 +36,8 @@ import com.todoroo.astrid.producteev.sync.ProducteevTask;
*/ */
public class ProducteevFilterExposer extends BroadcastReceiver { public class ProducteevFilterExposer extends BroadcastReceiver {
@SuppressWarnings("nls")
private Filter filterFromList(Context context, ProducteevDashboard dashboard) { private Filter filterFromList(Context context, ProducteevDashboard dashboard) {
String dashboardTitle = context.getString(R.string.producteev_FEx_dashboard_item). String dashboardTitle = dashboard.getName();
replace("$N", dashboard.getName());
String title = context.getString(R.string.producteev_FEx_dashboard_title, dashboard.getName()); String title = context.getString(R.string.producteev_FEx_dashboard_title, dashboard.getName());
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(Metadata.KEY.name, ProducteevTask.METADATA_KEY); values.put(Metadata.KEY.name, ProducteevTask.METADATA_KEY);
@ -54,6 +56,25 @@ public class ProducteevFilterExposer extends BroadcastReceiver {
return filter; return filter;
} }
private Filter filterFromUser(Context context, String user, Pair<Long, String> ids) {
String title = context.getString(R.string.producteev_FEx_responsible_title, user);
ContentValues values = new ContentValues();
values.put(Metadata.KEY.name, ProducteevTask.METADATA_KEY);
values.put(ProducteevTask.DASHBOARD_ID.name, ids.first);
values.put(ProducteevTask.ID.name, 0);
values.put(ProducteevTask.CREATOR_ID.name, 0);
values.put(ProducteevTask.RESPONSIBLE_ID.name, ids.second);
Filter filter = new Filter(user, title, new QueryTemplate().join(
ProducteevDataService.METADATA_JOIN).where(Criterion.and(
MetadataCriteria.withKey(ProducteevTask.METADATA_KEY),
TaskCriteria.isActive(),
TaskCriteria.isVisible(),
ProducteevTask.RESPONSIBLE_ID.eq(ids.second))),
values);
return filter;
}
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
// if we aren't logged in, don't expose features // if we aren't logged in, don't expose features
@ -62,26 +83,60 @@ public class ProducteevFilterExposer extends BroadcastReceiver {
StoreObject[] dashboards = ProducteevDataService.getInstance().getDashboards(); StoreObject[] dashboards = ProducteevDataService.getInstance().getDashboards();
// If user does not have any tags, don't show this section at all // If user does not have any dashboards, don't show this section at all
if(dashboards.length == 0) if(dashboards.length == 0)
return; return;
FilterListHeader producteevHeader = new FilterListHeader(context.getString(R.string.producteev_FEx_header));
// load dashboards
Filter[] dashboardFilters = new Filter[dashboards.length]; Filter[] dashboardFilters = new Filter[dashboards.length];
for(int i = 0; i < dashboards.length; i++) for(int i = 0; i < dashboards.length; i++)
dashboardFilters[i] = filterFromList(context, new ProducteevDashboard(dashboards[i])); dashboardFilters[i] = filterFromList(context, new ProducteevDashboard(dashboards[i]));
FilterListHeader producteevHeader = new FilterListHeader(context.getString(R.string.producteev_FEx_header));
FilterCategory producteevDashboards = new FilterCategory(context.getString(R.string.producteev_FEx_dashboard), FilterCategory producteevDashboards = new FilterCategory(context.getString(R.string.producteev_FEx_dashboard),
dashboardFilters); dashboardFilters);
// load responsible people
TreeMap<String, Pair<Long, String>> people = loadResponsiblePeople(dashboards);
Filter[] peopleFilters = new Filter[people.size()];
int index = 0;
for(Entry<String, Pair<Long, String>> person : people.entrySet())
peopleFilters[index++] = filterFromUser(context, person.getKey(), person.getValue());
FilterCategory producteevUsers = new FilterCategory(context.getString(R.string.producteev_FEx_responsible),
peopleFilters);
// transmit filter list // transmit filter list
FilterListItem[] list = new FilterListItem[2]; FilterListItem[] list = new FilterListItem[3];
list[0] = producteevHeader; list[0] = producteevHeader;
list[1] = producteevDashboards; list[1] = producteevDashboards;
list[2] = producteevUsers;
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS); Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_FILTERS);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, ProducteevUtilities.IDENTIFIER); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, ProducteevUtilities.IDENTIFIER);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, list); broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, list);
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ); context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
} }
/**
* @param dashboards
* @return people in a map of name => pair(dashboard id, user id)
*/
@SuppressWarnings("nls")
private TreeMap<String, Pair<Long, String>> loadResponsiblePeople(
StoreObject[] dashboards) {
TreeMap<String, Pair<Long, String>> results = new TreeMap<String, Pair<Long, String>>();
for(StoreObject dashboard : dashboards) {
String users = dashboard.getValue(ProducteevDashboard.USERS);
String[] entries = users.split(";");
for(String entry : entries) {
String[] data = entry.split(",");
if(data.length != 2)
continue;
results.put(data[1], new Pair<Long, String>(
dashboard.getValue(ProducteevDashboard.REMOTE_ID), data[0])); // name, id
}
}
return results;
}
} }

@ -163,8 +163,8 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
if(context instanceof Activity) if(context instanceof Activity)
((Activity)context).startActivityForResult(intent, 0); ((Activity)context).startActivityForResult(intent, 0);
else { else {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); preferences.setToken(null);
context.startActivity(intent); preferences.stopOngoing();
} }
} else { } else {
invoker.authenticate(email, password); invoker.authenticate(email, password);

@ -3,7 +3,6 @@ package com.todoroo.astrid.producteev.sync;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
/** /**
* *
* @author Arne Jans <arne.jans@gmail.com> * @author Arne Jans <arne.jans@gmail.com>
@ -19,7 +18,8 @@ public class ProducteevUser {
private final String lastname; private final String lastname;
public ProducteevUser(long id, String email, String firstname, String lastname) { public ProducteevUser(long id, String email, String firstname,
String lastname) {
this.id = id; this.id = id;
this.email = email; this.email = email;
this.firstname = firstname; this.firstname = firstname;
@ -77,7 +77,8 @@ public String toString() {
if (hasLastname) if (hasLastname)
displayString += lastname; displayString += lastname;
if (!hasFirstname && !hasLastname && email != null && email.length() > 0) if (!hasFirstname && !hasLastname && email != null
&& email.length() > 0)
displayString += email; displayString += email;
return displayString; return displayString;
} }

@ -124,10 +124,14 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver {
if(nextDate instanceof DateTimeValueImpl) { if(nextDate instanceof DateTimeValueImpl) {
DateTimeValueImpl newDateTime = (DateTimeValueImpl)nextDate; DateTimeValueImpl newDateTime = (DateTimeValueImpl)nextDate;
newDueDate = task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, Date date = new Date(Date.UTC(newDateTime.year() - 1900, newDateTime.month() - 1,
Date.UTC(newDateTime.year() - 1900, newDateTime.month() - 1,
newDateTime.day(), newDateTime.hour(), newDateTime.day(), newDateTime.hour(),
newDateTime.minute(), newDateTime.second())); newDateTime.minute(), newDateTime.second()));
// time may be inaccurate due to DST, force time to be same
date.setHours(repeatFromDate.getHours());
date.setMinutes(repeatFromDate.getMinutes());
newDueDate = task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME,
date.getTime());
} else { } else {
newDueDate = task.createDueDate(Task.URGENCY_SPECIFIC_DAY, newDueDate = task.createDueDate(Task.URGENCY_SPECIFIC_DAY,
new Date(nextDate.year() - 1900, nextDate.month() - 1, new Date(nextDate.year() - 1900, nextDate.month() - 1,

@ -11,6 +11,7 @@ import android.util.Log;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.rmilk.sync.RTMSyncProvider; import com.todoroo.astrid.rmilk.sync.RTMSyncProvider;
import com.todoroo.astrid.utility.Preferences; import com.todoroo.astrid.utility.Preferences;
@ -35,8 +36,11 @@ public class MilkBackgroundService extends Service {
/** Receive the alarm - start the synchronize service! */ /** Receive the alarm - start the synchronize service! */
@Override @Override
public void onStart(Intent intent, int startId) { public void onStart(Intent intent, int startId) {
if(SYNC_ACTION.equals(intent.getAction())) try {
startSynchronization(this); startSynchronization(this);
} catch (Exception e) {
PluginServices.getExceptionService().reportError("rtm-bg-sync", e); //$NON-NLS-1$
}
} }
/** Start the actual synchronization */ /** Start the actual synchronization */
@ -49,6 +53,7 @@ public class MilkBackgroundService extends Service {
if(MilkUtilities.isOngoing()) if(MilkUtilities.isOngoing())
return; return;
PluginServices.getTaskService();
new RTMSyncProvider().synchronize(context); new RTMSyncProvider().synchronize(context);
} }

@ -3,8 +3,8 @@ package com.todoroo.astrid.rmilk;
import java.util.Date; import java.util.Date;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent; import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
@ -78,18 +78,18 @@ public class MilkPreferences extends TodorooPreferences {
if (r.getString(R.string.rmilk_MPr_interval_key).equals( if (r.getString(R.string.rmilk_MPr_interval_key).equals(
preference.getKey())) { preference.getKey())) {
int index = AndroidUtilities.indexOf( int index = AndroidUtilities.indexOf(
r.getStringArray(R.array.rmilk_MPr_interval_values), r.getStringArray(R.array.sync_SPr_interval_values),
(String) value); (String) value);
if (index <= 0) if (index <= 0)
preference.setSummary(R.string.sync_SPr_interval_desc_disabled); preference.setSummary(R.string.sync_SPr_interval_desc_disabled);
else else
preference.setSummary(r.getString( preference.setSummary(r.getString(
R.string.sync_SPr_interval_desc, R.string.sync_SPr_interval_desc,
r.getStringArray(R.array.rmilk_MPr_interval_entries)[index])); r.getStringArray(R.array.sync_SPr_interval_entries)[index]));
} }
// status // status
else if (r.getString(R.string.rmilk_MPr_status_key).equals(preference.getKey())) { else if (r.getString(R.string.sync_SPr_status_key).equals(preference.getKey())) {
boolean loggedIn = MilkUtilities.isLoggedIn(); boolean loggedIn = MilkUtilities.isLoggedIn();
String status; String status;
String subtitle = ""; //$NON-NLS-1$ String subtitle = ""; //$NON-NLS-1$
@ -155,7 +155,7 @@ public class MilkPreferences extends TodorooPreferences {
} }
// sync button // sync button
else if (r.getString(R.string.rmilk_MPr_sync_key).equals(preference.getKey())) { else if (r.getString(R.string.sync_SPr_sync_key).equals(preference.getKey())) {
boolean loggedIn = MilkUtilities.isLoggedIn(); boolean loggedIn = MilkUtilities.isLoggedIn();
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) { public boolean onPreferenceClick(Preference p) {
@ -169,12 +169,12 @@ public class MilkPreferences extends TodorooPreferences {
} }
// log out button // log out button
else if (r.getString(R.string.rmilk_MPr_forget_key).equals(preference.getKey())) { else if (r.getString(R.string.sync_SPr_forget_key).equals(preference.getKey())) {
boolean loggedIn = MilkUtilities.isLoggedIn(); boolean loggedIn = MilkUtilities.isLoggedIn();
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) { public boolean onPreferenceClick(Preference p) {
dialogUtilities.okCancelDialog(MilkPreferences.this, dialogUtilities.okCancelDialog(MilkPreferences.this,
r.getString(R.string.rmilk_forget_confirm), new OnClickListener() { r.getString(R.string.sync_forget_confirm), new OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, public void onClick(DialogInterface dialog,
int which) { int which) {

@ -36,21 +36,21 @@ import com.todoroo.astrid.common.SyncProvider;
import com.todoroo.astrid.model.Metadata; import com.todoroo.astrid.model.Metadata;
import com.todoroo.astrid.model.Task; import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.rmilk.MilkLoginActivity; import com.todoroo.astrid.rmilk.MilkLoginActivity;
import com.todoroo.astrid.rmilk.MilkLoginActivity.SyncLoginCallback;
import com.todoroo.astrid.rmilk.MilkPreferences; import com.todoroo.astrid.rmilk.MilkPreferences;
import com.todoroo.astrid.rmilk.MilkUtilities; import com.todoroo.astrid.rmilk.MilkUtilities;
import com.todoroo.astrid.rmilk.MilkLoginActivity.SyncLoginCallback;
import com.todoroo.astrid.rmilk.api.ApplicationInfo; import com.todoroo.astrid.rmilk.api.ApplicationInfo;
import com.todoroo.astrid.rmilk.api.ServiceImpl; import com.todoroo.astrid.rmilk.api.ServiceImpl;
import com.todoroo.astrid.rmilk.api.ServiceInternalException; import com.todoroo.astrid.rmilk.api.ServiceInternalException;
import com.todoroo.astrid.rmilk.api.data.RtmAuth.Perms;
import com.todoroo.astrid.rmilk.api.data.RtmList; import com.todoroo.astrid.rmilk.api.data.RtmList;
import com.todoroo.astrid.rmilk.api.data.RtmLists; import com.todoroo.astrid.rmilk.api.data.RtmLists;
import com.todoroo.astrid.rmilk.api.data.RtmTask; import com.todoroo.astrid.rmilk.api.data.RtmTask;
import com.todoroo.astrid.rmilk.api.data.RtmTask.Priority;
import com.todoroo.astrid.rmilk.api.data.RtmTaskList; import com.todoroo.astrid.rmilk.api.data.RtmTaskList;
import com.todoroo.astrid.rmilk.api.data.RtmTaskNote; import com.todoroo.astrid.rmilk.api.data.RtmTaskNote;
import com.todoroo.astrid.rmilk.api.data.RtmTaskSeries; import com.todoroo.astrid.rmilk.api.data.RtmTaskSeries;
import com.todoroo.astrid.rmilk.api.data.RtmTasks; import com.todoroo.astrid.rmilk.api.data.RtmTasks;
import com.todoroo.astrid.rmilk.api.data.RtmAuth.Perms;
import com.todoroo.astrid.rmilk.api.data.RtmTask.Priority;
import com.todoroo.astrid.rmilk.data.MilkDataService; import com.todoroo.astrid.rmilk.data.MilkDataService;
import com.todoroo.astrid.rmilk.data.MilkNote; import com.todoroo.astrid.rmilk.data.MilkNote;
import com.todoroo.astrid.service.AstridDependencyInjector; import com.todoroo.astrid.service.AstridDependencyInjector;
@ -212,10 +212,14 @@ public class RTMSyncProvider extends SyncProvider<RTMTaskContainer> {
} }
}); });
intent.putExtra(MilkLoginActivity.URL_TOKEN, url); intent.putExtra(MilkLoginActivity.URL_TOKEN, url);
if(context instanceof Activity) if(context instanceof Activity)
((Activity)context).startActivityForResult(intent, 0); ((Activity)context).startActivityForResult(intent, 0);
else else {
context.startActivity(intent); // can't synchronize until user logs in
MilkUtilities.setToken(null);
MilkUtilities.stopOngoing();
}
} else { } else {
performSync(); performSync();

@ -86,7 +86,7 @@ public final class TagsControlSet implements TaskEditControlSet {
if(loadedTags.length <= i || !loadedTags[i].equals(tag)) if(loadedTags.length <= i || !loadedTags[i].equals(tag))
identical = false; identical = false;
} }
if(identical && tags.size() != loadedTags.length) if(loadedTags == null || tags.size() != loadedTags.length)
identical = false; identical = false;
if(!identical) { if(!identical) {

@ -19,7 +19,7 @@
<!-- importance --> <!-- importance -->
<View android:id="@+id/importance" <View android:id="@+id/importance"
android:layout_width="2dip" android:layout_width="3dip"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_marginRight="5dip" /> android:layout_marginRight="5dip" />

@ -27,12 +27,13 @@
<!-- List Label --> <!-- List Label -->
<TextView android:id="@+id/listLabel" <TextView android:id="@+id/listLabel"
android:layout_width="wrap_content" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_weight="100" android:layout_weight="100"
android:gravity="center"
android:singleLine="true" android:singleLine="true"
android:paddingRight="50dip" android:paddingRight="50dip"
android:ellipsize="middle" android:ellipsize="start"
style="@style/TextAppearance.TLA_Header"/> style="@style/TextAppearance.TLA_Header"/>
</LinearLayout> </LinearLayout>

@ -10,7 +10,7 @@
<!-- Header --> <!-- Header -->
<LinearLayout <LinearLayout
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="42dip"
android:layout_weight="1" android:layout_weight="1"
android:orientation="horizontal" android:orientation="horizontal"
android:background="@drawable/edit_header"> android:background="@drawable/edit_header">
@ -22,19 +22,18 @@
android:layout_weight="1" android:layout_weight="1"
android:src="@drawable/tango_filters" android:src="@drawable/tango_filters"
android:scaleType="center" android:scaleType="center"
android:paddingTop="8dip"
android:paddingLeft="5dip" android:paddingLeft="5dip"
android:paddingRight="5dip"/> android:paddingRight="5dip"/>
<!-- List Label --> <!-- List Label -->
<TextView android:id="@+id/listLabel" <TextView android:id="@+id/listLabel"
android:layout_width="wrap_content" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
android:layout_weight="100" android:layout_weight="100"
android:gravity="center"
android:singleLine="true" android:singleLine="true"
android:paddingTop="6dip"
android:paddingRight="50dip" android:paddingRight="50dip"
android:ellipsize="middle" android:ellipsize="start"
style="@style/TextAppearance.TLA_Header"/> style="@style/TextAppearance.TLA_Header"/>
</LinearLayout> </LinearLayout>

@ -178,10 +178,10 @@
<!-- default hide until setting (corresponds to entry in TEA_hideUntil) --> <!-- default hide until setting (corresponds to entry in TEA_hideUntil) -->
<string name="p_default_hideUntil_key">p_def_hide</string> <string name="p_default_hideUntil_key">p_def_hide</string>
<!-- ============================================================ MILK == --> <!-- ============================================================ SYNC == -->
<string-array name="rmilk_MPr_interval_values"> <string-array name="sync_SPr_interval_values">
<!-- rmilk_MPr_interval_values: interval in seconds for sync entries (do not edit) --> <!-- sync_SPr_interval_values: interval in seconds for sync entries (do not edit) -->
<item>0</item> <item>0</item>
<item>900</item> <item>900</item>
<item>1800</item> <item>1800</item>
@ -195,13 +195,15 @@
</string-array> </string-array>
<!-- Preference Key (do not translate) --> <!-- Preference Key (do not translate) -->
<string name="rmilk_MPr_status_key">rmilk_status</string> <string name="sync_SPr_status_key">sync_status</string>
<!-- Preference Key (do not translate) --> <!-- Preference Key (do not translate) -->
<string name="rmilk_MPr_bgwifi_key">sync_bgwifi</string> <string name="sync_SPr_bgwifi_key">sync_bgwifi</string>
<!-- Preference Key (do not translate) --> <!-- Preference Key (do not translate) -->
<string name="rmilk_MPr_sync_key">rmilk_sync</string> <string name="sync_SPr_sync_key">sync_sync</string>
<!-- Preference Key (do not translate) --> <!-- Preference Key (do not translate) -->
<string name="rmilk_MPr_forget_key">rmilk_forget</string> <string name="sync_SPr_forget_key">sync_forget</string>
<!-- ============================================================ MILK == -->
<!-- Preference Key (do not translate) --> <!-- Preference Key (do not translate) -->
<string name="rmilk_MPr_interval_key">sync_freq</string> <string name="rmilk_MPr_interval_key">sync_freq</string>

@ -4,23 +4,20 @@
<!-- ====================== Plugin Boilerplate ========================= --> <!-- ====================== Plugin Boilerplate ========================= -->
<!-- task detail showing Producteev dashboard information (%s => workspace name) -->
<string name="producteev_TLA_dashboard">W: %s</string>
<!-- task detail showing Producteev responsible information (%s => responsible user) -->
<string name="producteev_TLA_responsible">R: %s</string>
<!-- filters header: Producteev --> <!-- filters header: Producteev -->
<string name="producteev_FEx_header">Producteev</string> <string name="producteev_FEx_header">Producteev</string>
<!-- filter category for Producteev dashboards --> <!-- filter category for Producteev dashboards -->
<string name="producteev_FEx_dashboard">Producteev Workspaces</string> <string name="producteev_FEx_dashboard">Workspaces</string>
<!-- Producteev dashboard filter title (%s => dashboard name) -->
<string name="producteev_FEx_dashboard_title">%s</string>
<!-- Producteev dashboard filter name ($N => dashboardname, $C => count) --> <!-- filter category for Producteev responsible person -->
<string name="producteev_FEx_dashboard_item">$N</string> <string name="producteev_FEx_responsible">Assigned To</string>
<!-- Producteev dashboard filter title (%s => dashboardname) --> <!-- Producteev dashboard filter title (%s => dashboardname) -->
<string name="producteev_FEx_dashboard_title">Workspace \'%s\'</string> <string name="producteev_FEx_responsible_title">Assigned To \'%s\'</string>
<!-- ==================================================== Preferences == --> <!-- ==================================================== Preferences == -->

@ -47,7 +47,7 @@
<!-- ======================== SyncPreferences ========================== --> <!-- ======================== SyncPreferences ========================== -->
<!-- RTM Status Group Label --> <!-- RTM Status Group Label -->
<string name="sync_MPr_group_status">Status</string> <string name="sync_SPr_group_status">Status</string>
<!-- Sync Status: log in --> <!-- Sync Status: log in -->
<string name="sync_status_loggedout">Not Logged In!</string> <string name="sync_status_loggedout">Not Logged In!</string>
@ -73,24 +73,41 @@
<string name="sync_SPr_interval_desc">Currently set to: %s</string> <string name="sync_SPr_interval_desc">Currently set to: %s</string>
<!-- Preference: Background Wifi Title --> <!-- Preference: Background Wifi Title -->
<string name="sync_MPr_bgwifi_title">Wifi Only Setting</string> <string name="sync_SPr_bgwifi_title">Wifi Only Setting</string>
<!-- Preference: Background Wifi Description (enabled) --> <!-- Preference: Background Wifi Description (enabled) -->
<string name="sync_MPr_bgwifi_desc_enabled">Background synchronization only happens when on Wifi</string> <string name="sync_SPr_bgwifi_desc_enabled">Background synchronization only happens when on Wifi</string>
<!-- Preference: Background Wifi Description (disabled) --> <!-- Preference: Background Wifi Description (disabled) -->
<string name="sync_MPr_bgwifi_desc_disabled">Background synchronization will always occur</string> <string name="sync_SPr_bgwifi_desc_disabled">Background synchronization will always occur</string>
<!-- Actions Group Label --> <!-- Actions Group Label -->
<string name="sync_MPr_group_actions">Actions</string> <string name="sync_SPr_group_actions">Actions</string>
<!-- Synchronize Now Button --> <!-- Synchronize Now Button -->
<string name="sync_MPr_sync">Synchronize Now!</string> <string name="sync_SPr_sync">Synchronize Now!</string>
<!-- Synchronize Now Button if not logged in--> <!-- Synchronize Now Button if not logged in-->
<string name="sync_MPr_sync_log_in">Log In &amp; Synchronize!</string> <string name="sync_SPr_sync_log_in">Log In &amp; Synchronize!</string>
<!-- Sync: Clear Data Title --> <!-- Sync: Clear Data Title -->
<string name="sync_MPr_forget">Log Out</string> <string name="sync_SPr_forget">Log Out</string>
<!-- Sync: Clear Data Description --> <!-- Sync: Clear Data Description -->
<string name="sync_MPr_forget_description">Clears all synchronization data</string> <string name="sync_SPr_forget_description">Clears all synchronization data</string>
<!-- confirmation dialog for sync log out -->
<string name="sync_forget_confirm">Log out / clear synchronization data?</string>
<string-array name="sync_SPr_interval_entries">
<!-- rmilk_MPr_interval_entries: Synchronization Intervals -->
<item>disable</item>
<item>every fifteen minutes</item>
<item>every thirty minutes</item>
<item>every hour</item>
<item>every three hours</item>
<item>every six hours</item>
<item>every twelve hours</item>
<item>every day</item>
<item>every three days</item>
<item>every week</item>
</string-array>
<!-- ======================= MilkLoginActivity ========================= --> <!-- ======================= MilkLoginActivity ========================= -->
@ -109,27 +126,9 @@ Error Message: %s
<!-- title for notification tray when synchronizing --> <!-- title for notification tray when synchronizing -->
<string name="rmilk_notification_title">Astrid: Remember the Milk</string> <string name="rmilk_notification_title">Astrid: Remember the Milk</string>
<!-- confirmation dialog for RTM log out -->
<string name="rmilk_forget_confirm">Log out / clear synchronization data?</string>
<!-- Error msg when io exception with rmilk --> <!-- Error msg when io exception with rmilk -->
<string name="rmilk_ioerror">Connection Error! Check your Internet connection, <string name="rmilk_ioerror">Connection Error! Check your Internet connection,
or maybe RTM servers (status.rememberthemilk.com), for possible solutions.</string> or maybe RTM servers (status.rememberthemilk.com), for possible solutions.</string>
<string-array name="rmilk_MPr_interval_entries">
<!-- rmilk_MPr_interval_entries: Synchronization Intervals -->
<item>disable</item>
<item>every fifteen minutes</item>
<item>every thirty minutes</item>
<item>every hour</item>
<item>every three hours</item>
<item>every six hours</item>
<item>every twelve hours</item>
<item>every day</item>
<item>every three days</item>
<item>every week</item>
</string-array>
</resources> </resources>

@ -25,7 +25,7 @@
</style> </style>
<style name="TextAppearance.TLA_Header"> <style name="TextAppearance.TLA_Header">
<item name="android:textSize">20sp</item> <item name="android:textSize">18sp</item>
<item name="android:gravity">center</item> <item name="android:gravity">center</item>
</style> </style>

@ -7,7 +7,7 @@
<Preference <Preference
android:layout="@layout/status_preference" android:layout="@layout/status_preference"
android:key="@string/rmilk_MPr_status_key" android:key="@string/sync_SPr_status_key"
android:textSize="24sp" android:textSize="24sp"
android:gravity="center"/> android:gravity="center"/>
@ -19,7 +19,7 @@
<ListPreference <ListPreference
android:key="@string/producteev_PPr_interval_key" android:key="@string/producteev_PPr_interval_key"
android:entries="@array/sync_SPr_interval_entries" android:entries="@array/sync_SPr_interval_entries"
android:entryValues="@array/rmilk_MPr_interval_values" android:entryValues="@array/sync_SPr_interval_values"
android:title="@string/sync_SPr_interval_title" /> android:title="@string/sync_SPr_interval_title" />
<ListPreference <ListPreference
@ -31,11 +31,11 @@
<PreferenceCategory <PreferenceCategory
android:title="@string/sync_SPr_group_actions"> android:title="@string/sync_SPr_group_actions">
<Preference <Preference
android:key="@string/rmilk_MPr_sync_key" android:key="@string/sync_SPr_sync_key"
android:title="@string/sync_SPr_sync" /> android:title="@string/sync_SPr_sync" />
<Preference <Preference
android:key="@string/rmilk_MPr_forget_key" android:key="@string/sync_SPr_forget_key"
android:title="@string/sync_SPr_forget" android:title="@string/sync_SPr_forget"
android:summary="@string/sync_SPr_forget_description" /> android:summary="@string/sync_SPr_forget_description" />
</PreferenceCategory> </PreferenceCategory>

@ -7,7 +7,7 @@
<Preference <Preference
android:layout="@layout/status_preference" android:layout="@layout/status_preference"
android:key="@string/rmilk_MPr_status_key" android:key="@string/sync_SPr_status_key"
android:textSize="24sp" android:textSize="24sp"
android:gravity="center"/> android:gravity="center"/>
@ -19,7 +19,7 @@
<ListPreference <ListPreference
android:key="@string/rmilk_MPr_interval_key" android:key="@string/rmilk_MPr_interval_key"
android:entries="@array/sync_SPr_interval_entries" android:entries="@array/sync_SPr_interval_entries"
android:entryValues="@array/rmilk_MPr_interval_values" android:entryValues="@array/sync_SPr_interval_values"
android:title="@string/sync_SPr_interval_title" /> android:title="@string/sync_SPr_interval_title" />
</PreferenceCategory> </PreferenceCategory>
@ -28,11 +28,11 @@
android:title="@string/sync_SPr_group_actions"> android:title="@string/sync_SPr_group_actions">
<Preference <Preference
android:key="@string/rmilk_MPr_sync_key" android:key="@string/sync_SPr_sync_key"
android:title="@string/sync_SPr_sync" /> android:title="@string/sync_SPr_sync" />
<Preference <Preference
android:key="@string/rmilk_MPr_forget_key" android:key="@string/sync_SPr_forget_key"
android:title="@string/sync_SPr_forget" android:title="@string/sync_SPr_forget"
android:summary="@string/sync_SPr_forget_description" /> android:summary="@string/sync_SPr_forget_description" />

@ -191,6 +191,12 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
database.openForWriting(); database.openForWriting();
setUpUiComponents(); setUpUiComponents();
onNewIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setUpTaskList(); setUpTaskList();
if(Constants.DEBUG) if(Constants.DEBUG)
setTitle("[D] " + filter.title); //$NON-NLS-1$ setTitle("[D] " + filter.title); //$NON-NLS-1$
@ -264,7 +270,6 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
Intent intent = new Intent(TaskListActivity.this, Intent intent = new Intent(TaskListActivity.this,
FilterListActivity.class); FilterListActivity.class);
startActivity(intent); startActivity(intent);
finish();
} }
}); });
@ -495,6 +500,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if(resultCode != RESULT_CANCELED) { if(resultCode != RESULT_CANCELED) {
taskAdapter.flushCaches();
loadTaskListContent(true); loadTaskListContent(true);
taskService.cleanup(); taskService.cleanup();
} }
@ -870,7 +876,6 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
Intent intent = new Intent(TaskListActivity.this, Intent intent = new Intent(TaskListActivity.this,
FilterListActivity.class); FilterListActivity.class);
startActivity(intent); startActivity(intent);
finish();
} }
} }

@ -18,12 +18,12 @@ import android.text.Html;
import android.text.Html.ImageGetter; import android.text.Html.ImageGetter;
import android.text.util.Linkify; import android.text.util.Linkify;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener; import android.view.View.OnCreateContextMenuListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.LayoutParams;
import android.widget.Button; import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
@ -42,6 +42,7 @@ import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.SoftHashMap; import com.todoroo.andlib.utility.SoftHashMap;
import com.todoroo.astrid.activity.TaskEditActivity; import com.todoroo.astrid.activity.TaskEditActivity;
import com.todoroo.astrid.activity.TaskListActivity;
import com.todoroo.astrid.alarms.AlarmDetailExposer; import com.todoroo.astrid.alarms.AlarmDetailExposer;
import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.api.DetailExposer; import com.todoroo.astrid.api.DetailExposer;
@ -557,7 +558,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
public void onClick(View arg0) { public void onClick(View arg0) {
Intent intent = new Intent(activity, TaskEditActivity.class); Intent intent = new Intent(activity, TaskEditActivity.class);
intent.putExtra(TaskEditActivity.TOKEN_ID, taskId); intent.putExtra(TaskEditActivity.TOKEN_ID, taskId);
activity.startActivity(intent); activity.startActivityForResult(intent, TaskListActivity.ACTIVITY_EDIT_TASK);
} }
}); });
editButton.setLayoutParams(params); editButton.setLayoutParams(params);
@ -786,7 +787,7 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
* @return list if there was already one * @return list if there was already one
*/ */
protected synchronized Collection<TYPE> initialize(long taskId) { protected synchronized Collection<TYPE> initialize(long taskId) {
if(cache.containsKey(taskId)) if(cache.containsKey(taskId) && cache.get(taskId) != null)
return get(taskId); return get(taskId);
cache.put(taskId, new HashMap<String, TYPE>()); cache.put(taskId, new HashMap<String, TYPE>());
return null; return null;

@ -154,8 +154,10 @@ public class TaskDao extends GenericDao<Task> {
boolean saveSuccessful; boolean saveSuccessful;
ContentValues values = task.getSetValues(); ContentValues values = task.getSetValues();
if(values == null || values.size() == 0) if(values == null || values.size() == 0) {
if(task.getDatabaseValues() != null)
return false; return false;
}
if (task.getId() == Task.NO_ID) { if (task.getId() == Task.NO_ID) {
saveSuccessful = createNew(task); saveSuccessful = createNew(task);

@ -175,6 +175,7 @@ public class TasksWidget extends AppWidgetProvider {
} }
Intent listIntent = new Intent(context, TaskListActivity.class); Intent listIntent = new Intent(context, TaskListActivity.class);
listIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
if(filter != null) { if(filter != null) {
listIntent.putExtra(TaskListActivity.TOKEN_FILTER, filter); listIntent.putExtra(TaskListActivity.TOKEN_FILTER, filter);
listIntent.setType(filter.sqlQuery); listIntent.setType(filter.sqlQuery);
@ -184,6 +185,7 @@ public class TasksWidget extends AppWidgetProvider {
views.setOnClickPendingIntent(R.id.taskbody, pendingIntent); views.setOnClickPendingIntent(R.id.taskbody, pendingIntent);
Intent editIntent = new Intent(context, TaskEditActivity.class); Intent editIntent = new Intent(context, TaskEditActivity.class);
editIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if(filter != null && filter.valuesForNewTasks != null) { if(filter != null && filter.valuesForNewTasks != null) {
String values = AndroidUtilities.contentValuesToSerializedString(filter.valuesForNewTasks); String values = AndroidUtilities.contentValuesToSerializedString(filter.valuesForNewTasks);
editIntent.putExtra(TaskEditActivity.TOKEN_VALUES, values); editIntent.putExtra(TaskEditActivity.TOKEN_VALUES, values);

@ -9,12 +9,14 @@ import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.ExpandableListView; import android.widget.ExpandableListView;
import com.flurry.android.FlurryAgent;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.adapter.FilterAdapter; import com.todoroo.astrid.adapter.FilterAdapter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.FilterCategory; import com.todoroo.astrid.api.FilterCategory;
import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.api.FilterListItem;
import com.todoroo.astrid.utility.Constants;
import com.todoroo.astrid.utility.Preferences; import com.todoroo.astrid.utility.Preferences;
public class WidgetConfigActivity extends ExpandableListActivity { public class WidgetConfigActivity extends ExpandableListActivity {
@ -56,6 +58,8 @@ public class WidgetConfigActivity extends ExpandableListActivity {
Button button = (Button)findViewById(R.id.ok); Button button = (Button)findViewById(R.id.ok);
button.setOnClickListener(mOnClickListener); button.setOnClickListener(mOnClickListener);
FlurryAgent.onEvent("widget-config"); //$NON-NLS-1$
} }
View.OnClickListener mOnClickListener = new View.OnClickListener() { View.OnClickListener mOnClickListener = new View.OnClickListener() {
@ -115,6 +119,18 @@ public class WidgetConfigActivity extends ExpandableListActivity {
adapter.unregisterRecevier(); 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) { private void saveConfiguration(FilterListItem filterListItem) {
String sql = null, contentValuesString = null, title = null; String sql = null, contentValuesString = null, title = null;

Loading…
Cancel
Save