Clearing cache when logging out of PDV, escaping producteev activities and workspaces, fixing warnings

pull/14/head
Tim Su 14 years ago
parent edb6379c9f
commit 4253cec645

@ -196,6 +196,21 @@ public class GenericDao<TYPE extends AbstractModel> {
AbstractModel.ID_PROPERTY.eq(item.getId()).toString(), null) > 0;
}
/**
* Updates multiple rows of the database based on model set values
*
* @param item
* item model
* @param criterion
* @return returns true on success.
*/
public int updateMultiple(TYPE item, Criterion criterion) {
ContentValues values = item.getSetValues();
if(values.size() == 0) // nothing changed
return 0;
return database.update(table.name, values, criterion.toString(), null);
}
// --- helper methods

@ -20,15 +20,17 @@ import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Query;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.core.PluginServices;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.dao.StoreObjectDao.StoreObjectCriteria;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.StoreObjectDao.StoreObjectCriteria;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.model.Metadata;
import com.todoroo.astrid.model.StoreObject;
import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.producteev.ProducteevUtilities;
import com.todoroo.astrid.producteev.api.ApiUtilities;
import com.todoroo.astrid.rmilk.data.MilkNote;
import com.todoroo.astrid.service.MetadataService;
import com.todoroo.astrid.tags.TagService;
@ -81,6 +83,7 @@ public final class ProducteevDataService {
metadataService.deleteWhere(Metadata.KEY.eq(ProducteevTask.METADATA_KEY));
metadataService.deleteWhere(Metadata.KEY.eq(ProducteevNote.METADATA_KEY));
storeObjectDao.deleteWhere(StoreObject.TYPE.eq(ProducteevDashboard.TYPE));
PluginServices.getTaskService().clearDetails();
}
/**
@ -250,6 +253,7 @@ public final class ProducteevDataService {
dashboards = null;
}
@SuppressWarnings("nls")
public StoreObject updateDashboards(JSONObject remote, boolean reinitCache) throws JSONException {
if (reinitCache)
readDashboards();
@ -271,15 +275,15 @@ public final class ProducteevDataService {
local = new StoreObject();
local.setValue(StoreObject.TYPE, ProducteevDashboard.TYPE);
local.setValue(ProducteevDashboard.REMOTE_ID, id);
local.setValue(ProducteevDashboard.NAME, remote.getString("title"));
local.setValue(ProducteevDashboard.NAME, ApiUtilities.decode(remote.getString("title")));
StringBuilder users = new StringBuilder();
JSONArray accessList = remote.getJSONArray("accesslist");
for(int j = 0; j < accessList.length(); j++) {
JSONObject user = accessList.getJSONObject(j).getJSONObject("user");
users.append(user.getLong("id_user")).append(',');
String name = user.optString("firstname", "") + ' ' +
user.optString("lastname", "");
String name = ApiUtilities.decode(user.optString("firstname", "") + ' ' +
user.optString("lastname", ""));
users.append(name.trim()).append(';');
}
local.setValue(ProducteevDashboard.USERS, users.toString());

@ -259,24 +259,16 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
// notification/activities stuff
JSONArray notifications = invoker.activitiesShowNotifications(null, (lastNotificationId == null ? null : new Long(lastNotificationId)));
ArrayList<String> notificationsList = parseActivities(notifications);
String[] notificationsList = parseActivities(notifications);
// update lastIds
if (notifications.length() > 0) {
lastNotificationId = ""+notifications.getJSONObject(0).getJSONObject("activity").getLong("id_activity");
}
// JSONArray activities = invoker.activitiesShowActivities(null, (lastActivityId == 0 ? null : new Long(lastActivityId)));
// int activitiesCount = (activities == null ? 0 : activities.length());
// ArrayList<String> activitiesList = parseActivities(activities);
// // update lastIds
// if (activities.length() > 0) {
// lastActivityId = activities.getJSONObject(0).getJSONObject("activity").getLong("id_activity");
// }
// display notifications from producteev-log
Context context = ContextManager.getContext();
final NotificationManager nm = new NotificationManager.AndroidNotificationManager(context);
for (int i = 0; i< notificationsList.size(); i++) {
for (int i = 0; i< notificationsList.length; i++) {
long id_dashboard = notifications.getJSONObject(i).getJSONObject("activity").getLong("id_dashboard");
String dashboardName = null;
StoreObject[] dashboardsData = ProducteevDataService.getInstance().getDashboards();
@ -298,13 +290,12 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, null, when);
CharSequence contentTitle = context.getString(R.string.producteev_notification_title)+" Workspace \""+dashboard.getName()+"\"";
// CharSequence contentText = context.getString(R.string.producteev_notification_text, notificationsCount);
Filter filter = ProducteevFilterExposer.filterFromList(context, dashboard);
Intent notificationIntent = ShortcutActivity.createIntent(filter);
// filter the tags from the message
String message = notificationsList.get(i).replaceAll("<[^>]+>", "");
String message = notificationsList[i].replaceAll("<[^>]+>", "");
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, message, contentIntent);
@ -325,16 +316,18 @@ public class ProducteevSyncProvider extends SyncProvider<ProducteevTaskContainer
}
/**
* @param actvities
* @param activities
* @return
* @throws JSONException
*/
private ArrayList parseActivities(JSONArray actvities) throws JSONException {
int count = (actvities == null ? 0 : actvities.length());
ArrayList activitiesList = new ArrayList(count);
for(int i = 0; i < actvities.length(); i++) {
String message = actvities.getJSONObject(i).getJSONObject("activity").getString("message");
activitiesList.add(message);
private String[] parseActivities(JSONArray activities) throws JSONException {
int count = (activities == null ? 0 : activities.length());
String[] activitiesList = new String[count];
if(activities == null)
return activitiesList;
for(int i = 0; i < activities.length(); i++) {
String message = activities.getJSONObject(i).getJSONObject("activity").getString("message");
activitiesList[i] = ApiUtilities.decode(message);
}
return activitiesList;
}

@ -120,7 +120,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
private static final int CONTEXT_MENU_ADDON_INTENT_ID = Menu.FIRST + 10;
/** menu code indicating the end of the context menu */
private static final int CONTEXT_MENU_DEBUG = Menu.FIRST + 10;
private static final int CONTEXT_MENU_DEBUG = Menu.FIRST + 11;
// --- constants

@ -365,8 +365,9 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
// tap listener
container.setOnClickListener(listener);
viewHolder.nameView.setTag(viewHolder);
viewHolder.nameView.setOnClickListener(listener);
viewHolder.nameView.setFocusable(false);
viewHolder.nameView.setClickable(false);
}
/* ======================================================================

@ -12,8 +12,8 @@ import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.model.Metadata;
import com.todoroo.astrid.model.Task;
@ -212,6 +212,18 @@ public class TaskService {
}
}
/**
* Clear details cache. Useful if user performs some operation that
* affects details
*
* @return # of affected rows
*/
public int clearDetails() {
Task task = new Task();
task.setValue(Task.DETAILS, null);
return taskDao.updateMultiple(task, Task.DETAILS.isNotNull());
}
/**
* Update database based on selection and values
* @param selection

Loading…
Cancel
Save