From de43051ee15efe6bfe3434d41e4b5d7230f13b01 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Thu, 19 Aug 2010 12:44:12 -0700 Subject: [PATCH] Adding 'created by' detail to producteev tasks, fix for not fully logging out, don't read null's from database --- .../todoroo/andlib/data/AbstractModel.java | 7 +++- .../producteev/ProducteevDetailExposer.java | 33 +++++++++++++++---- .../sync/ProducteevSyncProvider.java | 1 + astrid/res/values/strings-producteev.xml | 3 ++ 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/astrid/common-src/com/todoroo/andlib/data/AbstractModel.java b/astrid/common-src/com/todoroo/andlib/data/AbstractModel.java index 7bba4e675..cd3a3f6db 100644 --- a/astrid/common-src/com/todoroo/andlib/data/AbstractModel.java +++ b/astrid/common-src/com/todoroo/andlib/data/AbstractModel.java @@ -338,7 +338,12 @@ public abstract class AbstractModel implements Parcelable { public synchronized void save(Property property, ContentValues newStore, Object value) { this.store = newStore; - property.accept(this, value); + + // we don't allow null values, as they indicate unset properties + // when the database was written + + if(value != null) + property.accept(this, value); } public Void visitDouble(Property property, Object value) { diff --git a/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevDetailExposer.java b/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevDetailExposer.java index 5362eaa45..aecd45464 100644 --- a/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevDetailExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/producteev/ProducteevDetailExposer.java @@ -7,6 +7,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.api.AstridApiConstants; @@ -64,6 +65,9 @@ public class ProducteevDetailExposer extends BroadcastReceiver implements Detail long responsibleId = -1; if(metadata.containsNonNullValue(ProducteevTask.RESPONSIBLE_ID)) responsibleId = metadata.getValue(ProducteevTask.RESPONSIBLE_ID); + long creatorId = -1; + if(metadata.containsNonNullValue(ProducteevTask.CREATOR_ID)) + responsibleId = metadata.getValue(ProducteevTask.CREATOR_ID); // display dashboard if not "no sync" or "default" StoreObject ownerDashboard = null; @@ -86,14 +90,21 @@ public class ProducteevDetailExposer extends BroadcastReceiver implements Detail // display responsible user if not current one if(responsibleId > 0 && ownerDashboard != null && responsibleId != Preferences.getLong(ProducteevUtilities.PREF_USER_ID, 0L)) { - String users = ";" + ownerDashboard.getValue(ProducteevDashboard.USERS); //$NON-NLS-1$ - int index = users.indexOf(";" + responsibleId + ","); //$NON-NLS-1$ //$NON-NLS-2$ - if(index > -1) { - String user = users.substring(users.indexOf(',', index) + 1, - users.indexOf(';', index + 1)); + String user = getUserFromDashboard(ownerDashboard, responsibleId); + if(user != null) builder.append(" ").append(user).append(TaskAdapter.DETAIL_SEPARATOR); //$NON-NLS-1$ - } } + + // display creator user if not the current one + if(creatorId > 0 && ownerDashboard != null && creatorId != + Preferences.getLong(ProducteevUtilities.PREF_USER_ID, 0L)) { + String user = getUserFromDashboard(ownerDashboard, responsibleId); + if(user != null) + builder.append(" ").append( //$NON-NLS-1$ + context.getString(R.string.producteev_PDE_task_from, user)). + append(TaskAdapter.DETAIL_SEPARATOR); + } + } else { TodorooCursor notesCursor = ProducteevDataService.getInstance().getTaskNotesCursor(id); try { @@ -112,6 +123,16 @@ public class ProducteevDetailExposer extends BroadcastReceiver implements Detail return result.substring(0, result.length() - TaskAdapter.DETAIL_SEPARATOR.length()); } + /** Try and find user in the dashboard. return null if un-findable */ + private String getUserFromDashboard(StoreObject dashboard, long userId) { + String users = ";" + dashboard.getValue(ProducteevDashboard.USERS); //$NON-NLS-1$ + int index = users.indexOf(";" + userId + ","); //$NON-NLS-1$ //$NON-NLS-2$ + if(index > -1) + return users.substring(users.indexOf(',', index) + 1, + users.indexOf(';', index + 1)); + return null; + } + @Override public String getPluginIdentifier() { return ProducteevUtilities.IDENTIFIER; diff --git a/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java b/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java index 29dbdcd12..dc0f653a0 100644 --- a/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java +++ b/astrid/plugin-src/com/todoroo/astrid/producteev/sync/ProducteevSyncProvider.java @@ -85,6 +85,7 @@ public class ProducteevSyncProvider extends SyncProvider dashboardname) --> Assigned To \'%s\' + + + from %s