Fixed various bugs with rmilk lists out of sync, backup polishing & a crash while restoring because of incorrect sql filtering, etc

pull/14/head
Tim Su 14 years ago
parent 351e1c0797
commit 4ad61000a8

@ -4,7 +4,7 @@
<booleanAttribute key="ch.zork.quicklaunch" value="true"/>
<stringAttribute key="ch.zork.quicklaunch.icon" value="14.gif"/>
<intAttribute key="ch.zork.quicklaunch.index" value="0"/>
<stringAttribute key="ch.zork.quicklaunch.mode" value="debug"/>
<stringAttribute key="ch.zork.quicklaunch.mode" value="run"/>
<intAttribute key="com.android.ide.eclipse.adt.action" value="0"/>
<stringAttribute key="com.android.ide.eclipse.adt.commandline" value="-scale 0.7"/>
<intAttribute key="com.android.ide.eclipse.adt.delay" value="0"/>

@ -48,7 +48,7 @@ public class UnaryCriterion extends Criterion {
*/
@SuppressWarnings("nls")
public static String sanitize(String input) {
return input.replace("\\", "\\\\").replace("'", "\\'");
return input.replace("'", "''");
}
public static Criterion neq(Field field, Object value) {

@ -125,7 +125,7 @@ public class AndroidUtilities {
((Activity)context).startActivityForResult(intent, request);
else
context.startActivity(intent);
} catch (SecurityException e) {
} catch (Exception e) {
ExceptionHelper helper = new ExceptionHelper();
helper.exceptionService.displayAndReportError(context,
"start-external-intent-" + intent.toString(), //$NON-NLS-1$

@ -39,6 +39,7 @@ public class BackupActivity extends Activity {
new Runnable() {
@Override
public void run() {
setResult(RESULT_OK);
finish();
}
});
@ -54,6 +55,7 @@ public class BackupActivity extends Activity {
TasksXmlExporter.exportTasks(this, false, new Runnable() {
@Override
public void run() {
setResult(RESULT_OK);
finish();
}
});

@ -58,11 +58,11 @@ public class TasksXmlExporter {
private final ProgressDialog progressDialog;
private final Handler handler;
private void setProgress(final int taskNumber, final int total, final String title) {
private void setProgress(final int taskNumber, final int total) {
handler.post(new Runnable() {
public void run() {
progressDialog.setProgress(taskNumber * 10000 / total);
progressDialog.setMessage(context.getString(R.string.export_progress_read, title));
progressDialog.setMax(total);
progressDialog.setProgress(taskNumber);
}
});
}
@ -77,7 +77,6 @@ public class TasksXmlExporter {
if(!isService) {
progressDialog.setIcon(android.R.drawable.ic_dialog_info);
progressDialog.setTitle(R.string.export_progress_title);
progressDialog.setMessage(context.getString(R.string.backup_progress_initial));
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setProgress(0);
progressDialog.setCancelable(false);
@ -149,7 +148,7 @@ public class TasksXmlExporter {
cursor.moveToNext();
task.readFromCursor(cursor);
setProgress(i, length, task.getValue(Task.TITLE));
setProgress(i, length);
xml.startTag(null, BackupConstants.TASK_TAG);
serializeModel(task, Task.PROPERTIES, Task.ID);
@ -186,7 +185,7 @@ public class TasksXmlExporter {
private void serializeModel(AbstractModel model, Property<?>[] properties, Property<?>... excludes) {
outer: for(Property<?> property : properties) {
for(Property<?> exclude : excludes)
if(property == exclude)
if(property.name.equals(exclude.name))
continue outer;
try {

@ -60,8 +60,9 @@ public class TasksXmlImporter {
private final Handler handler;
private int taskCount;
private int importCount;
private int skipCount;
private int importCount = 0;
private int skipCount = 0;
private int errorCount = 0;
private final String input;
private final Context context;
@ -93,7 +94,6 @@ public class TasksXmlImporter {
progressDialog.setIcon(android.R.drawable.ic_dialog_info);
progressDialog.setTitle(R.string.import_progress_title);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage(context.getString(R.string.backup_progress_initial));
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.show();
@ -116,9 +116,6 @@ public class TasksXmlImporter {
@SuppressWarnings("nls")
private void performImport() throws IOException, XmlPullParserException {
taskCount = 0;
importCount = 0;
skipCount = 0;
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new FileReader(input));
@ -164,7 +161,8 @@ public class TasksXmlImporter {
input,
r.getQuantityString(R.plurals.Ntasks, taskCount, taskCount),
r.getQuantityString(R.plurals.Ntasks, importCount, importCount),
r.getQuantityString(R.plurals.Ntasks, skipCount, skipCount));
r.getQuantityString(R.plurals.Ntasks, skipCount, skipCount),
r.getQuantityString(R.plurals.Ntasks, errorCount, errorCount));
builder.setMessage(message);
builder.setPositiveButton(context.getString(android.R.string.ok),
new DialogInterface.OnClickListener() {
@ -194,15 +192,22 @@ public class TasksXmlImporter {
this.xpp = xpp;
while (xpp.next() != XmlPullParser.END_DOCUMENT) {
String tag = xpp.getName();
if (tag == null || xpp.getEventType() == XmlPullParser.END_TAG)
continue;
else if (tag.equals(BackupConstants.TASK_TAG)) {
// Parse <task ... >
parseTask();
} else if (tag.equals(BackupConstants.METADATA_TAG)) {
// Process <metadata ... >
parseMetadata();
try {
if (tag.equals(BackupConstants.TASK_TAG)) {
// Parse <task ... >
parseTask();
} else if (tag.equals(BackupConstants.METADATA_TAG)) {
// Process <metadata ... >
parseMetadata();
}
} catch (Exception e) {
errorCount++;
Log.e("astrid-importer", //$NON-NLS-1$
"Caught exception while reading from " + //$NON-NLS-1$
xpp.getText(), e);
}
}
}
@ -237,6 +242,7 @@ public class TasksXmlImporter {
// else, make a new task model and add away.
deserializeModel(currentTask, Task.PROPERTIES);
currentTask.setId(Task.NO_ID);
// Save the task to the database.
taskService.save(currentTask, false);
@ -248,6 +254,7 @@ public class TasksXmlImporter {
return;
metadata.clear();
deserializeModel(metadata, Metadata.PROPERTIES);
metadata.setId(Metadata.NO_ID);
metadata.setValue(Metadata.TASK, currentTask.getId());
metadataService.save(metadata);
}
@ -326,26 +333,33 @@ public class TasksXmlImporter {
while (xpp.next() != XmlPullParser.END_DOCUMENT) {
String tag = xpp.getName();
if(BackupConstants.TASK_TAG.equals(tag) && xpp.getEventType() == XmlPullParser.END_TAG)
saveTags();
else if (tag == null || xpp.getEventType() == XmlPullParser.END_TAG)
continue;
else if (tag.equals(BackupConstants.TASK_TAG)) {
// Parse <task ... >
currentTask = parseTask();
} else if (currentTask != null) {
// These tags all require that we have a task to associate
// them with.
if (tag.equals(BackupConstants.TAG_TAG)) {
// Process <tag ... >
parseTag();
} else if (tag.equals(BackupConstants.ALERT_TAG)) {
// Process <alert ... >
parseAlert();
} else if (tag.equals(BackupConstants.SYNC_TAG)) {
// Process <sync ... >
parseSync();
try {
if(BackupConstants.TASK_TAG.equals(tag) && xpp.getEventType() == XmlPullParser.END_TAG)
saveTags();
else if (tag == null || xpp.getEventType() == XmlPullParser.END_TAG)
continue;
else if (tag.equals(BackupConstants.TASK_TAG)) {
// Parse <task ... >
currentTask = parseTask();
} else if (currentTask != null) {
// These tags all require that we have a task to associate
// them with.
if (tag.equals(BackupConstants.TAG_TAG)) {
// Process <tag ... >
parseTag();
} else if (tag.equals(BackupConstants.ALERT_TAG)) {
// Process <alert ... >
parseAlert();
} else if (tag.equals(BackupConstants.SYNC_TAG)) {
// Process <sync ... >
parseSync();
}
}
} catch (Exception e) {
errorCount++;
Log.e("astrid-importer", //$NON-NLS-1$
"Caught exception while reading from " + //$NON-NLS-1$
xpp.getText(), e);
}
}
}

@ -61,9 +61,14 @@ public class MilkDetailExposer extends BroadcastReceiver implements DetailExpose
if(!extended) {
long listId = metadata.getValue(MilkTask.LIST_ID);
String listName = MilkDataService.getInstance().getListName(listId);
// RTM list is out of date. don't display RTM stuff
if(listName == null)
return null;
if(listId > 0) {
builder.append(context.getString(R.string.rmilk_TLA_list,
MilkDataService.getInstance().getListName(listId))).append(TaskAdapter.DETAIL_SEPARATOR);
listName)).append(TaskAdapter.DETAIL_SEPARATOR);
}
int repeat = metadata.getValue(MilkTask.REPEATING);

@ -86,7 +86,7 @@ public final class TagsControlSet implements TaskEditControlSet {
final View tagItem = inflater.inflate(R.layout.tag_edit_row, null);
tagsContainer.addView(tagItem);
AutoCompleteTextView textView = (AutoCompleteTextView)tagItem.
final AutoCompleteTextView textView = (AutoCompleteTextView)tagItem.
findViewById(R.id.text1);
textView.setText(tagName);
ArrayAdapter<Tag> tagsAdapter =
@ -118,7 +118,8 @@ public final class TagsControlSet implements TaskEditControlSet {
reminderRemoveButton = (ImageButton)tagItem.findViewById(R.id.button1);
reminderRemoveButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
tagsContainer.removeView(tagItem);
if(textView.getText().length() > 0)
tagsContainer.removeView(tagItem);
}
});

@ -27,7 +27,6 @@
android:layout_weight="1"
android:paddingLeft="5dip"
android:paddingRight="5dip"
android:scaleType="fitCenter"
android:visibility="gone"/>
<!-- filter name -->

@ -44,9 +44,6 @@
<!-- Progress Dialog Title for exporting -->
<string name="export_progress_title">Exporting...</string>
<!-- Progress Dialog text for export reading task (%s -> task title) -->
<string name="export_progress_read">Reading task %s...</string>
<!-- Summary title for import -->
<string name="import_summary_title">Restore Summary</string>
@ -55,14 +52,12 @@
File %s contained %s.\n\n
%s imported,\n
%s already exist\n
%s had errors\n
</string>
<!-- Progress Dialog Title for importing -->
<string name="import_progress_title">Importing...</string>
<!-- Progress Dialog text for starting import/export -->
<string name="backup_progress_initial">Initializing...</string>
<!-- Progress Dialog text for import reading task (%d -> task number)-->
<string name="import_progress_read">Reading task %d...</string>

@ -607,8 +607,11 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
@Override
public void onClick(View v) {
// expand view
// expand view (unless deleted)
final ViewHolder viewHolder = (ViewHolder)v.getTag();
if(viewHolder.task.isDeleted())
return;
long taskId = viewHolder.task.getId();
if(expanded == taskId) {
expanded = -1;

Loading…
Cancel
Save