Re-write and fix user id

pull/14/head
Tim Su 14 years ago
parent 1403011f31
commit d77e7da5b6

@ -10,6 +10,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.Modifier; import java.lang.reflect.Modifier;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet;
import android.content.ContentValues; import android.content.ContentValues;
import android.os.Parcel; import android.os.Parcel;
@ -67,6 +68,9 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
/** Values from database */ /** Values from database */
protected ContentValues values = null; protected ContentValues values = null;
/** Model Flags(not saved in database) */
protected HashSet<String> modelFlags = null;
/** Get database-read values for this object */ /** Get database-read values for this object */
public ContentValues getDatabaseValues() { public ContentValues getDatabaseValues() {
return values; return values;
@ -160,6 +164,7 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
// clears user-set values // clears user-set values
setValues = null; setValues = null;
modelFlags = null;
for (Property<?> property : cursor.getProperties()) { for (Property<?> property : cursor.getProperties()) {
try { try {
@ -345,6 +350,21 @@ public abstract class AbstractModel implements Parcelable, Cloneable {
return (getValue(property) & flag) > 0; return (getValue(property) & flag) > 0;
} }
// --- setting and retrieving flags
public synchronized void setModelFlag(String flag) {
if(modelFlags == null)
modelFlags = new HashSet<String>();
modelFlags.add(flag);
}
public boolean checkModelFlag(String flag) {
if(modelFlags == null)
return false;
return modelFlags.contains(flag);
}
// --- property management // --- property management
/** /**

@ -171,6 +171,17 @@ public final class Task extends RemoteModel {
/** whether task is read-only */ /** whether task is read-only */
public static final int FLAG_IS_READONLY = 1 << 2; public static final int FLAG_IS_READONLY = 1 << 2;
// --- user id special values
/** user id = read user email value */
public static final long USER_ID_EMAIL = -2L;
/** user id = unassigned */
public static final long USER_ID_UNASSIGNED = -1L;
/** user id = myself */
public static final long USER_ID_SELF = 0L;
// --- notification flags // --- notification flags
/** whether to send a reminder at deadline */ /** whether to send a reminder at deadline */

@ -498,11 +498,11 @@ public class EditPeopleControlSet extends PopupControlSet {
activity.getString(R.string.actfm_EPA_invalid_email, userJson.optString("email"))); activity.getString(R.string.actfm_EPA_invalid_email, userJson.optString("email")));
} }
if(userJson == null || userJson.optLong("id", -2) == 0) { if(userJson == null || userJson.optLong("id", Task.USER_ID_EMAIL) == Task.USER_ID_SELF) {
dirty = task.getValue(Task.USER_ID) == 0L ? dirty : true; dirty = task.getValue(Task.USER_ID) == Task.USER_ID_SELF ? dirty : true;
task.setValue(Task.USER_ID, 0L); task.setValue(Task.USER_ID, Task.USER_ID_SELF);
if(!TextUtils.isEmpty(task.getValue(Task.USER))) if(!TextUtils.isEmpty(task.getValue(Task.USER)))
task.setValue(Task.USER, "{}"); task.setValue(Task.USER, "");
} else { } else {
String user = userJson.toString(); String user = userJson.toString();
@ -510,20 +510,20 @@ public class EditPeopleControlSet extends PopupControlSet {
String taskUserEmail = ""; String taskUserEmail = "";
try { try {
JSONObject taskUser = new JSONObject(task.getValue(Task.USER)); JSONObject taskUser = new JSONObject(task.getValue(Task.USER));
taskUserId = taskUser.optLong("id", -2); taskUserId = taskUser.optLong("id", Task.USER_ID_EMAIL);
taskUserEmail = taskUser.optString("email"); taskUserEmail = taskUser.optString("email");
} catch (JSONException e) { } catch (JSONException e) {
// sad times // sad times
} }
long userId = userJson.optLong("id", -2); long userId = userJson.optLong("id", Task.USER_ID_EMAIL);
String userEmail = userJson.optString("email"); String userEmail = userJson.optString("email");
boolean match = (userId == taskUserId && userId != -2); boolean match = (userId == taskUserId && userId != Task.USER_ID_EMAIL);
match = match || (userEmail.equals(taskUserEmail) && !TextUtils.isEmpty(userEmail)); match = match || (userEmail.equals(taskUserEmail) && !TextUtils.isEmpty(userEmail));
dirty = match ? dirty : true; dirty = match ? dirty : true;
task.setValue(Task.USER_ID, userJson.optLong("id", -2)); task.setValue(Task.USER_ID, userJson.optLong("id", Task.USER_ID_EMAIL));
task.setValue(Task.USER, user); task.setValue(Task.USER, user);
} }
@ -543,7 +543,7 @@ public class EditPeopleControlSet extends PopupControlSet {
public void onClick(DialogInterface d, int which) { public void onClick(DialogInterface d, int which) {
makePrivateTask(); makePrivateTask();
AssignedToUser me = (AssignedToUser) assignedList.getAdapter().getItem(0); AssignedToUser me = (AssignedToUser) assignedList.getAdapter().getItem(0);
task.setValue(Task.USER_ID, me.user.optLong("id", -2)); task.setValue(Task.USER_ID, me.user.optLong("id", Task.USER_ID_EMAIL));
task.setValue(Task.USER, me.user.toString()); task.setValue(Task.USER, me.user.toString());
} }
}; };
@ -557,13 +557,7 @@ public class EditPeopleControlSet extends PopupControlSet {
if(!TextUtils.isEmpty(task.getValue(Task.SHARED_WITH)) || sharedWith.length() != 0) if(!TextUtils.isEmpty(task.getValue(Task.SHARED_WITH)) || sharedWith.length() != 0)
task.setValue(Task.SHARED_WITH, sharedWith.toString()); task.setValue(Task.SHARED_WITH, sharedWith.toString());
if(dirty) task.setModelFlag("task-assigned");
taskService.save(task);
if(dirty)
shareTask(sharedWith);
else
showSaveToast(); showSaveToast();
return true; return true;
@ -582,13 +576,12 @@ public class EditPeopleControlSet extends PopupControlSet {
private void makePrivateTask() { private void makePrivateTask() {
assignToMe(); assignToMe();
sharedWithContainer.removeAllViews(); sharedWithContainer.removeAllViews();
sharedWithContainer.addPerson(""); sharedWithContainer.addPerson(""); //$NON-NLS-1$
refreshDisplayView(); refreshDisplayView();
} }
private void showSaveToast() { private void showSaveToast() {
int length = saveToast.indexOf('\n') > -1 ? Toast.LENGTH_LONG : Toast.LENGTH_SHORT; Toast.makeText(activity, saveToast, Toast.LENGTH_LONG).show();
Toast.makeText(activity, saveToast, length).show();
} }
private class ParseSharedException extends Exception { private class ParseSharedException extends Exception {

@ -319,7 +319,7 @@ public final class ActFmSyncService {
if(values.containsKey(Task.DELETION_DATE.name)) { if(values.containsKey(Task.DELETION_DATE.name)) {
params.add("deleted_at"); params.add(task.getValue(Task.DELETION_DATE) / 1000L); params.add("deleted_at"); params.add(task.getValue(Task.DELETION_DATE) / 1000L);
} }
if(Flags.checkAndClear(Flags.ACTFM_REPEATED_TASK)) { if(task.checkModelFlag("repeat-complete")) {
params.add("completed"); params.add(DateUtilities.now() / 1000L); params.add("completed"); params.add(DateUtilities.now() / 1000L);
} else if(values.containsKey(Task.COMPLETION_DATE.name)) { } else if(values.containsKey(Task.COMPLETION_DATE.name)) {
params.add("completed"); params.add(task.getValue(Task.COMPLETION_DATE) / 1000L); params.add("completed"); params.add(task.getValue(Task.COMPLETION_DATE) / 1000L);
@ -334,14 +334,25 @@ public final class ActFmSyncService {
recurrence = recurrence + ";FROM=COMPLETION"; recurrence = recurrence + ";FROM=COMPLETION";
params.add("repeat"); params.add(recurrence); params.add("repeat"); params.add(recurrence);
} }
long userId = task.getValue(Task.USER_ID);
if(values.containsKey(Task.USER_ID.name) && userId >= 0 || userId == -1) { if(values.containsKey(Task.USER_ID.name) && task.checkModelFlag("task-assigned")) {
if(task.getValue(Task.USER_ID) == Task.USER_ID_EMAIL) {
try {
JSONObject user = new JSONObject(task.getValue(Task.USER));
params.add("user_email");
params.add(user.get("email"));
} catch (JSONException e) {
Log.e("Error parsing user", task.getValue(Task.USER), e);
}
} else {
params.add("user_id"); params.add("user_id");
if(task.getValue(Task.USER_ID) == 0) if(task.getValue(Task.USER_ID) == Task.USER_ID_SELF)
params.add(ActFmPreferenceService.userId()); params.add(ActFmPreferenceService.userId());
else else
params.add(task.getValue(Task.USER_ID)); params.add(task.getValue(Task.USER_ID));
} }
}
if(Flags.checkAndClear(Flags.TAGS_CHANGED) || newlyCreated) { if(Flags.checkAndClear(Flags.TAGS_CHANGED) || newlyCreated) {
TodorooCursor<Metadata> cursor = TagService.getInstance().getTags(task.getId()); TodorooCursor<Metadata> cursor = TagService.getInstance().getTags(task.getId());
try { try {

@ -651,13 +651,14 @@ public final class TaskEditActivity extends Activity {
} }
} }
taskService.save(model);
String processedToast = addDueTimeToToast(toast.toString()); String processedToast = addDueTimeToToast(toast.toString());
if(!onPause && peopleControlSet != null && !peopleControlSet.saveSharingSettings(processedToast)) boolean cancelFinish = !onPause && peopleControlSet != null &&
return; !peopleControlSet.saveSharingSettings(processedToast);
taskService.save(model);
if (!onPause) { // Saving during on pause could cause a double finish if (!onPause && !cancelFinish) {
shouldSaveState = false; shouldSaveState = false;
finish(); finish();
} }

Loading…
Cancel
Save