Awesome better remember the milk

pull/14/head
Tim Su 14 years ago
parent 115bda98f6
commit da8dcc0432

@ -232,12 +232,18 @@
android:taskAffinity="" />
<!-- rmilk -->
<receiver android:name="com.todoroo.astrid.rmilk.FilterExposer">
<receiver android:name="com.todoroo.astrid.rmilk.MilkFilterExposer">
<intent-filter>
<action android:name="com.todoroo.astrid.REQUEST_FILTERS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<receiver android:name="com.todoroo.astrid.rmilk.MilkDetailExposer">
<intent-filter>
<action android:name="com.todoroo.astrid.REQUEST_DETAILS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<activity android:name="com.todoroo.astrid.rmilk.MilkLoginActivity"
android:theme="@style/Theme" />
<activity android:name="com.todoroo.astrid.rmilk.MilkPreferences"

@ -15,11 +15,6 @@ import android.os.Parcelable;
*/
public class FilterCategory extends FilterListItem {
/**
* Plug-in Identifier
*/
public final String plugin;
/**
* {@link Filter}s contained by this category
*/
@ -27,17 +22,12 @@ public class FilterCategory extends FilterListItem {
/**
* Constructor for creating a new FilterCategory
*
* @param plugin
* {@link Addon} identifier that encompasses object
* @param listingTitle
* Title of this item as displayed on the lists page, e.g. Inbox
* @param children
* filters belonging to this category
*/
public FilterCategory(String plugin, String listingTitle,
Filter[] children) {
this.plugin = plugin;
public FilterCategory(String listingTitle, Filter[] children) {
this.listingTitle = listingTitle;
this.children = children;
}
@ -48,8 +38,8 @@ public class FilterCategory extends FilterListItem {
* @param plugin
* {@link Addon} identifier that encompasses object
*/
protected FilterCategory(String plugin) {
this.plugin = plugin;
protected FilterCategory() {
//
}
// --- parcelable
@ -66,7 +56,6 @@ public class FilterCategory extends FilterListItem {
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(plugin);
super.writeToParcel(dest, flags);
dest.writeParcelableArray(children, 0);
}
@ -80,7 +69,7 @@ public class FilterCategory extends FilterListItem {
* {@inheritDoc}
*/
public FilterCategory createFromParcel(Parcel source) {
FilterCategory item = new FilterCategory(source.readString());
FilterCategory item = new FilterCategory();
item.readFromParcel(source);
Parcelable[] parcelableChildren = source.readParcelableArray(

@ -14,22 +14,13 @@ import android.os.Parcelable;
*/
public class FilterListHeader extends FilterListItem {
/**
* Plug-in Identifier
*/
public final String plugin;
/**
* Constructor for creating a new FilterListHeader
*
* @param plugin
* {@link Addon} identifier that encompasses object
* @param listingTitle
* @param listingIconResource
* @param priority
*/
public FilterListHeader(String plugin, String listingTitle) {
this.plugin = plugin;
public FilterListHeader(String listingTitle) {
this.listingTitle = listingTitle;
}
@ -39,8 +30,8 @@ public class FilterListHeader extends FilterListItem {
* @param plugin
* {@link Addon} identifier that encompasses object
*/
protected FilterListHeader(String plugin) {
this.plugin = plugin;
protected FilterListHeader() {
//
}
// --- parcelable
@ -51,14 +42,13 @@ public class FilterListHeader extends FilterListItem {
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(plugin);
super.writeToParcel(dest, flags);
}
public static final Parcelable.Creator<FilterListHeader> CREATOR = new Parcelable.Creator<FilterListHeader>() {
public FilterListHeader createFromParcel(Parcel source) {
FilterListHeader item = new FilterListHeader(source.readString());
FilterListHeader item = new FilterListHeader();
item.readFromParcel(source);
return item;
}

@ -45,8 +45,9 @@ public abstract class SynchronizationProvider {
/**
* Perform authenticate and other pre-synchronization steps, then
* synchronize.
* @param context either the parent activity, or a background service
*/
abstract protected void initiate();
abstract protected void initiate(Context context);
/**
* Push variables from given task to the remote server.
@ -112,9 +113,7 @@ public abstract class SynchronizationProvider {
notification = new Notification(icon, null, when);
}
public void synchronize() {
Context context = ContextManager.getContext();
public void synchronize(final Context context) {
// display notification
notificationIntent = PendingIntent.getActivity(context, 0, new Intent(), 0);
postUpdate(context, context.getString(R.string.SyP_progress_starting));
@ -125,7 +124,7 @@ public abstract class SynchronizationProvider {
new Thread(new Runnable() {
public void run() {
try {
initiate();
initiate(context);
} finally {
nm.cancel(Constants.NOTIFICATION_SYNC);
}

@ -127,7 +127,7 @@ public class DialogUtilities {
activity.runOnUiThread(new Runnable() {
public void run() {
new AlertDialog.Builder(activity)
.setTitle(informationDialogTitleResource)
.setTitle(confirmDialogTitleResource)
.setMessage(text)
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton(android.R.string.ok, okListener)

@ -3,16 +3,19 @@
*/
package com.todoroo.andlib.widget;
import android.content.Intent;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.preference.RingtonePreference;
import android.preference.Preference.OnPreferenceChangeListener;
import com.todoroo.andlib.service.DependencyInjectionService;
/**
* Displays a preference screen for users to edit their preferences. Override
@ -36,13 +39,14 @@ abstract public class TodorooPreferences extends PreferenceActivity {
super.onCreate(savedInstanceState);
addPreferencesFromResource(getPreferenceResource());
DependencyInjectionService.getInstance().inject(this);
PreferenceScreen screen = getPreferenceScreen();
initializePreference(screen);
}
private void initializePreference(Preference preference) {
protected void initializePreference(Preference preference) {
if(preference instanceof PreferenceGroup) {
PreferenceGroup group = (PreferenceGroup)preference;
for(int i = 0; i < group.getPreferenceCount(); i++) {
@ -56,11 +60,10 @@ abstract public class TodorooPreferences extends PreferenceActivity {
value = ((CheckBoxPreference)preference).isChecked();
else if(preference instanceof EditTextPreference)
value = ((EditTextPreference)preference).getText();
else if(preference instanceof RingtonePreference) {
else if(preference instanceof RingtonePreference)
value = getPreferenceManager().getSharedPreferences().getString(preference.getKey(), null);
}
if(value != null)
if(value != null || Preference.class.equals(preference.getClass()))
updatePreferences(preference, value);
preference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@ -72,4 +75,9 @@ abstract public class TodorooPreferences extends PreferenceActivity {
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
initializePreference(getPreferenceScreen());
}
}

@ -44,8 +44,8 @@ public final class CoreFilterExposer extends BroadcastReceiver {
searchFilter.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.tango_search)).getBitmap();
// extended
FilterCategory extended = new FilterCategory(CorePlugin.IDENTIFIER,
r.getString(R.string.BFE_Extended), new Filter[5]);
FilterCategory extended = new FilterCategory(r.getString(R.string.BFE_Extended),
new Filter[5]);
Filter alphabetical = new Filter(r.getString(R.string.BFE_Alphabetical),
r.getString(R.string.BFE_Alphabetical),

@ -22,7 +22,7 @@ import com.todoroo.astrid.rmilk.data.MilkDataService;
* @author Tim Su <tim@todoroo.com>
*
*/
public class DetailExposer extends BroadcastReceiver {
public class MilkDetailExposer extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
@ -38,27 +38,24 @@ public class DetailExposer extends BroadcastReceiver {
if(metadata == null)
return;
TaskDetail[] details = new TaskDetail[2];
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_DETAILS);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, Utilities.IDENTIFIER);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId);
long listId = metadata.getValue(MilkDataService.LIST_ID);
if(listId > 0)
details[0] = new TaskDetail(context.getString(R.string.rmilk_TLA_list,
MilkDataService.getInstance().getListName(listId)));
else
details[0] = null;
if(listId > 0) {
TaskDetail detail = new TaskDetail(context.getString(R.string.rmilk_TLA_list,
MilkDataService.getInstance().getListName(listId)));
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, detail);
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
}
int repeat = metadata.getValue(MilkDataService.REPEATING);
if(repeat != 0)
details[1] = new TaskDetail(context.getString(R.string.rmilk_TLA_repeat));
else
details[1] = null;
// transmit
Intent broadcastIntent = new Intent(AstridApiConstants.BROADCAST_SEND_DETAILS);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_ADDON, Utilities.IDENTIFIER);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, details);
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_TASK_ID, taskId);
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
if(repeat != 0) {
TaskDetail detail = new TaskDetail(context.getString(R.string.rmilk_TLA_repeat));
broadcastIntent.putExtra(AstridApiConstants.EXTRAS_RESPONSE, detail);
context.sendBroadcast(broadcastIntent, AstridApiConstants.PERMISSION_READ);
}
}
}

@ -25,7 +25,7 @@ import com.todoroo.astrid.rmilk.data.MilkDataService;
* @author Tim Su <tim@todoroo.com>
*
*/
public class FilterExposer extends BroadcastReceiver {
public class MilkFilterExposer extends BroadcastReceiver {
@SuppressWarnings("nls")
private Filter filterFromList(Context context, ListContainer list) {
@ -57,10 +57,9 @@ public class FilterExposer extends BroadcastReceiver {
for(int i = 0; i < lists.length; i++)
listFilters[i] = filterFromList(context, lists[i]);
FilterListHeader rtmHeader = new FilterListHeader(Utilities.IDENTIFIER,
context.getString(R.string.rmilk_FEx_header));
FilterCategory rtmLists = new FilterCategory(Utilities.IDENTIFIER,
context.getString(R.string.rmilk_FEx_list), listFilters);
FilterListHeader rtmHeader = new FilterListHeader(context.getString(R.string.rmilk_FEx_header));
FilterCategory rtmLists = new FilterCategory(context.getString(R.string.rmilk_FEx_list),
listFilters);
// transmit filter list
FilterListItem[] list = new FilterListItem[2];

@ -1,23 +1,23 @@
package com.todoroo.astrid.rmilk;
import java.util.Date;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.view.View;
import android.view.ViewGroup.OnHierarchyChangeListener;
import android.widget.ListView;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.andlib.widget.TodorooPreferences;
import com.todoroo.astrid.rmilk.sync.RTMSyncProvider;
/**
@ -27,106 +27,139 @@ import com.todoroo.astrid.rmilk.sync.RTMSyncProvider;
* @author timsu
*
*/
public class MilkPreferences extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences_rmilk);
PreferenceScreen screen = getPreferenceScreen();
initializePreference(screen);
// status
boolean loggedIn = Utilities.isLoggedIn();
final String status = "Please Log In To RTM!"; //$NON-NLS-1$
final int statusColor = Color.RED;
Resources r = getResources();
Preference preference = screen.findPreference(r.getString(R.string.rmilk_MPr_status_key));
preference.setTitle(status);
getListView().setOnHierarchyChangeListener(new OnHierarchyChangeListener() {
public void onChildViewRemoved(View arg0, View arg1) {
//
}
public void onChildViewAdded(View parent, View child) {
if(((ListView)parent).getChildCount() == 2) {
child.setBackgroundColor(statusColor);
}
}
});
// action buttons
Preference syncAction = screen.getPreferenceManager().findPreference(
getString(R.string.rmilk_MPr_sync_key));
syncAction.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
new RTMSyncProvider().synchronize();
return true;
}
});
Preference clearDataPreference = screen.getPreferenceManager().findPreference(
getString(R.string.rmilk_MPr_forget_key));
if(!loggedIn) {
syncAction.setTitle(R.string.rmilk_MPr_sync_log_in);
clearDataPreference.setEnabled(false);
}
}
public class MilkPreferences extends TodorooPreferences {
private void initializePreference(Preference preference) {
if(preference instanceof PreferenceGroup) {
PreferenceGroup group = (PreferenceGroup)preference;
for(int i = 0; i < group.getPreferenceCount(); i++) {
initializePreference(group.getPreference(i));
}
} else {
Object value = null;
if(preference instanceof ListPreference)
value = ((ListPreference)preference).getValue();
else if(preference instanceof CheckBoxPreference)
value = ((CheckBoxPreference)preference).isChecked();
else if(preference instanceof EditTextPreference)
value = ((EditTextPreference)preference).getText();
else
return;
updatePreferences(preference, value);
@Autowired
DialogUtilities dialogUtilities;
preference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference myPreference, Object newValue) {
return updatePreferences(myPreference, newValue);
}
});
}
@Override
public int getPreferenceResource() {
return R.xml.preferences_rmilk;
}
/**
*
* @param resource if null, updates all resources
* @param resource
* if null, updates all resources
*/
protected boolean updatePreferences(Preference preference, Object value) {
Resources r = getResources();
@Override
public void updatePreferences(Preference preference, Object value) {
final Resources r = getResources();
// interval
if(r.getString(R.string.rmilk_MPr_interval_key).equals(preference.getKey())) {
int index = AndroidUtilities.indexOf(r.getStringArray(R.array.rmilk_MPr_interval_values), (String)value);
if(index <= 0)
if (r.getString(R.string.rmilk_MPr_interval_key).equals(
preference.getKey())) {
int index = AndroidUtilities.indexOf(
r.getStringArray(R.array.rmilk_MPr_interval_values),
(String) value);
if (index <= 0)
preference.setSummary(R.string.rmilk_MPr_interval_desc_disabled);
else
preference.setSummary(r.getString(R.string.rmilk_MPr_interval_desc,
preference.setSummary(r.getString(
R.string.rmilk_MPr_interval_desc,
r.getStringArray(R.array.rmilk_MPr_interval_entries)[index]));
}
// shortcut
else if(r.getString(R.string.rmilk_MPr_shortcut_key).equals(preference.getKey())) {
if((Boolean)value) {
else if (r.getString(R.string.rmilk_MPr_shortcut_key).equals(
preference.getKey())) {
if ((Boolean) value) {
preference.setSummary(R.string.rmilk_MPr_shortcut_desc_enabled);
} else {
preference.setSummary(R.string.rmilk_MPr_shortcut_desc_disabled);
}
}
return true;
// status
else if (r.getString(R.string.rmilk_MPr_status_key).equals(preference.getKey())) {
boolean loggedIn = Utilities.isLoggedIn();
String status;
String subtitle = ""; //$NON-NLS-1$
int statusColor;
// ! logged in - display message, click -> sync
if(!loggedIn) {
status = r.getString(R.string.rmilk_status_loggedout);
statusColor = Color.RED;
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
new RTMSyncProvider().synchronize(MilkPreferences.this);
return true;
}
});
}
// last sync was error
else if(Utilities.getLastAttemptedSyncDate() != 0) {
status = r.getString(R.string.rmilk_status_failed,
DateUtilities.getDateWithTimeFormat(MilkPreferences.this).
format(new Date(Utilities.getLastAttemptedSyncDate())));
if(Utilities.getLastSyncDate() > 0) {
subtitle = r.getString(R.string.rmilk_status_success,
DateUtilities.getDateWithTimeFormat(MilkPreferences.this).
format(new Date(Utilities.getLastSyncDate())));
}
statusColor = Color.rgb(100, 0, 0);
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
String error = Utilities.getLastError();
if(error != null)
dialogUtilities.okDialog(MilkPreferences.this, error, null);
return true;
}
});
} else {
status = r.getString(R.string.rmilk_status_success,
DateUtilities.getDateWithTimeFormat(MilkPreferences.this).
format(new Date(Utilities.getLastSyncDate())));
statusColor = Color.rgb(0, 100, 0);
}
preference.setTitle(status);
preference.setSummary(subtitle);
final int statusColorSetting = statusColor;
getListView().setOnHierarchyChangeListener(new OnHierarchyChangeListener() {
public void onChildViewRemoved(View arg0, View arg1) {
//
}
public void onChildViewAdded(View parent, View child) {
if(((ListView)parent).getChildCount() == 2) {
child.setBackgroundColor(statusColorSetting);
}
}
});
}
// sync button
else if (r.getString(R.string.rmilk_MPr_sync_key).equals(preference.getKey())) {
boolean loggedIn = Utilities.isLoggedIn();
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
new RTMSyncProvider().synchronize(MilkPreferences.this);
return true;
}
});
if(!loggedIn)
preference.setTitle(R.string.rmilk_MPr_sync_log_in);
}
// log out button
else if (r.getString(R.string.rmilk_MPr_forget_key).equals(preference.getKey())) {
boolean loggedIn = Utilities.isLoggedIn();
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
dialogUtilities.okCancelDialog(MilkPreferences.this,
r.getString(R.string.rmilk_forget_confirm), new OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
new RTMSyncProvider().signOut();
initializePreference(getPreferenceScreen());
}
}, null);
return true;
}
});
if(!loggedIn)
preference.setEnabled(false);
}
}
}

@ -9,6 +9,7 @@ import android.preference.PreferenceManager;
import com.timsu.astrid.R;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.rmilk.data.MilkList;
/**
@ -59,6 +60,10 @@ public class Utilities {
private static final String PREF_LAST_SYNC = "rmilk_last_sync";
private static final String PREF_LAST_ATTEMPTED_SYNC = "rmilk_last_attempted";
private static final String PREF_LAST_ERROR = "rmilk_last_error";
// --- Preference Utility Methods
/** Get preferences object from the context */
@ -85,15 +90,48 @@ public class Utilities {
editor.commit();
}
/** RTM Last Successful Sync Date, or 0 */
/** @return RTM Last Successful Sync Date, or 0 */
public static long getLastSyncDate() {
return getPrefs().getLong(PREF_LAST_SYNC, 0);
}
/** @return RTM Last Attempted Sync Date, or 0 if it was successful */
public static long getLastAttemptedSyncDate() {
return getPrefs().getLong(PREF_LAST_ATTEMPTED_SYNC, 0);
}
/** @return RTM Last Error, or null if no last error */
public static String getLastError() {
return getPrefs().getString(PREF_LAST_ERROR, null);
}
/** Deletes RTM Last Successful Sync Date */
public static void clearLastSyncDate() {
Editor editor = getPrefs().edit();
editor.remove(PREF_LAST_SYNC);
editor.commit();
}
/** Set RTM Last Successful Sync Date */
public static void setLastSyncDate(long time) {
public static void setLastError(String error) {
Editor editor = getPrefs().edit();
editor.putString(PREF_LAST_ERROR, error);
editor.commit();
}
/** Set RTM Last Successful Sync Date */
public static void recordSuccessfulSync() {
Editor editor = getPrefs().edit();
editor.putLong(PREF_LAST_SYNC, DateUtilities.now());
editor.putLong(PREF_LAST_ATTEMPTED_SYNC, 0);
editor.commit();
}
/** Set RTM Last Attempted Sync Date */
public static void recordSyncStart() {
Editor editor = getPrefs().edit();
editor.putLong(PREF_LAST_SYNC, time);
editor.putLong(PREF_LAST_ATTEMPTED_SYNC, DateUtilities.now());
editor.putString(PREF_LAST_ERROR, null);
editor.commit();
}

@ -109,8 +109,10 @@ public final class MilkDataService {
*/
public TodorooCursor<Task> getLocallyCreated(Property<?>[] properties) {
return
taskDao.query(Query.select(properties).join(METADATA_JOIN).where(
Criterion.or(TASK_ID.eq(0), Metadata.TASK.isNull())));
taskDao.query(Query.select(properties).join(METADATA_JOIN).where(Criterion.and(
Criterion.not(Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).
where(Criterion.and(MetadataCriteria.withKey(METADATA_KEY), TASK_SERIES_ID.gt(0))))),
TaskCriteria.isActive())));
}
/**
@ -178,7 +180,8 @@ public final class MilkDataService {
* @return null if no metadata found
*/
public Metadata getTaskMetadata(long taskId) {
TodorooCursor<Metadata> cursor = metadataDao.query(Query.select(Metadata.PROPERTIES).where(
TodorooCursor<Metadata> cursor = metadataDao.query(Query.select(
LIST_ID, TASK_SERIES_ID, TASK_ID, REPEATING).where(
MetadataCriteria.byTaskAndwithKey(taskId, METADATA_KEY)));
try {
if(cursor.getCount() == 0)

@ -7,6 +7,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
@ -18,7 +19,6 @@ import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.utility.AndroidUtilities;
@ -73,7 +73,9 @@ public class RTMSyncProvider extends SynchronizationProvider {
*/
public void signOut() {
Utilities.setToken(null);
Utilities.setLastSyncDate(0);
Utilities.clearLastSyncDate();
dataService = MilkDataService.getInstance();
dataService.clearMetadata();
}
@ -95,6 +97,9 @@ public class RTMSyncProvider extends SynchronizationProvider {
*/
private void handleRtmException(Context context, String tag, Exception e,
boolean showErrorIfNeeded) {
Utilities.setLastError(e.getMessage());
// occurs when application was closed
if(e instanceof IllegalStateException) {
exceptionService.reportError(tag + "-caught", e); //$NON-NLS-1$
@ -119,8 +124,7 @@ public class RTMSyncProvider extends SynchronizationProvider {
}
@Override
protected void initiate() {
Context context = ContextManager.getContext();
protected void initiate(Context context) {
dataService = MilkDataService.getInstance();
// authenticate the user. this will automatically call the next step
@ -137,6 +141,8 @@ public class RTMSyncProvider extends SynchronizationProvider {
final Resources r = context.getResources();
FlurryAgent.onEvent("rtm-started");
Utilities.recordSyncStart();
try {
String appName = null;
String authToken = Utilities.getToken();
@ -180,7 +186,7 @@ public class RTMSyncProvider extends SynchronizationProvider {
try {
String token = rtmService.completeAuthorization();
Utilities.setToken(token);
// TODO proceed with sync
synchronize(context);
return null;
} catch (Exception e) {
// didn't work
@ -193,7 +199,10 @@ public class RTMSyncProvider extends SynchronizationProvider {
}
});
intent.putExtra(MilkLoginActivity.URL_TOKEN, url);
context.startActivity(intent);
if(context instanceof Activity)
((Activity)context).startActivityForResult(intent, 0);
else
context.startActivity(intent);
} else {
performSync(context);
@ -256,7 +265,7 @@ public class RTMSyncProvider extends SynchronizationProvider {
SyncData syncData = populateSyncData(remoteChanges);
synchronizeTasks(syncData);
Utilities.setLastSyncDate(DateUtilities.now());
Utilities.recordSuccessfulSync();
FlurryAgent.onEvent("rtm-sync-finished"); //$NON-NLS-1$
} catch (IllegalStateException e) {
@ -381,7 +390,6 @@ public class RTMSyncProvider extends SynchronizationProvider {
// TODO tags, notes, url, ...
if(remoteTask != null && shouldTransmit(task, MilkDataService.LIST_ID, remoteTask) &&
task.getValue(MilkDataService.LIST_ID) != 0)
rtmService.tasks_moveTo(timeline, Long.toString(remoteTask.getValue(MilkDataService.LIST_ID)),

@ -76,18 +76,17 @@ public class TagFilterExposer extends BroadcastReceiver {
for(int i = 0; i < tagsBySize.length; i++)
filtersBySize[i] = filterFromTag(context, tagsBySize[i]);
FilterListHeader tagsHeader = new FilterListHeader(TagsPlugin.IDENTIFIER,
context.getString(R.string.tag_FEx_header));
FilterListHeader tagsHeader = new FilterListHeader(context.getString(R.string.tag_FEx_header));
Filter untagged = new Filter(r.getString(R.string.tag_FEx_untagged),
r.getString(R.string.tag_FEx_untagged),
tagService.untaggedTemplate(),
null);
untagged.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_untagged)).getBitmap();
FilterCategory tagsCategoryBySize = new FilterCategory(TagsPlugin.IDENTIFIER,
context.getString(R.string.tag_FEx_by_size), filtersBySize);
FilterCategory tagsCategoryBySize = new FilterCategory(context.getString(R.string.tag_FEx_by_size),
filtersBySize);
tagsCategoryBySize.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_tags1)).getBitmap();
FilterCategory tagsCategoryByAlpha = new FilterCategory(TagsPlugin.IDENTIFIER,
context.getString(R.string.tag_FEx_alpha), filtersByAlpha);
FilterCategory tagsCategoryByAlpha = new FilterCategory(context.getString(R.string.tag_FEx_alpha),
filtersByAlpha);
tagsCategoryByAlpha.listingIcon = ((BitmapDrawable)r.getDrawable(R.drawable.filter_tags2)).getBitmap();
// transmit filter list

@ -51,6 +51,13 @@
<string name="rmilk_MPr_group_status">Status</string>
<!-- Preference Key (do not translate) -->
<string name="rmilk_MPr_status_key">rmilk_status</string>
<!-- Status: log in -->
<string name="rmilk_status_loggedout">Please Log In To RTM!</string>
<!-- Status: success (%s -> last sync date) -->
<string name="rmilk_status_success">Last Sync: %s</string>
<!-- Status: error (%s -> last attempted sync date) -->
<string name="rmilk_status_failed">Sync Failed On: %s</string>
<!-- Options Group Label -->
<string name="rmilk_MPr_group_options">Options</string>

Loading…
Cancel
Save